mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-09-10 14:11:58 +00:00
Compare commits
267 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
1508b599cc | ||
|
0b7909be40 | ||
|
75b9388a12 | ||
|
8936db78a5 | ||
|
c475114030 | ||
|
11c4537a53 | ||
|
e79c2c1792 | ||
|
b94cb56fa1 | ||
|
40f76a9005 | ||
|
eda63061b8 | ||
|
b05b51d055 | ||
|
d6614b900f | ||
|
032a3ad73e | ||
|
d49b261611 | ||
|
f18a48470b | ||
|
f87687b632 | ||
|
f632b1e34b | ||
|
ed4de81428 | ||
|
101eb1843d | ||
|
9e7b8fcdce | ||
|
6207bfa33c | ||
|
6a8102ce81 | ||
|
47977a3fae | ||
|
4f2fa0bb77 | ||
|
43480468af | ||
|
92d010842a | ||
|
a66a13f03b | ||
|
473db4f8c3 | ||
|
bba3f3129e | ||
|
34a660e8fa | ||
|
c1bd3416f0 | ||
|
90fea37339 | ||
|
14addaee2d | ||
|
59fcc1dbd2 | ||
|
7ef4f21c02 | ||
|
fdd9b30854 | ||
|
81be6a63e9 | ||
|
7d07fcfadd | ||
|
56c92c9717 | ||
|
8c4a6882f3 | ||
|
96d29a1e07 | ||
|
6a49f8d82d | ||
|
22efbe0fa9 | ||
|
a5643285eb | ||
|
9cd4c1bb3b | ||
|
5c9c4f906e | ||
|
9f2d3c9df3 | ||
|
96f1c9ac7e | ||
|
f5e9e1cf1b | ||
|
fdf0e502dc | ||
|
e0a3307e7b | ||
|
ad0e08e888 | ||
|
12455d37b6 | ||
|
a575fb2a76 | ||
|
a3732ce389 | ||
|
0f7dc33fe3 | ||
|
15cd38cd06 | ||
|
818d55c0d5 | ||
|
3da0d23bbc | ||
|
19ff7d2d8d | ||
|
77e18133cc | ||
|
cc58af56cf | ||
|
496cc45f22 | ||
|
6d0ecac664 | ||
|
7c0f6998ec | ||
|
cc9fe10c05 | ||
|
e139a14914 | ||
|
b73858c3fb | ||
|
d531e9a9ea | ||
|
9ae834956a | ||
|
0aedca8365 | ||
|
6320621f0d | ||
|
69a01309fb | ||
|
ebb153d8c7 | ||
|
e7802ec42e | ||
|
96e1b1c533 | ||
|
fc87e136eb | ||
|
f187aa40b8 | ||
|
11860b0439 | ||
|
da31ad770b | ||
|
31f3521952 | ||
|
d253bb4174 | ||
|
c6d3313378 | ||
|
d5069526c6 | ||
|
6c9e8eb8f0 | ||
|
356f2f6bcb | ||
|
29ef840b8a | ||
|
90298c3df7 | ||
|
7d39fe0be6 | ||
|
d377ef86f0 | ||
|
2fa9a80bcf | ||
|
da80d4c98c | ||
|
6adb6a145b | ||
|
597822d18f | ||
|
94ecbe7423 | ||
|
444fa5f74d | ||
|
41bea282a6 | ||
|
aad4a2a5b8 | ||
|
52dfa72da1 | ||
|
63a685f6fa | ||
|
37caea4946 | ||
|
346fa18bc9 | ||
|
0846347003 | ||
|
4f7fe1db48 | ||
|
6f27737d90 | ||
|
921a266708 | ||
|
b3b569cfb7 | ||
|
5e5e5b0065 | ||
|
1773916bd8 | ||
|
ba0fd9cec4 | ||
|
c27130145a | ||
|
dc59b4ed66 | ||
|
a42cc36b4e | ||
|
4ed61ff6fc | ||
|
a904122d50 | ||
|
c92aaf5971 | ||
|
c1a02281f2 | ||
|
78ab42e913 | ||
|
bf6a2e6bfa | ||
|
85920def46 | ||
|
b88fab188e | ||
|
767f513aa5 | ||
|
b79daf0349 | ||
|
657dd5bf7a | ||
|
7dff462ac9 | ||
|
24c31ee9ab | ||
|
f1a3aa696e | ||
|
bf3e7390f5 | ||
|
b4bf6e0e39 | ||
|
fa73d88db2 | ||
|
9b9874aa48 | ||
|
d17915227f | ||
|
c83a9b956e | ||
|
7fc2caca5a | ||
|
901936410e | ||
|
9503e790df | ||
|
c0947cef35 | ||
|
8deeed78ef | ||
|
39ffc0a00c | ||
|
0885fb157a | ||
|
0f5dab60ea | ||
|
aa70ee42d6 | ||
|
b7bd6aa215 | ||
|
e1b6203cdc | ||
|
69a3bda874 | ||
|
c8037d7b21 | ||
|
e6382d8f6c | ||
|
6ddd2f0539 | ||
|
93718dc296 | ||
|
c5b42dc0f2 | ||
|
3f65bc6057 | ||
|
e3d56ad557 | ||
|
5a92d7f013 | ||
|
1de387abc0 | ||
|
83e06193d1 | ||
|
02a2d88712 | ||
|
589b99e17d | ||
|
74d8b50ac0 | ||
|
906b6d4e5d | ||
|
5f90fd945f | ||
|
3670437c2e | ||
|
a128916bb4 | ||
|
ea7de7e1e7 | ||
|
11acd44283 | ||
|
af41e4b54c | ||
|
cf8f27721a | ||
|
f04b1d2e33 | ||
|
1f9e861e03 | ||
|
f5c1e26a9b | ||
|
cd8b3594aa | ||
|
57e3c09981 | ||
|
1ccb8a2164 | ||
|
26c412bd80 | ||
|
e4552968c6 | ||
|
2fa31de761 | ||
|
04ae83c74c | ||
|
b36e21ad04 | ||
|
9a615b50ea | ||
|
169e5efca2 | ||
|
8edfd4bdce | ||
|
810cd9f067 | ||
|
63f5bc534b | ||
|
ebb6e333d3 | ||
|
8f141aed1e | ||
|
2a734c5a78 | ||
|
a7cceff6bf | ||
|
7cafcb6a6b | ||
|
652e10e5a3 | ||
|
ea7a1631c2 | ||
|
e18aab83c5 | ||
|
d6dce92351 | ||
|
5c31774753 | ||
|
e331e4bd08 | ||
|
c9d27e55d6 | ||
|
d647c96ae4 | ||
|
5a6f9a60f3 | ||
|
ce2c0e2ac2 | ||
|
dfa9e754d5 | ||
|
860065cf6c | ||
|
2d7f8fba87 | ||
|
c2c4171756 | ||
|
af884cbb0e | ||
|
fb0be16155 | ||
|
f9d95136b2 | ||
|
26453c4112 | ||
|
cb26098e8b | ||
|
6766bfcfdf | ||
|
48df1e25ed | ||
|
52918e4ff5 | ||
|
40d70e797c | ||
|
6011868759 | ||
|
79ad480ddb | ||
|
c12d8f98be | ||
|
d2faadac57 | ||
|
7f1d28a417 | ||
|
fab02e5484 | ||
|
5274687ec1 | ||
|
b52e67b7df | ||
|
77f414dbf1 | ||
|
c45ce63bd2 | ||
|
0a784a0674 | ||
|
1da1506160 | ||
|
79dd212428 | ||
|
fd859a4191 | ||
|
e61f6df323 | ||
|
64998b5c53 | ||
|
784c9d47b3 | ||
|
b5617c3bd9 | ||
|
53777cd5b9 | ||
|
ddb8ad16ac | ||
|
a3ed766957 | ||
|
22a0343c41 | ||
|
43fb3cfdc5 | ||
|
8accceb08e | ||
|
71eab3e347 | ||
|
8d378fc340 | ||
|
73a8ac61ed | ||
|
67d3159650 | ||
|
ec8a760122 | ||
|
3d0ceca6da | ||
|
8c25d1f7e6 | ||
|
1e0972eaa1 | ||
|
616c666114 | ||
|
8520548e72 | ||
|
63f7f07465 | ||
|
35a3ff8032 | ||
|
695bf90891 | ||
|
d4dcc4fe2c | ||
|
ee44b6afa2 | ||
|
28b580b9fc | ||
|
7dc7a743f5 | ||
|
4bc92df38e | ||
|
048df99d91 | ||
|
b477d122f3 | ||
|
0cc2fe46cf | ||
|
671e1934bd | ||
|
d0452aaddb | ||
|
464db778fa | ||
|
905e813aa4 | ||
|
b55ba47c5e | ||
|
0607bb1485 | ||
|
f7c8298308 | ||
|
86de88ebaa | ||
|
76ba0a38e5 | ||
|
3ad642f388 | ||
|
e113eb3561 | ||
|
1dc1852a69 |
164
.travis.yml
164
.travis.yml
@@ -26,13 +26,16 @@ branches:
|
||||
|
||||
env:
|
||||
global:
|
||||
- TRANSFORMERS_TAG=$(mvn help:evaluate -Dexpression=dependency.alfresco-transform-core.version -q -DforceStdout)
|
||||
- TAS_SCRIPTS=../alfresco-community-repo/packaging/tests/scripts
|
||||
- TAS_ENVIRONMENT=./packaging/tests/environment
|
||||
- LOG_WARN="-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn"
|
||||
|
||||
stages:
|
||||
- name: prepare
|
||||
if: commit_message !~ /\[skip tests\]/ AND commit_message !~ /\[force[^\]]*\]/
|
||||
- name: test
|
||||
if: commit_message !~ /\[skip tests\]/
|
||||
if: commit_message !~ /\[skip tests\]/ AND commit_message !~ /\[force[^\]]*\]/
|
||||
- name: release
|
||||
if: commit_message !~ /\[no release\]/ AND (branch = master OR branch =~ /release\/.*/) AND type != pull_request AND fork = false
|
||||
- name: update_downstream
|
||||
@@ -43,7 +46,13 @@ install: travis_retry travis_wait 40 bash scripts/travis/build.sh
|
||||
|
||||
jobs:
|
||||
include:
|
||||
- name: "Prepare"
|
||||
stage: prepare
|
||||
install: skip
|
||||
script: travis_retry travis_wait 80 bash scripts/travis/prepare.sh
|
||||
|
||||
- name: "Source Clear Scan (SCA)"
|
||||
stage: test
|
||||
if: branch = master OR branch =~ /release\/.*/
|
||||
# Run Veracode
|
||||
install: skip
|
||||
@@ -51,43 +60,49 @@ jobs:
|
||||
|
||||
- name: "Core, Data-Model, Repository - AllUnitTestsSuite - Build and test"
|
||||
if: commit_message !~ /\[skip repo\]/
|
||||
install: skip
|
||||
script:
|
||||
- travis_retry mvn -B test -pl core,data-model
|
||||
- travis_retry mvn -B test -pl "repository,mmt" "-Dtest=AllUnitTestsSuite,AllMmtUnitTestSuite"
|
||||
- travis_retry mvn -B test -pl core,data-model -am -DfailIfNoTests=false
|
||||
- travis_retry mvn -B test -pl "repository,mmt" -am "-Dtest=AllUnitTestsSuite,AllMmtUnitTestSuite" -DfailIfNoTests=false
|
||||
|
||||
- name: "Repository - AppContext01TestSuite"
|
||||
if: commit_message !~ /\[skip repo\]/
|
||||
install: skip
|
||||
before_script:
|
||||
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
|
||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
|
||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext01TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
|
||||
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AppContext01TestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
|
||||
- name: "Repository - AppContext02TestSuite"
|
||||
if: commit_message !~ /\[skip repo\]/
|
||||
install: skip
|
||||
before_script:
|
||||
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
|
||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext02TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AppContext02TestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
|
||||
- name: "Repository - AppContext03TestSuite"
|
||||
if: commit_message !~ /\[skip repo\]/
|
||||
install: skip
|
||||
before_script:
|
||||
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
|
||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
|
||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext03TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
|
||||
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AppContext03TestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
|
||||
- name: "Repository - AppContext04TestSuite"
|
||||
if: commit_message !~ /\[skip repo\]/
|
||||
install: skip
|
||||
before_script:
|
||||
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
|
||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
|
||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext04TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
|
||||
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AppContext04TestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
|
||||
- name: "Repository - AppContext05TestSuite"
|
||||
if: commit_message !~ /\[skip repo\]/
|
||||
install: skip
|
||||
before_script:
|
||||
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
|
||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||
@@ -95,142 +110,153 @@ jobs:
|
||||
- cp repository/src/test/resources/realms/alfresco-realm.json "${HOME}/tmp"
|
||||
- export HOST_IP=$(hostname -I | cut -f1 -d' ')
|
||||
- docker run -d -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin -e DB_VENDOR=h2 -p 8999:8080 -e KEYCLOAK_IMPORT=/tmp/alfresco-realm.json -v $HOME/tmp/alfresco-realm.json:/tmp/alfresco-realm.json alfresco/alfresco-identity-service:1.2
|
||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext05TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco "-Didentity-service.auth-server-url=http://${HOST_IP}:8999/auth"
|
||||
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AppContext05TestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco "-Didentity-service.auth-server-url=http://${HOST_IP}:8999/auth"
|
||||
|
||||
- name: "Repository - AppContext06TestSuite"
|
||||
if: commit_message !~ /\[skip repo\]/
|
||||
install: skip
|
||||
before_script:
|
||||
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
|
||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
|
||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext06TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
|
||||
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AppContext06TestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
|
||||
- name: "Repository - AppContextExtraTestSuite"
|
||||
if: commit_message !~ /\[skip repo\]/
|
||||
install: skip
|
||||
before_script:
|
||||
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
|
||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
|
||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContextExtraTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
|
||||
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AppContextExtraTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
|
||||
- name: "Repository - MiscContextTestSuite"
|
||||
if: commit_message !~ /\[skip repo\]/
|
||||
install: skip
|
||||
before_script:
|
||||
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
|
||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
|
||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=MiscContextTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
|
||||
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=MiscContextTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
|
||||
- name: "Repository - SearchTestSuite"
|
||||
if: commit_message !~ /\[skip repo\]/
|
||||
install: skip
|
||||
before_script:
|
||||
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
|
||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=SearchTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco -Dindex.subsystem.name=solr6
|
||||
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=SearchTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco -Dindex.subsystem.name=solr6
|
||||
|
||||
- name: "Repository - MariaDB 10.2.18 tests"
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
|
||||
install: skip
|
||||
before_script:
|
||||
- docker run -d -p 3307:3306 --name mariadb -e MYSQL_ROOT_PASSWORD=alfresco -e MYSQL_USER=alfresco -e MYSQL_DATABASE=alfresco -e MYSQL_PASSWORD=alfresco mariadb:10.2.18 --transaction-isolation=READ-COMMITTED --max-connections=300 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
|
||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
|
||||
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
|
||||
|
||||
- name: "Repository - MariaDB 10.4 tests"
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
|
||||
install: skip
|
||||
before_script:
|
||||
- docker run -d -p 3307:3306 --name mariadb -e MYSQL_ROOT_PASSWORD=alfresco -e MYSQL_USER=alfresco -e MYSQL_DATABASE=alfresco -e MYSQL_PASSWORD=alfresco mariadb:10.4 --transaction-isolation=READ-COMMITTED --max-connections=300 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
|
||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
|
||||
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
|
||||
|
||||
- name: "Repository - MariaDB 10.5 tests"
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
|
||||
install: skip
|
||||
before_script:
|
||||
- docker run -d -p 3307:3306 --name mariadb -e MYSQL_ROOT_PASSWORD=alfresco -e MYSQL_USER=alfresco -e MYSQL_DATABASE=alfresco -e MYSQL_PASSWORD=alfresco mariadb:10.5 --transaction-isolation=READ-COMMITTED --max-connections=300 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
|
||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
|
||||
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
|
||||
|
||||
- name: "Repository - MariaDB 10.6 tests"
|
||||
# We run tests on the latest version of MariaDB on pull requests plus the normal master and release branches - ignored on feature branches
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ ) OR commit_message =~ /\[db\]/ OR commit_message =~ /\[latest db\]/
|
||||
install: skip
|
||||
before_script:
|
||||
- docker run -d -p 3307:3306 --name mariadb -e MYSQL_ROOT_PASSWORD=alfresco -e MYSQL_USER=alfresco -e MYSQL_DATABASE=alfresco -e MYSQL_PASSWORD=alfresco mariadb:10.6 --transaction-isolation=READ-COMMITTED --max-connections=300 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
|
||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
|
||||
|
||||
- name: "Repository - MySQL 5.7.23 tests"
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
|
||||
before_script:
|
||||
- docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=alfresco -e MYSQL_USER=alfresco -e MYSQL_DATABASE=alfresco -e MYSQL_PASSWORD=alfresco mysql:5.7.23 --transaction-isolation='READ-COMMITTED' --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
|
||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=com.mysql.jdbc.Driver -Ddb.name=alfresco -Ddb.url=jdbc:mysql://localhost:3307/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
|
||||
|
||||
- name: "Repository - MySQL 8 tests"
|
||||
# We run tests on the latest version of MySQL on pull requests plus the normal master and release branches - ignored on feature branches
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ ) OR commit_message =~ /\[db\]/ OR commit_message =~ /\[latest db\]/
|
||||
install: skip
|
||||
before_script:
|
||||
- docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=alfresco -e MYSQL_USER=alfresco -e MYSQL_DATABASE=alfresco -e MYSQL_PASSWORD=alfresco mysql:8 --transaction-isolation='READ-COMMITTED'
|
||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=com.mysql.jdbc.Driver -Ddb.name=alfresco -Ddb.url=jdbc:mysql://localhost:3307/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=com.mysql.jdbc.Driver -Ddb.name=alfresco -Ddb.url=jdbc:mysql://localhost:3307/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
|
||||
- name: "Repository - PostgreSQL 10.9 tests"
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
|
||||
install: skip
|
||||
before_script:
|
||||
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:10.9 postgres -c 'max_connections=300'
|
||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
|
||||
- name: "Repository - PostgreSQL 11.7 tests"
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
|
||||
install: skip
|
||||
before_script:
|
||||
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:11.7 postgres -c 'max_connections=300'
|
||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
|
||||
- name: "Repository - PostgreSQL 11.12 tests"
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
|
||||
install: skip
|
||||
before_script:
|
||||
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:11.12 postgres -c 'max_connections=300'
|
||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
|
||||
- name: "Repository - PostgreSQL 12.4 tests"
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
|
||||
install: skip
|
||||
before_script:
|
||||
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:12.4 postgres -c 'max_connections=300'
|
||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
|
||||
- name: "Repository - PostgreSQL 12.7 tests"
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
|
||||
install: skip
|
||||
before_script:
|
||||
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:12.7 postgres -c 'max_connections=300'
|
||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
|
||||
- name: "Repository - PostgreSQL 13.1 tests"
|
||||
# We only run DB tests on the latest version of PostgreSQL on feature branches
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
|
||||
install: skip
|
||||
before_script:
|
||||
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.1 postgres -c 'max_connections=300'
|
||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
|
||||
- name: "Repository - PostgreSQL 13.3 tests"
|
||||
# We only run DB tests on the latest version of PostgreSQL on feature branches
|
||||
if: commit_message !~ /\[skip db\]/ OR commit_message =~ /\[latest db\]/
|
||||
install: skip
|
||||
before_script:
|
||||
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
|
||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
|
||||
- name: "Repository - Messaging tests"
|
||||
if: commit_message !~ /\[skip repo\]/
|
||||
install: skip
|
||||
before_script:
|
||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=CamelRoutesTest,CamelComponentsTest
|
||||
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=CamelRoutesTest,CamelComponentsTest -DfailIfNoTests=false
|
||||
|
||||
- name: "Remote-api - AppContext01TestSuite"
|
||||
if: commit_message !~ /\[skip repo\]/
|
||||
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
|
||||
before_script:
|
||||
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
|
||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||
@@ -238,30 +264,34 @@ jobs:
|
||||
|
||||
- name: "Remote-api - AppContext02TestSuite"
|
||||
if: commit_message !~ /\[skip repo\]/
|
||||
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
|
||||
before_script:
|
||||
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
|
||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
|
||||
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
|
||||
script: travis_wait 20 mvn -B test -pl remote-api -Dtest=AppContext02TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
|
||||
- name: "Remote-api - AppContext03TestSuite"
|
||||
if: commit_message !~ /\[skip repo\]/
|
||||
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
|
||||
before_script:
|
||||
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
|
||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
|
||||
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
|
||||
script: travis_wait 20 mvn -B test -pl remote-api -Dtest=AppContext03TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
|
||||
- name: "Remote-api - AppContext04TestSuite"
|
||||
if: commit_message !~ /\[skip repo\]/
|
||||
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
|
||||
before_script:
|
||||
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
|
||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
|
||||
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
|
||||
script: travis_wait 20 mvn -B test -pl remote-api -Dtest=AppContext04TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
|
||||
- name: "Remote-api - AppContextExtraTestSuite"
|
||||
if: commit_message !~ /\[skip repo\]/
|
||||
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
|
||||
before_script:
|
||||
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
|
||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||
@@ -270,99 +300,126 @@ jobs:
|
||||
- name: "REST API TAS tests part1"
|
||||
# TAS tests are generally skipped on feature branches as they will be repeated on the enterprise repo or community packaging builds
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
|
||||
install: travis_retry travis_wait 40 env REQUIRES_LOCAL_IMAGES=true bash scripts/travis/build.sh
|
||||
before_script:
|
||||
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
|
||||
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
|
||||
script: travis_wait 60 mvn -B install -f packaging/tests/tas-restapi/pom.xml -Pall-tas-tests,run-restapi-part1 -Denvironment=default -DrunBugs=false
|
||||
script: travis_wait 60 mvn -B verify -f packaging/tests/tas-restapi/pom.xml -Pall-tas-tests,run-restapi-part1 -Denvironment=default -DrunBugs=false
|
||||
|
||||
- name: "REST API TAS tests part2"
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
|
||||
install: travis_retry travis_wait 40 env REQUIRES_LOCAL_IMAGES=true bash scripts/travis/build.sh
|
||||
before_script:
|
||||
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
|
||||
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
|
||||
script: travis_wait 60 mvn -B install -f packaging/tests/tas-restapi/pom.xml -Pall-tas-tests,run-restapi-part2 -Denvironment=default -DrunBugs=false
|
||||
script: travis_wait 60 mvn -B verify -f packaging/tests/tas-restapi/pom.xml -Pall-tas-tests,run-restapi-part2 -Denvironment=default -DrunBugs=false
|
||||
|
||||
- name: "REST API TAS tests part3"
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
|
||||
install: travis_retry travis_wait 40 env REQUIRES_LOCAL_IMAGES=true bash scripts/travis/build.sh
|
||||
before_script:
|
||||
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
|
||||
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
|
||||
script: travis_wait 60 mvn -B install -f packaging/tests/tas-restapi/pom.xml -Pall-tas-tests,run-restapi-part3 -Denvironment=default -DrunBugs=false
|
||||
script: travis_wait 60 mvn -B verify -f packaging/tests/tas-restapi/pom.xml -Pall-tas-tests,run-restapi-part3 -Denvironment=default -DrunBugs=false
|
||||
|
||||
- name: "CMIS TAS tests - BROWSER binding"
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
|
||||
install: travis_retry travis_wait 40 env REQUIRES_LOCAL_IMAGES=true bash scripts/travis/build.sh
|
||||
before_script:
|
||||
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
|
||||
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
|
||||
script: travis_wait 40 mvn -B install -f packaging/tests/tas-cmis/pom.xml -Pall-tas-tests,run-cmis-browser -Denvironment=default -DrunBugs=false
|
||||
script: travis_wait 40 mvn -B verify -f packaging/tests/tas-cmis/pom.xml -Pall-tas-tests,run-cmis-browser -Denvironment=default -DrunBugs=false
|
||||
|
||||
- name: "CMIS TAS tests - ATOM binding"
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
|
||||
install: travis_retry travis_wait 40 env REQUIRES_LOCAL_IMAGES=true bash scripts/travis/build.sh
|
||||
before_script:
|
||||
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
|
||||
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
|
||||
script: travis_wait 40 mvn -B install -f packaging/tests/tas-cmis/pom.xml -Pall-tas-tests,run-cmis-atom -Denvironment=default -DrunBugs=false
|
||||
script: travis_wait 40 mvn -B verify -f packaging/tests/tas-cmis/pom.xml -Pall-tas-tests,run-cmis-atom -Denvironment=default -DrunBugs=false
|
||||
|
||||
- name: "CMIS TAS tests - WEBSERVICES binding"
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
|
||||
install: travis_retry travis_wait 40 env REQUIRES_LOCAL_IMAGES=true bash scripts/travis/build.sh
|
||||
before_script:
|
||||
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
|
||||
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
|
||||
script: travis_wait 40 mvn -B install -f packaging/tests/tas-cmis/pom.xml -Pall-tas-tests,run-cmis-webservices -Denvironment=default -DrunBugs=false
|
||||
script: travis_wait 40 mvn -B verify -f packaging/tests/tas-cmis/pom.xml -Pall-tas-tests,run-cmis-webservices -Denvironment=default -DrunBugs=false
|
||||
|
||||
- name: "Email TAS tests"
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
|
||||
install: travis_retry travis_wait 40 env REQUIRES_LOCAL_IMAGES=true bash scripts/travis/build.sh
|
||||
before_script:
|
||||
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal.yml
|
||||
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
|
||||
script: travis_wait 30 mvn -B install -f packaging/tests/tas-email/pom.xml -Pall-tas-tests -Denvironment=default -DrunBugs=false
|
||||
script: travis_wait 30 mvn -B verify -f packaging/tests/tas-email/pom.xml -Pall-tas-tests -Denvironment=default -DrunBugs=false
|
||||
|
||||
- name: "WebDAV TAS tests"
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
|
||||
install: travis_retry travis_wait 40 env REQUIRES_LOCAL_IMAGES=true bash scripts/travis/build.sh
|
||||
before_script:
|
||||
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal.yml
|
||||
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
|
||||
script: travis_wait 30 mvn -B install -f packaging/tests/tas-webdav/pom.xml -Pall-tas-tests -Denvironment=default -DrunBugs=false
|
||||
script: travis_wait 30 mvn -B verify -f packaging/tests/tas-webdav/pom.xml -Pall-tas-tests -Denvironment=default -DrunBugs=false
|
||||
|
||||
- name: "Integration TAS tests"
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
|
||||
install: travis_retry travis_wait 40 env REQUIRES_LOCAL_IMAGES=true bash scripts/travis/build.sh
|
||||
before_script:
|
||||
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal.yml
|
||||
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
|
||||
script: travis_wait 30 mvn -B install -f packaging/tests/tas-integration/pom.xml -Pall-tas-tests -Denvironment=default -DrunBugs=false
|
||||
script: travis_wait 30 mvn -B verify -f packaging/tests/tas-integration/pom.xml -Pall-tas-tests -Denvironment=default -DrunBugs=false
|
||||
|
||||
- name: "Share Services - ShareServicesTestSuite"
|
||||
if: commit_message !~ /\[skip repo\]/
|
||||
install: skip
|
||||
before_script:
|
||||
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
|
||||
script: travis_wait 20 mvn -B test -pl :alfresco-share-services -Dtest=ShareServicesTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
script: travis_wait 20 mvn -B test -pl :alfresco-share-services -am -Dtest=ShareServicesTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
|
||||
- name: "AGS Unit & Integration Tests 01 (PostgreSQL)"
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags\]/
|
||||
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
|
||||
script: travis_retry travis_wait 80 mvn -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-postgres -PagsAllTestSuitePt1 -f amps/ags/pom.xml ${LOG_WARN}
|
||||
|
||||
- name: "AGS Integration Tests 02 (PostgreSQL)"
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags\]/
|
||||
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
|
||||
script: travis_retry travis_wait 80 mvn -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-postgres -PagsAllTestSuitePt2 -f amps/ags/pom.xml ${LOG_WARN}
|
||||
|
||||
- name: "AGS Integration Tests 03 (PostgreSQL)"
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags\]/
|
||||
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
|
||||
script: travis_retry travis_wait 80 mvn -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-postgres -PagsAllTestSuitePt3 -f amps/ags/pom.xml ${LOG_WARN}
|
||||
|
||||
- name: "AGS Unit & Integration Tests 04 (PostgreSQL)"
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags\]/
|
||||
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
|
||||
script: travis_retry travis_wait 80 mvn -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-postgres -PagsAllTestSuitePt4 -f amps/ags/pom.xml ${LOG_WARN}
|
||||
|
||||
- name: "AGS Unit & Integration Tests 01 (MySQL) "
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags on MySQL\]/
|
||||
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
|
||||
script: travis_retry travis_wait 80 mvn -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-mysql -PagsAllTestSuitePt1 -f amps/ags/pom.xml ${LOG_WARN}
|
||||
|
||||
- name: "AGS Integration Tests 02 (MySQL) "
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags on MySQL\]/
|
||||
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
|
||||
script: travis_retry travis_wait 80 mvn -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-mysql -PagsAllTestSuitePt2 -f amps/ags/pom.xml ${LOG_WARN}
|
||||
|
||||
- name: "AGS Integration Tests 03 (MySQL) "
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags on MySQL\]/
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags\]/
|
||||
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
|
||||
script: travis_retry travis_wait 80 mvn -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-mysql -PagsAllTestSuitePt3 -f amps/ags/pom.xml ${LOG_WARN}
|
||||
|
||||
- name: "AGS Unit & Integration Tests 04 (MySQL) "
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags on MySQL\]/
|
||||
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
|
||||
script: travis_retry travis_wait 80 mvn -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-mysql -PagsAllTestSuitePt4 -f amps/ags/pom.xml ${LOG_WARN}
|
||||
|
||||
- name: "AGS Community Rest API Tests"
|
||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags\]/
|
||||
install: travis_retry travis_wait 40 env REQUIRES_LOCAL_IMAGES=true bash scripts/travis/build.sh
|
||||
addons:
|
||||
artifacts:
|
||||
paths:
|
||||
@@ -373,11 +430,12 @@ jobs:
|
||||
before_script:
|
||||
- ${TAS_SCRIPTS}/start-compose.sh ./amps/ags/rm-community/rm-community-repo/docker-compose.yml
|
||||
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8080/alfresco"
|
||||
script: travis_wait 40 mvn -B test -pl :alfresco-governance-services-automation-community-rest-api -Dskip.automationtests=false -Pags
|
||||
script: travis_wait 40 mvn -B test -pl :alfresco-governance-services-automation-community-rest-api -am -DfailIfNoTests=false -Dskip.automationtests=false -Pags
|
||||
after_script: bash amps/ags/travis/scripts/getLogs.sh
|
||||
|
||||
- name: "Push to Nexus"
|
||||
stage: release
|
||||
install: skip
|
||||
before_script: bash scripts/travis/verify_release_tag.sh
|
||||
script: travis_wait 40 bash scripts/travis/maven_release.sh
|
||||
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo-amps</artifactId>
|
||||
<version>15.1</version>
|
||||
<version>17.43</version>
|
||||
</parent>
|
||||
|
||||
<modules>
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-governance-services-community-parent</artifactId>
|
||||
<version>15.1</version>
|
||||
<version>17.43</version>
|
||||
</parent>
|
||||
|
||||
<modules>
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-governance-services-automation-community-repo</artifactId>
|
||||
<version>15.1</version>
|
||||
<version>17.43</version>
|
||||
</parent>
|
||||
|
||||
<build>
|
||||
@@ -87,7 +87,7 @@
|
||||
<dependency>
|
||||
<groupId>com.github.docker-java</groupId>
|
||||
<artifactId>docker-java</artifactId>
|
||||
<version>3.2.12</version>
|
||||
<version>3.2.13</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
@@ -26,8 +26,6 @@
|
||||
*/
|
||||
package org.alfresco.rest.v0;
|
||||
|
||||
import static org.testng.AssertJUnit.assertTrue;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
|
||||
import org.alfresco.rest.core.v0.BaseAPI;
|
||||
@@ -38,7 +36,9 @@ import org.json.JSONObject;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import static org.testng.AssertJUnit.assertTrue;
|
||||
import static org.testng.AssertJUnit.assertEquals;
|
||||
import static org.testng.AssertJUnit.assertNotNull;
|
||||
/**
|
||||
* Methods to make API requests using v0 API on Records Management Custom Model Reference Definitions
|
||||
*
|
||||
@@ -57,6 +57,8 @@ public class CustomDefinitionsAPI extends BaseAPI
|
||||
* create reference endpoint
|
||||
*/
|
||||
private static final String CREATE_RELATIONSHIP_API_ENDPOINT = "{0}node/{1}/customreferences";
|
||||
private static final String GET_RELATIONSHIP_API_ENDPOINT = "{0}node/{1}/relationships";
|
||||
private static final String DELETE_RELATIONSHIP_API_ENDPOINT = "{0}node/{1}/targetnode/{2}/uniqueName/{3}";
|
||||
|
||||
/**
|
||||
* logger
|
||||
@@ -141,4 +143,48 @@ public class CustomDefinitionsAPI extends BaseAPI
|
||||
assertTrue("Creating relationship from " + recordNodeIdFrom + " to " + recordNodeIdTo + " failed.", success);
|
||||
}
|
||||
|
||||
public void createRelationship(
|
||||
String adminUser,
|
||||
String adminPassword,
|
||||
int expectedStatus,
|
||||
String recordNodeIdFrom,
|
||||
String recordNodeIdTo,
|
||||
CustomDefinitions relationshipType) {
|
||||
//create the request body
|
||||
JSONObject requestParams = new JSONObject();
|
||||
requestParams.put("toNode", NODE_REF_WORKSPACE_SPACES_STORE + recordNodeIdTo);
|
||||
requestParams.put("refId", getCustomReferenceId(adminUser, adminPassword, relationshipType
|
||||
.getDefinition()));
|
||||
//send the API request to create the relationship
|
||||
JSONObject setRelationshipStatus = doPostRequest(adminUser, adminPassword, requestParams,
|
||||
MessageFormat.format(CREATE_RELATIONSHIP_API_ENDPOINT, "{0}", NODE_PREFIX + recordNodeIdFrom));
|
||||
//check the response
|
||||
assertEquals("POST request for createRelationship was not successful.", expectedStatus, setRelationshipStatus.getJSONObject("status").get("code"));
|
||||
}
|
||||
|
||||
public JSONObject getRelationshipDetails(
|
||||
String adminUser,
|
||||
String adminPassword,
|
||||
String nodeRef) {
|
||||
//send the API request to create the relationship
|
||||
JSONObject relationshipDetails = doGetRequest(adminUser, adminPassword,
|
||||
MessageFormat.format(GET_RELATIONSHIP_API_ENDPOINT, "{0}", NODE_PREFIX + nodeRef));
|
||||
//check the response
|
||||
assertNotNull("The Relationship detail is not found for the Noderef " + nodeRef, relationshipDetails);
|
||||
return relationshipDetails;
|
||||
}
|
||||
|
||||
public void deleteRelationship(
|
||||
String adminUser,
|
||||
String adminPassword,
|
||||
String recordNodeIdFrom,
|
||||
String recordNodeIdTo,
|
||||
String relationshipUniqueName) {
|
||||
//send the API request to create the relationship
|
||||
JSONObject setRelationshipStatus = doDeleteRequest(adminUser, adminPassword,
|
||||
MessageFormat.format(DELETE_RELATIONSHIP_API_ENDPOINT, "{0}", NODE_PREFIX + recordNodeIdFrom,NODE_PREFIX + recordNodeIdTo,relationshipUniqueName));
|
||||
//check the response
|
||||
boolean success = (setRelationshipStatus != null) && setRelationshipStatus.getBoolean("success");
|
||||
assertTrue("Deleting relationship from " + recordNodeIdFrom + " to " + recordNodeIdTo + " failed.", success);
|
||||
}
|
||||
}
|
||||
|
@@ -73,6 +73,7 @@ import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.BeforeMethod;
|
||||
import org.testng.annotations.DataProvider;
|
||||
import org.testng.annotations.Test;
|
||||
import org.alfresco.utility.model.TestGroup;
|
||||
|
||||
/**
|
||||
* API tests for declaring document as record and filing it immediately to a record folder location within the file plan
|
||||
@@ -257,7 +258,7 @@ public class DeclareAndFileDocumentAsRecordTests extends BaseRMRestTest
|
||||
* Then I receive an error indicating that I have attempted to declare and file a document into an invalid record folder
|
||||
* And the document is not declared as a record
|
||||
*/
|
||||
@Test (dataProvider = "invalidDestinationPaths")
|
||||
@Test (dataProvider = "invalidDestinationPaths",groups = { TestGroup.NOT_SUPPORTED_ON_SINGLE_PIPELINE })
|
||||
public void declareAndFileToInvalidLocationUsingActionsAPI(String containerPath, String expectedException) throws Exception
|
||||
{
|
||||
STEP("Declare document as record with an invalid location parameter value");
|
||||
|
@@ -62,6 +62,7 @@ import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.BeforeMethod;
|
||||
import org.testng.annotations.DataProvider;
|
||||
import org.testng.annotations.Test;
|
||||
import org.alfresco.utility.model.TestGroup;
|
||||
|
||||
/**
|
||||
* API tests for declaring a document version as record and filing to a record folder location within the file plan
|
||||
@@ -207,7 +208,7 @@ public class FileVersionAsRecordTests extends BaseRMRestTest
|
||||
* record folder
|
||||
* And the document is not declared as a version record
|
||||
*/
|
||||
@Test (dataProvider = "invalidDestinationPaths")
|
||||
@Test (dataProvider = "invalidDestinationPaths", groups = { TestGroup.NOT_SUPPORTED_ON_SINGLE_PIPELINE })
|
||||
public void declareVersionAndFileToInvalidLocationUsingActionsAPI(String containerPath, String expectedException) throws Exception
|
||||
{
|
||||
STEP("Declare document as record version with an invalid location parameter value");
|
||||
|
@@ -0,0 +1,202 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
package org.alfresco.rest.rm.community.records;
|
||||
import static org.alfresco.rest.core.v0.BaseAPI.RM_SITE_ID;
|
||||
import static org.alfresco.rest.rm.community.base.TestData.HOLD_DESCRIPTION;
|
||||
import static org.alfresco.rest.rm.community.base.TestData.HOLD_REASON;
|
||||
import static org.alfresco.rest.rm.community.util.CommonTestUtils.generateTestPrefix;
|
||||
import java.util.Collections;
|
||||
import org.alfresco.rest.rm.community.base.BaseRMRestTest;
|
||||
import org.alfresco.rest.rm.community.model.custom.CustomDefinitions;
|
||||
import org.alfresco.rest.rm.community.model.record.Record;
|
||||
import org.alfresco.rest.rm.community.model.recordcategory.RecordCategory;
|
||||
import org.alfresco.rest.rm.community.model.recordcategory.RecordCategoryChild;
|
||||
import org.alfresco.rest.v0.CustomDefinitionsAPI;
|
||||
import org.alfresco.rest.v0.HoldsAPI;
|
||||
import org.alfresco.rest.v0.RMRolesAndActionsAPI;
|
||||
import org.alfresco.rest.v0.RecordsAPI;
|
||||
import org.alfresco.rest.v0.RecordCategoriesAPI;
|
||||
import org.alfresco.test.AlfrescoTest;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.json.JSONObject;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.testng.annotations.Test;
|
||||
import static org.apache.commons.httpclient.HttpStatus.SC_INTERNAL_SERVER_ERROR;
|
||||
import static org.apache.commons.httpclient.HttpStatus.SC_OK;
|
||||
/**
|
||||
* Add Relationship tests
|
||||
* @author Kavit Shah
|
||||
*/
|
||||
public class AddRelationshipTests extends BaseRMRestTest
|
||||
{
|
||||
private final String TEST_PREFIX = generateTestPrefix(AddRelationshipTests.class);
|
||||
private final String CATEGORY = TEST_PREFIX + "category";
|
||||
private final String HOLD1 = TEST_PREFIX + "hold1";
|
||||
private final String FOLDER = TEST_PREFIX + "RM_2709_1814_FOLDER";
|
||||
private final String RECORD1 = TEST_PREFIX + "RM_2709_1814_RECORD_ONE";
|
||||
private final String RECORD2 = TEST_PREFIX + "RM_1814_RECORD_TWO";
|
||||
private String hold1NodeRef;
|
||||
@Autowired
|
||||
private HoldsAPI holdsAPI;
|
||||
@Autowired
|
||||
private RecordsAPI recordsAPI;
|
||||
@Autowired
|
||||
private CustomDefinitionsAPI customDefinitionsAPI;
|
||||
@Autowired
|
||||
private RMRolesAndActionsAPI rmRolesAndActionsAPI;
|
||||
@Autowired
|
||||
private RecordCategoriesAPI recordCategoriesAPI;
|
||||
|
||||
@Test (priority = 1)
|
||||
@AlfrescoTest (jira = "RM-1814")
|
||||
public void addRelationshipToHoldRecord()
|
||||
{
|
||||
String CATEGORY_RELATIONSHIP = CATEGORY + "To Hold";
|
||||
//create RM site
|
||||
createRMSiteIfNotExists();
|
||||
//create record category, record folder and records
|
||||
RecordCategory recordCategory = createCategoryIfDoesNotExist(CATEGORY_RELATIONSHIP);
|
||||
RecordCategoryChild recordCategoryChild = createRecordFolderInCategory(FOLDER, recordCategory);
|
||||
|
||||
createRecordItems(recordCategoryChild, RECORD1);
|
||||
Record record2 = createRecordItems(recordCategoryChild, RECORD2);
|
||||
|
||||
//create Hold
|
||||
hold1NodeRef = holdsAPI.createHoldAndGetNodeRef(getAdminUser().getUsername(),
|
||||
getAdminUser().getPassword(), HOLD1, HOLD_REASON, HOLD_DESCRIPTION);
|
||||
//add RECORD2 to holds
|
||||
holdsAPI.addItemsToHolds(getDataUser().usingAdmin().getAdminUser().getUsername(),
|
||||
getDataUser().usingAdmin().getAdminUser().getPassword(),
|
||||
SC_OK, Collections.singletonList(record2.getId()),
|
||||
Collections.singletonList(hold1NodeRef));
|
||||
|
||||
// get records nodeRefs
|
||||
String elRecordFullName1 = recordsAPI.getRecordFullName(getDataUser().usingAdmin().getAdminUser().getUsername(),
|
||||
getDataUser().usingAdmin().getAdminUser().getPassword(), FOLDER, RECORD1);
|
||||
String elRecordNodeRef1 = recordsAPI.getRecordNodeRef(getDataUser().usingAdmin().getAdminUser().getUsername(),
|
||||
getDataUser().usingAdmin().getAdminUser().getPassword(), elRecordFullName1, "/" + CATEGORY_RELATIONSHIP + "/" + FOLDER);
|
||||
|
||||
String elRecordFullName2 = recordsAPI.getRecordFullName(getDataUser().usingAdmin().getAdminUser().getUsername(),
|
||||
getDataUser().usingAdmin().getAdminUser().getPassword(), FOLDER, RECORD2);
|
||||
String elRecordNodeRef2 = recordsAPI.getRecordNodeRef(getDataUser().usingAdmin().getAdminUser().getUsername(),
|
||||
getDataUser().usingAdmin().getAdminUser().getPassword(), elRecordFullName2, "/" + CATEGORY_RELATIONSHIP + "/" + FOLDER);
|
||||
|
||||
// create Relationship
|
||||
customDefinitionsAPI.createRelationship(getDataUser().usingAdmin().getAdminUser().getUsername(),
|
||||
getDataUser().usingAdmin().getAdminUser().getPassword(),
|
||||
SC_INTERNAL_SERVER_ERROR,
|
||||
formatNodeRef(elRecordNodeRef1),
|
||||
formatNodeRef(elRecordNodeRef2),
|
||||
CustomDefinitions.ATTACHMENT);
|
||||
|
||||
//delete preconditions
|
||||
deletePrecondition();
|
||||
}
|
||||
|
||||
@Test (priority = 2)
|
||||
@AlfrescoTest (jira = "RM-1874")
|
||||
public void deleteRelationship()
|
||||
{
|
||||
String CATEGORY_RELATIONSHIP = CATEGORY + "deleteRelationship";
|
||||
// create RM site
|
||||
createRMSiteIfNotExists();
|
||||
// create record category, record folder and records
|
||||
RecordCategory recordCategory = createCategoryIfDoesNotExist(CATEGORY_RELATIONSHIP);
|
||||
RecordCategoryChild recordCategoryChild = createRecordFolderInCategory(FOLDER, recordCategory);
|
||||
|
||||
createRecordItems(recordCategoryChild, RECORD1);
|
||||
createRecordItems(recordCategoryChild, RECORD2);
|
||||
|
||||
// Add Relationship
|
||||
String elRecordFullName1 = recordsAPI.getRecordFullName(getDataUser().usingAdmin().getAdminUser().getUsername(),
|
||||
getDataUser().usingAdmin().getAdminUser().getPassword(), FOLDER, RECORD1);
|
||||
String elRecordNodeRef1 = recordsAPI.getRecordNodeRef(getDataUser().usingAdmin().getAdminUser().getUsername(),
|
||||
getDataUser().usingAdmin().getAdminUser().getPassword(), elRecordFullName1, "/" + CATEGORY_RELATIONSHIP + "/" + FOLDER);
|
||||
|
||||
String elRecordFullName2 = recordsAPI.getRecordFullName(getDataUser().usingAdmin().getAdminUser().getUsername(),
|
||||
getDataUser().usingAdmin().getAdminUser().getPassword(), FOLDER, RECORD2);
|
||||
String elRecordNodeRef2 = recordsAPI.getRecordNodeRef(getDataUser().usingAdmin().getAdminUser().getUsername(),
|
||||
getDataUser().usingAdmin().getAdminUser().getPassword(), elRecordFullName2, "/" + CATEGORY_RELATIONSHIP + "/" + FOLDER);
|
||||
|
||||
customDefinitionsAPI.createRelationship(getDataUser().usingAdmin().getAdminUser().getUsername(),
|
||||
getDataUser().usingAdmin().getAdminUser().getPassword(),
|
||||
formatNodeRef(elRecordNodeRef1),
|
||||
formatNodeRef(elRecordNodeRef2),
|
||||
CustomDefinitions.ATTACHMENT);
|
||||
|
||||
// Get RelationshipDetails
|
||||
JSONObject relationshipDetails = customDefinitionsAPI.getRelationshipDetails(getDataUser().usingAdmin().getAdminUser().getUsername(),
|
||||
getDataUser().usingAdmin().getAdminUser().getPassword(),
|
||||
formatNodeRef(elRecordNodeRef1));
|
||||
|
||||
// Delete RelationshipDetails
|
||||
customDefinitionsAPI.deleteRelationship(getDataUser().usingAdmin().getAdminUser().getUsername(),
|
||||
getDataUser().usingAdmin().getAdminUser().getPassword(),
|
||||
formatNodeRef(elRecordNodeRef1),
|
||||
formatNodeRef(elRecordNodeRef2),
|
||||
relationshipUniqueName(relationshipDetails));
|
||||
|
||||
// delete category
|
||||
tearDown(CATEGORY_RELATIONSHIP);
|
||||
}
|
||||
|
||||
private void deletePrecondition()
|
||||
{
|
||||
holdsAPI.deleteHold(getAdminUser(), hold1NodeRef);
|
||||
}
|
||||
|
||||
private Record createRecordItems(RecordCategoryChild recordCategoryChild, String record) {
|
||||
return createElectronicRecord(recordCategoryChild.getId(), record);
|
||||
}
|
||||
|
||||
private RecordCategory createCategoryIfDoesNotExist(String CATEGORY_ALL) {
|
||||
return createRootCategory(getDataUser().usingAdmin().getAdminUser(), CATEGORY_ALL);
|
||||
}
|
||||
|
||||
private RecordCategoryChild createRecordFolderInCategory(String FOLDER_SEARCH, RecordCategory recordCategory) {
|
||||
return createFolder(getDataUser().usingAdmin().getAdminUser(), recordCategory.getId(), FOLDER_SEARCH);
|
||||
}
|
||||
|
||||
private String formatNodeRef(String nodeRef) {
|
||||
return StringUtils.remove(nodeRef,"workspace://SpacesStore/");
|
||||
}
|
||||
|
||||
private void tearDown(String category) {
|
||||
rmRolesAndActionsAPI.deleteAllItemsInContainer(getDataUser().usingAdmin().getAdminUser().getUsername(),
|
||||
getDataUser().usingAdmin().getAdminUser().getPassword(), RM_SITE_ID, FOLDER);
|
||||
rmRolesAndActionsAPI.deleteAllItemsInContainer(getDataUser().usingAdmin().getAdminUser().getUsername(),
|
||||
getDataUser().usingAdmin().getAdminUser().getPassword(), RM_SITE_ID, category);
|
||||
recordCategoriesAPI.deleteCategory(getDataUser().usingAdmin().getAdminUser().getUsername(),
|
||||
getDataUser().usingAdmin().getAdminUser().getPassword(), category);
|
||||
}
|
||||
|
||||
private String relationshipUniqueName(JSONObject relationshipDetails) {
|
||||
return relationshipDetails.getJSONObject("data").getJSONArray("items").getJSONObject(0).getJSONObject("node")
|
||||
.get("relationshipUniqueName").toString();
|
||||
}
|
||||
}
|
@@ -0,0 +1,148 @@
|
||||
/*-
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.records;
|
||||
|
||||
import static java.util.Arrays.asList;
|
||||
import static org.alfresco.rest.rm.community.util.CommonTestUtils.generateTestPrefix;
|
||||
import static org.alfresco.rest.rm.community.utils.CoreUtil.createBodyForMoveCopy;
|
||||
import static org.alfresco.rest.rm.community.utils.CoreUtil.toContentModel;
|
||||
import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.createElectronicRecordModel;
|
||||
import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.getFile;
|
||||
import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.IMAGE_FILE;
|
||||
import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.createRecordModel;
|
||||
import static org.alfresco.utility.data.RandomData.getRandomName;
|
||||
import static org.alfresco.utility.report.log.Step.STEP;
|
||||
import static org.springframework.http.HttpStatus.CREATED;
|
||||
import static org.springframework.http.HttpStatus.OK;
|
||||
import org.alfresco.rest.model.RestNodeModel;
|
||||
import org.alfresco.rest.rm.community.base.BaseRMRestTest;
|
||||
import org.alfresco.rest.rm.community.model.record.Record;
|
||||
import org.alfresco.rest.rm.community.model.recordcategory.RecordCategory;
|
||||
import org.alfresco.rest.rm.community.requests.gscore.api.RecordFolderAPI;
|
||||
import org.alfresco.test.AlfrescoTest;
|
||||
import org.alfresco.utility.model.UserModel;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.testng.annotations.AfterClass;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.Test;
|
||||
import org.alfresco.rest.v0.RMRolesAndActionsAPI;
|
||||
/**
|
||||
* This class contains the tests for
|
||||
* CreateElectronicRecordsTests Action REST API
|
||||
*
|
||||
* @author Shishuraj Bisht
|
||||
*/
|
||||
public class CreateElectronicRecordsTests extends BaseRMRestTest {
|
||||
|
||||
private RecordCategory rootCategory;
|
||||
private UserModel updateUser;
|
||||
/**
|
||||
* data prep services
|
||||
*/
|
||||
|
||||
@Autowired
|
||||
private RMRolesAndActionsAPI rmRolesAndActionsAPI;
|
||||
|
||||
private final String TEST_PREFIX = generateTestPrefix(CreateElectronicRecordsTests.class);
|
||||
private final String RM_ADMIN = TEST_PREFIX + "rm_admin";
|
||||
|
||||
@BeforeClass (alwaysRun = true)
|
||||
public void preConditions()
|
||||
{
|
||||
STEP("Create RM Site");
|
||||
createRMSiteIfNotExists();
|
||||
|
||||
STEP("Create RM Admin user");
|
||||
rmRolesAndActionsAPI.createUserAndAssignToRole(getAdminUser().getUsername(), getAdminUser().getPassword(), RM_ADMIN,
|
||||
getAdminUser().getPassword(),
|
||||
"Administrator");
|
||||
|
||||
STEP("Create root level category");
|
||||
rootCategory = createRootCategory(getRandomName("Category"));
|
||||
|
||||
STEP("Create the record folder1 inside the rootCategory");
|
||||
String recordFolder1 = createCategoryFolderInFilePlan().getId();
|
||||
}
|
||||
|
||||
/**
|
||||
* Test v0 methods to create and get electronic records.
|
||||
*/
|
||||
@Test
|
||||
@AlfrescoTest (jira = "RM-2768")
|
||||
public void createElectronicRecordTest() throws Exception {
|
||||
|
||||
//create electronic record in record folder
|
||||
String recordFolder1 = createRecordFolder(rootCategory.getId(), getRandomName("recFolder")).getId();
|
||||
RecordFolderAPI recordFolderAPI = getRestAPIFactory().getRecordFolderAPI();
|
||||
|
||||
Record electronicRecord = recordFolderAPI.createRecord(createElectronicRecordModel(), recordFolder1, getFile(IMAGE_FILE));
|
||||
assertStatusCode(CREATED);
|
||||
STEP("Check the electronic record has been created");
|
||||
assertStatusCode(CREATED);
|
||||
|
||||
// Get recordsAPI instance initialised to updateUser
|
||||
org.alfresco.rest.rm.community.requests.gscore.api.RecordsAPI recordsAPI = getRestAPIFactory().getRecordsAPI(updateUser);
|
||||
|
||||
for (Record record: asList(electronicRecord)) {
|
||||
recordsAPI.getRecord(record.getId());
|
||||
assertStatusCode(OK);
|
||||
|
||||
// Generate update metadata
|
||||
String newName = getModifiedPropertyValue(record.getName());
|
||||
String newTitle = getModifiedPropertyValue(record.getProperties().getTitle());
|
||||
String newDescription = getModifiedPropertyValue(record.getProperties().getDescription());
|
||||
|
||||
// Update record
|
||||
recordsAPI.updateRecord(createRecordModel(newName, newDescription, newTitle), record.getId());
|
||||
assertStatusCode(OK);
|
||||
}
|
||||
// move the record from one folder1 to folder2
|
||||
STEP("Create the record folder2 inside the rootCategory");
|
||||
String recordFolder2 = createCategoryFolderInFilePlan().getId();
|
||||
|
||||
STEP("Move record from folder1 to folder2");
|
||||
RestNodeModel electronicDocRestNodeModel = getRestAPIFactory()
|
||||
.getNodeAPI(toContentModel(electronicRecord.getId()))
|
||||
.move(createBodyForMoveCopy(recordFolder2));
|
||||
assertStatusCode(OK);
|
||||
}
|
||||
|
||||
private String getModifiedPropertyValue(String originalValue) {
|
||||
/* to be used to append to modifications */
|
||||
String MODIFIED_PREFIX = "modified_";
|
||||
return MODIFIED_PREFIX + originalValue;
|
||||
}
|
||||
|
||||
@AfterClass (alwaysRun = true)
|
||||
public void deletePreConditions() {
|
||||
STEP("Delete the created rootCategory along with corresponding record folders/records present in it");
|
||||
getRestAPIFactory().getRecordCategoryAPI().deleteRecordCategory(rootCategory.getId());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@@ -0,0 +1,145 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.records;
|
||||
|
||||
import org.alfresco.dataprep.CMISUtil;
|
||||
import org.alfresco.rest.rm.community.base.BaseRMRestTest;
|
||||
import org.alfresco.rest.rm.community.model.record.Record;
|
||||
import org.alfresco.rest.v0.RMRolesAndActionsAPI;
|
||||
import org.alfresco.rest.v0.RecordsAPI;
|
||||
import org.alfresco.test.AlfrescoTest;
|
||||
import org.alfresco.utility.constants.UserRole;
|
||||
import org.alfresco.utility.model.FileModel;
|
||||
import org.alfresco.utility.model.FolderModel;
|
||||
import org.alfresco.utility.model.SiteModel;
|
||||
import org.alfresco.utility.model.UserModel;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.testng.annotations.AfterClass;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.Test;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentAlias.UNFILED_RECORDS_CONTAINER_ALIAS;
|
||||
import static org.alfresco.rest.rm.community.util.CommonTestUtils.generateTestPrefix;
|
||||
import static org.alfresco.utility.report.log.Step.STEP;
|
||||
import static org.springframework.http.HttpStatus.CREATED;
|
||||
import static org.testng.Assert.assertTrue;
|
||||
/**
|
||||
* This class contains the tests for
|
||||
* Create the Document, marking them as Record, Hiding them using Site Collaborator
|
||||
* The Rm_Admin user then verofy if he is able to access the documents using Rest Api
|
||||
*
|
||||
* @author Kavit Shah
|
||||
*/
|
||||
public class DeclareInPlaceRecordTests extends BaseRMRestTest {
|
||||
|
||||
private final String TEST_PREFIX = generateTestPrefix(DeclareInPlaceRecordTests.class);
|
||||
private final String RM_ADMIN = TEST_PREFIX + "rm_admin";
|
||||
private UserModel testUser;
|
||||
private UserModel RmAdminUser;
|
||||
private SiteModel testSite;
|
||||
private FolderModel testFolder;
|
||||
/**
|
||||
* data prep services
|
||||
*/
|
||||
@Autowired
|
||||
private RMRolesAndActionsAPI rmRolesAndActionsAPI;
|
||||
@Autowired
|
||||
private RecordsAPI recordsAPI;
|
||||
|
||||
@BeforeClass(alwaysRun = true)
|
||||
public void preConditions() {
|
||||
STEP("Create RM Site");
|
||||
createRMSiteIfNotExists();
|
||||
|
||||
STEP("Create RM Admin user");
|
||||
rmRolesAndActionsAPI.createUserAndAssignToRole(getAdminUser().getUsername(), getAdminUser().getPassword(), RM_ADMIN,
|
||||
getAdminUser().getPassword(),
|
||||
"Administrator");
|
||||
|
||||
RmAdminUser = new UserModel(RM_ADMIN,getAdminUser().getPassword());
|
||||
|
||||
STEP("Create collab_user user");
|
||||
testUser = getDataUser().createRandomTestUser();
|
||||
testSite = dataSite.usingAdmin().createPublicRandomSite();
|
||||
|
||||
// invite collab_user to Collaboration site with Contributor role
|
||||
getDataUser().addUserToSite(testUser, testSite, UserRole.SiteContributor);
|
||||
|
||||
testFolder = dataContent.usingSite(testSite).usingUser(testUser).createFolder();
|
||||
}
|
||||
|
||||
@Test
|
||||
@AlfrescoTest(jira = "RM-2366")
|
||||
public void declareInplaceRecord() {
|
||||
|
||||
// Upload document in a folder in a collaboration site
|
||||
FileModel uploadedDocHidden = dataContent.usingSite(testSite)
|
||||
.usingUser(testUser)
|
||||
.usingResource(testFolder)
|
||||
.createContent(CMISUtil.DocumentType.TEXT_PLAIN);
|
||||
|
||||
// declare uploadedDocument as record
|
||||
Record uploadedRecordHidden = getRestAPIFactory().getFilesAPI(testUser).declareAsRecord(uploadedDocHidden.getNodeRefWithoutVersion());
|
||||
assertStatusCode(CREATED);
|
||||
|
||||
recordsAPI.hideRecord(testUser.getUsername(),testUser.getPassword(),uploadedRecordHidden.getId());
|
||||
|
||||
// Upload document in a folder in a collaboration site
|
||||
FileModel uploadedDocWithoutHidden = dataContent.usingSite(testSite)
|
||||
.usingUser(testUser)
|
||||
.usingResource(testFolder)
|
||||
.createContent(CMISUtil.DocumentType.TEXT_PLAIN);
|
||||
|
||||
Record uploadedRecordWithoutHidden = getRestAPIFactory().getFilesAPI(testUser).declareAsRecord(uploadedDocWithoutHidden.getNodeRefWithoutVersion());
|
||||
assertStatusCode(CREATED);
|
||||
|
||||
assertTrue(isRecordChildOfUnfiledContainer(uploadedRecordHidden.getId()), uploadedRecordHidden.getId() + " doesn't exist in Unfiled Records");
|
||||
assertTrue(isRecordChildOfUnfiledContainer(uploadedRecordWithoutHidden.getId()), uploadedRecordWithoutHidden.getId() + " doesn't exist in Unfiled Records");
|
||||
}
|
||||
|
||||
@AfterClass(alwaysRun = true)
|
||||
public void deletePreConditions() {
|
||||
STEP("Delete the records created in the test");
|
||||
getRestAPIFactory()
|
||||
.getUnfiledContainersAPI(RmAdminUser)
|
||||
.getUnfiledContainerChildren(UNFILED_RECORDS_CONTAINER_ALIAS)
|
||||
.getEntries()
|
||||
.stream()
|
||||
.forEach(x -> getRestAPIFactory()
|
||||
.getRecordsAPI()
|
||||
.deleteRecord(x.getEntry().getId()));
|
||||
|
||||
}
|
||||
|
||||
private boolean isRecordChildOfUnfiledContainer(String recordId) {
|
||||
return getRestAPIFactory()
|
||||
.getUnfiledContainersAPI(RmAdminUser)
|
||||
.getUnfiledContainerChildren(UNFILED_RECORDS_CONTAINER_ALIAS)
|
||||
.getEntries()
|
||||
.stream()
|
||||
.anyMatch(c -> c.getEntry().getId().equals(recordId));
|
||||
}
|
||||
}
|
@@ -0,0 +1,226 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
package org.alfresco.rest.rm.community.records;
|
||||
|
||||
import org.alfresco.dataprep.CMISUtil;
|
||||
import org.alfresco.rest.core.v0.BaseAPI;
|
||||
import org.alfresco.rest.model.RestNodeModel;
|
||||
import org.alfresco.rest.rm.community.base.BaseRMRestTest;
|
||||
import org.alfresco.rest.rm.community.model.record.Record;
|
||||
import org.alfresco.rest.rm.community.model.recordcategory.RecordCategory;
|
||||
import org.alfresco.rest.rm.community.model.recordcategory.RecordCategoryChild;
|
||||
import org.alfresco.rest.rm.community.requests.gscore.api.RecordFolderAPI;
|
||||
import org.alfresco.rest.rm.community.requests.gscore.api.UnfiledRecordFolderAPI;
|
||||
import org.alfresco.rest.v0.RMRolesAndActionsAPI;
|
||||
import org.alfresco.rest.v0.RecordsAPI;
|
||||
import org.alfresco.test.AlfrescoTest;
|
||||
import org.alfresco.utility.constants.UserRole;
|
||||
import org.alfresco.utility.model.FileModel;
|
||||
import org.alfresco.utility.model.SiteModel;
|
||||
import org.alfresco.utility.model.UserModel;
|
||||
import org.apache.chemistry.opencmis.client.api.CmisObject;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.testng.annotations.AfterClass;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.alfresco.rest.core.v0.APIUtils.convertHTTPResponseToJSON;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentAlias.UNFILED_RECORDS_CONTAINER_ALIAS;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.UNFILED_RECORD_FOLDER_TYPE;
|
||||
import static org.alfresco.rest.rm.community.util.CommonTestUtils.generateTestPrefix;
|
||||
import static org.alfresco.rest.rm.community.utils.CoreUtil.createBodyForMoveCopy;
|
||||
import static org.alfresco.rest.rm.community.utils.CoreUtil.toContentModel;
|
||||
import static org.alfresco.utility.data.RandomData.getRandomAlphanumeric;
|
||||
import static org.alfresco.utility.data.RandomData.getRandomName;
|
||||
import static org.alfresco.utility.report.log.Step.STEP;
|
||||
import static org.springframework.http.HttpStatus.CREATED;
|
||||
|
||||
public class FileUnfiledRecordsTests extends BaseRMRestTest {
|
||||
|
||||
private final String TEST_PREFIX = generateTestPrefix(FileUnfiledRecordsTests.class);
|
||||
private final String RM_ADMIN = TEST_PREFIX + "rm_admin";
|
||||
public static final String NODE_REF_WORKSPACE_SPACES_STORE = "workspace://SpacesStore/";
|
||||
private UserModel testUser;
|
||||
private SiteModel testSite;
|
||||
private String unfiledRecordFolderId;
|
||||
private UserModel RmAdminUser;
|
||||
private RecordCategory rootCategory;
|
||||
private RecordCategoryChild recordFolder;
|
||||
private final String recordName = "RM-2790 record";
|
||||
private final String recordTitle = recordName + " title";
|
||||
private final String recordDescription = recordName + " description";
|
||||
/**
|
||||
* data prep services
|
||||
*/
|
||||
@Autowired
|
||||
private RMRolesAndActionsAPI rmRolesAndActionsAPI;
|
||||
@Autowired
|
||||
private RecordsAPI recordsAPI;
|
||||
|
||||
@BeforeClass(alwaysRun = true)
|
||||
public void preConditions() {
|
||||
|
||||
STEP("Create RM Site");
|
||||
createRMSiteIfNotExists();
|
||||
|
||||
STEP("Create RM Admin user");
|
||||
rmRolesAndActionsAPI.createUserAndAssignToRole(getAdminUser().getUsername(), getAdminUser().getPassword(), RM_ADMIN,
|
||||
getAdminUser().getPassword(),
|
||||
"Administrator");
|
||||
|
||||
RmAdminUser = new UserModel(RM_ADMIN, getAdminUser().getPassword());
|
||||
|
||||
STEP("Create collab_user user");
|
||||
testUser = getDataUser().createRandomTestUser();
|
||||
testSite = dataSite.usingAdmin().createPublicRandomSite();
|
||||
|
||||
// invite collab_user to Collaboration site with Contributor role
|
||||
getDataUser().addUserToSite(testUser, testSite, UserRole.SiteContributor);
|
||||
}
|
||||
|
||||
@Test
|
||||
@AlfrescoTest(jira = "RM-2790")
|
||||
public void fileUnfiledRecords() throws Exception {
|
||||
|
||||
STEP("Upload the document to test site and then make it reacord");
|
||||
// Upload document in a folder in a collaboration site
|
||||
FileModel uploadedDocbyCollabUser = dataContent.usingSite(testSite)
|
||||
.usingUser(testUser)
|
||||
.createContent(CMISUtil.DocumentType.TEXT_PLAIN);
|
||||
|
||||
// declare uploadedDocument as record
|
||||
Record uploadedDocRecordbyCollabUser = getRestAPIFactory().getFilesAPI(testUser)
|
||||
.declareAsRecord(uploadedDocbyCollabUser.getNodeRefWithoutVersion());
|
||||
assertStatusCode(CREATED);
|
||||
|
||||
STEP("Create root level category");
|
||||
rootCategory = createRootCategory(RmAdminUser, getRandomName("Category"));
|
||||
|
||||
STEP("Create the record folder inside the rootCategory");
|
||||
recordFolder = createFolder(RmAdminUser, rootCategory.getId(), getRandomName("Folder"));
|
||||
|
||||
STEP("Create a non-electronic record by completing some of the fields");
|
||||
Map<Enum<?>, String> non_electronic_records_properties = new HashMap<>();
|
||||
non_electronic_records_properties.put(BaseAPI.RMProperty.TITLE, recordTitle);
|
||||
non_electronic_records_properties.put(BaseAPI.RMProperty.DESCRIPTION, recordDescription);
|
||||
non_electronic_records_properties.put(BaseAPI.RMProperty.NAME, recordName);
|
||||
non_electronic_records_properties.put(BaseAPI.RMProperty.PHYSICAL_SIZE, "");
|
||||
non_electronic_records_properties.put(BaseAPI.RMProperty.NUMBER_OF_COPIES, "");
|
||||
non_electronic_records_properties.put(BaseAPI.RMProperty.SHELF, "");
|
||||
non_electronic_records_properties.put(BaseAPI.RMProperty.STORAGE_LOCATION, "");
|
||||
non_electronic_records_properties.put(BaseAPI.RMProperty.BOX, "");
|
||||
non_electronic_records_properties.put(BaseAPI.RMProperty.FILE, "");
|
||||
|
||||
HttpResponse nonElectronicRecordHttpResponse = recordsAPI.createNonElectronicRecord(getAdminUser().getUsername(),
|
||||
getAdminUser().getPassword(), non_electronic_records_properties, rootCategory.getName(), recordFolder.getName());
|
||||
|
||||
String nonElectronicRecordId = getNodeRef(nonElectronicRecordHttpResponse);
|
||||
|
||||
STEP("Check the non-electronic record has been created");
|
||||
assertStatusCode(CREATED);
|
||||
|
||||
STEP("Create a electronic record by completing some of the fields");
|
||||
Map<BaseAPI.RMProperty, String> electronic_records_properties = new HashMap<>();
|
||||
electronic_records_properties.put(BaseAPI.RMProperty.DESCRIPTION, recordDescription);
|
||||
electronic_records_properties.put(BaseAPI.RMProperty.NAME, recordName);
|
||||
|
||||
recordsAPI.uploadElectronicRecord(RmAdminUser.getUsername(),
|
||||
RmAdminUser.getPassword(), electronic_records_properties, recordFolder.getName(), CMISUtil.DocumentType.TEXT_PLAIN);
|
||||
|
||||
CmisObject electronicRecord = recordsAPI.getRecord(RmAdminUser.getUsername(),
|
||||
RmAdminUser.getPassword(),recordFolder.getName(), electronic_records_properties.get(BaseAPI.RMProperty.NAME));
|
||||
|
||||
STEP("Check the electronic record has been created");
|
||||
assertStatusCode(CREATED);
|
||||
|
||||
STEP("Create a root folder under FilePlan - Unfiled");
|
||||
String unFiledFolder = createUnFileFolder();
|
||||
|
||||
STEP("Move all the Unfiled Records to unFiledFolder");
|
||||
RestNodeModel uploadDocRestNodeModel = getRestAPIFactory()
|
||||
.getNodeAPI(toContentModel(uploadedDocRecordbyCollabUser.getId()))
|
||||
.move(createBodyForMoveCopy(unFiledFolder));
|
||||
|
||||
RestNodeModel nonElectronicDocRestNodeModel = getRestAPIFactory()
|
||||
.getNodeAPI(toContentModel(nonElectronicRecordId))
|
||||
.move(createBodyForMoveCopy(unFiledFolder));
|
||||
|
||||
RestNodeModel electronicDocRestNodeModel = getRestAPIFactory()
|
||||
.getNodeAPI(toContentModel(electronicRecord.getId()))
|
||||
.move(createBodyForMoveCopy(unFiledFolder));
|
||||
|
||||
STEP("Move all the Record present in the unFiledFolder to Folder inside Root Category");
|
||||
|
||||
getRestAPIFactory()
|
||||
.getNodeAPI(toContentModel(uploadDocRestNodeModel.getId()))
|
||||
.move(createBodyForMoveCopy(recordFolder.getId()));
|
||||
|
||||
getRestAPIFactory()
|
||||
.getNodeAPI(toContentModel(nonElectronicDocRestNodeModel.getId()))
|
||||
.move(createBodyForMoveCopy(recordFolder.getId()));
|
||||
|
||||
getRestAPIFactory()
|
||||
.getNodeAPI(toContentModel(electronicDocRestNodeModel.getId()))
|
||||
.move(createBodyForMoveCopy(recordFolder.getId()));
|
||||
|
||||
getRestAPIFactory().getRecordsAPI().deleteRecord(uploadDocRestNodeModel.getId());
|
||||
getRestAPIFactory().getRecordsAPI().deleteRecord(nonElectronicDocRestNodeModel.getId());
|
||||
getRestAPIFactory().getRecordsAPI().deleteRecord(electronicDocRestNodeModel.getId());
|
||||
|
||||
UnfiledRecordFolderAPI unfiledRecordFoldersAPI = getRestAPIFactory().getUnfiledRecordFoldersAPI();
|
||||
unfiledRecordFoldersAPI.deleteUnfiledRecordFolder(unFiledFolder);
|
||||
|
||||
RecordFolderAPI recordFolderAPI = getRestAPIFactory().getRecordFolderAPI();
|
||||
String recordFolderId = recordFolder.getId();
|
||||
recordFolderAPI.deleteRecordFolder(recordFolderId);
|
||||
}
|
||||
|
||||
@AfterClass (alwaysRun = true)
|
||||
public void deletePreConditions()
|
||||
{
|
||||
STEP("Delete the created rootCategory along with corresponding record folders/records present in it");
|
||||
getRestAPIFactory().getRecordCategoryAPI().deleteRecordCategory(rootCategory.getId());
|
||||
}
|
||||
|
||||
private String createUnFileFolder() {
|
||||
String categoryName = "RM-2790 record Category name " + getRandomAlphanumeric();
|
||||
|
||||
unfiledRecordFolderId = createUnfiledContainerChild(UNFILED_RECORDS_CONTAINER_ALIAS,
|
||||
categoryName + getRandomAlphanumeric(), UNFILED_RECORD_FOLDER_TYPE).getId();
|
||||
return unfiledRecordFolderId;
|
||||
}
|
||||
|
||||
private String getNodeRef(HttpResponse httpResponse) {
|
||||
return convertHTTPResponseToJSON(httpResponse).getString("persistedObject")
|
||||
.replace(NODE_REF_WORKSPACE_SPACES_STORE, "");
|
||||
}
|
||||
}
|
@@ -0,0 +1,179 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
package org.alfresco.rest.rm.community.records;
|
||||
|
||||
import org.alfresco.dataprep.CMISUtil;
|
||||
import org.alfresco.rest.rm.community.base.BaseRMRestTest;
|
||||
import org.alfresco.rest.rm.community.model.record.Record;
|
||||
import org.alfresco.rest.v0.RecordsAPI;
|
||||
import org.alfresco.utility.Utility;
|
||||
import org.alfresco.utility.constants.UserRole;
|
||||
import org.alfresco.utility.model.FileModel;
|
||||
import org.alfresco.utility.model.SiteModel;
|
||||
import org.alfresco.utility.model.UserModel;
|
||||
import org.json.JSONObject;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.testng.annotations.AfterClass;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import static org.alfresco.utility.report.log.Step.STEP;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.springframework.http.HttpStatus.CREATED;
|
||||
import static org.springframework.test.util.AssertionErrors.assertTrue;
|
||||
import static org.testng.Assert.fail;
|
||||
|
||||
public class InplaceRecordSearchTests extends BaseRMRestTest {
|
||||
|
||||
private UserModel siteCollaborator, siteConsumer, nonSiteMember;
|
||||
private SiteModel privateSite;
|
||||
private Record uploadedDocRecordbyCollabUser;
|
||||
private FileModel uploadedDocbyCollabUser;
|
||||
@Autowired
|
||||
private RecordsAPI recordsAPI;
|
||||
|
||||
@BeforeClass(alwaysRun = true)
|
||||
public void preConditions() {
|
||||
|
||||
STEP("Create RM Site");
|
||||
createRMSiteIfNotExists();
|
||||
|
||||
// And a private collaboration site
|
||||
privateSite = dataSite.usingAdmin().createPrivateRandomSite();
|
||||
|
||||
// And a site collaborator
|
||||
siteCollaborator = getDataUser().createRandomTestUser();
|
||||
getDataUser().addUserToSite(siteCollaborator, privateSite, UserRole.SiteCollaborator);
|
||||
|
||||
// And a site consumer
|
||||
siteConsumer = getDataUser().createRandomTestUser();
|
||||
getDataUser().addUserToSite(siteConsumer, privateSite, UserRole.SiteConsumer);
|
||||
|
||||
nonSiteMember = getDataUser().createRandomTestUser();
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a RM site
|
||||
* And a private collaboration site
|
||||
* And a site collaborator
|
||||
* And a site consumer
|
||||
* And a user who is not a member of the site
|
||||
* And a document that isn't a record
|
||||
* When the collaborator declares it as a record
|
||||
* Then the collaborator can browse to the record in the document library
|
||||
* And can find the record using live search
|
||||
* And can find the record using advanced search
|
||||
* And the consumer can browse to the record in the document library
|
||||
* And can find the record using live search
|
||||
* And can find the record using advanced search
|
||||
* And the user who is not a member of the site can't find the record using live search
|
||||
* And can't find the record using advanced search
|
||||
*/
|
||||
@Test
|
||||
public void searchForInplaceRecord() {
|
||||
// And a document that isn't a record
|
||||
uploadedDocbyCollabUser = dataContent.usingSite(privateSite)
|
||||
.usingUser(siteCollaborator)
|
||||
.createContent(CMISUtil.DocumentType.TEXT_PLAIN);
|
||||
|
||||
assertNotNull(uploadedDocbyCollabUser.getNodeRef());
|
||||
|
||||
// declare uploadedDocument as record
|
||||
uploadedDocRecordbyCollabUser = getRestAPIFactory().getFilesAPI(siteCollaborator)
|
||||
.declareAsRecord(uploadedDocbyCollabUser.getNodeRefWithoutVersion());
|
||||
assertStatusCode(CREATED);
|
||||
|
||||
assertNotNull(uploadedDocRecordbyCollabUser.getId());
|
||||
|
||||
STEP("Allow the Document to be index for it to be available");
|
||||
|
||||
try
|
||||
{
|
||||
Utility.sleep(1000, 40000, () ->
|
||||
{
|
||||
JSONObject siteConsumerSearchJson = getSearchApi().liveSearchForDocuments(siteConsumer.getUsername(),
|
||||
siteConsumer.getPassword(),
|
||||
uploadedDocbyCollabUser.getName());
|
||||
assertTrue("Site Consumer not able to find the document.",siteConsumerSearchJson.getJSONArray("items").length() != 0);
|
||||
});
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
{
|
||||
fail("InterruptedException received while waiting for results.");
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
Utility.sleep(1000, 40000, () ->
|
||||
{
|
||||
JSONObject siteCollaboratorSearchJson = getSearchApi().liveSearchForDocuments(siteCollaborator.getUsername(),
|
||||
siteCollaborator.getPassword(),
|
||||
uploadedDocbyCollabUser.getName());
|
||||
assertTrue("Site Collaborator not able to find the document.",siteCollaboratorSearchJson.getJSONArray("items").length() != 0);
|
||||
});
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
{
|
||||
fail("InterruptedException received while waiting for results.");
|
||||
}
|
||||
|
||||
JSONObject nonSiteMemberSearchJson = getSearchApi().liveSearchForDocuments(nonSiteMember.getUsername(),
|
||||
nonSiteMember.getPassword(),
|
||||
uploadedDocbyCollabUser.getName());
|
||||
|
||||
assertTrue("Non Site Member is able to access restricted document.",nonSiteMemberSearchJson.getJSONArray("items").isEmpty());
|
||||
}
|
||||
|
||||
/**
|
||||
* Given @see {@link #searchForInplaceRecord()}
|
||||
* When the collaboration user hides the record in the collaboration site
|
||||
* Then the collaborator can not browse to the record in the document library
|
||||
* And can't find the record using live search
|
||||
* And can't find the record using advanced search
|
||||
*/
|
||||
@Test(dependsOnMethods = {"searchForInplaceRecord"})
|
||||
public void usersCantFindRecordAfterHide() {
|
||||
recordsAPI.hideRecord(siteCollaborator.getUsername(),siteCollaborator.getPassword(),uploadedDocRecordbyCollabUser.getId());
|
||||
|
||||
JSONObject siteCollaboratorSearchJson = getSearchApi().liveSearchForDocuments(siteCollaborator.getUsername(),
|
||||
siteCollaborator.getPassword(),
|
||||
uploadedDocbyCollabUser.getName());
|
||||
assertTrue("Site Collaborator able to find the document after it is hidden.",siteCollaboratorSearchJson.getJSONArray("items").isEmpty());
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public void tearDown() {
|
||||
// clean-up collab site
|
||||
dataSite.usingAdmin().deleteSite(privateSite);
|
||||
|
||||
// clean-up users siteCollaborator, siteConsumer, nonSiteMember
|
||||
dataUser.deleteUser(siteCollaborator);
|
||||
dataUser.deleteUser(siteConsumer);
|
||||
dataUser.deleteUser(nonSiteMember);
|
||||
}
|
||||
}
|
@@ -0,0 +1,539 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
package org.alfresco.rest.rm.community.records;
|
||||
|
||||
import org.alfresco.dataprep.CMISUtil;
|
||||
import org.alfresco.rest.core.v0.BaseAPI;
|
||||
import org.alfresco.rest.rm.community.base.BaseRMRestTest;
|
||||
import org.alfresco.rest.rm.community.model.record.RecordContent;
|
||||
import org.alfresco.rest.rm.community.model.recordcategory.RecordCategory;
|
||||
import org.alfresco.rest.rm.community.model.recordcategory.RecordCategoryChild;
|
||||
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChild;
|
||||
import org.alfresco.rest.rm.community.requests.gscore.api.UnfiledContainerAPI;
|
||||
import org.alfresco.rest.v0.RMRolesAndActionsAPI;
|
||||
import org.alfresco.rest.v0.RecordsAPI;
|
||||
import org.alfresco.rest.v0.SearchAPI;
|
||||
import org.alfresco.utility.Utility;
|
||||
import org.alfresco.utility.model.UserModel;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.json.JSONObject;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.testng.annotations.AfterClass;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.Test;
|
||||
import org.json.JSONArray;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.HashMap;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.IntStream;
|
||||
import static org.alfresco.rest.rm.community.base.TestData.ELECTRONIC_RECORD_NAME;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentAlias.UNFILED_RECORDS_CONTAINER_ALIAS;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.CONTENT_TYPE;
|
||||
import static org.alfresco.rest.rm.community.model.user.UserPermissions.*;
|
||||
import static org.alfresco.rest.rm.community.util.CommonTestUtils.generateTestPrefix;
|
||||
import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.createTempFile;
|
||||
import static org.alfresco.utility.report.log.Step.STEP;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.fail;
|
||||
import static org.testng.Assert.assertTrue;
|
||||
/**
|
||||
* Tests the search of records in Records Search page
|
||||
* @author Kavit Shah
|
||||
*/
|
||||
public class SearchRecordsTests extends BaseRMRestTest {
|
||||
|
||||
private Optional<UserModel> nonRmSiteUser, rm_user_search, rm_manager, rm_admin_search;
|
||||
|
||||
/** The default password used when creating test users. */
|
||||
public static final String ROLE_RM_MANAGER = "RecordsManager";
|
||||
private final String TEST_PREFIX = generateTestPrefix(SearchRecordsTests.class);
|
||||
private final String CATEGORY_ALL = TEST_PREFIX + "everybody's category";
|
||||
private final String FOLDER_SEARCH = TEST_PREFIX + "basic search folder";
|
||||
private final String FOLDER_ADMIN_ONLY = TEST_PREFIX + "rm admin category";
|
||||
private final String CATEGORY_ADMIN_ONLY = TEST_PREFIX + "rm admin category";
|
||||
public static final String ROLE_RM_USER = "User";
|
||||
public static final String ADMIN = "Administrator";
|
||||
private final String ELECTRONIC_RECORD = TEST_PREFIX + " Electronic";
|
||||
private final String UNFILED_ELECTRONIC_RECORD = TEST_PREFIX + " Unfiled Electronic";
|
||||
private final String NON_ELECTRONIC_RECORD = TEST_PREFIX + " Non-Electronic";
|
||||
private final String ADMIN_ELECTRONIC_RECORD = TEST_PREFIX + " admin Electronic";
|
||||
public static final String TITLE = "Title";
|
||||
public static final String DESCRIPTION = "Description";
|
||||
public static final String TEST_CONTENT = "This is some test content";
|
||||
private RecordCategory categoryAll, category_Admin_Only;
|
||||
@Autowired
|
||||
private RMRolesAndActionsAPI rmRolesAndActionsAPI;
|
||||
@Autowired
|
||||
private SearchAPI searchAPI;
|
||||
@Autowired
|
||||
private RecordsAPI recordsAPI;
|
||||
|
||||
@BeforeClass (alwaysRun = true)
|
||||
public void createRecordsForSearch()
|
||||
{
|
||||
createRMSiteIfNotExists();
|
||||
nonRmSiteUser = Optional.ofNullable(getDataUser().createRandomTestUser());
|
||||
// create RM manager and RM user
|
||||
createRMManager();
|
||||
createRMUser();
|
||||
createRMAdmin();
|
||||
categoryAll = createCategoryIfDoesNotExist(CATEGORY_ALL);
|
||||
createRecordFolderInCategory(FOLDER_SEARCH, categoryAll);
|
||||
|
||||
category_Admin_Only = createCategoryIfDoesNotExist(CATEGORY_ADMIN_ONLY);
|
||||
createRecordFolderInCategory(FOLDER_ADMIN_ONLY,category_Admin_Only);
|
||||
|
||||
// upload records in folder in category and in Unfiled Records
|
||||
uploadElectronicRecordInContainer(ELECTRONIC_RECORD, FOLDER_SEARCH);
|
||||
createNonElectronicRecordInContainer(NON_ELECTRONIC_RECORD, CATEGORY_ALL, FOLDER_SEARCH);
|
||||
uploadElectronicRecordInContainer(ADMIN_ELECTRONIC_RECORD, FOLDER_ADMIN_ONLY);
|
||||
|
||||
UnfiledContainerChild electronicRecord = UnfiledContainerChild.builder()
|
||||
.name(UNFILED_ELECTRONIC_RECORD)
|
||||
.nodeType(CONTENT_TYPE)
|
||||
.content(RecordContent.builder().mimeType("text/plain").build())
|
||||
.build();
|
||||
getRecordsFromUnfiledRecordsContainer(electronicRecord);
|
||||
}
|
||||
|
||||
/**
|
||||
* Given I have created record category X which contains record folder Y which contains record Z
|
||||
* And I have selected to display record category id in the search results
|
||||
* When I issue a record search whose results will contain record X
|
||||
* Then record X is displayed in the results
|
||||
* And the record category X's ID is also displayed in search result meta-data for record X
|
||||
*/
|
||||
@Test(priority = 1)
|
||||
public void searchResultsWithRecordCategoryIdentifier() {
|
||||
AtomicBoolean electronicRecordFound = new AtomicBoolean(false);
|
||||
AtomicReference<JSONArray> items = new AtomicReference<>();
|
||||
AtomicBoolean recordCategoryIdentifier = new AtomicBoolean(false);
|
||||
|
||||
STEP("Open the record search page and search by the items created");
|
||||
try {
|
||||
Utility.sleep(1000, 40000, () -> {
|
||||
JSONObject searchResult = (searchAPI
|
||||
.rmSearch(getDataUser().usingAdmin().getAdminUser().getUsername(),
|
||||
getDataUser().usingAdmin().getAdminUser().getPassword(),
|
||||
"rm",
|
||||
"keywords:" + TEST_PREFIX + "*",
|
||||
"records/true,undeclared/true,vital/false,folders/false,categories/false,frozen/false,cutoff/false",
|
||||
"rma:identifier/asc"));
|
||||
items.set((JSONArray) searchResult.get("items"));
|
||||
assertFalse("Site Consumer not able to find the document.", ((JSONArray)searchResult.get("items")).isEmpty());
|
||||
});
|
||||
}
|
||||
catch (InterruptedException e) {
|
||||
fail("InterruptedException received while waiting for results.");
|
||||
}
|
||||
|
||||
STEP("Check that the records from file plan have the record category identifier displayed");
|
||||
List searchList = IntStream.range(0, items.get().length()).mapToObj(i-> items.get().get(i)).collect(Collectors.toList());
|
||||
|
||||
searchList.stream().forEach(x -> {
|
||||
Map<String, String> reconstructedUtilMap = Arrays.stream(x.toString().split(","))
|
||||
.map(s -> s.split(":"))
|
||||
.collect(Collectors.toMap(s -> s[0], s -> s[1]));
|
||||
if(reconstructedUtilMap.get("\"name\"").contains(TEST_PREFIX + " Electronic")) {
|
||||
electronicRecordFound.set(true);
|
||||
}
|
||||
});
|
||||
assertFalse("The File Name with the Prefix " + TEST_PREFIX + " as Electronic Record was not found.", !electronicRecordFound.get());
|
||||
|
||||
STEP("Change the search filter to return only record folders and record categories");
|
||||
try {
|
||||
Utility.sleep(1000, 40000, () -> {
|
||||
JSONObject searchResult = (searchAPI
|
||||
.rmSearch(getDataUser().usingAdmin().getAdminUser().getUsername(),
|
||||
getDataUser().usingAdmin().getAdminUser().getPassword(),
|
||||
"rm",
|
||||
"keywords:" + TEST_PREFIX + "*",
|
||||
"records/false,undeclared/true,vital/false,folders/true,categories/true,frozen/false,cutoff/false",
|
||||
"rma:identifier/asc"));
|
||||
items.set((JSONArray) searchResult.get("items"));
|
||||
assertFalse("Site Consumer not able to find the document.", ((JSONArray)searchResult.get("items")).isEmpty());
|
||||
});
|
||||
}
|
||||
catch (InterruptedException e) {
|
||||
fail("InterruptedException received while waiting for results.");
|
||||
}
|
||||
STEP("Check that the records folders and categories don't have a record category identifier displayed");
|
||||
List recordFolderSearchList = IntStream.range(0, items.get().length()).mapToObj(i-> items.get().get(i)).collect(Collectors.toList());
|
||||
|
||||
recordFolderSearchList.stream().forEach(x -> {
|
||||
Map<String, String> reconstructedUtilMap = Arrays.stream(x.toString().split(","))
|
||||
.map(s -> s.split(":"))
|
||||
.collect(Collectors.toMap(s -> s[0], s -> s[1]));
|
||||
if(null != reconstructedUtilMap.get("\"rma_recordCategoryIdentifier\"")) {
|
||||
recordCategoryIdentifier.set(true);
|
||||
}
|
||||
});
|
||||
assertFalse("Record Category Identifier displayed for " + TEST_PREFIX + ".", recordCategoryIdentifier.get());
|
||||
}
|
||||
|
||||
/**
|
||||
* User with RM User role can see the records he has permission over and all in Unfiled Records
|
||||
* <p>
|
||||
* Given that I am a RM User
|
||||
* I can see only the records in File Plan I have permission over and all in Unfiled Records
|
||||
*/
|
||||
@Test (priority = 2)
|
||||
public void nonRMUserSearchResults() {
|
||||
try {
|
||||
Utility.sleep(1000, 40000, () -> {
|
||||
List<String> stringList = (searchAPI
|
||||
.searchForDocumentsAsUser(nonRmSiteUser.get().getUsername(),
|
||||
nonRmSiteUser.get().getPassword(),
|
||||
ELECTRONIC_RECORD));
|
||||
assertFalse("The file with search term " + ELECTRONIC_RECORD + " was found using RM Not Site User "+ nonRmSiteUser.get().getUsername(),getResult(ELECTRONIC_RECORD,stringList));
|
||||
});
|
||||
}
|
||||
catch (InterruptedException e) {
|
||||
fail("InterruptedException received while waiting for results.");
|
||||
}
|
||||
|
||||
try {
|
||||
Utility.sleep(1000, 40000, () -> {
|
||||
List<String> stringList = (searchAPI
|
||||
.searchForDocumentsAsUser(nonRmSiteUser.get().getUsername(),
|
||||
nonRmSiteUser.get().getPassword(),
|
||||
UNFILED_ELECTRONIC_RECORD));
|
||||
assertFalse("The file with search term " + UNFILED_ELECTRONIC_RECORD + " was not found using RM Not Site User "+ nonRmSiteUser.get().getUsername(),getResult(UNFILED_ELECTRONIC_RECORD,stringList));
|
||||
});
|
||||
}
|
||||
catch (InterruptedException e) {
|
||||
fail("InterruptedException received while waiting for results.");
|
||||
}
|
||||
|
||||
try {
|
||||
Utility.sleep(1000, 40000, () -> {
|
||||
List<String> stringList = (searchAPI
|
||||
.searchForDocumentsAsUser(nonRmSiteUser.get().getUsername(),
|
||||
nonRmSiteUser.get().getPassword(),
|
||||
NON_ELECTRONIC_RECORD));
|
||||
assertFalse("The file with search term " + NON_ELECTRONIC_RECORD + " was not found using RM Not Site User "+ nonRmSiteUser.get().getUsername(),getResult(NON_ELECTRONIC_RECORD,stringList));
|
||||
});
|
||||
}
|
||||
catch (InterruptedException e) {
|
||||
fail("InterruptedException received while waiting for results.");
|
||||
}
|
||||
|
||||
try {
|
||||
Utility.sleep(1000, 40000, () -> {
|
||||
List<String> stringList = searchAPI
|
||||
.searchForDocumentsAsUser(nonRmSiteUser.get().getUsername(),
|
||||
nonRmSiteUser.get().getPassword(),
|
||||
ADMIN_ELECTRONIC_RECORD);
|
||||
assertFalse("The file with search term " + ADMIN_ELECTRONIC_RECORD + " was not found using RM Not Site User "+ nonRmSiteUser.get().getUsername(),getResult(ADMIN_ELECTRONIC_RECORD,stringList));
|
||||
});
|
||||
}
|
||||
catch (InterruptedException e) {
|
||||
fail("InterruptedException received while waiting for results.");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* User with RM User role can see the records he has permission over and all in Unfiled Records
|
||||
* <p>
|
||||
* Given that I am a RM User
|
||||
* I can see only the records in File Plan I have permission over and all in Unfiled Records
|
||||
*/
|
||||
@Test (priority = 3)
|
||||
public void rmUserSearchResults() {
|
||||
getRestAPIFactory().getRMUserAPI().addUserPermission(categoryAll.getId(), rm_user_search.get(), PERMISSION_READ_RECORDS);
|
||||
getRestAPIFactory().getRMUserAPI().addUserPermission(categoryAll.getId(), rm_user_search.get(), PERMISSION_FILE_RECORDS);
|
||||
|
||||
try {
|
||||
Utility.sleep(1000, 40000, () -> {
|
||||
List<String> stringList = (searchAPI
|
||||
.searchForDocumentsAsUser(rm_user_search.get().getUsername(),
|
||||
rm_user_search.get().getPassword(),
|
||||
ELECTRONIC_RECORD));
|
||||
assertTrue(getResult(ELECTRONIC_RECORD,stringList),"The file with search term" + ELECTRONIC_RECORD + " was not found using RM User "+ rm_user_search.get().getUsername());
|
||||
});
|
||||
}
|
||||
catch (InterruptedException e) {
|
||||
fail("InterruptedException received while waiting for results.");
|
||||
}
|
||||
|
||||
try {
|
||||
Utility.sleep(1000, 40000, () -> {
|
||||
List<String> stringList = (searchAPI
|
||||
.searchForDocumentsAsUser(rm_user_search.get().getUsername(),
|
||||
rm_user_search.get().getPassword(),
|
||||
UNFILED_ELECTRONIC_RECORD));
|
||||
assertTrue(getResult(UNFILED_ELECTRONIC_RECORD,stringList),"The file with search term" + UNFILED_ELECTRONIC_RECORD + " was not found using RM User "+ rm_user_search.get().getUsername());
|
||||
});
|
||||
}
|
||||
catch (InterruptedException e) {
|
||||
fail("InterruptedException received while waiting for results.");
|
||||
}
|
||||
|
||||
try {
|
||||
Utility.sleep(1000, 40000, () -> {
|
||||
List<String> stringList = (searchAPI
|
||||
.searchForDocumentsAsUser(rm_user_search.get().getUsername(),
|
||||
rm_user_search.get().getPassword(),
|
||||
NON_ELECTRONIC_RECORD));
|
||||
assertTrue(getResult(NON_ELECTRONIC_RECORD,stringList),"The file with search term" + NON_ELECTRONIC_RECORD + " was not found using RM User "+ rm_user_search.get().getUsername());
|
||||
});
|
||||
}
|
||||
catch (InterruptedException e) {
|
||||
fail("InterruptedException received while waiting for results.");
|
||||
}
|
||||
|
||||
try {
|
||||
Utility.sleep(1000, 40000, () -> {
|
||||
List<String> stringList = searchAPI
|
||||
.searchForDocumentsAsUser(rm_user_search.get().getUsername(),
|
||||
rm_user_search.get().getPassword(),
|
||||
ADMIN_ELECTRONIC_RECORD);
|
||||
assertFalse("The file with search term" + ADMIN_ELECTRONIC_RECORD + " was not found using RM User "+ rm_user_search.get().getUsername(),getResult(ADMIN_ELECTRONIC_RECORD,stringList));
|
||||
});
|
||||
}
|
||||
catch (InterruptedException e) {
|
||||
fail("InterruptedException received while waiting for results.");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* User with RM Manager role can see the records he has permission over and all in Unfiled Records
|
||||
* <p>
|
||||
* Given that I am a RM Manager
|
||||
* I can see only the records in File Plan I have permission over and all in Unfiled Records
|
||||
*/
|
||||
@Test (priority = 4)
|
||||
public void rmManagerSearchResults() {
|
||||
getRestAPIFactory().getRMUserAPI().addUserPermission(categoryAll.getId(), rm_manager.get(), PERMISSION_READ_RECORDS);
|
||||
|
||||
try {
|
||||
Utility.sleep(1000, 40000, () -> {
|
||||
List<String> stringList = (searchAPI
|
||||
.searchForDocumentsAsUser(rm_manager.get().getUsername(),
|
||||
rm_manager.get().getPassword(),
|
||||
ELECTRONIC_RECORD));
|
||||
assertTrue(getResult(ELECTRONIC_RECORD,stringList),"The file with search term " + ELECTRONIC_RECORD + " was not found using RM manager User "+ rm_manager.get().getUsername());
|
||||
});
|
||||
}
|
||||
catch (InterruptedException e) {
|
||||
fail("InterruptedException received while waiting for results.");
|
||||
}
|
||||
|
||||
try {
|
||||
Utility.sleep(1000, 40000, () -> {
|
||||
List<String> stringList = (searchAPI
|
||||
.searchForDocumentsAsUser(rm_manager.get().getUsername(),
|
||||
rm_manager.get().getPassword(),
|
||||
UNFILED_ELECTRONIC_RECORD));
|
||||
assertTrue(getResult(UNFILED_ELECTRONIC_RECORD,stringList),"The file with search term " + UNFILED_ELECTRONIC_RECORD + " was not found using RM manager User "+ rm_manager.get().getUsername());
|
||||
});
|
||||
}
|
||||
catch (InterruptedException e) {
|
||||
fail("InterruptedException received while waiting for results.");
|
||||
}
|
||||
|
||||
try {
|
||||
Utility.sleep(1000, 40000, () -> {
|
||||
List<String> stringList = (searchAPI
|
||||
.searchForDocumentsAsUser(rm_manager.get().getUsername(),
|
||||
rm_manager.get().getPassword(),
|
||||
NON_ELECTRONIC_RECORD));
|
||||
assertTrue(getResult(NON_ELECTRONIC_RECORD,stringList),"The file with search term " + NON_ELECTRONIC_RECORD + " was not found using RM manager User "+ rm_manager.get().getUsername());
|
||||
});
|
||||
}
|
||||
catch (InterruptedException e) {
|
||||
fail("InterruptedException received while waiting for results.");
|
||||
}
|
||||
|
||||
try {
|
||||
Utility.sleep(1000, 40000, () -> {
|
||||
List<String> stringList = searchAPI
|
||||
.searchForDocumentsAsUser(rm_manager.get().getUsername(),
|
||||
rm_manager.get().getPassword(),
|
||||
ADMIN_ELECTRONIC_RECORD);
|
||||
assertFalse("The file with search term" + ADMIN_ELECTRONIC_RECORD + " was found using RM manager User "+ rm_manager.get().getUsername(),getResult(ADMIN_ELECTRONIC_RECORD,stringList));
|
||||
});
|
||||
}
|
||||
catch (InterruptedException e) {
|
||||
fail("InterruptedException received while waiting for results.");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* User with RM Administrator role can see all the records
|
||||
*
|
||||
* Given that I am a RM Administrator
|
||||
* I can see all the records in File Plan and Unfiled Records through RM Search and Advanced Search
|
||||
*/
|
||||
@Test(priority = 5)
|
||||
public void rmAdminSearchResults() {
|
||||
try {
|
||||
Utility.sleep(1000, 40000, () -> {
|
||||
List<String> stringList = (searchAPI
|
||||
.searchForDocumentsAsUser(rm_admin_search.get().getUsername(),
|
||||
rm_admin_search.get().getPassword(),
|
||||
ELECTRONIC_RECORD));
|
||||
assertTrue(getResult(ELECTRONIC_RECORD,stringList),"The file with search term " + ELECTRONIC_RECORD + " was not found using RM Admin User "+ rm_admin_search.get().getUsername());
|
||||
});
|
||||
}
|
||||
catch (InterruptedException e) {
|
||||
fail("InterruptedException received while waiting for results.");
|
||||
}
|
||||
|
||||
try {
|
||||
Utility.sleep(1000, 40000, () -> {
|
||||
List<String> stringList = (searchAPI
|
||||
.searchForDocumentsAsUser(rm_admin_search.get().getUsername(),
|
||||
rm_admin_search.get().getPassword(),
|
||||
UNFILED_ELECTRONIC_RECORD));
|
||||
assertTrue(getResult(UNFILED_ELECTRONIC_RECORD,stringList),"The file with search term " + UNFILED_ELECTRONIC_RECORD + " was not found using RM Admin User "+ rm_admin_search.get().getUsername());
|
||||
});
|
||||
}
|
||||
catch (InterruptedException e) {
|
||||
fail("InterruptedException received while waiting for results.");
|
||||
}
|
||||
|
||||
try {
|
||||
Utility.sleep(1000, 40000, () -> {
|
||||
List<String> stringList = (searchAPI
|
||||
.searchForDocumentsAsUser(rm_admin_search.get().getUsername(),
|
||||
rm_admin_search.get().getPassword(),
|
||||
NON_ELECTRONIC_RECORD));
|
||||
assertTrue(getResult(NON_ELECTRONIC_RECORD,stringList),"The file with search term " + NON_ELECTRONIC_RECORD + " was not found using RM Admin User "+ rm_admin_search.get().getUsername());
|
||||
});
|
||||
}
|
||||
catch (InterruptedException e) {
|
||||
fail("InterruptedException received while waiting for results.");
|
||||
}
|
||||
}
|
||||
|
||||
private void createRMManager() {
|
||||
// create RM manager
|
||||
rm_manager = Optional.ofNullable(getDataUser().createRandomTestUser());
|
||||
rmRolesAndActionsAPI.assignRoleToUser(
|
||||
getDataUser().usingAdmin().getAdminUser().getUsername(),
|
||||
getDataUser().usingAdmin().getAdminUser().getPassword(),
|
||||
rm_manager.get().getUsername(),
|
||||
ROLE_RM_MANAGER
|
||||
);
|
||||
}
|
||||
|
||||
private void createRMUser() {
|
||||
// create RM manager
|
||||
rm_user_search = Optional.ofNullable(getDataUser().createRandomTestUser());
|
||||
rmRolesAndActionsAPI.assignRoleToUser(
|
||||
getDataUser().usingAdmin().getAdminUser().getUsername(),
|
||||
getDataUser().usingAdmin().getAdminUser().getPassword(),
|
||||
rm_user_search.get().getUsername(),
|
||||
ROLE_RM_USER
|
||||
);
|
||||
}
|
||||
|
||||
private void createRMAdmin() {
|
||||
// create RM Admin
|
||||
rm_admin_search = Optional.ofNullable(getDataUser().createRandomTestUser());
|
||||
rmRolesAndActionsAPI.assignRoleToUser(
|
||||
getDataUser().usingAdmin().getAdminUser().getUsername(),
|
||||
getDataUser().usingAdmin().getAdminUser().getPassword(),
|
||||
rm_admin_search.get().getUsername(),
|
||||
ADMIN
|
||||
);
|
||||
}
|
||||
|
||||
private RecordCategory createCategoryIfDoesNotExist(String CATEGORY_ALL) {
|
||||
return createRootCategory(getDataUser().usingAdmin().getAdminUser(), CATEGORY_ALL);
|
||||
}
|
||||
|
||||
private RecordCategoryChild createRecordFolderInCategory(String FOLDER_SEARCH, RecordCategory recordCategory) {
|
||||
return createFolder(getDataUser().usingAdmin().getAdminUser(), recordCategory.getId(), FOLDER_SEARCH);
|
||||
}
|
||||
|
||||
private void uploadElectronicRecordInContainer(String electronic_record, String folder_search) {
|
||||
recordsAPI.uploadElectronicRecord(getDataUser().usingAdmin().getAdminUser().getUsername(),
|
||||
getDataUser().usingAdmin().getAdminUser().getPassword(),
|
||||
getDefaultElectronicRecordProperties(electronic_record), folder_search, CMISUtil.DocumentType.TEXT_PLAIN);
|
||||
}
|
||||
|
||||
|
||||
protected HttpResponse createNonElectronicRecordInContainer(String name, String categoryName, String folderName) {
|
||||
Map<BaseAPI.RMProperty, String> defaultProperties = new HashMap<>();
|
||||
defaultProperties.put(BaseAPI.RMProperty.NAME, name);
|
||||
defaultProperties.put(BaseAPI.RMProperty.TITLE, TITLE);
|
||||
defaultProperties.put(BaseAPI.RMProperty.DESCRIPTION, DESCRIPTION);
|
||||
|
||||
return recordsAPI.createNonElectronicRecord(getDataUser().usingAdmin().getAdminUser().getUsername(),
|
||||
getDataUser().usingAdmin().getAdminUser().getPassword(), defaultProperties, categoryName, folderName);
|
||||
}
|
||||
|
||||
public Map<BaseAPI.RMProperty, String> getDefaultElectronicRecordProperties(String recordName) {
|
||||
Map<BaseAPI.RMProperty, String> defaultProperties = new HashMap<>();
|
||||
defaultProperties.put(BaseAPI.RMProperty.NAME, recordName);
|
||||
defaultProperties.put(BaseAPI.RMProperty.TITLE, TITLE);
|
||||
defaultProperties.put(BaseAPI.RMProperty.DESCRIPTION, DESCRIPTION);
|
||||
defaultProperties.put(BaseAPI.RMProperty.CONTENT, TEST_CONTENT);
|
||||
return defaultProperties;
|
||||
}
|
||||
|
||||
@AfterClass(alwaysRun = true)
|
||||
public void standardSearchTeardown() {
|
||||
// delete categories
|
||||
deleteRecordCategory(categoryAll.getId());
|
||||
deleteRecordCategory(category_Admin_Only.getId());
|
||||
|
||||
// delete users
|
||||
Optional.of(nonRmSiteUser).ifPresent(x -> getDataUser().deleteUser(x.get()));
|
||||
Optional.of(rm_user_search).ifPresent(x -> getDataUser().deleteUser(x.get()));
|
||||
Optional.of(rm_manager).ifPresent(x -> getDataUser().deleteUser(x.get()));
|
||||
Optional.of(rm_admin_search).ifPresent(x -> getDataUser().deleteUser(x.get()));
|
||||
}
|
||||
|
||||
private boolean getResult(String partialRecordName, List<String> searchResults) {
|
||||
if(null != searchResults) {
|
||||
for (String searchResult : searchResults) {
|
||||
if (searchResult.startsWith(partialRecordName)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private Object[][] getRecordsFromUnfiledRecordsContainer(UnfiledContainerChild electronicRecord)
|
||||
{
|
||||
UnfiledContainerAPI unfiledContainersAPI = getRestAPIFactory().getUnfiledContainersAPI();
|
||||
return new String[][] {
|
||||
{ unfiledContainersAPI.uploadRecord(electronicRecord, UNFILED_RECORDS_CONTAINER_ALIAS,
|
||||
createTempFile(ELECTRONIC_RECORD_NAME, ELECTRONIC_RECORD_NAME)).getId()}
|
||||
};
|
||||
}
|
||||
}
|
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-governance-services-community-parent</artifactId>
|
||||
<version>15.1</version>
|
||||
<version>17.43</version>
|
||||
</parent>
|
||||
|
||||
<modules>
|
||||
|
@@ -1,4 +1,3 @@
|
||||
TRANSFORMERS_TAG=2.5.7
|
||||
SOLR6_TAG=2.0.3
|
||||
POSTGRES_TAG=13.3
|
||||
ACTIVEMQ_TAG=5.16.1
|
||||
|
@@ -8,7 +8,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-governance-services-community-repo-parent</artifactId>
|
||||
<version>15.1</version>
|
||||
<version>17.43</version>
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
@@ -361,6 +361,12 @@
|
||||
<integrationTestSuite>**/AllTestSuitePt3.class</integrationTestSuite>
|
||||
</properties>
|
||||
</profile>
|
||||
<profile>
|
||||
<id>agsAllTestSuitePt4</id>
|
||||
<properties>
|
||||
<integrationTestSuite>**/AllTestSuitePt4.class</integrationTestSuite>
|
||||
</properties>
|
||||
</profile>
|
||||
|
||||
<profile>
|
||||
<id>use-mysql</id>
|
||||
|
@@ -43,19 +43,16 @@ import org.junit.runner.RunWith;
|
||||
@ClassnameFilters({
|
||||
|
||||
// The following packages are run by Pt1. IF YOU CHANGE THIS LIST ALSO CHANGE IT IN AllTestSuitePt3.
|
||||
"org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.action\\..*Test",
|
||||
"org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.capabilities\\..*Test",
|
||||
"org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.jscript\\..*Test",
|
||||
"org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.security\\..*Test",
|
||||
"org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.service\\..*Test",
|
||||
"org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.webscript\\..*Test",
|
||||
// There appears to be some common setup taking place in the first 2 packages, which is why all legacy tests are
|
||||
// together even though they take a little longer to run that way.
|
||||
"org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.jscript\\..*Test",
|
||||
|
||||
// Exclude all UnitTests
|
||||
"!.*UnitTest",
|
||||
|
||||
// Put the test classes you want to exclude here
|
||||
"!.*DispositionServiceImplTest",
|
||||
"!.*FilePlanPermissionServiceImplTest",
|
||||
// above 2 tests from service package require setup from FileReportActionTest so they've been moved to part 4
|
||||
"!.*DataLoadSystemTest",
|
||||
"!.*RM2072Test",
|
||||
"!.*RM2190Test",
|
||||
|
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.module.org_alfresco_module_rm.test;
|
||||
|
||||
import org.junit.extensions.cpsuite.ClasspathSuite;
|
||||
import org.junit.extensions.cpsuite.ClasspathSuite.ClassnameFilters;
|
||||
import org.junit.extensions.cpsuite.ClasspathSuite.SuiteTypes;
|
||||
import org.junit.extensions.cpsuite.SuiteType;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
/**
|
||||
* Convenience test suite that runs all the tests. THIS HAS BEEN SPLIT INTO PARTS SO THAT THE BUILD TIME IS REDUCED.
|
||||
*
|
||||
* @author Marcin Strankowski
|
||||
* @since 2.1
|
||||
*/
|
||||
@RunWith(ClasspathSuite.class)
|
||||
@SuiteTypes({SuiteType.TEST_CLASSES, SuiteType.RUN_WITH_CLASSES, SuiteType.JUNIT38_TEST_CLASSES})
|
||||
@ClassnameFilters({
|
||||
|
||||
// The following packages are run by Pt1. IF YOU CHANGE THIS LIST ALSO CHANGE IT IN AllTestSuitePt3.
|
||||
"org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.action\\..*Test",
|
||||
"org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.capabilities\\..*Test",
|
||||
"org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.security\\..*Test",
|
||||
"org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.webscript\\..*Test",
|
||||
"org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.service\\.*DispositionServiceImplTest",
|
||||
"org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.service\\.*FilePlanPermissionServiceImplTest",
|
||||
|
||||
// 2 tests from service package are here, they seem to require FileReportActionTest being ran beforehand
|
||||
// and it would take too much time to run them in 1st test suite
|
||||
|
||||
// Exclude all UnitTests
|
||||
"!.*UnitTest",
|
||||
|
||||
// Put the test classes you want to exclude here
|
||||
"!.*DataLoadSystemTest",
|
||||
"!.*RM2072Test",
|
||||
"!.*RM2190Test",
|
||||
"!.*RM981SystemTest",
|
||||
"!.*RM3993Test",
|
||||
"!.*RM4163Test",
|
||||
"!.*RecordsManagementEventServiceImplTest",
|
||||
"!.*RmRestApiTest",
|
||||
"!.*NotificationServiceHelperSystemTest",
|
||||
"!.*RetryingTransactionHelperBaseTest",
|
||||
"!.*RMCaveatConfigServiceImplTest",
|
||||
// This test is running successfully locally but not on bamboo (if executed as a single test).
|
||||
// The problem can be reproduced if the whole test suite is run locally as well.
|
||||
// Tests should not be dependant on other test classes and should run in any order without any problems.
|
||||
"!.*EmailMapScriptTest"
|
||||
})
|
||||
public class AllTestSuitePt4
|
||||
{
|
||||
}
|
@@ -4,7 +4,7 @@
|
||||
|
||||
# Version label
|
||||
version.major=7
|
||||
version.minor=0
|
||||
version.minor=3
|
||||
version.revision=0
|
||||
version.label=
|
||||
|
||||
@@ -15,4 +15,4 @@ version.edition=Community
|
||||
version.scmrevision=@scm-path@-r@scm-revision@
|
||||
|
||||
# Build number
|
||||
version.build=r@scm-revision@-b@build-number@
|
||||
version.build=r@scm-revision@-b@build-number@
|
||||
|
@@ -168,6 +168,7 @@
|
||||
<property name="nodeService" ref="NodeService"/>
|
||||
<property name="ruleService" ref="RuleService"/>
|
||||
<property name="actionService" ref="ActionService"/>
|
||||
<property name="runtimeActionService" ref="actionService"/>
|
||||
<property name="dictionaryService" ref="DictionaryService"/>
|
||||
<property name="fileFolderService" ref="FileFolderService"/>
|
||||
<property name="namespaceService" ref="NamespaceService" />
|
||||
|
@@ -27,7 +27,7 @@
|
||||
|
||||
package org.alfresco.module.org_alfresco_module_rm.action.impl;
|
||||
|
||||
import static org.mockito.Mockito.verifyZeroInteractions;
|
||||
import static org.mockito.Mockito.verifyNoInteractions;
|
||||
|
||||
import org.alfresco.error.AlfrescoRuntimeException;
|
||||
import org.alfresco.module.org_alfresco_module_rm.action.BaseActionUnitTest;
|
||||
@@ -86,7 +86,7 @@ public class FileReportActionUnitTest extends BaseActionUnitTest
|
||||
fileReportAction.executeImpl(getMockedAction(), actionedUponNodeRef);
|
||||
|
||||
// == then ==
|
||||
verifyZeroInteractions(mockedReportService, mockedNodeService);
|
||||
verifyNoInteractions(mockedReportService, mockedNodeService);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -110,6 +110,6 @@ public class FileReportActionUnitTest extends BaseActionUnitTest
|
||||
fileReportAction.executeImpl(getMockedAction(), actionedUponNodeRef);
|
||||
|
||||
// == then ==
|
||||
verifyZeroInteractions(mockedReportService, mockedNodeService);
|
||||
verifyNoInteractions(mockedReportService, mockedNodeService);
|
||||
}
|
||||
}
|
||||
|
@@ -28,7 +28,7 @@
|
||||
package org.alfresco.module.org_alfresco_module_rm.action.impl;
|
||||
|
||||
import static org.alfresco.module.org_alfresco_module_rm.test.util.AlfMock.generateText;
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
|
@@ -38,8 +38,8 @@ import static org.alfresco.module.org_alfresco_module_rm.model.RecordsManagement
|
||||
import static org.alfresco.module.org_alfresco_module_rm.model.rma.type.RmSiteType.DEFAULT_SITE_NAME;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.eq;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
@@ -27,7 +27,7 @@
|
||||
|
||||
package org.alfresco.module.org_alfresco_module_rm.bootstrap;
|
||||
|
||||
import static org.mockito.Matchers.anyString;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
@@ -28,8 +28,8 @@
|
||||
package org.alfresco.module.org_alfresco_module_rm.capability;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.eq;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
@@ -29,9 +29,9 @@ package org.alfresco.module.org_alfresco_module_rm.capability.declarative.condit
|
||||
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.anyBoolean;
|
||||
import static org.mockito.Matchers.eq;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.times;
|
||||
|
@@ -29,7 +29,7 @@ package org.alfresco.module.org_alfresco_module_rm.content;
|
||||
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyZeroInteractions;
|
||||
import static org.mockito.Mockito.verifyNoInteractions;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.io.File;
|
||||
@@ -125,6 +125,6 @@ public class EagerContentStoreCleanerUnitTest extends BaseUnitTest
|
||||
|
||||
eagerContentStoreCleaner.deleteFromStore(AlfMock.generateText(), mock(ContentStore.class));
|
||||
|
||||
verifyZeroInteractions(mockedContentCleanser);
|
||||
verifyNoInteractions(mockedContentCleanser);
|
||||
}
|
||||
}
|
||||
|
@@ -35,9 +35,9 @@ import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.anyString;
|
||||
import static org.mockito.Matchers.eq;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.doAnswer;
|
||||
import static org.mockito.Mockito.doNothing;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
|
@@ -31,7 +31,7 @@ import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
||||
import static org.mockito.Mockito.verifyZeroInteractions;
|
||||
import static org.mockito.Mockito.verifyNoInteractions;
|
||||
|
||||
import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest;
|
||||
import org.junit.Test;
|
||||
@@ -73,7 +73,7 @@ public class DictionaryBootstrapPostProcessorUnitTest extends BaseUnitTest
|
||||
// === then ===
|
||||
verify(mockedBeanFactory, times(1)).containsBean(BEAN_SITESERVICE_BOOTSTRAP);
|
||||
verifyNoMoreInteractions(mockedBeanFactory);
|
||||
verifyZeroInteractions(mockedBeanDefinition);
|
||||
verifyNoInteractions(mockedBeanDefinition);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -27,7 +27,7 @@
|
||||
|
||||
package org.alfresco.module.org_alfresco_module_rm.model.rma.aspect;
|
||||
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
@@ -26,8 +26,8 @@
|
||||
*/
|
||||
package org.alfresco.module.org_alfresco_module_rm.model.rma.type;
|
||||
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.eq;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
@@ -27,8 +27,8 @@
|
||||
|
||||
package org.alfresco.module.org_alfresco_module_rm.patch.v22;
|
||||
|
||||
import static org.mockito.Matchers.anyString;
|
||||
import static org.mockito.Matchers.eq;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
@@ -32,7 +32,7 @@ import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
||||
import static org.mockito.Mockito.verifyZeroInteractions;
|
||||
import static org.mockito.Mockito.verifyNoInteractions;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
@@ -72,7 +72,7 @@ public class RMv22RemoveInPlaceRolesFromAllPatchUnitTest extends BaseUnitTest
|
||||
patch.applyInternal();
|
||||
|
||||
// then
|
||||
verifyZeroInteractions(mockedAuthorityService);
|
||||
verifyNoInteractions(mockedAuthorityService);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -30,8 +30,8 @@ package org.alfresco.module.org_alfresco_module_rm.patch.v23;
|
||||
import static java.util.Arrays.asList;
|
||||
import static org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel.ASPECT_SAVED_SEARCH;
|
||||
import static org.alfresco.module.org_alfresco_module_rm.model.rma.type.RmSiteType.DEFAULT_SITE_NAME;
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.anyMap;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyMap;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
@@ -29,7 +29,7 @@ package org.alfresco.module.org_alfresco_module_rm.patch.v24;
|
||||
|
||||
import static org.alfresco.module.org_alfresco_module_rm.test.util.AlfMock.generateNodeRef;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyZeroInteractions;
|
||||
import static org.mockito.Mockito.verifyNoInteractions;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.util.Collections;
|
||||
@@ -81,7 +81,7 @@ public class RMv24FilePlanContainerRuleInheritancePatchUnitTest
|
||||
patch.applyInternal();
|
||||
|
||||
// then
|
||||
verifyZeroInteractions(mockedNodeService);
|
||||
verifyNoInteractions(mockedNodeService);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -27,8 +27,8 @@
|
||||
|
||||
package org.alfresco.module.org_alfresco_module_rm.patch.v32;
|
||||
|
||||
import static org.mockito.Matchers.anyMap;
|
||||
import static org.mockito.Matchers.anyObject;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyMap;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
@@ -92,8 +92,8 @@ public class RMv32HoldReportUpdatePatchUnitTest
|
||||
|
||||
patch.applyInternal();
|
||||
verify(mockedNodeService, times(1)).addAspect(hold_report, ContentModel.ASPECT_VERSIONABLE, null);
|
||||
verify(mockedVersionService, times(1)).createVersion((NodeRef) anyObject(), anyMap());
|
||||
verify(mockedContentWriter, times(1)).putContent((InputStream) anyObject());
|
||||
verify(mockedVersionService, times(1)).createVersion((NodeRef) any(), anyMap());
|
||||
verify(mockedContentWriter, times(1)).putContent((InputStream) any());
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -28,7 +28,7 @@
|
||||
package org.alfresco.module.org_alfresco_module_rm.patch.v33;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
@@ -33,13 +33,13 @@ import static java.util.Collections.emptyList;
|
||||
import static org.alfresco.model.ContentModel.ASSOC_CONTAINS;
|
||||
import static org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel.ASSOC_FROZEN_CONTENT;
|
||||
import static org.alfresco.module.org_alfresco_module_rm.patch.v35.RMv35HoldNewChildAssocPatch.PATCH_ASSOC_NAME;
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.anyMap;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyMap;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyZeroInteractions;
|
||||
import static org.mockito.Mockito.verifyNoInteractions;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
@@ -32,7 +32,7 @@ import static org.alfresco.module.org_alfresco_module_rm.test.util.AlfMock.gener
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.doNothing;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.mock;
|
||||
|
@@ -28,7 +28,7 @@
|
||||
package org.alfresco.module.org_alfresco_module_rm.script.hold;
|
||||
|
||||
import static org.alfresco.module.org_alfresco_module_rm.test.util.WebScriptExceptionMatcher.badRequest;
|
||||
import static org.mockito.Matchers.eq;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.util.Collections;
|
||||
|
@@ -30,8 +30,8 @@ package org.alfresco.module.org_alfresco_module_rm.test.util;
|
||||
import static java.util.Collections.emptyMap;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.nullable;
|
||||
import static org.mockito.Matchers.anyString;
|
||||
import static org.mockito.Matchers.eq;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.doAnswer;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.lenient;
|
||||
|
@@ -28,7 +28,7 @@ package org.alfresco.module.org_alfresco_module_rm.util;
|
||||
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
@@ -27,8 +27,8 @@
|
||||
|
||||
package org.alfresco.module.org_alfresco_module_rm.version;
|
||||
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.eq;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.doAnswer;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.times;
|
||||
|
@@ -30,7 +30,7 @@ package org.alfresco.rm.rest.api.sites;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.fail;
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.times;
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-governance-services-community-repo-parent</artifactId>
|
||||
<version>15.1</version>
|
||||
<version>17.43</version>
|
||||
</parent>
|
||||
|
||||
<build>
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo</artifactId>
|
||||
<version>15.1</version>
|
||||
<version>17.43</version>
|
||||
</parent>
|
||||
|
||||
<modules>
|
||||
|
@@ -8,7 +8,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo-amps</artifactId>
|
||||
<version>15.1</version>
|
||||
<version>17.43</version>
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
|
@@ -176,7 +176,6 @@ public class NodeBrowserScript extends NodeBrowserPost implements Serializable
|
||||
{
|
||||
status.setCode(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
|
||||
status.setMessage(e.getMessage());
|
||||
status.setException(e);
|
||||
status.setRedirect(true);
|
||||
}
|
||||
return tmplMap;
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo</artifactId>
|
||||
<version>15.1</version>
|
||||
<version>17.43</version>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2005-2011 Alfresco Software Limited.
|
||||
* Copyright (C) 2005-2022 Alfresco Software Limited.
|
||||
*
|
||||
* This file is part of Alfresco
|
||||
*
|
||||
@@ -16,6 +16,7 @@
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.alfresco.query;
|
||||
|
||||
import java.util.Collections;
|
||||
@@ -55,7 +56,7 @@ public class ListBackedPagingResults<R> implements PagingResults<R>
|
||||
}
|
||||
|
||||
this.results = Collections.unmodifiableList(
|
||||
list.subList(start, end));
|
||||
list.subList(Math.min(start, end), end));
|
||||
this.size = list.size();
|
||||
this.hasMore = ! (list.size() == end);
|
||||
}
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo</artifactId>
|
||||
<version>15.1</version>
|
||||
<version>17.43</version>
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
@@ -134,7 +134,7 @@
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.woodstox</groupId>
|
||||
<artifactId>woodstox-core</artifactId>
|
||||
<version>6.2.7</version>
|
||||
<version>6.3.0</version>
|
||||
</dependency>
|
||||
|
||||
<!-- the cxf libs were updated, see dependencyManagement section -->
|
||||
|
@@ -78,6 +78,10 @@ public class ObjectTypeIdLuceneBuilder extends BaseLuceneBuilder
|
||||
String field = getLuceneFieldName();
|
||||
String stringValue = getValueAsString(value);
|
||||
TypeDefinitionWrapper type = cmisDictionaryService.findType(stringValue);
|
||||
if (type == null)
|
||||
{
|
||||
throw new CmisInvalidArgumentException("Unknown type: " + stringValue);
|
||||
}
|
||||
return lqpa
|
||||
.getFieldQuery(field, type.getAlfrescoClass().toString(), AnalysisMode.IDENTIFIER, luceneFunction);
|
||||
}
|
||||
|
@@ -146,7 +146,7 @@ public interface NamespaceService extends NamespacePrefixResolver
|
||||
|
||||
/** Email Server Application Model Prefix */
|
||||
static final String EMAILSERVER_MODEL_PREFIX = "emailserver";
|
||||
|
||||
|
||||
/**
|
||||
* Register a prefix for namespace uri.
|
||||
*
|
||||
|
@@ -2,7 +2,7 @@
|
||||
* #%L
|
||||
* Alfresco Data model classes
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
@@ -25,7 +25,7 @@
|
||||
*/
|
||||
package org.alfresco.repo.dictionary;
|
||||
|
||||
import static org.mockito.Matchers.anyString;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo</artifactId>
|
||||
<version>15.1</version>
|
||||
<version>17.43</version>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
|
@@ -9,6 +9,6 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo-packaging</artifactId>
|
||||
<version>15.1</version>
|
||||
<version>17.43</version>
|
||||
</parent>
|
||||
</project>
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo-packaging</artifactId>
|
||||
<version>15.1</version>
|
||||
<version>17.43</version>
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo</artifactId>
|
||||
<version>15.1</version>
|
||||
<version>17.43</version>
|
||||
</parent>
|
||||
|
||||
<modules>
|
||||
|
@@ -1,4 +1,3 @@
|
||||
TRANSFORMERS_TAG=2.5.7
|
||||
SOLR6_TAG=2.0.3
|
||||
POSTGRES_TAG=13.3
|
||||
ACTIVEMQ_TAG=5.16.1
|
||||
|
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo-packaging</artifactId>
|
||||
<version>15.1</version>
|
||||
<version>17.43</version>
|
||||
</parent>
|
||||
|
||||
<modules>
|
||||
|
@@ -27,6 +27,9 @@ fi
|
||||
|
||||
echo "Starting ACS stack in ${DOCKER_COMPOSE_PATH}"
|
||||
|
||||
export TRANSFORMERS_TAG=$(mvn help:evaluate -Dexpression=dependency.alfresco-transform-core.version -q -DforceStdout)
|
||||
export TRANSFORM_ROUTER_TAG=$(mvn help:evaluate -Dexpression=dependency.alfresco-transform-service.version -q -DforceStdout)
|
||||
|
||||
# .env files are picked up from project directory correctly on docker-compose 1.23.0+
|
||||
docker-compose --file "${DOCKER_COMPOSE_PATH}" --project-directory $(dirname "${DOCKER_COMPOSE_PATH}") up -d
|
||||
|
||||
|
@@ -9,7 +9,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo-tests</artifactId>
|
||||
<version>15.1</version>
|
||||
<version>17.43</version>
|
||||
</parent>
|
||||
|
||||
<developers>
|
||||
|
@@ -0,0 +1,76 @@
|
||||
package org.alfresco.cmis.search;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
import org.alfresco.cmis.CmisProperties;
|
||||
import org.alfresco.utility.Utility;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.testng.annotations.AfterMethod;
|
||||
import org.testng.annotations.BeforeMethod;
|
||||
|
||||
@ContextConfiguration("classpath:alfresco-cmis-context.xml")
|
||||
@Component
|
||||
@Scope(value = "prototype")
|
||||
public abstract class AbstractCmisE2ETest extends AbstractE2EFunctionalTest
|
||||
{
|
||||
private static Logger LOGGER = LoggerFactory.getLogger(AbstractCmisE2ETest.class);
|
||||
|
||||
@Autowired
|
||||
protected CmisProperties cmisProperties;
|
||||
|
||||
public String documentContent = "CMIS document content";
|
||||
|
||||
@BeforeMethod(alwaysRun = true)
|
||||
public void showStartTestInfo(Method method)
|
||||
{
|
||||
LOGGER.info(String.format("*** STARTING Test: [%s] ***", method.getName()));
|
||||
}
|
||||
|
||||
@AfterMethod(alwaysRun = true)
|
||||
public void showEndTestInfo(Method method)
|
||||
{
|
||||
LOGGER.info(String.format("*** ENDING Test: [%s] ***", method.getName()));
|
||||
}
|
||||
|
||||
public Integer getElasticWaitTimeInSeconds()
|
||||
{
|
||||
return cmisProperties.envProperty().getSolrWaitTimeInSeconds();
|
||||
}
|
||||
|
||||
/**
|
||||
* Repeat Elastic Query till results count returns expectedCountResults
|
||||
* @param query CMIS Query to be executed
|
||||
* @param expectedCountResults Number of results expected
|
||||
* @return true when results count is equals to expectedCountResults
|
||||
*/
|
||||
protected boolean waitForIndexing(String query, long expectedCountResults)
|
||||
{
|
||||
|
||||
for (int searchCount = 1; searchCount <= SEARCH_MAX_ATTEMPTS; searchCount++)
|
||||
{
|
||||
|
||||
try
|
||||
{
|
||||
cmisApi.withQuery(query).assertResultsCount().equals(expectedCountResults);
|
||||
return true;
|
||||
}
|
||||
catch (AssertionError ae)
|
||||
{
|
||||
LOGGER.info(String.format("WaitForIndexing in Progress: %s", ae));
|
||||
}
|
||||
|
||||
|
||||
Utility.waitToLoopTime(getElasticWaitTimeInSeconds(), "Wait For Indexing");
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
@@ -0,0 +1,58 @@
|
||||
package org.alfresco.cmis.search;
|
||||
|
||||
import org.alfresco.cmis.CmisWrapper;
|
||||
import org.alfresco.dataprep.SiteService.Visibility;
|
||||
import org.alfresco.utility.data.DataContent;
|
||||
import org.alfresco.utility.data.DataSite;
|
||||
import org.alfresco.utility.data.DataUser;
|
||||
import org.alfresco.utility.data.RandomData;
|
||||
import org.alfresco.utility.model.SiteModel;
|
||||
import org.alfresco.utility.model.UserModel;
|
||||
import org.alfresco.utility.network.ServerHealth;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
|
||||
@ContextConfiguration ("classpath:alfresco-cmis-context.xml")
|
||||
public abstract class AbstractE2EFunctionalTest extends AbstractTestNGSpringContextTests
|
||||
{
|
||||
/** The number of retries that a query will be tried before giving up. */
|
||||
protected static final int SEARCH_MAX_ATTEMPTS = 20;
|
||||
|
||||
@Autowired
|
||||
protected ServerHealth serverHealth;
|
||||
|
||||
@Autowired
|
||||
protected DataSite dataSite;
|
||||
|
||||
@Autowired
|
||||
protected DataContent dataContent;
|
||||
|
||||
@Autowired
|
||||
protected CmisWrapper cmisApi;
|
||||
|
||||
@Autowired
|
||||
protected DataUser dataUser;
|
||||
|
||||
protected UserModel testUser, adminUserModel;
|
||||
protected SiteModel testSite;
|
||||
|
||||
protected static String unique_searchString;
|
||||
|
||||
@BeforeClass (alwaysRun = true)
|
||||
public void setup()
|
||||
{
|
||||
serverHealth.assertServerIsOnline();
|
||||
|
||||
adminUserModel = dataUser.getAdminUser();
|
||||
testUser = dataUser.createRandomTestUser("UserSearch");
|
||||
|
||||
testSite = new SiteModel(RandomData.getRandomName("SiteSearch"));
|
||||
testSite.setVisibility(Visibility.PRIVATE);
|
||||
|
||||
testSite = dataSite.usingUser(testUser).createSite(testSite);
|
||||
|
||||
unique_searchString = testSite.getTitle().replace("SiteSearch", "Unique");
|
||||
}
|
||||
}
|
@@ -0,0 +1,62 @@
|
||||
package org.alfresco.cmis.search;
|
||||
|
||||
import org.alfresco.utility.Utility;
|
||||
import org.alfresco.utility.data.provider.XMLDataConfig;
|
||||
import org.alfresco.utility.data.provider.XMLTestDataProvider;
|
||||
import org.alfresco.utility.model.FileModel;
|
||||
import org.alfresco.utility.model.FileType;
|
||||
import org.alfresco.utility.model.FolderModel;
|
||||
import org.alfresco.utility.model.QueryModel;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.AfterClass;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
public class SearchInFolderTests extends AbstractCmisE2ETest
|
||||
{
|
||||
private FolderModel parentFolder, subFolder1, subFolder2, subFolder3;
|
||||
private FileModel subFile1, subFile2, subFile3, subFile4, subFile5;
|
||||
|
||||
@BeforeClass(alwaysRun = true)
|
||||
public void createTestData() throws Exception
|
||||
{
|
||||
// create input data
|
||||
parentFolder = FolderModel.getRandomFolderModel();
|
||||
subFolder1 = FolderModel.getRandomFolderModel();
|
||||
subFolder2 = FolderModel.getRandomFolderModel();
|
||||
subFolder3 = new FolderModel("subFolder");
|
||||
subFile5 = new FileModel("fifthFile.txt",FileType.TEXT_PLAIN, "fifthFile content");
|
||||
subFile1 = new FileModel("firstFile", FileType.MSEXCEL);
|
||||
subFile2 = FileModel.getRandomFileModel(FileType.MSPOWERPOINT2007);
|
||||
subFile3 = FileModel.getRandomFileModel(FileType.TEXT_PLAIN);
|
||||
subFile4 = new FileModel("fourthFile", "fourthFileTitle", "fourthFileDescription", FileType.MSWORD2007);
|
||||
|
||||
cmisApi.authenticateUser(testUser).usingSite(testSite).createFolder(parentFolder)
|
||||
.then().usingResource(parentFolder)
|
||||
.createFile(subFile5).assertThat().contentIs("fifthFile content")
|
||||
.createFolder(subFolder1)
|
||||
.createFolder(subFolder2)
|
||||
.createFolder(subFolder3)
|
||||
.createFile(subFile1)
|
||||
.createFile(subFile2)
|
||||
.createFile(subFile3)
|
||||
.createFile(subFile4);
|
||||
// wait for index
|
||||
Utility.waitToLoopTime(getElasticWaitTimeInSeconds());
|
||||
}
|
||||
|
||||
@AfterClass(alwaysRun = true)
|
||||
public void cleanupEnvironment()
|
||||
{
|
||||
dataContent.deleteSite(testSite);
|
||||
}
|
||||
|
||||
@Test(dataProviderClass = XMLTestDataProvider.class, dataProvider = "getQueriesData")
|
||||
@XMLDataConfig(file = "src/test/resources/search-in-folder.xml")
|
||||
public void executeCMISQuery(QueryModel query)
|
||||
{
|
||||
String currentQuery = String.format(query.getValue(), parentFolder.getNodeRef());
|
||||
cmisApi.authenticateUser(testUser);
|
||||
Assert.assertTrue(waitForIndexing(currentQuery, query.getResults()), String.format("Result count not as expected for query: %s", currentQuery));
|
||||
}
|
||||
}
|
@@ -7,7 +7,7 @@ alfresco.port=8082
|
||||
admin.user=admin
|
||||
admin.password=admin
|
||||
|
||||
solrWaitTimeInSeconds=30
|
||||
solrWaitTimeInSeconds=60
|
||||
|
||||
# in containers we cannot access directly JMX, so we will use http://jolokia.org agent
|
||||
# disabling this we will use direct JMX calls to server
|
||||
|
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--CMIS Queries: passing the search query as first param and results expected -->
|
||||
<testData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
||||
<queries>
|
||||
<query value="SELECT cmis:name, cmis:parentId, cmis:path, cmis:allowedChildObjectTypeIds FROM cmis:folder where IN_FOLDER('%s') AND cmis:name = 'subFolder'" expectedResults="1" />
|
||||
<query value="SELECT cmis:name, cmis:objectId, cmis:lastModifiedBy, cmis:creationDate, cmis:contentStreamFileName FROM cmis:document where IN_FOLDER('%s') AND cmis:name = 'fourthFile'" expectedResults="1" />
|
||||
<query value="SELECT cmis:parentId FROM cmis:folder where IN_FOLDER('%s')" expectedResults="3" />
|
||||
<query value="SELECT * FROM cmis:document where IN_FOLDER('%s')" expectedResults="5" />
|
||||
<query value="SELECT * FROM cmis:document where IN_FOLDER('%s') ORDER BY cmis:name ASC" expectedResults="5" />
|
||||
<query value="SELECT * FROM cmis:document where IN_FOLDER('%s') ORDER BY cmis:name DESC" expectedResults="5" />
|
||||
<query value="SELECT * FROM cmis:folder where IN_FOLDER('%s') ORDER BY cmis:lastModificationDate ASC" expectedResults="3" />
|
||||
<query value="SELECT * FROM cmis:folder where IN_FOLDER('%s') ORDER BY cmis:lastModificationDate DESC" expectedResults="3" />
|
||||
<query value="SELECT * FROM cmis:document where IN_FOLDER('%s') ORDER BY cmis:createdBy DESC" expectedResults="5" />
|
||||
<query value="SELECT * FROM cmis:document where IN_FOLDER('%s') AND cmis:name IS NOT NULL" expectedResults="5" />
|
||||
<query value="SELECT * FROM cmis:folder where IN_FOLDER('%s') AND cmis:name IS NOT NULL" expectedResults="3" />
|
||||
<query value="SELECT * FROM cmis:document where IN_FOLDER('%s') AND cmis:name LIKE 'fourthFile'" expectedResults="1" />
|
||||
<query value="SELECT * FROM cmis:folder where IN_FOLDER('%s') AND NOT(cmis:name NOT IN ('subFolder'))" expectedResults="1" />
|
||||
<query value="SELECT * FROM cmis:document where IN_FOLDER('%s') AND cmis:name IN ('fourthFile', 'fifthFile.txt')" expectedResults="2" />
|
||||
<query value="SELECT * FROM cmis:document where IN_FOLDER('%s') AND cmis:name NOT IN ('fourthFile', 'fifthFile.txt')" expectedResults="3" />
|
||||
<query value="SELECT * FROM cmis:folder where IN_FOLDER('%s') AND cmis:name <> 'subFolder'" expectedResults="2" />
|
||||
<query value="SELECT cmis:secondaryObjectTypeIds FROM cmis:folder where IN_FOLDER('%s') AND cmis:name = 'subFolder'" expectedResults="1" />
|
||||
</queries>
|
||||
</testData>
|
@@ -9,7 +9,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo-tests</artifactId>
|
||||
<version>15.1</version>
|
||||
<version>17.43</version>
|
||||
</parent>
|
||||
|
||||
<developers>
|
||||
|
@@ -9,7 +9,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo-tests</artifactId>
|
||||
<version>15.1</version>
|
||||
<version>17.43</version>
|
||||
</parent>
|
||||
|
||||
<developers>
|
||||
|
@@ -60,15 +60,15 @@ public class IntegrationFullTestsBulk2 extends IntegrationTest
|
||||
ftpProtocol.authenticateUser(testUser1).usingSite(testSitePublic).createFolder(testFolder1)
|
||||
.usingResource(testFolder1).createFile(wordFile)
|
||||
.assertThat().contentIs("tasTesting");
|
||||
|
||||
|
||||
STEP("2. Open document for edit using CMIS");
|
||||
cmisAPI.authenticateUser(testUser1).usingResource(wordFile).checkOut();
|
||||
FileModel wordFilePWC = cmisAPI.usingResource(wordFile).withCMISUtil().getPWCFileModel();
|
||||
|
||||
|
||||
STEP("3. Try to edit document using Webdav while checked-out with CMIS - content should be updated");
|
||||
webDavProtocol.authenticateUser(testUser1).usingResource(wordFilePWC).update("update")
|
||||
.and().assertThat().contentIs("update");
|
||||
|
||||
|
||||
STEP("4. Copy document to testFolder2 with ftp");
|
||||
FileModel copiedWordFile = new FileModel(wordFile);
|
||||
ftpProtocol.usingSite(testSitePublic).createFolder(testFolder2)
|
||||
@@ -76,15 +76,15 @@ public class IntegrationFullTestsBulk2 extends IntegrationTest
|
||||
copiedWordFile.setCmisLocation(ftpProtocol.getLastResourceWithoutPrefix());
|
||||
ftpProtocol.usingResource(testFolder1).assertThat().hasFiles(wordFile)
|
||||
.and().usingResource(testFolder2).assertThat().hasFiles(copiedWordFile);
|
||||
|
||||
|
||||
STEP("5. Update document from folder2, check its content is updated with Webdav");
|
||||
webDavProtocol.usingResource(copiedWordFile).update("Step5")
|
||||
.and().assertThat().contentIs("Step5");
|
||||
|
||||
|
||||
STEP("6. Update document with WebDAV");
|
||||
webDavProtocol.authenticateUser(testUser1).usingResource(wordFile).update("WebDAVUpdate");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Scenario 84
|
||||
* 1. Create folder1 with webdav
|
||||
@@ -150,7 +150,7 @@ public class IntegrationFullTestsBulk2 extends IntegrationTest
|
||||
* 13. Check file is deleted with WebDAV
|
||||
*/
|
||||
@Test(groups = { TestGroup.INTEGRATION, TestGroup.FULL })
|
||||
@TestRail(section = { TestGroup.INTEGRATION, TestGroup.CONTENT }, executionType = ExecutionType.REGRESSION,
|
||||
@TestRail(section = { TestGroup.INTEGRATION, TestGroup.CONTENT }, executionType = ExecutionType.REGRESSION,
|
||||
description = "Update file with different user roles and protocols")
|
||||
public void updateFileWithDifferentRolesUsingDifferentProtocols() throws Exception
|
||||
{
|
||||
@@ -276,41 +276,41 @@ public class IntegrationFullTestsBulk2 extends IntegrationTest
|
||||
UserModel user1 = dataUser.createRandomTestUser();
|
||||
UserModel user2 = dataUser.createRandomTestUser();
|
||||
user2.setUserRole(UserRole.SiteManager);
|
||||
|
||||
|
||||
STEP("2. User1 creates site1 and invites user2 as manager");
|
||||
SiteModel site = dataSite.usingUser(user1).createPublicRandomSite();
|
||||
restAPI.authenticateUser(user1).withCoreAPI().usingSite(site).addPerson(user2);
|
||||
|
||||
|
||||
STEP("3. User1 adds document1 and tag1 to doc");
|
||||
dataContent.usingUser(user1).usingSite(site).createContent(testFile);
|
||||
RestTagModel tag = restAPI.withCoreAPI().usingResource(testFile).addTag("tag1");
|
||||
restAPI.withCoreAPI().usingResource(testFile).getNodeTags().assertThat().entriesListContains("tag", "tag1");
|
||||
|
||||
|
||||
STEP("4. User2 gets tags and verifies tag1 appears");
|
||||
restAPI.authenticateUser(user2).withCoreAPI().usingResource(testFile).getNodeTags().assertThat().entriesListContains("tag", "tag1");
|
||||
|
||||
|
||||
STEP("5. User2 delete tag1");
|
||||
restAPI.withCoreAPI().usingResource(testFile).deleteTag(tag);
|
||||
restAPI.withCoreAPI().usingResource(testFile).getNodeTags().assertThat().entriesListDoesNotContain("tag", "tag1");
|
||||
|
||||
|
||||
STEP("6. User1 tries to update tag1");
|
||||
restAPI.authenticateUser(user2).withCoreAPI().usingTag(tag).update("updatedTag");
|
||||
restAPI.assertStatusCodeIs(HttpStatus.FORBIDDEN)
|
||||
.assertLastError().containsSummary(RestErrorModel.PERMISSION_WAS_DENIED)
|
||||
.containsErrorKey(RestErrorModel.PERMISSION_DENIED_ERRORKEY);
|
||||
|
||||
|
||||
STEP("7. User1 add new tag tag2");
|
||||
tag = restAPI.authenticateUser(user1).withCoreAPI().usingResource(testFile).addTag("tag2");
|
||||
restAPI.withCoreAPI().usingResource(testFile).getNodeTags().assertThat().entriesListContains("tag", "tag2");
|
||||
|
||||
|
||||
STEP("8. User2 verifies tag2 appears and tag1 is not in the list");
|
||||
restAPI.authenticateUser(user2).withCoreAPI().usingResource(testFile).getNodeTags()
|
||||
.assertThat().entriesListDoesNotContain("tag", "tag1")
|
||||
.assertThat().entriesListContains("tag", "tag2");
|
||||
|
||||
|
||||
STEP("9. User2 deletes document1");
|
||||
dataContent.usingUser(user2).usingResource(testFile).deleteContent();
|
||||
|
||||
|
||||
STEP("10. User1 tries to delete tag2");
|
||||
restAPI.authenticateUser(user1).withCoreAPI().usingResource(testFile).deleteTag(tag);
|
||||
restAPI.assertStatusCodeIs(HttpStatus.NOT_FOUND)
|
||||
@@ -329,9 +329,9 @@ public class IntegrationFullTestsBulk2 extends IntegrationTest
|
||||
* 7. User1 deletes the document1 with ftp
|
||||
* 8. Verify user2 cannot update document1 with cmis
|
||||
*/
|
||||
@Test(groups = { TestGroup.INTEGRATION, TestGroup.FULL }, expectedExceptions = CmisObjectNotFoundException.class, expectedExceptionsMessageRegExp = ".*Object not found:.*")
|
||||
@TestRail(section = { TestGroup.INTEGRATION, TestGroup.CONTENT }, executionType = ExecutionType.REGRESSION, description = "Negative scenarios for update document")
|
||||
public void fileUpdateNegativeScenariosTest() throws Exception
|
||||
@Test(groups = { TestGroup.INTEGRATION, TestGroup.FULL }, expectedExceptions = CmisObjectNotFoundException.class, expectedExceptionsMessageRegExp = ".*Object not found:.*")
|
||||
@TestRail(section = { TestGroup.INTEGRATION, TestGroup.CONTENT }, executionType = ExecutionType.REGRESSION, description = "Negative scenarios for update document")
|
||||
public void fileUpdateNegativeScenariosTest() throws Exception
|
||||
{
|
||||
STEP("1. Create user1, user2");
|
||||
UserModel user1 = dataUser.createRandomTestUser();
|
||||
|
@@ -9,7 +9,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo-tests</artifactId>
|
||||
<version>15.1</version>
|
||||
<version>17.43</version>
|
||||
</parent>
|
||||
|
||||
<developers>
|
||||
|
@@ -7,9 +7,7 @@ import org.alfresco.utility.Utility;
|
||||
import org.alfresco.utility.model.FileModel;
|
||||
import org.alfresco.utility.model.FolderModel;
|
||||
import org.alfresco.utility.model.SiteModel;
|
||||
|
||||
import org.alfresco.utility.model.UserModel;
|
||||
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
@@ -40,17 +38,20 @@ public abstract class RenditionIntegrationTests extends RestTest
|
||||
FileModel file = new FileModel();
|
||||
file.setNodeRef(nodeId);
|
||||
|
||||
// 1. Create a rendition of the file using RESTAPI
|
||||
// 1. Preemptively delete an existing rendition of the file using RESTAPI
|
||||
restClient.withCoreAPI().usingNode(file).deleteNodeRendition(renditionId);
|
||||
|
||||
// 2. Create a rendition of the file using RESTAPI
|
||||
restClient.withCoreAPI().usingNode(file).createNodeRendition(renditionId);
|
||||
Assert.assertEquals(Integer.valueOf(restClient.getStatusCode()).intValue(), HttpStatus.ACCEPTED.value(),
|
||||
"Failed to submit a request for rendition. [" + fileName+ ", " + renditionId+"] [source file, rendition ID]. ");
|
||||
|
||||
// 2. Verify that a rendition of the file is created and has content using RESTAPI
|
||||
// 3. Verify that a rendition of the file is created and has content using RESTAPI
|
||||
RestResponse restResponse = restClient.withCoreAPI().usingNode(file).getNodeRenditionContentUntilIsCreated(renditionId);
|
||||
Assert.assertEquals(Integer.valueOf(restClient.getStatusCode()).intValue(), HttpStatus.OK.value(),
|
||||
"Failed to produce rendition. [" + fileName+ ", " + renditionId+"] [source file, rendition ID] ");
|
||||
|
||||
// 3. Check the returned content type
|
||||
// 4. Check the returned content type
|
||||
Assert.assertEquals(restClient.getResponseHeaders().getValue("Content-Type"), expectedMimeType+";charset=UTF-8",
|
||||
"Rendition was created but it has the wrong Content-Type. [" + fileName+ ", " + renditionId + "] [source file, rendition ID]");
|
||||
|
||||
|
@@ -16,7 +16,7 @@ import org.testng.annotations.Test;
|
||||
*/
|
||||
public class GetProcessSanityTests extends RestTest
|
||||
{
|
||||
private UserModel userWhoStartsProcess, assignee;
|
||||
private UserModel userWhoStartsProcess, assignee, user;
|
||||
private RestProcessModel addedProcess, process;
|
||||
|
||||
@BeforeClass(alwaysRun = true)
|
||||
@@ -24,6 +24,7 @@ public class GetProcessSanityTests extends RestTest
|
||||
{
|
||||
userWhoStartsProcess = dataUser.createRandomTestUser();
|
||||
assignee = dataUser.createRandomTestUser();
|
||||
user = dataUser.createRandomTestUser();
|
||||
addedProcess = restClient.authenticateUser(userWhoStartsProcess).withWorkflowAPI().addProcess("activitiAdhoc", assignee, false, CMISUtil.Priority.High);
|
||||
}
|
||||
|
||||
@@ -59,4 +60,13 @@ public class GetProcessSanityTests extends RestTest
|
||||
process.assertThat().field("id").is(addedProcess.getId())
|
||||
.and().field("startUserId").is(addedProcess.getStartUserId());
|
||||
}
|
||||
|
||||
@TestRail(section = { TestGroup.REST_API, TestGroup.PROCESSES }, executionType = ExecutionType.SANITY,
|
||||
description = "Verify User that is not involved in a process cannot get that process using REST API and status code is FORBIDDEN (403)")
|
||||
@Test(groups = { TestGroup.REST_API, TestGroup.WORKFLOW, TestGroup.PROCESSES, TestGroup.SANITY })
|
||||
public void shouldNotGetProcessesByNotInvolvedUser() throws Exception
|
||||
{
|
||||
process = restClient.authenticateUser(user).withWorkflowAPI().usingProcess(addedProcess).getProcess();
|
||||
restClient.assertStatusCodeIs(HttpStatus.FORBIDDEN);
|
||||
}
|
||||
}
|
||||
|
@@ -9,7 +9,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo-tests</artifactId>
|
||||
<version>15.1</version>
|
||||
<version>17.43</version>
|
||||
</parent>
|
||||
|
||||
<developers>
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo-packaging</artifactId>
|
||||
<version>15.1</version>
|
||||
<version>17.43</version>
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
@@ -144,7 +144,7 @@
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>buildnumber-maven-plugin</artifactId>
|
||||
<version>1.4</version>
|
||||
<version>3.0.0</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>validate</phase>
|
||||
|
79
pom.xml
79
pom.xml
@@ -2,7 +2,7 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>alfresco-community-repo</artifactId>
|
||||
<version>15.1</version>
|
||||
<version>17.43</version>
|
||||
<packaging>pom</packaging>
|
||||
<name>Alfresco Community Repo Parent</name>
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
<properties>
|
||||
<acs.version.major>7</acs.version.major>
|
||||
<acs.version.minor>2</acs.version.minor>
|
||||
<acs.version.minor>3</acs.version.minor>
|
||||
<acs.version.revision>0</acs.version.revision>
|
||||
<acs.version.label />
|
||||
<amp.min.version>${acs.version.major}.0.0</amp.min.version>
|
||||
@@ -51,53 +51,55 @@
|
||||
<dependency.alfresco-log-sanitizer.version>0.2</dependency.alfresco-log-sanitizer.version>
|
||||
<dependency.activiti-engine.version>5.23.0</dependency.activiti-engine.version>
|
||||
<dependency.activiti.version>5.23.0</dependency.activiti.version>
|
||||
<dependency.alfresco-transform-model.version>1.4.15</dependency.alfresco-transform-model.version>
|
||||
<dependency.alfresco-transform-service.version>1.5.3</dependency.alfresco-transform-service.version>
|
||||
<dependency.alfresco-transform-core.version>2.6.0</dependency.alfresco-transform-core.version>
|
||||
<dependency.alfresco-greenmail.version>6.2</dependency.alfresco-greenmail.version>
|
||||
<dependency.acs-event-model.version>0.0.13</dependency.acs-event-model.version>
|
||||
<dependency.acs-event-model.version>0.0.15</dependency.acs-event-model.version>
|
||||
|
||||
<dependency.spring.version>5.3.15</dependency.spring.version>
|
||||
<dependency.spring.version>5.3.21</dependency.spring.version>
|
||||
<dependency.antlr.version>3.5.2</dependency.antlr.version>
|
||||
<dependency.jackson.version>2.13.1</dependency.jackson.version>
|
||||
<dependency.jackson-databind.version>2.13.1</dependency.jackson-databind.version>
|
||||
<dependency.cxf.version>3.5.0</dependency.cxf.version>
|
||||
<dependency.jackson.version>2.13.3</dependency.jackson.version>
|
||||
<dependency.jackson-databind.version>2.13.3</dependency.jackson-databind.version>
|
||||
<dependency.cxf.version>3.5.3</dependency.cxf.version>
|
||||
<dependency.opencmis.version>1.0.0</dependency.opencmis.version>
|
||||
<dependency.webscripts.version>8.28</dependency.webscripts.version>
|
||||
<dependency.webscripts.version>8.31</dependency.webscripts.version>
|
||||
<dependency.bouncycastle.version>1.70</dependency.bouncycastle.version>
|
||||
<dependency.mockito-core.version>3.11.2</dependency.mockito-core.version>
|
||||
<dependency.org-json.version>20211205</dependency.org-json.version>
|
||||
<dependency.mockito-core.version>4.6.1</dependency.mockito-core.version>
|
||||
<dependency.assertj.version>3.23.1</dependency.assertj.version>
|
||||
<dependency.org-json.version>20220320</dependency.org-json.version>
|
||||
<dependency.commons-dbcp.version>2.9.0</dependency.commons-dbcp.version>
|
||||
<dependency.commons-io.version>2.11.0</dependency.commons-io.version>
|
||||
<dependency.gson.version>2.8.5</dependency.gson.version>
|
||||
<dependency.gson.version>2.8.9</dependency.gson.version>
|
||||
<dependency.httpclient.version>4.5.13</dependency.httpclient.version>
|
||||
<dependency.httpcore.version>4.4.15</dependency.httpcore.version>
|
||||
<dependency.commons-httpclient.version>3.1-HTTPCLIENT-1265</dependency.commons-httpclient.version>
|
||||
<dependency.xercesImpl.version>2.12.2</dependency.xercesImpl.version>
|
||||
<dependency.slf4j.version>1.7.35</dependency.slf4j.version>
|
||||
<dependency.gytheio.version>0.16</dependency.gytheio.version>
|
||||
<dependency.groovy.version>3.0.9</dependency.groovy.version>
|
||||
<dependency.tika.version>2.2.1</dependency.tika.version>
|
||||
<dependency.spring-security.version>5.6.1</dependency.spring-security.version>
|
||||
<dependency.groovy.version>3.0.11</dependency.groovy.version>
|
||||
<dependency.tika.version>2.4.1</dependency.tika.version>
|
||||
<dependency.spring-security.version>5.7.2</dependency.spring-security.version>
|
||||
<dependency.truezip.version>7.7.10</dependency.truezip.version>
|
||||
<dependency.poi.version>4.1.2</dependency.poi.version>
|
||||
<dependency.poi.version>5.2.2</dependency.poi.version>
|
||||
<dependency.ooxml-schemas.version>1.4</dependency.ooxml-schemas.version>
|
||||
<dependency.keycloak.version>15.0.2</dependency.keycloak.version>
|
||||
<dependency.jboss.logging.version>3.4.3.Final</dependency.jboss.logging.version>
|
||||
<dependency.jboss.logging.version>3.5.0.Final</dependency.jboss.logging.version>
|
||||
<dependency.camel.version>3.15.0</dependency.camel.version> <!-- when bumping this version, please keep track/sync with included netty.io dependencies (can cause dependency conflicts)-->
|
||||
<dependency.activemq.version>5.16.1</dependency.activemq.version>
|
||||
<dependency.apache-compress.version>1.21</dependency.apache-compress.version>
|
||||
<dependency.apache.taglibs.version>1.2.5</dependency.apache.taglibs.version>
|
||||
<dependency.awaitility.version>4.1.1</dependency.awaitility.version>
|
||||
<dependency.awaitility.version>4.2.0</dependency.awaitility.version>
|
||||
<dependency.swagger-ui.version>3.38.0</dependency.swagger-ui.version>
|
||||
<dependency.swagger-parser.version>1.0.56</dependency.swagger-parser.version>
|
||||
<dependency.swagger-parser.version>1.0.61</dependency.swagger-parser.version>
|
||||
<dependency.maven-filtering.version>3.1.1</dependency.maven-filtering.version>
|
||||
<dependency.maven-artifact.version>3.8.4</dependency.maven-artifact.version>
|
||||
<dependency.maven-artifact.version>3.8.6</dependency.maven-artifact.version>
|
||||
<dependency.jdom2.version>2.0.6.1</dependency.jdom2.version>
|
||||
|
||||
<dependency.jakarta-jaxb-api.version>2.3.3</dependency.jakarta-jaxb-api.version>
|
||||
<dependency.jakarta-ws-api.version>2.3.3</dependency.jakarta-ws-api.version>
|
||||
<dependency.jakarta-soap-api.version>1.4.2</dependency.jakarta-soap-api.version>
|
||||
<dependency.jakarta-activation-api.version>1.2.2</dependency.jakarta-activation-api.version>
|
||||
<dependency.jakarta-annotation-api.version>1.3.5</dependency.jakarta-annotation-api.version>
|
||||
<dependency.jakarta-annotation-api.version>2.1.1</dependency.jakarta-annotation-api.version>
|
||||
<dependency.jakarta-transaction-api.version>1.3.3</dependency.jakarta-transaction-api.version>
|
||||
<dependency.jakarta-jws-api.version>2.1.0</dependency.jakarta-jws-api.version>
|
||||
<dependency.jakarta-mail-api.version>1.6.5</dependency.jakarta-mail-api.version>
|
||||
@@ -112,13 +114,13 @@
|
||||
<alfresco.maven-plugin.version>2.2.0</alfresco.maven-plugin.version>
|
||||
<license-maven-plugin.version>2.0.1.alfresco-2</license-maven-plugin.version>
|
||||
|
||||
<dependency.postgresql.version>42.3.2</dependency.postgresql.version>
|
||||
<dependency.mysql.version>8.0.27</dependency.mysql.version>
|
||||
<dependency.postgresql.version>42.4.0</dependency.postgresql.version>
|
||||
<dependency.mysql.version>8.0.29</dependency.mysql.version>
|
||||
<dependency.mysql-image.version>8</dependency.mysql-image.version>
|
||||
<dependency.mariadb.version>2.7.4</dependency.mariadb.version>
|
||||
<dependency.tas-utility.version>3.0.47</dependency.tas-utility.version>
|
||||
<dependency.tas-utility.version>3.0.48</dependency.tas-utility.version>
|
||||
<dependency.rest-assured.version>3.3.0</dependency.rest-assured.version>
|
||||
<dependency.tas-restapi.version>1.79</dependency.tas-restapi.version>
|
||||
<dependency.tas-restapi.version>1.87</dependency.tas-restapi.version>
|
||||
<dependency.tas-cmis.version>1.31</dependency.tas-cmis.version>
|
||||
<dependency.tas-email.version>1.8</dependency.tas-email.version>
|
||||
<dependency.tas-webdav.version>1.6</dependency.tas-webdav.version>
|
||||
@@ -146,7 +148,7 @@
|
||||
<connection>scm:git:https://github.com/Alfresco/alfresco-community-repo.git</connection>
|
||||
<developerConnection>scm:git:https://github.com/Alfresco/alfresco-community-repo.git</developerConnection>
|
||||
<url>https://github.com/Alfresco/alfresco-community-repo</url>
|
||||
<tag>15.1</tag>
|
||||
<tag>17.43</tag>
|
||||
</scm>
|
||||
|
||||
<distributionManagement>
|
||||
@@ -403,7 +405,7 @@
|
||||
<dependency>
|
||||
<groupId>org.apache.xmlbeans</groupId>
|
||||
<artifactId>xmlbeans</artifactId>
|
||||
<version>3.1.0</version>
|
||||
<version>5.1.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.json</groupId>
|
||||
@@ -631,13 +633,13 @@
|
||||
<dependency>
|
||||
<groupId>com.drewnoakes</groupId>
|
||||
<artifactId>metadata-extractor</artifactId>
|
||||
<version>2.16.0</version>
|
||||
<version>2.18.0</version>
|
||||
</dependency>
|
||||
<!-- upgrade dependency from TIKA -->
|
||||
<dependency>
|
||||
<groupId>com.github.junrar</groupId>
|
||||
<artifactId>junrar</artifactId>
|
||||
<version>7.4.1</version>
|
||||
<version>7.5.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.fge</groupId>
|
||||
@@ -648,7 +650,7 @@
|
||||
<dependency>
|
||||
<groupId>org.jsoup</groupId>
|
||||
<artifactId>jsoup</artifactId>
|
||||
<version>1.14.3</version>
|
||||
<version>1.15.2</version>
|
||||
</dependency>
|
||||
<!-- upgrade dependency from TIKA -->
|
||||
<dependency>
|
||||
@@ -727,7 +729,7 @@
|
||||
<dependency>
|
||||
<groupId>joda-time</groupId>
|
||||
<artifactId>joda-time</artifactId>
|
||||
<version>2.10.13</version>
|
||||
<version>2.10.14</version>
|
||||
</dependency>
|
||||
|
||||
<!-- provided dependencies -->
|
||||
@@ -754,6 +756,11 @@
|
||||
<artifactId>mockito-core</artifactId>
|
||||
<version>${dependency.mockito-core.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.assertj</groupId>
|
||||
<artifactId>assertj-core</artifactId>
|
||||
<version>${dependency.assertj.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-dbcp2</artifactId>
|
||||
@@ -867,7 +874,7 @@
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>1.18.22</version>
|
||||
<version>1.18.24</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
@@ -887,7 +894,7 @@
|
||||
<plugin>
|
||||
<groupId>io.fabric8</groupId>
|
||||
<artifactId>docker-maven-plugin</artifactId>
|
||||
<version>0.38.0</version>
|
||||
<version>0.40.1</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
@@ -908,7 +915,7 @@
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-javadoc-plugin</artifactId>
|
||||
<version>3.3.1</version>
|
||||
<version>3.4.0</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
@@ -918,11 +925,11 @@
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-dependency-plugin</artifactId>
|
||||
<version>3.1.2</version>
|
||||
<version>3.3.0</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<version>3.3.0</version>
|
||||
<version>3.4.1</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.alfresco.maven.plugin</groupId>
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo</artifactId>
|
||||
<version>15.1</version>
|
||||
<version>17.43</version>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
@@ -47,7 +47,7 @@
|
||||
<dependency>
|
||||
<groupId>org.apache.santuario</groupId>
|
||||
<artifactId>xmlsec</artifactId>
|
||||
<version>2.3.0</version>
|
||||
<version>3.0.0</version>
|
||||
</dependency>
|
||||
<!-- newer version, see REPO-3133 -->
|
||||
<dependency>
|
||||
@@ -87,6 +87,11 @@
|
||||
<artifactId>mockito-core</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.assertj</groupId>
|
||||
<artifactId>assertj-core</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-test</artifactId>
|
||||
|
@@ -1,32 +1,33 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Remote API
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Remote API
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.repo.web.scripts.action;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import org.alfresco.repo.action.access.ActionAccessRestriction;
|
||||
import org.alfresco.service.cmr.action.Action;
|
||||
import org.alfresco.service.cmr.action.ExecutionSummary;
|
||||
import org.springframework.extensions.webscripts.Cache;
|
||||
@@ -58,6 +59,7 @@ public abstract class AbstractExecuteActionWebscript extends AbstractActionWebsc
|
||||
|
||||
// Ask for it to be run in the background
|
||||
// It will be available to execute once the webscript finishes
|
||||
ActionAccessRestriction.setActionContext(action, ActionAccessRestriction.V0_ACTION_CONTEXT);
|
||||
actionService.executeAction(
|
||||
action, null,
|
||||
false, true
|
||||
|
@@ -1,28 +1,28 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Remote API
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Remote API
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.repo.web.scripts.rule;
|
||||
|
||||
import java.io.Serializable;
|
||||
@@ -38,6 +38,8 @@ import org.alfresco.error.AlfrescoRuntimeException;
|
||||
import org.alfresco.repo.action.ActionConditionImpl;
|
||||
import org.alfresco.repo.action.ActionImpl;
|
||||
import org.alfresco.repo.action.CompositeActionImpl;
|
||||
import org.alfresco.repo.action.RuntimeActionService;
|
||||
import org.alfresco.repo.action.access.ActionAccessRestriction;
|
||||
import org.alfresco.service.cmr.action.Action;
|
||||
import org.alfresco.service.cmr.action.ActionCondition;
|
||||
import org.alfresco.service.cmr.action.ActionService;
|
||||
@@ -85,6 +87,8 @@ public abstract class AbstractRuleWebScript extends DeclarativeWebScript
|
||||
protected FileFolderService fileFolderService;
|
||||
protected NamespaceService namespaceService;
|
||||
|
||||
private RuntimeActionService runtimeActionService;
|
||||
|
||||
/**
|
||||
* Sets the node service instance
|
||||
*
|
||||
@@ -145,6 +149,10 @@ public abstract class AbstractRuleWebScript extends DeclarativeWebScript
|
||||
this.namespaceService = namespaceService;
|
||||
}
|
||||
|
||||
public void setRuntimeActionService(RuntimeActionService runtimeActionService) {
|
||||
this.runtimeActionService = runtimeActionService;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses the request and providing it's valid returns the NodeRef.
|
||||
*
|
||||
@@ -432,10 +440,22 @@ public abstract class AbstractRuleWebScript extends DeclarativeWebScript
|
||||
|
||||
protected void checkRule(Rule rule)
|
||||
{
|
||||
List<String> ruleTypes = rule.getRuleTypes();
|
||||
if (ruleTypes.contains(RULE_OUTBOUND))
|
||||
List<Action> actions = ((CompositeActionImpl) rule.getAction()).getActions();
|
||||
|
||||
checkRestrictedAccessActions(actions);
|
||||
checkRuleOutboundHasNoCheckOutAction(rule, actions);
|
||||
}
|
||||
|
||||
private void checkRestrictedAccessActions(List<Action> actions) {
|
||||
for (Action action : actions) {
|
||||
ActionAccessRestriction.setActionContext(action, ActionAccessRestriction.RULE_ACTION_CONTEXT);
|
||||
runtimeActionService.verifyActionAccessRestrictions(action);
|
||||
}
|
||||
}
|
||||
|
||||
private void checkRuleOutboundHasNoCheckOutAction(Rule rule, List<Action> actions) {
|
||||
if (rule.getRuleTypes().contains(RULE_OUTBOUND))
|
||||
{
|
||||
List<Action> actions = ((CompositeActionImpl) rule.getAction()).getActions();
|
||||
for (Action action : actions)
|
||||
{
|
||||
if (action.getActionDefinitionName().equalsIgnoreCase(ACTION_CHECK_OUT))
|
||||
|
@@ -1,28 +1,28 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Remote API
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Remote API
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.repo.web.scripts.rule;
|
||||
|
||||
import java.io.IOException;
|
||||
@@ -30,6 +30,7 @@ import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.alfresco.repo.action.ActionImpl;
|
||||
import org.alfresco.repo.action.access.ActionAccessRestriction;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
@@ -89,6 +90,7 @@ public class ActionQueuePost extends AbstractRuleWebScript
|
||||
}
|
||||
|
||||
// Execute action
|
||||
ActionAccessRestriction.setActionContext(action, ActionAccessRestriction.V0_ACTION_CONTEXT);
|
||||
actionService.executeAction(action, actionedUponNode, true, async);
|
||||
|
||||
// Prepair model
|
||||
|
@@ -2,7 +2,7 @@
|
||||
* #%L
|
||||
* Alfresco Remote API
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
@@ -390,8 +390,9 @@ public class LockInfoImpl implements Serializable, LockInfo
|
||||
else
|
||||
{
|
||||
Date now = dateNow();
|
||||
long timeout = ((expires.getTime() - now.getTime()) / 1000);
|
||||
return timeout;
|
||||
long remainingTimeoutInSecondsRoundedUp = (Math.max(expires.getTime() - now.getTime(), 0) + 999) / 1000;
|
||||
|
||||
return remainingTimeoutInSecondsRoundedUp;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -1,28 +1,28 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Remote API
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Remote API
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.repo.webdav;
|
||||
|
||||
import java.util.Date;
|
||||
@@ -449,30 +449,18 @@ public class LockMethod extends WebDAVMethod
|
||||
*/
|
||||
protected final void createLock(FileInfo lockNode, String userName) throws WebDAVServerException
|
||||
{
|
||||
// Create Lock token
|
||||
lockToken = WebDAV.makeLockToken(lockNode.getNodeRef(), userName);
|
||||
|
||||
if (createExclusive)
|
||||
{
|
||||
// Lock the node
|
||||
lockInfo.setTimeoutSeconds(getLockTimeout());
|
||||
lockInfo.setExclusiveLockToken(lockToken);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!createExclusive) {
|
||||
// Shared lock creation should already have been prohibited when parsing the request body
|
||||
throw new WebDAVServerException(HttpServletResponse.SC_PRECONDITION_FAILED);
|
||||
}
|
||||
|
||||
// Store lock depth
|
||||
lockToken = WebDAV.makeLockToken(lockNode.getNodeRef(), userName);
|
||||
lockInfo.setExclusiveLockToken(lockToken);
|
||||
lockInfo.setDepth(WebDAV.getDepthName(m_depth));
|
||||
// Store lock scope (shared/exclusive)
|
||||
String scope = createExclusive ? WebDAV.XML_EXCLUSIVE : WebDAV.XML_SHARED;
|
||||
lockInfo.setScope(scope);
|
||||
// Store the owner of this lock
|
||||
lockInfo.setScope(WebDAV.XML_EXCLUSIVE);
|
||||
lockInfo.setOwner(userName);
|
||||
// Lock the node
|
||||
getDAVLockService().lock(lockNode.getNodeRef(), lockInfo);
|
||||
|
||||
getDAVLockService().lock(lockNode.getNodeRef(), lockInfo, getLockTimeout());
|
||||
|
||||
if (logger.isDebugEnabled())
|
||||
{
|
||||
|
@@ -1,28 +1,28 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Remote API
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Remote API
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
package org.alfresco.repo.webdav;
|
||||
|
||||
@@ -56,7 +56,9 @@ public interface WebDAVLockService
|
||||
void lock(NodeRef nodeRef, String userName, int timeout);
|
||||
|
||||
void lock(NodeRef nodeRef, LockInfo lockInfo);
|
||||
|
||||
|
||||
void lock(NodeRef nodeRef, LockInfo lockInfo, int timeout);
|
||||
|
||||
/**
|
||||
* Shared method for webdav/vti to unlock node. Unlocked node is automatically removed from
|
||||
* current sessions's locked resources list.
|
||||
|
@@ -2,7 +2,7 @@
|
||||
* #%L
|
||||
* Alfresco Remote API
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
@@ -32,7 +32,6 @@ import java.util.List;
|
||||
import javax.servlet.http.HttpSession;
|
||||
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.repo.lock.LockUtils;
|
||||
import org.alfresco.repo.lock.mem.Lifetime;
|
||||
import org.alfresco.repo.lock.mem.LockState;
|
||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||
@@ -237,57 +236,15 @@ public class WebDAVLockServiceImpl implements WebDAVLockService
|
||||
}
|
||||
}
|
||||
|
||||
public void lock(NodeRef nodeRef, LockInfo lockInfo)
|
||||
{
|
||||
boolean performSessionBehavior = false;
|
||||
long timeout;
|
||||
|
||||
timeout = lockInfo.getRemainingTimeoutSeconds();
|
||||
|
||||
// ALF-11777 fix, do not lock node for more than 24 hours (webdav and vti)
|
||||
if (timeout >= WebDAV.TIMEOUT_24_HOURS || timeout == WebDAV.TIMEOUT_INFINITY)
|
||||
{
|
||||
timeout = WebDAV.TIMEOUT_24_HOURS;
|
||||
lockInfo.setTimeoutSeconds((int) timeout);
|
||||
performSessionBehavior = true;
|
||||
}
|
||||
|
||||
// TODO: lock children according to depth? lock type?
|
||||
final String additionalInfo = lockInfo.toJSON();
|
||||
lockService.lock(nodeRef, LockType.WRITE_LOCK, (int) timeout, Lifetime.EPHEMERAL, additionalInfo);
|
||||
|
||||
|
||||
if (logger.isDebugEnabled())
|
||||
{
|
||||
logger.debug(nodeRef + " was locked for " + timeout + " seconds.");
|
||||
}
|
||||
|
||||
if (performSessionBehavior)
|
||||
{
|
||||
HttpSession session = currentSession.get();
|
||||
|
||||
if (session == null)
|
||||
{
|
||||
if (logger.isDebugEnabled())
|
||||
{
|
||||
logger.debug("Couldn't find current session.");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
storeObjectInSessionList(session, LOCKED_RESOURCES, new Pair<String, NodeRef>(AuthenticationUtil.getRunAsUser(), nodeRef));
|
||||
|
||||
if (logger.isDebugEnabled())
|
||||
{
|
||||
logger.debug(nodeRef + " was added to the session " + session.getId() + " for post expiration processing.");
|
||||
}
|
||||
}
|
||||
public void lock(NodeRef nodeRef, LockInfo lockInfo) {
|
||||
int timeout = (int) lockInfo.getRemainingTimeoutSeconds();
|
||||
lock(nodeRef, lockInfo, timeout);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Shared method for webdav/vti protocols to lock node. If node is locked for more than 24 hours it is automatically added
|
||||
* to the current session locked resources list.
|
||||
*
|
||||
*
|
||||
* @param nodeRef the node to lock
|
||||
* @param userName userName
|
||||
* @param timeout the number of seconds before the locks expires
|
||||
@@ -295,8 +252,68 @@ public class WebDAVLockServiceImpl implements WebDAVLockService
|
||||
@Override
|
||||
public void lock(NodeRef nodeRef, String userName, int timeout)
|
||||
{
|
||||
LockInfo lockInfo = createLock(nodeRef, userName, true, timeout);
|
||||
lock(nodeRef, lockInfo);
|
||||
LockInfo lockInfo = createLock(nodeRef, userName, true);
|
||||
lock(nodeRef, lockInfo, timeout);
|
||||
}
|
||||
|
||||
public void lock(NodeRef nodeRef, LockInfo lockInfo, int timeout)
|
||||
{
|
||||
// ALF-11777 fix, do not lock node for more than 24 hours (webdav and vti)
|
||||
boolean performSessionBehavior = false;
|
||||
if (timeout > WebDAV.TIMEOUT_24_HOURS || timeout == WebDAV.TIMEOUT_INFINITY)
|
||||
{
|
||||
timeout = WebDAV.TIMEOUT_24_HOURS;
|
||||
performSessionBehavior = true;
|
||||
}
|
||||
|
||||
validateLockTimeout(timeout);
|
||||
lockInner(nodeRef, lockInfo, timeout);
|
||||
|
||||
if (performSessionBehavior)
|
||||
{
|
||||
performLockSessionBehavior(nodeRef);
|
||||
}
|
||||
}
|
||||
|
||||
private void validateLockTimeout(int timeout) {
|
||||
if (timeout != WebDAV.TIMEOUT_INFINITY && timeout == LockService.TIMEOUT_INFINITY) {
|
||||
throw new IllegalArgumentException("Timeout == " + LockService.TIMEOUT_INFINITY +
|
||||
" is treated as permanence for locks. For maximum allowed timeout set " + WebDAV.TIMEOUT_INFINITY);
|
||||
}
|
||||
}
|
||||
|
||||
private void lockInner(NodeRef nodeRef, LockInfo lockInfo, int timeout) {
|
||||
//Update/set true expiry date of a lock to be used in additional information
|
||||
lockInfo.setTimeoutSeconds(timeout);
|
||||
|
||||
// TODO: lock children according to depth? lock type?
|
||||
final String additionalInfo = lockInfo.toJSON();
|
||||
lockService.lock(nodeRef, LockType.WRITE_LOCK, timeout, Lifetime.EPHEMERAL, additionalInfo);
|
||||
|
||||
if (logger.isDebugEnabled())
|
||||
{
|
||||
logger.debug(nodeRef + " was locked for " + timeout + " seconds.");
|
||||
}
|
||||
}
|
||||
|
||||
private void performLockSessionBehavior(NodeRef nodeRef) {
|
||||
HttpSession session = currentSession.get();
|
||||
|
||||
if (session == null)
|
||||
{
|
||||
if (logger.isDebugEnabled())
|
||||
{
|
||||
logger.debug("Couldn't find current session.");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
storeObjectInSessionList(session, LOCKED_RESOURCES, new Pair<String, NodeRef>(AuthenticationUtil.getRunAsUser(), nodeRef));
|
||||
|
||||
if (logger.isDebugEnabled())
|
||||
{
|
||||
logger.debug(nodeRef + " was added to the session " + session.getId() + " for post expiration processing.");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -444,19 +461,15 @@ public class WebDAVLockServiceImpl implements WebDAVLockService
|
||||
* @param nodeRef NodeRef
|
||||
* @param userName String
|
||||
* @param createExclusive boolean
|
||||
* @param timeoutSecs int
|
||||
*/
|
||||
private LockInfo createLock(NodeRef nodeRef, String userName, boolean createExclusive, int timeoutSecs)
|
||||
private LockInfo createLock(NodeRef nodeRef, String userName, boolean createExclusive)
|
||||
{
|
||||
// Create Lock token
|
||||
String lockToken = WebDAV.makeLockToken(nodeRef, userName);
|
||||
|
||||
LockInfo lockInfo = new LockInfoImpl();
|
||||
|
||||
if (createExclusive)
|
||||
{
|
||||
// Lock the node
|
||||
lockInfo.setTimeoutSeconds(timeoutSecs);
|
||||
lockInfo.setExclusiveLockToken(lockToken);
|
||||
}
|
||||
else
|
||||
@@ -464,15 +477,11 @@ public class WebDAVLockServiceImpl implements WebDAVLockService
|
||||
lockInfo.addSharedLockToken(lockToken);
|
||||
}
|
||||
|
||||
// Store lock depth
|
||||
lockInfo.setDepth(WebDAV.getDepthName(WebDAV.DEPTH_INFINITY));
|
||||
// Store lock scope (shared/exclusive)
|
||||
String scope = createExclusive ? WebDAV.XML_EXCLUSIVE : WebDAV.XML_SHARED;
|
||||
lockInfo.setScope(scope);
|
||||
// Store the owner of this lock
|
||||
lockInfo.setOwner(userName);
|
||||
|
||||
// TODO: to help with debugging/refactoring (remove later)
|
||||
|
||||
String currentUser = AuthenticationUtil.getFullyAuthenticatedUser();
|
||||
if (!currentUser.equals(userName))
|
||||
{
|
||||
|
60
remote-api/src/main/java/org/alfresco/rest/api/Rules.java
Normal file
60
remote-api/src/main/java/org/alfresco/rest/api/Rules.java
Normal file
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Remote API
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
package org.alfresco.rest.api;
|
||||
|
||||
import org.alfresco.rest.api.model.rules.Rule;
|
||||
import org.alfresco.rest.framework.resource.parameters.CollectionWithPagingInfo;
|
||||
import org.alfresco.rest.framework.resource.parameters.Paging;
|
||||
import org.alfresco.service.Experimental;
|
||||
|
||||
/**
|
||||
* Folder node rules API.
|
||||
*
|
||||
*/
|
||||
@Experimental
|
||||
public interface Rules
|
||||
{
|
||||
/**
|
||||
* Get rules for node's and rule set's IDs
|
||||
*
|
||||
* @param folderNodeId - folder node ID
|
||||
* @param ruleSetId - rule set ID
|
||||
* @param paging - {@link Paging} information
|
||||
* @return {@link CollectionWithPagingInfo} containing a list page of folder rules
|
||||
*/
|
||||
CollectionWithPagingInfo<Rule> getRules(String folderNodeId, String ruleSetId, Paging paging);
|
||||
|
||||
/**
|
||||
* Get rule for rule's ID and check associations with folder node and rule set node
|
||||
*
|
||||
* @param folderNodeId - folder node ID
|
||||
* @param ruleSetId - rule set ID
|
||||
* @param ruleId - rule ID
|
||||
* @return {@link Rule} definition
|
||||
*/
|
||||
Rule getRuleById(String folderNodeId, String ruleSetId, String ruleId);
|
||||
}
|
@@ -2,7 +2,7 @@
|
||||
* #%L
|
||||
* Alfresco Remote API
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2017 Alfresco Software Limited
|
||||
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
@@ -26,6 +26,7 @@
|
||||
package org.alfresco.rest.api.impl;
|
||||
|
||||
import org.alfresco.error.AlfrescoRuntimeException;
|
||||
import org.alfresco.repo.action.access.ActionAccessRestriction;
|
||||
import org.alfresco.rest.api.Actions;
|
||||
import org.alfresco.rest.api.model.Action;
|
||||
import org.alfresco.rest.api.model.ActionDefinition;
|
||||
@@ -286,6 +287,7 @@ public class ActionsImpl implements Actions
|
||||
cmrAction = actionService.createAction(action.getActionDefinitionId());
|
||||
}
|
||||
|
||||
ActionAccessRestriction.setActionContext(cmrAction, ActionAccessRestriction.V1_ACTION_CONTEXT);
|
||||
actionService.executeAction(cmrAction, actionedUponNodeRef, true, true);
|
||||
|
||||
// Create user result.
|
||||
|
@@ -0,0 +1,177 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Remote API
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
package org.alfresco.rest.api.impl;
|
||||
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.repo.rule.RuleModel;
|
||||
import org.alfresco.rest.api.Nodes;
|
||||
import org.alfresco.rest.api.Rules;
|
||||
import org.alfresco.rest.api.model.rules.Rule;
|
||||
import org.alfresco.rest.api.model.rules.RuleSet;
|
||||
import org.alfresco.rest.framework.core.exceptions.InvalidArgumentException;
|
||||
import org.alfresco.rest.framework.core.exceptions.PermissionDeniedException;
|
||||
import org.alfresco.rest.framework.resource.parameters.CollectionWithPagingInfo;
|
||||
import org.alfresco.rest.framework.resource.parameters.ListPage;
|
||||
import org.alfresco.rest.framework.resource.parameters.Paging;
|
||||
import org.alfresco.service.Experimental;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.rule.RuleService;
|
||||
import org.alfresco.service.cmr.security.AccessStatus;
|
||||
import org.alfresco.service.cmr.security.PermissionService;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Experimental
|
||||
public class RulesImpl implements Rules
|
||||
{
|
||||
private static final String RULE_SET_EXPECTED_TYPE_NAME = "rule set";
|
||||
|
||||
private Nodes nodes;
|
||||
|
||||
private PermissionService permissionService;
|
||||
|
||||
private RuleService ruleService;
|
||||
|
||||
@Override
|
||||
public CollectionWithPagingInfo<Rule> getRules(final String folderNodeId, final String ruleSetId, final Paging paging)
|
||||
{
|
||||
final NodeRef folderNodeRef = validateFolderNode(folderNodeId);
|
||||
validateRuleSetNode(ruleSetId, folderNodeRef);
|
||||
|
||||
final List<Rule> rules = ruleService.getRules(folderNodeRef).stream()
|
||||
.map(Rule::from)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
return ListPage.of(rules, paging);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Rule getRuleById(final String folderNodeId, final String ruleSetId, final String ruleId)
|
||||
{
|
||||
final NodeRef folderNodeRef = validateFolderNode(folderNodeId);
|
||||
final NodeRef ruleSetNodeRef = validateRuleSetNode(ruleSetId, folderNodeRef);
|
||||
final NodeRef ruleNodeRef = validateRuleNode(ruleId, ruleSetNodeRef);
|
||||
|
||||
return Rule.from(ruleService.getRule(ruleNodeRef));
|
||||
}
|
||||
|
||||
public void setNodes(Nodes nodes)
|
||||
{
|
||||
this.nodes = nodes;
|
||||
}
|
||||
|
||||
public void setPermissionService(PermissionService permissionService)
|
||||
{
|
||||
this.permissionService = permissionService;
|
||||
}
|
||||
|
||||
public void setRuleService(RuleService ruleService)
|
||||
{
|
||||
this.ruleService = ruleService;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates if folder node exists and user have permission to read from it.
|
||||
*
|
||||
* @param folderNodeId - folder node ID
|
||||
* @return folder node reference
|
||||
* @throws InvalidArgumentException if node is not of an expected type
|
||||
* @throws PermissionDeniedException if user doesn't have right to read from folder
|
||||
*/
|
||||
private NodeRef validateFolderNode(final String folderNodeId)
|
||||
{
|
||||
final NodeRef nodeRef = nodes.validateOrLookupNode(folderNodeId, null);
|
||||
if (permissionService.hasReadPermission(nodeRef) != AccessStatus.ALLOWED) {
|
||||
throw new PermissionDeniedException("Cannot read from this node!");
|
||||
}
|
||||
|
||||
verifyNodeType(nodeRef, ContentModel.TYPE_FOLDER, null);
|
||||
|
||||
return nodeRef;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates if rule set ID is default, node exists and associated folder node matches.
|
||||
*
|
||||
* @param ruleSetId - rule set node ID
|
||||
* @param associatedFolderNodeRef - folder node ref to check the association
|
||||
* @return rule set node reference
|
||||
* @throws InvalidArgumentException in case of not matching associated folder node
|
||||
*/
|
||||
private NodeRef validateRuleSetNode(final String ruleSetId, final NodeRef associatedFolderNodeRef)
|
||||
{
|
||||
if (RuleSet.isDefaultId(ruleSetId))
|
||||
{
|
||||
return ruleService.getRuleSetNode(associatedFolderNodeRef);
|
||||
}
|
||||
|
||||
final NodeRef ruleSetNodeRef = validateNode(ruleSetId, ContentModel.TYPE_SYSTEM_FOLDER, RULE_SET_EXPECTED_TYPE_NAME);
|
||||
if (!ruleService.isRuleSetAssociatedWithFolder(ruleSetNodeRef, associatedFolderNodeRef)) {
|
||||
throw new InvalidArgumentException("Rule set is not associated with folder node!");
|
||||
}
|
||||
|
||||
return ruleSetNodeRef;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates if rule node exists and associated rule set node matches.
|
||||
*
|
||||
* @param ruleId - rule node ID
|
||||
* @param associatedRuleSetNodeRef - rule set node ref to check the association. Can be null
|
||||
* @return rule node reference
|
||||
* @throws InvalidArgumentException in case of not matching associated rule set node
|
||||
*/
|
||||
private NodeRef validateRuleNode(final String ruleId, final NodeRef associatedRuleSetNodeRef)
|
||||
{
|
||||
final NodeRef ruleNodeRef = validateNode(ruleId, RuleModel.TYPE_RULE, null);
|
||||
if (associatedRuleSetNodeRef != null && !ruleService.isRuleAssociatedWithRuleSet(ruleNodeRef, associatedRuleSetNodeRef))
|
||||
{
|
||||
throw new InvalidArgumentException("Rule is not associated with rule set node!");
|
||||
}
|
||||
|
||||
return ruleNodeRef;
|
||||
}
|
||||
|
||||
private NodeRef validateNode(final String nodeId, final QName expectedType, final String expectedTypeName)
|
||||
{
|
||||
final NodeRef nodeRef = nodes.validateNode(nodeId);
|
||||
verifyNodeType(nodeRef, expectedType, expectedTypeName);
|
||||
|
||||
return nodeRef;
|
||||
}
|
||||
|
||||
private void verifyNodeType(final NodeRef nodeRef, final QName expectedType, final String expectedTypeName) {
|
||||
final Set<QName> expectedTypes = Set.of(expectedType);
|
||||
if (!nodes.nodeMatches(nodeRef, expectedTypes, null)) {
|
||||
final String expectedTypeLocalName = (expectedTypeName != null)? expectedTypeName : expectedType.getLocalName();
|
||||
throw new InvalidArgumentException(String.format("NodeId of a %s is expected!", expectedTypeLocalName));
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,81 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Remote API
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
package org.alfresco.rest.api.model.rules;
|
||||
|
||||
import org.alfresco.rest.framework.resource.UniqueId;
|
||||
import org.alfresco.service.Experimental;
|
||||
import org.alfresco.service.cmr.action.CompositeAction;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Experimental
|
||||
public class Rule
|
||||
{
|
||||
|
||||
private String id;
|
||||
private String name;
|
||||
|
||||
public static Rule from(final org.alfresco.service.cmr.rule.Rule ruleModel) {
|
||||
if (ruleModel == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
final Rule rule = new Rule();
|
||||
rule.id = ruleModel.getNodeRef().getId();
|
||||
rule.name = ruleModel.getTitle();
|
||||
|
||||
return rule;
|
||||
}
|
||||
|
||||
@UniqueId
|
||||
public String getId()
|
||||
{
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(String id)
|
||||
{
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name)
|
||||
{
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "Rule{" + "id='" + id + '\'' + ", name='" + name + '\'' + '}';
|
||||
}
|
||||
}
|
@@ -0,0 +1,77 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Remote API
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
package org.alfresco.rest.api.model.rules;
|
||||
|
||||
import org.alfresco.service.Experimental;
|
||||
|
||||
@Experimental
|
||||
public class RuleSet
|
||||
{
|
||||
private static final String DEFAULT_ID = "-default-";
|
||||
|
||||
private String id;
|
||||
|
||||
public static RuleSet of(String id)
|
||||
{
|
||||
final RuleSet ruleSet = new RuleSet();
|
||||
ruleSet.id = id;
|
||||
|
||||
return ruleSet;
|
||||
}
|
||||
|
||||
public boolean isNotDefaultId() {
|
||||
return isNotDefaultId(this.id);
|
||||
}
|
||||
|
||||
public boolean isDefaultId() {
|
||||
return isDefaultId(this.id);
|
||||
}
|
||||
|
||||
public static boolean isNotDefaultId(final String id) {
|
||||
return !isDefaultId(id);
|
||||
}
|
||||
|
||||
public static boolean isDefaultId(final String id) {
|
||||
return DEFAULT_ID.equals(id);
|
||||
}
|
||||
|
||||
public String getId()
|
||||
{
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(String id)
|
||||
{
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "RuleSet{" + "id='" + id + '\'' + '}';
|
||||
}
|
||||
}
|
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Remote API
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
package org.alfresco.rest.api.nodes;
|
||||
|
||||
import org.alfresco.rest.framework.resource.RelationshipResource;
|
||||
import org.alfresco.service.Experimental;
|
||||
|
||||
/**
|
||||
* Folder node rule sets.
|
||||
*
|
||||
*/
|
||||
@Experimental
|
||||
@RelationshipResource(name = "rule-sets", entityResource = NodesEntityResource.class, title = "Folder node rule sets")
|
||||
public class NodeRuleSetsRelation
|
||||
{
|
||||
}
|
@@ -0,0 +1,110 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Remote API
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
package org.alfresco.rest.api.nodes;
|
||||
|
||||
import org.alfresco.rest.api.Rules;
|
||||
import org.alfresco.rest.api.model.rules.Rule;
|
||||
import org.alfresco.rest.framework.WebApiDescription;
|
||||
import org.alfresco.rest.framework.core.exceptions.RelationshipResourceNotFoundException;
|
||||
import org.alfresco.rest.framework.resource.RelationshipResource;
|
||||
import org.alfresco.rest.framework.resource.actions.interfaces.RelationshipResourceAction;
|
||||
import org.alfresco.rest.framework.resource.parameters.CollectionWithPagingInfo;
|
||||
import org.alfresco.rest.framework.resource.parameters.Parameters;
|
||||
import org.alfresco.service.Experimental;
|
||||
import org.alfresco.util.PropertyCheck;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
/**
|
||||
* Folder node's rules.
|
||||
*
|
||||
*/
|
||||
@Experimental
|
||||
@RelationshipResource(name = "rules", entityResource = NodeRuleSetsRelation.class, title = "Folder node rules")
|
||||
public class NodeRulesRelation implements RelationshipResourceAction.Read<Rule>, RelationshipResourceAction.ReadById<Rule>, InitializingBean
|
||||
{
|
||||
|
||||
private Rules rules;
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() throws Exception
|
||||
{
|
||||
PropertyCheck.mandatory(this, "rules", this.rules);
|
||||
}
|
||||
|
||||
/**
|
||||
* List folder rules for given folder node's and rule set's IDs as a page.
|
||||
*
|
||||
* - GET /nodes/{folderNodeId}/rule-sets/{ruleSetId}/rules
|
||||
*
|
||||
* @param folderNodeId - entity resource context for this relationship
|
||||
* @param parameters - will never be null. Contains i.a. paging information and ruleSetId (relationshipId)
|
||||
* @return {@link CollectionWithPagingInfo} containing a page of folder rules
|
||||
*/
|
||||
@WebApiDescription(
|
||||
title = "Get folder node rules",
|
||||
description = "Returns a paged list of folder rules for given node's and rule set's IDs",
|
||||
successStatus = HttpServletResponse.SC_OK
|
||||
)
|
||||
@Override
|
||||
public CollectionWithPagingInfo<Rule> readAll(String folderNodeId, Parameters parameters)
|
||||
{
|
||||
final String ruleSetId = parameters.getRelationshipId();
|
||||
|
||||
return rules.getRules(folderNodeId, ruleSetId, parameters.getPaging());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get single folder rule for given node's, rule set's and rule's IDs.
|
||||
*
|
||||
* - GET /nodes/{folderNodeId}/rule-sets/{ruleSetId}/rules/{ruleId}
|
||||
*
|
||||
* @param folderNodeId - entity resource context for this relationship
|
||||
* @param ruleSetId - rule set node ID (associated with folder node)
|
||||
* @param parameters - will never be null. Contains i.a. ruleId (relationship2Id)
|
||||
* @return {@link Rule} definition
|
||||
* @throws RelationshipResourceNotFoundException in case resource was not found
|
||||
*/
|
||||
@WebApiDescription(
|
||||
title="Get folder node rule",
|
||||
description = "Returns a folder single rule definition for given node's, rule set's and rule's IDs",
|
||||
successStatus = HttpServletResponse.SC_OK
|
||||
)
|
||||
@Override
|
||||
public Rule readById(String folderNodeId, String ruleSetId, Parameters parameters) throws RelationshipResourceNotFoundException
|
||||
{
|
||||
final String ruleId = parameters.getRelationship2Id();
|
||||
|
||||
return rules.getRuleById(folderNodeId, ruleSetId, ruleId);
|
||||
}
|
||||
|
||||
public void setRules(Rules rules)
|
||||
{
|
||||
this.rules = rules;
|
||||
}
|
||||
}
|
@@ -0,0 +1,123 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Remote API
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
package org.alfresco.rest.framework.resource.parameters;
|
||||
|
||||
import org.alfresco.rest.api.search.context.SearchContext;
|
||||
import org.alfresco.service.Experimental;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
@Experimental
|
||||
public class ArrayListPage<E> extends ArrayList<E> implements ListPage<E>
|
||||
{
|
||||
private final Paging paging;
|
||||
private final int totalItems;
|
||||
private final boolean hasMore;
|
||||
|
||||
public ArrayListPage(final List<? extends E> list)
|
||||
{
|
||||
super(list != null ? list : Collections.emptyList());
|
||||
this.paging = null;
|
||||
this.totalItems = this.size();
|
||||
this.hasMore = false;
|
||||
}
|
||||
|
||||
public ArrayListPage(final List<? extends E> list, final Paging paging)
|
||||
{
|
||||
super(sublistFrom(list, paging));
|
||||
this.paging = paging;
|
||||
if (list != null)
|
||||
{
|
||||
this.totalItems = list.size();
|
||||
if (paging != null)
|
||||
{
|
||||
final int start = paging.getSkipCount();
|
||||
final int end = (paging.getMaxItems() == 0) ? list.size() : Math.min(list.size(), start + paging.getMaxItems());
|
||||
this.hasMore = !(list.size() == end);
|
||||
} else {
|
||||
this.hasMore = false;
|
||||
}
|
||||
} else {
|
||||
this.totalItems = 0;
|
||||
this.hasMore = false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Paging getPaging()
|
||||
{
|
||||
return paging;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getTotalItems()
|
||||
{
|
||||
return totalItems;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasMoreItems()
|
||||
{
|
||||
return hasMore;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getQueryExecutionId()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getSourceEntity()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SearchContext getContext()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
private static <E> List<? extends E> sublistFrom(final List<? extends E> list, final Paging paging)
|
||||
{
|
||||
if (list == null)
|
||||
{
|
||||
return Collections.emptyList();
|
||||
}
|
||||
if (paging == null)
|
||||
{
|
||||
return list;
|
||||
}
|
||||
|
||||
final int start = paging.getSkipCount();
|
||||
final int end = (paging.getMaxItems() == 0)? list.size() : Math.min(list.size(), start + paging.getMaxItems());
|
||||
return list.subList(Math.min(start, end), end);
|
||||
}
|
||||
}
|
@@ -2,7 +2,7 @@
|
||||
* #%L
|
||||
* Alfresco Remote API
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
@@ -43,7 +43,7 @@ import java.util.Collections;
|
||||
*
|
||||
* @author Gethin James.
|
||||
*/
|
||||
public class CollectionWithPagingInfo<T> implements SerializablePagedCollection
|
||||
public class CollectionWithPagingInfo<T> implements SerializablePagedCollection<T>
|
||||
{
|
||||
|
||||
private final Collection<T> collection;
|
||||
@@ -80,6 +80,18 @@ public class CollectionWithPagingInfo<T> implements SerializablePagedCollection
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new CollectionWithPagingInfo from a {@link SerializablePagedCollection} instance.
|
||||
*
|
||||
* @param pagedCollection - a collection with paging information
|
||||
* @return CollectionWithPagingInfo
|
||||
*/
|
||||
public static <T> CollectionWithPagingInfo<T> from(SerializablePagedCollection<T> pagedCollection)
|
||||
{
|
||||
return new CollectionWithPagingInfo<>(pagedCollection.getCollection(), pagedCollection.getPaging(), pagedCollection.hasMoreItems(), pagedCollection.getTotalItems(),
|
||||
pagedCollection.getSourceEntity(), pagedCollection.getContext());
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new CollectionWithPagingInfo.
|
||||
* It automatically sets the total items based on the collection size and
|
||||
|
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Remote API
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
package org.alfresco.rest.framework.resource.parameters;
|
||||
|
||||
import org.alfresco.query.PagingResults;
|
||||
import org.alfresco.rest.framework.resource.SerializablePagedCollection;
|
||||
import org.alfresco.service.Experimental;
|
||||
import org.alfresco.util.Pair;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* List page with paging information.
|
||||
*
|
||||
*
|
||||
* @param <E> - list element type
|
||||
*/
|
||||
@Experimental
|
||||
public interface ListPage<E> extends List<E>, PagingResults<E>, SerializablePagedCollection<E>
|
||||
{
|
||||
|
||||
default List<E> getPage()
|
||||
{
|
||||
return this;
|
||||
}
|
||||
|
||||
default Pair<Integer, Integer> getTotalResultCount()
|
||||
{
|
||||
return new Pair<>(this.getTotalItems(), this.getTotalItems());
|
||||
}
|
||||
|
||||
default Collection<E> getCollection()
|
||||
{
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds a collection with paging information.
|
||||
*
|
||||
* @param list - the list that needs to be paged
|
||||
* @param paging - paging request info
|
||||
* @return list page in {@link CollectionWithPagingInfo}
|
||||
* @param <E> - list element type
|
||||
*/
|
||||
static <E> CollectionWithPagingInfo<E> of(final List<? extends E> list, final Paging paging)
|
||||
{
|
||||
if (list == null)
|
||||
{
|
||||
return CollectionWithPagingInfo.asPaged(paging, Collections.emptyList());
|
||||
}
|
||||
|
||||
return CollectionWithPagingInfo.from(new ArrayListPage<>(list, paging));
|
||||
}
|
||||
}
|
@@ -511,7 +511,9 @@ public class ProcessesImpl extends WorkflowRestImpl implements Processes
|
||||
{
|
||||
throw new InvalidArgumentException("processId is required to get the process info");
|
||||
}
|
||||
|
||||
|
||||
validateIfUserAllowedToWorkWithProcess(processId);
|
||||
|
||||
HistoricProcessInstance processInstance = activitiProcessEngine
|
||||
.getHistoryService()
|
||||
.createHistoricProcessInstanceQuery()
|
||||
|
@@ -850,6 +850,26 @@
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<bean id="rules" class="org.alfresco.rest.api.impl.RulesImpl">
|
||||
<property name="nodes" ref="Nodes" />
|
||||
<property name="permissionService" ref="PermissionService"/>
|
||||
<property name="ruleService" ref="RuleService" />
|
||||
</bean>
|
||||
|
||||
<bean id="Rules" class="org.springframework.aop.framework.ProxyFactoryBean">
|
||||
<property name="proxyInterfaces" value="org.alfresco.rest.api.Rules"/>
|
||||
<property name="target" ref="rules"/>
|
||||
<property name="interceptorNames">
|
||||
<list>
|
||||
<idref bean="legacyExceptionInterceptor" />
|
||||
</list>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<bean class="org.alfresco.rest.api.nodes.NodeRulesRelation">
|
||||
<property name="rules" ref="Rules" />
|
||||
</bean>
|
||||
|
||||
<bean id="publicapi.mimeTypePropertyLookup" class="org.alfresco.rest.api.lookups.MimeTypePropertyLookup">
|
||||
<property name="serviceRegistry" ref="ServiceRegistry"/>
|
||||
<property name="supported">
|
||||
|
@@ -3,6 +3,7 @@ function main()
|
||||
|
||||
// Get the args
|
||||
var filter = args["filter"];
|
||||
if (filter!==null && !filter.includes(":")) {filter += " [hint:useCQ]";}
|
||||
var maxResults = args["maxResults"];
|
||||
var skipCountStr = args["skipCount"];
|
||||
var skipCount = skipCountStr != null ? parseInt(skipCountStr) : -1;
|
||||
|
@@ -3,7 +3,7 @@ function main()
|
||||
// Get the args
|
||||
var siteShortName = url.templateArgs.shortname,
|
||||
site = siteService.getSite(siteShortName),
|
||||
filter = (args.filter != null) ? args.filter : (args.shortNameFilter != null) ? args.shortNameFilter : "",
|
||||
filter = ((args.filter != null) ? args.filter : (args.shortNameFilter != null) ? args.shortNameFilter : "" )+ " [hint:useCQ]",
|
||||
maxResults = (args.maxResults == null) ? 10 : parseInt(args.maxResults, 10),
|
||||
authorityType = args.authorityType,
|
||||
zone = args.zone,
|
||||
|
@@ -696,6 +696,7 @@
|
||||
<property name="nodeService" ref="NodeService"/>
|
||||
<property name="ruleService" ref="RuleService"/>
|
||||
<property name="actionService" ref="ActionService"/>
|
||||
<property name="runtimeActionService" ref="actionService"/>
|
||||
<property name="dictionaryService" ref="DictionaryService"/>
|
||||
<property name="fileFolderService" ref="FileFolderService"/>
|
||||
<property name="namespaceService" ref="NamespaceService" />
|
||||
|
@@ -2,7 +2,7 @@
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2017 Alfresco Software Limited
|
||||
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
@@ -49,6 +49,8 @@ import org.junit.runners.Suite;
|
||||
org.alfresco.repo.webdav.WebDAVHelperTest.class,
|
||||
org.alfresco.repo.webdav.WebDAVLockServiceImplTest.class,
|
||||
org.alfresco.rest.api.impl.ContentStorageInformationImplTest.class,
|
||||
org.alfresco.rest.api.impl.RulesImplTest.class,
|
||||
org.alfresco.rest.api.nodes.NodeRulesRelationTest.class,
|
||||
org.alfresco.rest.api.nodes.NodeStorageInfoRelationTest.class,
|
||||
org.alfresco.rest.api.search.ResultMapperTests.class,
|
||||
org.alfresco.rest.api.search.SearchApiWebscriptTests.class,
|
||||
@@ -56,6 +58,7 @@ import org.junit.runners.Suite;
|
||||
org.alfresco.rest.api.search.SearchQuerySerializerTests.class,
|
||||
org.alfresco.rest.api.search.StoreMapperTests.class,
|
||||
org.alfresco.rest.api.tests.ModulePackageTest.class,
|
||||
org.alfresco.rest.framework.resource.parameters.ArrayListPageTest.class,
|
||||
org.alfresco.rest.framework.tests.core.InspectorTests.class,
|
||||
org.alfresco.rest.framework.tests.core.JsonJacksonTests.class,
|
||||
org.alfresco.rest.framework.tests.core.ParamsExtractorTests.class,
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user