mirror of
				https://github.com/Alfresco/alfresco-community-repo.git
				synced 2025-10-29 15:21:53 +00:00 
			
		
		
		
	Compare commits
	
		
			1 Commits
		
	
	
		
			17.42
			...
			bugfix/map
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					3b465bca1d | 
							
								
								
									
										21
									
								
								.github/dependabot.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								.github/dependabot.yml
									
									
									
									
										vendored
									
									
								
							@@ -38,6 +38,27 @@ updates:
 | 
			
		||||
  - dependency-name: org.activiti:activiti-spring
 | 
			
		||||
    versions:
 | 
			
		||||
    - ">= 7.1.a, < 7.2"
 | 
			
		||||
  - dependency-name: org.apache.camel:camel-activemq
 | 
			
		||||
    versions:
 | 
			
		||||
    - "> 3.7.1"
 | 
			
		||||
  - dependency-name: org.apache.camel:camel-amqp
 | 
			
		||||
    versions:
 | 
			
		||||
    - "> 3.7.1"
 | 
			
		||||
  - dependency-name: org.apache.camel:camel-direct
 | 
			
		||||
    versions:
 | 
			
		||||
    - "> 3.7.1"
 | 
			
		||||
  - dependency-name: org.apache.camel:camel-directvm
 | 
			
		||||
    versions:
 | 
			
		||||
    - "> 3.7.1"
 | 
			
		||||
  - dependency-name: org.apache.camel:camel-jackson
 | 
			
		||||
    versions:
 | 
			
		||||
    - "> 3.7.1"
 | 
			
		||||
  - dependency-name: org.apache.camel:camel-mock
 | 
			
		||||
    versions:
 | 
			
		||||
    - "> 3.7.1"
 | 
			
		||||
  - dependency-name: org.apache.camel:camel-spring
 | 
			
		||||
    versions:
 | 
			
		||||
    - "> 3.7.1"
 | 
			
		||||
  - dependency-name: org.apache.chemistry.opencmis:chemistry-opencmis-client-impl
 | 
			
		||||
    versions:
 | 
			
		||||
    - "> 1.0.0"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										164
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						
									
										164
									
								
								.travis.yml
									
									
									
									
									
								
							@@ -26,16 +26,13 @@ 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\]/ AND commit_message !~ /\[force[^\]]*\]/
 | 
			
		||||
    if: commit_message !~ /\[skip tests\]/
 | 
			
		||||
  - name: release
 | 
			
		||||
    if: commit_message !~ /\[no release\]/ AND (branch = master OR branch =~ /release\/.*/) AND type != pull_request AND fork = false
 | 
			
		||||
  - name: update_downstream
 | 
			
		||||
@@ -46,13 +43,7 @@ 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
 | 
			
		||||
@@ -60,49 +51,43 @@ 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 -am -DfailIfNoTests=false
 | 
			
		||||
        - travis_retry mvn -B test -pl "repository,mmt" -am "-Dtest=AllUnitTestsSuite,AllMmtUnitTestSuite" -DfailIfNoTests=false
 | 
			
		||||
        - travis_retry mvn -B test -pl core,data-model
 | 
			
		||||
        - travis_retry mvn -B test -pl repository -Dtest=AllUnitTestsSuite
 | 
			
		||||
 | 
			
		||||
    - 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:${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
 | 
			
		||||
        - docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.6
 | 
			
		||||
      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
 | 
			
		||||
 | 
			
		||||
    - 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 -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
 | 
			
		||||
      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
 | 
			
		||||
 | 
			
		||||
    - 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:${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
 | 
			
		||||
        - docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.6
 | 
			
		||||
      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
 | 
			
		||||
 | 
			
		||||
    - 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:${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
 | 
			
		||||
        - docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.6
 | 
			
		||||
      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
 | 
			
		||||
 | 
			
		||||
    - 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
 | 
			
		||||
@@ -110,153 +95,142 @@ 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 -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"
 | 
			
		||||
      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"
 | 
			
		||||
 | 
			
		||||
    - 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:${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
 | 
			
		||||
        - docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.6
 | 
			
		||||
      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
 | 
			
		||||
 | 
			
		||||
    - 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:${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
 | 
			
		||||
        - docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.6
 | 
			
		||||
      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
 | 
			
		||||
 | 
			
		||||
    - 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:${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
 | 
			
		||||
        - docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.6
 | 
			
		||||
      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
 | 
			
		||||
 | 
			
		||||
    - 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 -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
 | 
			
		||||
      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
 | 
			
		||||
 | 
			
		||||
    - 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 -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
 | 
			
		||||
      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 - 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 -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
 | 
			
		||||
      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 - 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 -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
 | 
			
		||||
      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 - 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 -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
 | 
			
		||||
      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
 | 
			
		||||
 | 
			
		||||
    - 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 -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
 | 
			
		||||
      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
 | 
			
		||||
 | 
			
		||||
    - 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 -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
 | 
			
		||||
      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
 | 
			
		||||
 | 
			
		||||
    - 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 -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
 | 
			
		||||
      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
 | 
			
		||||
 | 
			
		||||
    - 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 -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
 | 
			
		||||
      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
 | 
			
		||||
 | 
			
		||||
    - 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 -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
 | 
			
		||||
      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
 | 
			
		||||
 | 
			
		||||
    - 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 -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
 | 
			
		||||
      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
 | 
			
		||||
 | 
			
		||||
    - 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 -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
 | 
			
		||||
      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
 | 
			
		||||
 | 
			
		||||
    - 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 -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
 | 
			
		||||
      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
 | 
			
		||||
 | 
			
		||||
    - 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 -am -Dtest=CamelRoutesTest,CamelComponentsTest -DfailIfNoTests=false
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -Dtest=CamelRoutesTest,CamelComponentsTest
 | 
			
		||||
 | 
			
		||||
    - 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
 | 
			
		||||
@@ -264,34 +238,30 @@ 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:${TRANSFORMERS_TAG}
 | 
			
		||||
        - docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.6
 | 
			
		||||
      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:${TRANSFORMERS_TAG}
 | 
			
		||||
        - docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.6
 | 
			
		||||
      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:${TRANSFORMERS_TAG}
 | 
			
		||||
        - docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.6
 | 
			
		||||
      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
 | 
			
		||||
@@ -300,126 +270,99 @@ 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 verify -f packaging/tests/tas-restapi/pom.xml -Pall-tas-tests,run-restapi-part1 -Denvironment=default -DrunBugs=false
 | 
			
		||||
      script: travis_wait 60 mvn -B install -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 verify -f packaging/tests/tas-restapi/pom.xml -Pall-tas-tests,run-restapi-part2 -Denvironment=default -DrunBugs=false
 | 
			
		||||
      script: travis_wait 60 mvn -B install -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 verify -f packaging/tests/tas-restapi/pom.xml -Pall-tas-tests,run-restapi-part3 -Denvironment=default -DrunBugs=false
 | 
			
		||||
      script: travis_wait 60 mvn -B install -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 verify -f packaging/tests/tas-cmis/pom.xml -Pall-tas-tests,run-cmis-browser -Denvironment=default -DrunBugs=false
 | 
			
		||||
      script: travis_wait 40 mvn -B install -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 verify -f packaging/tests/tas-cmis/pom.xml -Pall-tas-tests,run-cmis-atom -Denvironment=default -DrunBugs=false
 | 
			
		||||
      script: travis_wait 40 mvn -B install -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 verify -f packaging/tests/tas-cmis/pom.xml -Pall-tas-tests,run-cmis-webservices -Denvironment=default -DrunBugs=false
 | 
			
		||||
      script: travis_wait 40 mvn -B install -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 verify -f packaging/tests/tas-email/pom.xml -Pall-tas-tests -Denvironment=default -DrunBugs=false
 | 
			
		||||
      script: travis_wait 30 mvn -B install -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 verify -f packaging/tests/tas-webdav/pom.xml -Pall-tas-tests -Denvironment=default -DrunBugs=false
 | 
			
		||||
      script: travis_wait 30 mvn -B install -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 verify -f packaging/tests/tas-integration/pom.xml -Pall-tas-tests -Denvironment=default -DrunBugs=false
 | 
			
		||||
      script: travis_wait 30 mvn -B install -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 -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
 | 
			
		||||
      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
 | 
			
		||||
 | 
			
		||||
    - 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\]/
 | 
			
		||||
      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}
 | 
			
		||||
      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 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:
 | 
			
		||||
@@ -430,12 +373,11 @@ 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 -am -DfailIfNoTests=false -Dskip.automationtests=false -Pags
 | 
			
		||||
      script: travis_wait 40 mvn -B test -pl :alfresco-governance-services-automation-community-rest-api -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>17.42</version>
 | 
			
		||||
      <version>14.93-SNAPSHOT</version>
 | 
			
		||||
   </parent>
 | 
			
		||||
 | 
			
		||||
   <modules>
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
   <parent>
 | 
			
		||||
      <groupId>org.alfresco</groupId>
 | 
			
		||||
      <artifactId>alfresco-governance-services-community-parent</artifactId>
 | 
			
		||||
      <version>17.42</version>
 | 
			
		||||
      <version>14.93-SNAPSHOT</version>
 | 
			
		||||
   </parent>
 | 
			
		||||
 | 
			
		||||
   <modules>
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
   <parent>
 | 
			
		||||
      <groupId>org.alfresco</groupId>
 | 
			
		||||
      <artifactId>alfresco-governance-services-automation-community-repo</artifactId>
 | 
			
		||||
      <version>17.42</version>
 | 
			
		||||
      <version>14.93-SNAPSHOT</version>
 | 
			
		||||
   </parent>
 | 
			
		||||
 | 
			
		||||
   <build>
 | 
			
		||||
@@ -44,8 +44,8 @@
 | 
			
		||||
   <dependencies>
 | 
			
		||||
      <dependency>
 | 
			
		||||
         <groupId>org.slf4j</groupId>
 | 
			
		||||
         <artifactId>slf4j-reload4j</artifactId>
 | 
			
		||||
         <version>1.7.35</version>
 | 
			
		||||
         <artifactId>slf4j-log4j12</artifactId>
 | 
			
		||||
         <version>1.7.33</version>
 | 
			
		||||
         <scope>test</scope>
 | 
			
		||||
      </dependency>
 | 
			
		||||
      <dependency>
 | 
			
		||||
@@ -87,7 +87,7 @@
 | 
			
		||||
      <dependency>
 | 
			
		||||
         <groupId>com.github.docker-java</groupId>
 | 
			
		||||
         <artifactId>docker-java</artifactId>
 | 
			
		||||
         <version>3.2.13</version>
 | 
			
		||||
         <version>3.2.12</version>
 | 
			
		||||
      </dependency>
 | 
			
		||||
   </dependencies>
 | 
			
		||||
</project>
 | 
			
		||||
 
 | 
			
		||||
@@ -26,6 +26,8 @@
 | 
			
		||||
 */
 | 
			
		||||
package org.alfresco.rest.v0;
 | 
			
		||||
 | 
			
		||||
import static org.testng.AssertJUnit.assertTrue;
 | 
			
		||||
 | 
			
		||||
import java.text.MessageFormat;
 | 
			
		||||
 | 
			
		||||
import org.alfresco.rest.core.v0.BaseAPI;
 | 
			
		||||
@@ -36,9 +38,7 @@ 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,8 +57,6 @@ 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
 | 
			
		||||
@@ -143,48 +141,4 @@ 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,5 +73,4 @@ public class RecordFoldersAPI extends BaseAPI
 | 
			
		||||
        }
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -114,11 +114,11 @@ public class RecordsAPI extends BaseAPI
 | 
			
		||||
    /**
 | 
			
		||||
     * Reject the record given as parameter
 | 
			
		||||
     *
 | 
			
		||||
     * @param user               the user declaring the document as record
 | 
			
		||||
     * @param password           the user's password
 | 
			
		||||
     * @param user the user declaring the document as record
 | 
			
		||||
     * @param password the user's password
 | 
			
		||||
     * @param expectedStatusCode The expected return status code.
 | 
			
		||||
     * @param recordName         the record name
 | 
			
		||||
     * @param reason             reject reason
 | 
			
		||||
     * @param recordName the record name
 | 
			
		||||
     * @param reason reject reason
 | 
			
		||||
     * @return The HTTP Response.
 | 
			
		||||
     * @throws AssertionError If the expectedStatusCode was not returned.
 | 
			
		||||
     */
 | 
			
		||||
@@ -129,8 +129,8 @@ public class RecordsAPI extends BaseAPI
 | 
			
		||||
        JSONObject requestParams = new JSONObject();
 | 
			
		||||
        requestParams.put("name", "reject");
 | 
			
		||||
        requestParams.put("nodeRef", recNodeRef);
 | 
			
		||||
        requestParams.put("params", new JSONObject()
 | 
			
		||||
                .put("reason", reason));
 | 
			
		||||
        requestParams.put("params",new JSONObject()
 | 
			
		||||
                    .put("reason",reason));
 | 
			
		||||
 | 
			
		||||
        return doPostJsonRequest(user, password, expectedStatusCode, requestParams, RM_ACTIONS_API);
 | 
			
		||||
    }
 | 
			
		||||
@@ -221,7 +221,6 @@ public class RecordsAPI extends BaseAPI
 | 
			
		||||
     * Uploads an electronic record
 | 
			
		||||
     * <p>
 | 
			
		||||
     * eg. of usage for creating record directly in Unfiled Records : uploadElectronicRecord(getAdminName(), getAdminPassword(), recordPropertiesStringMap, UNFILED_RECORDS_BREADCRUMB, DocumentType.HTML)
 | 
			
		||||
     *
 | 
			
		||||
     * @param username   the username
 | 
			
		||||
     * @param password   the password
 | 
			
		||||
     * @param properties a map of record properties and their values
 | 
			
		||||
@@ -242,7 +241,6 @@ public class RecordsAPI extends BaseAPI
 | 
			
		||||
     * <li>eg. of usage in the case in which the record is inside a folder in Unfiled Records : deleteRecord(getAdminName(), getAdminPassword(), "f1 (2016-1472716888713)", UNFILED_RECORDS_BREADCRUMB, "unfiled records folder");
 | 
			
		||||
     * <li>eg. of usage in the case in which the record is created directly in Unfiled Records : deleteRecord(getAdminName(), getAdminPassword(), "f1 (2016-1472716888713)", UNFILED_RECORDS_BREADCRUMB, "");
 | 
			
		||||
     * </ul>
 | 
			
		||||
     *
 | 
			
		||||
     * @param username     user's username
 | 
			
		||||
     * @param password     its password
 | 
			
		||||
     * @param recordName   the record name
 | 
			
		||||
@@ -269,7 +267,7 @@ public class RecordsAPI extends BaseAPI
 | 
			
		||||
     * @param recordName the String with which the record name starts
 | 
			
		||||
     * @return the record object in case it exists, null otherwise
 | 
			
		||||
     */
 | 
			
		||||
    public CmisObject getRecord(String username, String password, String folderName, String recordName)
 | 
			
		||||
    private CmisObject getRecord(String username, String password, String folderName, String recordName)
 | 
			
		||||
    {
 | 
			
		||||
        for (CmisObject record : contentService.getFolderObject(contentService.getCMISSession(username, password), RM_SITE_ID, folderName).getChildren())
 | 
			
		||||
        {
 | 
			
		||||
@@ -330,9 +328,9 @@ public class RecordsAPI extends BaseAPI
 | 
			
		||||
    /**
 | 
			
		||||
     * Hide in place record
 | 
			
		||||
     *
 | 
			
		||||
     * @param user     the user
 | 
			
		||||
     * @param password the user's password
 | 
			
		||||
     * @param nodeId   the in place record node id
 | 
			
		||||
     * @param user         the user
 | 
			
		||||
     * @param password     the user's password
 | 
			
		||||
     * @param nodeId     the in place record node id
 | 
			
		||||
     * @return The HTTP Response.
 | 
			
		||||
     */
 | 
			
		||||
    public HttpResponse hideRecord(String user, String password, String nodeId)
 | 
			
		||||
@@ -346,7 +344,6 @@ public class RecordsAPI extends BaseAPI
 | 
			
		||||
        return doPostJsonRequest(user, password, SC_OK, requestParams, ACTIONS_API);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Retrieves the record's nodeRef
 | 
			
		||||
     *
 | 
			
		||||
 
 | 
			
		||||
@@ -73,7 +73,6 @@ 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
 | 
			
		||||
@@ -258,7 +257,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",groups = { TestGroup.NOT_SUPPORTED_ON_SINGLE_PIPELINE })
 | 
			
		||||
    @Test (dataProvider = "invalidDestinationPaths")
 | 
			
		||||
    public void declareAndFileToInvalidLocationUsingActionsAPI(String containerPath, String expectedException) throws Exception
 | 
			
		||||
    {
 | 
			
		||||
        STEP("Declare document as record with an invalid location parameter value");
 | 
			
		||||
 
 | 
			
		||||
@@ -62,7 +62,6 @@ 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
 | 
			
		||||
@@ -208,7 +207,7 @@ public class FileVersionAsRecordTests extends BaseRMRestTest
 | 
			
		||||
     * record folder
 | 
			
		||||
     * And the document is not declared as a version record
 | 
			
		||||
     */
 | 
			
		||||
    @Test (dataProvider = "invalidDestinationPaths", groups = { TestGroup.NOT_SUPPORTED_ON_SINGLE_PIPELINE })
 | 
			
		||||
    @Test (dataProvider = "invalidDestinationPaths")
 | 
			
		||||
    public void declareVersionAndFileToInvalidLocationUsingActionsAPI(String containerPath, String expectedException) throws Exception
 | 
			
		||||
    {
 | 
			
		||||
        STEP("Declare document as record version with an invalid location parameter value");
 | 
			
		||||
 
 | 
			
		||||
@@ -1,202 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * #%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();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,148 +0,0 @@
 | 
			
		||||
/*-
 | 
			
		||||
 * #%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());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -1,139 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * #%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.rm.community.util.CommonTestUtils.generateTestPrefix;
 | 
			
		||||
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.testng.Assert.assertNotNull;
 | 
			
		||||
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
import org.alfresco.rest.core.v0.BaseAPI.RMProperty;
 | 
			
		||||
import org.alfresco.rest.rm.community.base.BaseRMRestTest;
 | 
			
		||||
import org.alfresco.rest.rm.community.model.recordcategory.RecordCategory;
 | 
			
		||||
import org.alfresco.rest.rm.community.model.recordcategory.RecordCategoryChild;
 | 
			
		||||
import org.alfresco.rest.v0.RMRolesAndActionsAPI;
 | 
			
		||||
import org.alfresco.rest.v0.RecordsAPI;
 | 
			
		||||
import org.alfresco.test.AlfrescoTest;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.testng.annotations.AfterClass;
 | 
			
		||||
import org.testng.annotations.BeforeClass;
 | 
			
		||||
import org.testng.annotations.Test;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Contains CreateNonElectronicRecords test which checks creation and basic actions(view details, edit, move, copy, delete) on non-electronic records
 | 
			
		||||
 * <p/>
 | 
			
		||||
 * Precondition:
 | 
			
		||||
 * <p/>
 | 
			
		||||
 * RM site created, contains category 1 with folder 1 and folder 2 inside it
 | 
			
		||||
 * <p/>
 | 
			
		||||
 * RM user has RM admin role
 | 
			
		||||
 *
 | 
			
		||||
 * @author Shubham Jain
 | 
			
		||||
 * @Since 7.2.0 M2
 | 
			
		||||
 */
 | 
			
		||||
public class CreateNonElectronicRecordsTests extends BaseRMRestTest
 | 
			
		||||
{
 | 
			
		||||
    private RecordCategory rootCategory;
 | 
			
		||||
 | 
			
		||||
    private RecordCategoryChild recordFolder;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * data prep services
 | 
			
		||||
     */
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private RMRolesAndActionsAPI rmRolesAndActionsAPI;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private RecordsAPI recordsAPI;
 | 
			
		||||
 | 
			
		||||
    private final String TEST_PREFIX = generateTestPrefix(CreateNonElectronicRecordsTests.class);
 | 
			
		||||
    private final String RM_ADMIN = TEST_PREFIX + "rm_admin";
 | 
			
		||||
    private final String recordName = "RM-2777 record";
 | 
			
		||||
    private final String recordTitle = recordName + " title";
 | 
			
		||||
    private final String recordDescription = recordName + " description";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    @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 folder inside the rootCategory");
 | 
			
		||||
        recordFolder = createRecordFolder(rootCategory.getId(), getRandomName("Folder"));
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Test v0 methods to create and get non-electronic records.
 | 
			
		||||
     */
 | 
			
		||||
    @Test
 | 
			
		||||
    @AlfrescoTest (jira = "RM-2777")
 | 
			
		||||
    public void createNonElectronicRecordTest()
 | 
			
		||||
    {
 | 
			
		||||
        STEP("Create a non-electronic record by completing some of the fields");
 | 
			
		||||
        Map<Enum<?>, String> properties = new HashMap<Enum<?>, String>();
 | 
			
		||||
        properties.put(RMProperty.TITLE, recordTitle);
 | 
			
		||||
        properties.put(RMProperty.DESCRIPTION, recordDescription);
 | 
			
		||||
        properties.put(RMProperty.NAME, recordName);
 | 
			
		||||
        properties.put(RMProperty.PHYSICAL_SIZE, "");
 | 
			
		||||
        properties.put(RMProperty.NUMBER_OF_COPIES, "");
 | 
			
		||||
        properties.put(RMProperty.SHELF, "");
 | 
			
		||||
        properties.put(RMProperty.STORAGE_LOCATION, "");
 | 
			
		||||
        properties.put(RMProperty.BOX, "");
 | 
			
		||||
        properties.put(RMProperty.FILE, "");
 | 
			
		||||
 | 
			
		||||
        recordsAPI.createNonElectronicRecord(getAdminUser().getUsername(),
 | 
			
		||||
                getAdminUser().getPassword(), properties, rootCategory.getName(), recordFolder.getName());
 | 
			
		||||
 | 
			
		||||
        STEP("Check the non-electronic record has been created");
 | 
			
		||||
        assertStatusCode(CREATED);
 | 
			
		||||
        assertNotNull(recordsAPI.getRecord(getAdminUser().getUsername(), getAdminUser().getPassword(),
 | 
			
		||||
                recordFolder.getName(), recordName));
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @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());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -1,145 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * #%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));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,226 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * #%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, "");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,179 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * #%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);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,539 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * #%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>17.42</version>
 | 
			
		||||
      <version>14.93-SNAPSHOT</version>
 | 
			
		||||
   </parent>
 | 
			
		||||
 | 
			
		||||
   <modules>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,4 @@
 | 
			
		||||
SOLR6_TAG=2.0.3
 | 
			
		||||
TRANSFORMERS_TAG=2.5.6
 | 
			
		||||
SOLR6_TAG=2.0.2
 | 
			
		||||
POSTGRES_TAG=13.3
 | 
			
		||||
ACTIVEMQ_TAG=5.16.1
 | 
			
		||||
 
 | 
			
		||||
@@ -1,17 +1,4 @@
 | 
			
		||||
# BUILD STAGE AGS
 | 
			
		||||
FROM debian:11-slim AS AGSBUILDER
 | 
			
		||||
 | 
			
		||||
RUN export DEBIAN_FRONTEND=noninteractive; \
 | 
			
		||||
    apt-get update -qqy && apt-get -yqq install unzip && \
 | 
			
		||||
    mkdir -p /build/gs-api-explorer
 | 
			
		||||
 | 
			
		||||
### Copy the AGS war from the local context
 | 
			
		||||
COPY target/gs-api-explorer-*.war /build
 | 
			
		||||
 | 
			
		||||
RUN unzip -q /build/gs-api-explorer-*.war -d /build/gs-api-explorer && \
 | 
			
		||||
    chmod -R g-w,o= /build
 | 
			
		||||
 | 
			
		||||
# ACTUAL IMAGE
 | 
			
		||||
### Apply AGS community repo AMP to ACS image
 | 
			
		||||
FROM alfresco/alfresco-community-repo-base:${image.tag}
 | 
			
		||||
 | 
			
		||||
# Alfresco user does not have permissions to modify webapps or configuration. Switch to root.
 | 
			
		||||
@@ -26,13 +13,18 @@ RUN java -jar /usr/local/tomcat/alfresco-mmt/alfresco-mmt*.jar install \
 | 
			
		||||
              /usr/local/tomcat/amps \
 | 
			
		||||
              /usr/local/tomcat/webapps/alfresco -directory -nobackup
 | 
			
		||||
 | 
			
		||||
### Copy gs-api-explorer
 | 
			
		||||
COPY --chown=root:Alfresco --from=AGSBUILDER /build/gs-api-explorer /usr/local/tomcat/webapps/gs-api-explorer
 | 
			
		||||
### Copy gs-api-explorer war into webapps folder
 | 
			
		||||
COPY target/gs-api-explorer-*.war /usr/local/tomcat/webapps/
 | 
			
		||||
 | 
			
		||||
### Unpack gs-api-explorer.war
 | 
			
		||||
RUN mkdir /usr/local/tomcat/webapps/gs-api-explorer && cd /usr/local/tomcat/webapps/gs-api-explorer && \
 | 
			
		||||
    jar -xvf /usr/local/tomcat/webapps/gs-api-explorer-*.war && rm -f /usr/local/tomcat/webapps/gs-api-explorer-*.war
 | 
			
		||||
 | 
			
		||||
# All files in the tomcat folder must be owned by root user and Alfresco group as mentioned in the parent Dockerfile
 | 
			
		||||
RUN chgrp -R Alfresco /usr/local/tomcat && \
 | 
			
		||||
    find /usr/local/tomcat/webapps -type d -exec chmod 0750 {} \; && \
 | 
			
		||||
    find /usr/local/tomcat/webapps -type f -exec chmod 0640 {} \;
 | 
			
		||||
    find /usr/local/tomcat/webapps -type f -exec chmod 0640 {} \; && \
 | 
			
		||||
    chmod -R g+r /usr/local/tomcat/webapps
 | 
			
		||||
 | 
			
		||||
# Switching back to alfresco user after having added amps files to run the container as non-root
 | 
			
		||||
USER alfresco
 | 
			
		||||
 
 | 
			
		||||
@@ -26,8 +26,7 @@ services:
 | 
			
		||||
                -Ddb.url=jdbc:postgresql://postgres:5432/alfresco
 | 
			
		||||
                -Dsolr.host=search
 | 
			
		||||
                -Dsolr.port=8983
 | 
			
		||||
                -Dsolr.secureComms=secret
 | 
			
		||||
                -Dsolr.sharedSecret=secret
 | 
			
		||||
                -Dsolr.secureComms=none
 | 
			
		||||
                -Dsolr.base.url=/solr
 | 
			
		||||
                -Dindex.subsystem.name=solr6
 | 
			
		||||
                -Dalfresco.restApi.basicAuthScheme=true
 | 
			
		||||
@@ -62,19 +61,15 @@ services:
 | 
			
		||||
        image: alfresco/alfresco-search-services:${SOLR6_TAG}
 | 
			
		||||
        environment:
 | 
			
		||||
            #Solr needs to know how to register itself with Alfresco
 | 
			
		||||
            SOLR_ALFRESCO_HOST: "alfresco"
 | 
			
		||||
            SOLR_ALFRESCO_PORT: "8080"
 | 
			
		||||
            - SOLR_ALFRESCO_HOST=alfresco
 | 
			
		||||
            - SOLR_ALFRESCO_PORT=8080
 | 
			
		||||
            #Alfresco needs to know how to call solr
 | 
			
		||||
            SOLR_SOLR_HOST: "search"
 | 
			
		||||
            SOLR_SOLR_PORT: "8983"
 | 
			
		||||
            - SOLR_SOLR_HOST=search
 | 
			
		||||
            - SOLR_SOLR_PORT=8983
 | 
			
		||||
            #Create the default alfresco and archive cores
 | 
			
		||||
            SOLR_CREATE_ALFRESCO_DEFAULTS: "alfresco,archive"
 | 
			
		||||
            #HTTP by default
 | 
			
		||||
            ALFRESCO_SECURE_COMMS: "secret"
 | 
			
		||||
            JAVA_TOOL_OPTIONS:
 | 
			
		||||
              "
 | 
			
		||||
              -Dalfresco.secureComms.secret=secret
 | 
			
		||||
              "
 | 
			
		||||
            - SOLR_CREATE_ALFRESCO_DEFAULTS=alfresco,archive
 | 
			
		||||
             #HTTP by default
 | 
			
		||||
            - ALFRESCO_SECURE_COMMS=none
 | 
			
		||||
        ports:
 | 
			
		||||
            - 8083:8983 #Browser port
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
   <parent>
 | 
			
		||||
      <groupId>org.alfresco</groupId>
 | 
			
		||||
      <artifactId>alfresco-governance-services-community-repo-parent</artifactId>
 | 
			
		||||
      <version>17.42</version>
 | 
			
		||||
      <version>14.93-SNAPSHOT</version>
 | 
			
		||||
   </parent>
 | 
			
		||||
 | 
			
		||||
   <properties>
 | 
			
		||||
@@ -361,12 +361,6 @@
 | 
			
		||||
               <integrationTestSuite>**/AllTestSuitePt3.class</integrationTestSuite>
 | 
			
		||||
           </properties>
 | 
			
		||||
       </profile>
 | 
			
		||||
       <profile>
 | 
			
		||||
           <id>agsAllTestSuitePt4</id>
 | 
			
		||||
           <properties>
 | 
			
		||||
               <integrationTestSuite>**/AllTestSuitePt4.class</integrationTestSuite>
 | 
			
		||||
           </properties>
 | 
			
		||||
       </profile>
 | 
			
		||||
 | 
			
		||||
      <profile>
 | 
			
		||||
         <id>use-mysql</id>
 | 
			
		||||
 
 | 
			
		||||
@@ -66,8 +66,7 @@ ftp.enabled=false
 | 
			
		||||
 | 
			
		||||
# Solr config
 | 
			
		||||
index.subsystem.name=solr6
 | 
			
		||||
solr.secureComms=secret
 | 
			
		||||
solr.sharedSecret=secret
 | 
			
		||||
solr.secureComms=none
 | 
			
		||||
solr.port=8983
 | 
			
		||||
 | 
			
		||||
#By default the  basic auth is on false - REPO-2575
 | 
			
		||||
 
 | 
			
		||||
@@ -43,16 +43,19 @@ 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\\.service\\..*Test",
 | 
			
		||||
    "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.
 | 
			
		||||
 | 
			
		||||
    // 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",
 | 
			
		||||
 
 | 
			
		||||
@@ -1,78 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * #%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=3
 | 
			
		||||
version.minor=0
 | 
			
		||||
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,7 +168,6 @@
 | 
			
		||||
      <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.verifyNoInteractions;
 | 
			
		||||
import static org.mockito.Mockito.verifyZeroInteractions;
 | 
			
		||||
 | 
			
		||||
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 ==
 | 
			
		||||
        verifyNoInteractions(mockedReportService, mockedNodeService);
 | 
			
		||||
        verifyZeroInteractions(mockedReportService, mockedNodeService);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -110,6 +110,6 @@ public class FileReportActionUnitTest extends BaseActionUnitTest
 | 
			
		||||
        fileReportAction.executeImpl(getMockedAction(), actionedUponNodeRef);
 | 
			
		||||
 | 
			
		||||
        // == then ==
 | 
			
		||||
        verifyNoInteractions(mockedReportService, mockedNodeService);
 | 
			
		||||
        verifyZeroInteractions(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.ArgumentMatchers.any;
 | 
			
		||||
import static org.mockito.Matchers.any;
 | 
			
		||||
import static org.mockito.Mockito.doReturn;
 | 
			
		||||
import static org.mockito.Mockito.mock;
 | 
			
		||||
import static org.mockito.Mockito.never;
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,6 @@ package org.alfresco.module.org_alfresco_module_rm.api;
 | 
			
		||||
 | 
			
		||||
import static org.junit.Assert.assertEquals;
 | 
			
		||||
import static org.junit.Assert.assertTrue;
 | 
			
		||||
import static org.reflections.scanners.Scanners.TypesAnnotated;
 | 
			
		||||
 | 
			
		||||
import java.lang.reflect.Constructor;
 | 
			
		||||
import java.lang.reflect.Executable;
 | 
			
		||||
@@ -78,7 +77,7 @@ public class PublicAPITestUtil
 | 
			
		||||
     */
 | 
			
		||||
    public static void testPublicAPIConsistency(String basePackageName, SetMultimap<Class<?>, Class<?>> knownBadReferences)
 | 
			
		||||
    {
 | 
			
		||||
        Reflections reflections = new Reflections(basePackageName, TypesAnnotated);
 | 
			
		||||
        Reflections reflections = new Reflections(basePackageName);
 | 
			
		||||
        Set<Class<?>> publicAPIClasses = reflections.getTypesAnnotatedWith(AlfrescoPublicApi.class, true);
 | 
			
		||||
 | 
			
		||||
        SetMultimap<Class<?>, Class<?>> referencedFrom = HashMultimap.create();
 | 
			
		||||
 
 | 
			
		||||
@@ -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.ArgumentMatchers.any;
 | 
			
		||||
import static org.mockito.ArgumentMatchers.eq;
 | 
			
		||||
import static org.mockito.Matchers.any;
 | 
			
		||||
import static org.mockito.Matchers.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.ArgumentMatchers.anyString;
 | 
			
		||||
import static org.mockito.Matchers.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.ArgumentMatchers.any;
 | 
			
		||||
import static org.mockito.ArgumentMatchers.eq;
 | 
			
		||||
import static org.mockito.Matchers.any;
 | 
			
		||||
import static org.mockito.Matchers.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.ArgumentMatchers.any;
 | 
			
		||||
import static org.mockito.ArgumentMatchers.anyBoolean;
 | 
			
		||||
import static org.mockito.ArgumentMatchers.eq;
 | 
			
		||||
import static org.mockito.Matchers.any;
 | 
			
		||||
import static org.mockito.Matchers.anyBoolean;
 | 
			
		||||
import static org.mockito.Matchers.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.verifyNoInteractions;
 | 
			
		||||
import static org.mockito.Mockito.verifyZeroInteractions;
 | 
			
		||||
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));
 | 
			
		||||
        
 | 
			
		||||
        verifyNoInteractions(mockedContentCleanser);
 | 
			
		||||
        verifyZeroInteractions(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.ArgumentMatchers.any;
 | 
			
		||||
import static org.mockito.ArgumentMatchers.anyString;
 | 
			
		||||
import static org.mockito.ArgumentMatchers.eq;
 | 
			
		||||
import static org.mockito.Matchers.any;
 | 
			
		||||
import static org.mockito.Matchers.anyString;
 | 
			
		||||
import static org.mockito.Matchers.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.verifyNoInteractions;
 | 
			
		||||
import static org.mockito.Mockito.verifyZeroInteractions;
 | 
			
		||||
 | 
			
		||||
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);
 | 
			
		||||
        verifyNoInteractions(mockedBeanDefinition);
 | 
			
		||||
        verifyZeroInteractions(mockedBeanDefinition);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -27,7 +27,7 @@
 | 
			
		||||
 | 
			
		||||
package org.alfresco.module.org_alfresco_module_rm.model.rma.aspect;
 | 
			
		||||
 | 
			
		||||
import static org.mockito.ArgumentMatchers.any;
 | 
			
		||||
import static org.mockito.Matchers.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.ArgumentMatchers.any;
 | 
			
		||||
import static org.mockito.ArgumentMatchers.eq;
 | 
			
		||||
import static org.mockito.Matchers.any;
 | 
			
		||||
import static org.mockito.Matchers.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.ArgumentMatchers.anyString;
 | 
			
		||||
import static org.mockito.ArgumentMatchers.eq;
 | 
			
		||||
import static org.mockito.Matchers.anyString;
 | 
			
		||||
import static org.mockito.Matchers.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.verifyNoInteractions;
 | 
			
		||||
import static org.mockito.Mockito.verifyZeroInteractions;
 | 
			
		||||
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
@@ -72,7 +72,7 @@ public class RMv22RemoveInPlaceRolesFromAllPatchUnitTest extends BaseUnitTest
 | 
			
		||||
        patch.applyInternal();
 | 
			
		||||
        
 | 
			
		||||
        // then
 | 
			
		||||
        verifyNoInteractions(mockedAuthorityService);
 | 
			
		||||
        verifyZeroInteractions(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.ArgumentMatchers.any;
 | 
			
		||||
import static org.mockito.ArgumentMatchers.anyMap;
 | 
			
		||||
import static org.mockito.Matchers.any;
 | 
			
		||||
import static org.mockito.Matchers.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.verifyNoInteractions;
 | 
			
		||||
import static org.mockito.Mockito.verifyZeroInteractions;
 | 
			
		||||
import static org.mockito.Mockito.when;
 | 
			
		||||
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
@@ -81,7 +81,7 @@ public class RMv24FilePlanContainerRuleInheritancePatchUnitTest
 | 
			
		||||
        patch.applyInternal();
 | 
			
		||||
        
 | 
			
		||||
        // then
 | 
			
		||||
        verifyNoInteractions(mockedNodeService);
 | 
			
		||||
        verifyZeroInteractions(mockedNodeService);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -27,8 +27,8 @@
 | 
			
		||||
 | 
			
		||||
package org.alfresco.module.org_alfresco_module_rm.patch.v32;
 | 
			
		||||
 | 
			
		||||
import static org.mockito.ArgumentMatchers.any;
 | 
			
		||||
import static org.mockito.ArgumentMatchers.anyMap;
 | 
			
		||||
import static org.mockito.Matchers.anyMap;
 | 
			
		||||
import static org.mockito.Matchers.anyObject;
 | 
			
		||||
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) any(), anyMap());
 | 
			
		||||
        verify(mockedContentWriter, times(1)).putContent((InputStream) any());
 | 
			
		||||
        verify(mockedVersionService, times(1)).createVersion((NodeRef) anyObject(), anyMap());
 | 
			
		||||
        verify(mockedContentWriter, times(1)).putContent((InputStream) anyObject());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@
 | 
			
		||||
package org.alfresco.module.org_alfresco_module_rm.patch.v33;
 | 
			
		||||
 | 
			
		||||
import static org.junit.Assert.assertEquals;
 | 
			
		||||
import static org.mockito.ArgumentMatchers.any;
 | 
			
		||||
import static org.mockito.Matchers.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.ArgumentMatchers.any;
 | 
			
		||||
import static org.mockito.ArgumentMatchers.anyMap;
 | 
			
		||||
import static org.mockito.Matchers.any;
 | 
			
		||||
import static org.mockito.Matchers.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.verifyNoInteractions;
 | 
			
		||||
import static org.mockito.Mockito.verifyZeroInteractions;
 | 
			
		||||
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.ArgumentMatchers.any;
 | 
			
		||||
import static org.mockito.Matchers.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.ArgumentMatchers.eq;
 | 
			
		||||
import static org.mockito.Matchers.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.ArgumentMatchers.anyString;
 | 
			
		||||
import static org.mockito.ArgumentMatchers.eq;
 | 
			
		||||
import static org.mockito.Matchers.anyString;
 | 
			
		||||
import static org.mockito.Matchers.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.ArgumentMatchers.any;
 | 
			
		||||
import static org.mockito.Matchers.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.ArgumentMatchers.any;
 | 
			
		||||
import static org.mockito.ArgumentMatchers.eq;
 | 
			
		||||
import static org.mockito.Matchers.any;
 | 
			
		||||
import static org.mockito.Matchers.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.ArgumentMatchers.any;
 | 
			
		||||
import static org.mockito.Matchers.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>17.42</version>
 | 
			
		||||
        <version>14.93-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <build>
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <groupId>org.alfresco</groupId>
 | 
			
		||||
        <artifactId>alfresco-community-repo</artifactId>
 | 
			
		||||
        <version>17.42</version>
 | 
			
		||||
        <version>14.93-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <modules>
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <groupId>org.alfresco</groupId>
 | 
			
		||||
        <artifactId>alfresco-community-repo-amps</artifactId>
 | 
			
		||||
        <version>17.42</version>
 | 
			
		||||
        <version>14.93-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <properties>
 | 
			
		||||
 
 | 
			
		||||
@@ -176,6 +176,7 @@ 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;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										14
									
								
								core/pom.xml
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								core/pom.xml
									
									
									
									
									
								
							@@ -7,7 +7,7 @@
 | 
			
		||||
   <parent>
 | 
			
		||||
      <groupId>org.alfresco</groupId>
 | 
			
		||||
      <artifactId>alfresco-community-repo</artifactId>
 | 
			
		||||
      <version>17.42</version>
 | 
			
		||||
      <version>14.93-SNAPSHOT</version>
 | 
			
		||||
   </parent>
 | 
			
		||||
 | 
			
		||||
   <dependencies>
 | 
			
		||||
@@ -54,9 +54,9 @@
 | 
			
		||||
         <classifier>asl</classifier>
 | 
			
		||||
      </dependency>
 | 
			
		||||
      <dependency>
 | 
			
		||||
         <groupId>ch.qos.reload4j</groupId>
 | 
			
		||||
         <artifactId>reload4j</artifactId>
 | 
			
		||||
         <version>1.2.18.3</version>
 | 
			
		||||
         <groupId>log4j</groupId>
 | 
			
		||||
         <artifactId>log4j</artifactId>
 | 
			
		||||
         <version>1.2.17</version>
 | 
			
		||||
      </dependency>
 | 
			
		||||
      <dependency>
 | 
			
		||||
         <groupId>org.json</groupId>
 | 
			
		||||
@@ -114,7 +114,7 @@
 | 
			
		||||
      <!-- Test only dependencies, as popped up while running mvn test -->
 | 
			
		||||
      <dependency>
 | 
			
		||||
         <groupId>org.slf4j</groupId>
 | 
			
		||||
         <artifactId>slf4j-reload4j</artifactId>
 | 
			
		||||
         <artifactId>slf4j-log4j12</artifactId>
 | 
			
		||||
         <scope>test</scope>
 | 
			
		||||
      </dependency>
 | 
			
		||||
      <dependency>
 | 
			
		||||
@@ -128,8 +128,8 @@
 | 
			
		||||
         <scope>test</scope>
 | 
			
		||||
      </dependency>
 | 
			
		||||
      <dependency>
 | 
			
		||||
         <groupId>org.apache.commons</groupId>
 | 
			
		||||
         <artifactId>commons-dbcp2</artifactId>
 | 
			
		||||
         <groupId>commons-dbcp</groupId>
 | 
			
		||||
         <artifactId>commons-dbcp</artifactId>
 | 
			
		||||
         <scope>test</scope>
 | 
			
		||||
      </dependency>
 | 
			
		||||
   </dependencies>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2005-2022 Alfresco Software Limited.
 | 
			
		||||
 * Copyright (C) 2005-2011 Alfresco Software Limited.
 | 
			
		||||
 *
 | 
			
		||||
 * This file is part of Alfresco
 | 
			
		||||
 *
 | 
			
		||||
@@ -16,7 +16,6 @@
 | 
			
		||||
 * 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;
 | 
			
		||||
@@ -56,7 +55,7 @@ public class ListBackedPagingResults<R> implements PagingResults<R>
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        this.results = Collections.unmodifiableList(
 | 
			
		||||
                list.subList(Math.min(start, end), end));
 | 
			
		||||
                list.subList(start, end));
 | 
			
		||||
        this.size = list.size();
 | 
			
		||||
        this.hasMore = ! (list.size() == end);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,7 @@ package org.alfresco.util.transaction;
 | 
			
		||||
import org.alfresco.error.AlfrescoRuntimeException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Exception wraps {@link java.util.NoSuchElementException} from {@link org.apache.commons.dbcp2.BasicDataSource}
 | 
			
		||||
 * Exception wraps {@link java.util.NoSuchElementException} from {@link org.apache.commons.dbcp.BasicDataSource}
 | 
			
		||||
 * 
 | 
			
		||||
 * @author alex.mukha
 | 
			
		||||
 * @since 4.1.9
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <groupId>org.alfresco</groupId>
 | 
			
		||||
        <artifactId>alfresco-community-repo</artifactId>
 | 
			
		||||
        <version>17.42</version>
 | 
			
		||||
        <version>14.93-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <properties>
 | 
			
		||||
@@ -134,7 +134,7 @@
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>com.fasterxml.woodstox</groupId>
 | 
			
		||||
            <artifactId>woodstox-core</artifactId>
 | 
			
		||||
            <version>6.3.0</version>
 | 
			
		||||
            <version>6.2.7</version>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- the cxf libs were updated, see dependencyManagement section -->
 | 
			
		||||
 
 | 
			
		||||
@@ -78,10 +78,6 @@ 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);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -26,6 +26,7 @@
 | 
			
		||||
 | 
			
		||||
package org.alfresco.repo.content;
 | 
			
		||||
 | 
			
		||||
import org.alfresco.service.Experimental;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Enumeration with values for archive-restore parameter keys.
 | 
			
		||||
@@ -34,6 +35,7 @@ package org.alfresco.repo.content;
 | 
			
		||||
 *
 | 
			
		||||
 * @author mpichura
 | 
			
		||||
 */
 | 
			
		||||
@Experimental
 | 
			
		||||
public enum ContentRestoreParams
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -26,6 +26,7 @@
 | 
			
		||||
package org.alfresco.repo.content;
 | 
			
		||||
 | 
			
		||||
import org.alfresco.api.AlfrescoPublicApi;
 | 
			
		||||
import org.alfresco.service.Experimental;
 | 
			
		||||
import org.alfresco.service.cmr.repository.ContentAccessor;
 | 
			
		||||
import org.alfresco.service.cmr.repository.ContentIOException;
 | 
			
		||||
import org.alfresco.service.cmr.repository.ContentReader;
 | 
			
		||||
@@ -339,6 +340,7 @@ public interface ContentStore
 | 
			
		||||
     * @param contentUrl the URL of the content for which the storage properties are to be retrieved.
 | 
			
		||||
     * @return Returns a key-value (String-String) collection of storage headers/properties with their respective values.
 | 
			
		||||
     */
 | 
			
		||||
    @Experimental
 | 
			
		||||
    default Map<String, String> getStorageProperties(String contentUrl)
 | 
			
		||||
    {
 | 
			
		||||
        return Collections.emptyMap();
 | 
			
		||||
@@ -348,12 +350,14 @@ public interface ContentStore
 | 
			
		||||
     * Submit a request to send content to archive (offline) state.
 | 
			
		||||
     * If no connector is present or connector is not supporting sending to archive, then {@link UnsupportedOperationException} will be returned.
 | 
			
		||||
     * Specific connector will decide which storage class/tier will be set for content.
 | 
			
		||||
     * This method is experimental and subject to changes.
 | 
			
		||||
     *
 | 
			
		||||
     * @param contentUrl the URL of the content which is to be archived.
 | 
			
		||||
     * @param archiveParams a map of String-Serializable parameters defining Storage Provider specific request parameters (can be empty).
 | 
			
		||||
     * @return true when request successful, false when unsuccessful.
 | 
			
		||||
     * @throws UnsupportedOperationException when store is unable to handle request.
 | 
			
		||||
     */
 | 
			
		||||
    @Experimental
 | 
			
		||||
    default boolean requestSendContentToArchive(String contentUrl, Map<String, Serializable> archiveParams)
 | 
			
		||||
    {
 | 
			
		||||
        throw new UnsupportedOperationException("Request to archive content is not supported by this content store.");
 | 
			
		||||
@@ -366,12 +370,14 @@ public interface ContentStore
 | 
			
		||||
     * Keys of this map should be restricted to {@code ContentRestoreParams} enumeration.
 | 
			
		||||
     * For AWS S3 map can indicating expiry days, Glacier restore tier.
 | 
			
		||||
     * For Azure Blob map can indicate rehydrate priority.
 | 
			
		||||
     * This method is experimental and subject to changes.
 | 
			
		||||
     *
 | 
			
		||||
     * @param contentUrl    the URL of the content which is to be archived.
 | 
			
		||||
     * @param restoreParams a map of String-Serializable parameters defining Storage Provider specific request parameters (can be empty).
 | 
			
		||||
     * @return true when request successful, false when unsuccessful.
 | 
			
		||||
     * @throws UnsupportedOperationException when store is unable to handle request.
 | 
			
		||||
     */
 | 
			
		||||
    @Experimental
 | 
			
		||||
    default boolean requestRestoreContentFromArchive(String contentUrl, Map<String, Serializable> restoreParams)
 | 
			
		||||
    {
 | 
			
		||||
        throw new UnsupportedOperationException("Request to restore content from archive is not supported by this content store.");
 | 
			
		||||
 
 | 
			
		||||
@@ -26,6 +26,8 @@
 | 
			
		||||
 | 
			
		||||
package org.alfresco.repo.content;
 | 
			
		||||
 | 
			
		||||
import org.alfresco.service.Experimental;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Enumeration with "header" values for Alfresco derived Storage Properties
 | 
			
		||||
 * Values of this enum should be used when adding Alfresco derived key-value pairs in Storage Properties map.
 | 
			
		||||
@@ -33,6 +35,7 @@ package org.alfresco.repo.content;
 | 
			
		||||
 *
 | 
			
		||||
 * @author mpichura
 | 
			
		||||
 */
 | 
			
		||||
@Experimental
 | 
			
		||||
public enum ObjectStorageProps {
 | 
			
		||||
    /**
 | 
			
		||||
     * Object's content is archived and not immediately accessible.
 | 
			
		||||
 
 | 
			
		||||
@@ -26,6 +26,7 @@
 | 
			
		||||
package org.alfresco.service.cmr.repository;
 | 
			
		||||
 | 
			
		||||
import org.alfresco.api.AlfrescoPublicApi;
 | 
			
		||||
import org.alfresco.service.Experimental;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Unable to access as content is in an Archived state.
 | 
			
		||||
@@ -33,6 +34,7 @@ import org.alfresco.api.AlfrescoPublicApi;
 | 
			
		||||
 * 
 | 
			
		||||
 * @author David Edwards
 | 
			
		||||
 */
 | 
			
		||||
@Experimental
 | 
			
		||||
@AlfrescoPublicApi
 | 
			
		||||
public class ArchivedIOException extends ContentIOException
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
@@ -27,6 +27,7 @@ package org.alfresco.service.cmr.repository;
 | 
			
		||||
 | 
			
		||||
import org.alfresco.api.AlfrescoPublicApi;
 | 
			
		||||
import org.alfresco.error.AlfrescoRuntimeException;
 | 
			
		||||
import org.alfresco.service.Experimental;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Content Restoration in progress
 | 
			
		||||
@@ -34,6 +35,7 @@ import org.alfresco.error.AlfrescoRuntimeException;
 | 
			
		||||
 * @author David Edwards
 | 
			
		||||
 */
 | 
			
		||||
@AlfrescoPublicApi
 | 
			
		||||
@Experimental
 | 
			
		||||
public class RestoreInProgressException extends AlfrescoRuntimeException
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 5483215922384016269L;
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
 * #%L
 | 
			
		||||
 * Alfresco Data model classes
 | 
			
		||||
 * %%
 | 
			
		||||
 * Copyright (C) 2005 - 2022 Alfresco Software Limited
 | 
			
		||||
 * 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 
 | 
			
		||||
@@ -25,7 +25,7 @@
 | 
			
		||||
 */
 | 
			
		||||
package org.alfresco.repo.dictionary;
 | 
			
		||||
 | 
			
		||||
import static org.mockito.ArgumentMatchers.anyString;
 | 
			
		||||
import static org.mockito.Matchers.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>17.42</version>
 | 
			
		||||
        <version>14.93-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <dependencies>
 | 
			
		||||
@@ -31,11 +31,6 @@
 | 
			
		||||
            <artifactId>maven-artifact</artifactId>
 | 
			
		||||
            <version>${dependency.maven-artifact.version}</version>
 | 
			
		||||
        </dependency>
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.mockito</groupId>
 | 
			
		||||
            <artifactId>mockito-core</artifactId>
 | 
			
		||||
            <scope>test</scope>
 | 
			
		||||
        </dependency>
 | 
			
		||||
    </dependencies>
 | 
			
		||||
 | 
			
		||||
    <build>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,43 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * #%L
 | 
			
		||||
 * Alfresco Repository
 | 
			
		||||
 * %%
 | 
			
		||||
 * 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;
 | 
			
		||||
 | 
			
		||||
import org.junit.experimental.categories.Categories;
 | 
			
		||||
import org.junit.runner.RunWith;
 | 
			
		||||
import org.junit.runners.Suite;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * All MMT Tool project UNIT test classes (no application context) should be added to this test suite.
 | 
			
		||||
 */
 | 
			
		||||
@RunWith(Categories.class)
 | 
			
		||||
@Suite.SuiteClasses({
 | 
			
		||||
        org.alfresco.repo.module.tool.ModuleManagementToolTest.class,
 | 
			
		||||
        org.alfresco.repo.module.tool.WarHelperImplTest.class,
 | 
			
		||||
        org.alfresco.repo.module.tool.ModuleServiceImplTest.class
 | 
			
		||||
})
 | 
			
		||||
public class AllMmtUnitTestSuite
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
@@ -9,6 +9,6 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <groupId>org.alfresco</groupId>
 | 
			
		||||
        <artifactId>alfresco-community-repo-packaging</artifactId>
 | 
			
		||||
        <version>17.42</version>
 | 
			
		||||
        <version>14.93-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
</project>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
# Fetch image based on Tomcat 9.0, Java 11 and Centos 7
 | 
			
		||||
# Fetch image based on Tomcat 9.0, Java 11 and Centos 8
 | 
			
		||||
# More infos about this image: https://github.com/Alfresco/alfresco-docker-base-tomcat
 | 
			
		||||
FROM alfresco/alfresco-base-tomcat:tomcat9-jre11-centos7-202203091924
 | 
			
		||||
FROM alfresco/alfresco-base-tomcat:9.0.54-java-11-centos-7
 | 
			
		||||
 | 
			
		||||
# Set default docker_context.
 | 
			
		||||
ARG resource_path=target
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <groupId>org.alfresco</groupId>
 | 
			
		||||
        <artifactId>alfresco-community-repo-packaging</artifactId>
 | 
			
		||||
        <version>17.42</version>
 | 
			
		||||
        <version>14.93-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <properties>
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <groupId>org.alfresco</groupId>
 | 
			
		||||
        <artifactId>alfresco-community-repo</artifactId>
 | 
			
		||||
        <version>17.42</version>
 | 
			
		||||
        <version>14.93-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <modules>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,4 @@
 | 
			
		||||
SOLR6_TAG=2.0.3
 | 
			
		||||
TRANSFORMERS_TAG=2.5.6
 | 
			
		||||
SOLR6_TAG=2.0.2
 | 
			
		||||
POSTGRES_TAG=13.3
 | 
			
		||||
ACTIVEMQ_TAG=5.16.1
 | 
			
		||||
 
 | 
			
		||||
@@ -28,8 +28,7 @@ services:
 | 
			
		||||
        -Ddb.url=jdbc:postgresql://postgres:5432/alfresco
 | 
			
		||||
        -Dsolr.host=solr6
 | 
			
		||||
        -Dsolr.port=8983
 | 
			
		||||
        -Dsolr.secureComms=secret
 | 
			
		||||
        -Dsolr.sharedSecret=secret
 | 
			
		||||
        -Dsolr.secureComms=none
 | 
			
		||||
        -Dsolr.base.url=/solr
 | 
			
		||||
        -Dindex.subsystem.name=solr6
 | 
			
		||||
        -Dalfresco.restApi.basicAuthScheme=true
 | 
			
		||||
@@ -64,19 +63,15 @@ services:
 | 
			
		||||
    image: alfresco/alfresco-search-services:${SOLR6_TAG}
 | 
			
		||||
    environment:
 | 
			
		||||
      #Solr needs to know how to register itself with Alfresco
 | 
			
		||||
      SOLR_ALFRESCO_HOST: "alfresco"
 | 
			
		||||
      SOLR_ALFRESCO_PORT: "8080"
 | 
			
		||||
      - SOLR_ALFRESCO_HOST=alfresco
 | 
			
		||||
      - SOLR_ALFRESCO_PORT=8080
 | 
			
		||||
      #Alfresco needs to know how to call solr
 | 
			
		||||
      SOLR_SOLR_HOST: "solr6"
 | 
			
		||||
      SOLR_SOLR_PORT: "8983"
 | 
			
		||||
      - SOLR_SOLR_HOST=solr6
 | 
			
		||||
      - SOLR_SOLR_PORT=8983
 | 
			
		||||
      #Create the default alfresco and archive cores
 | 
			
		||||
      SOLR_CREATE_ALFRESCO_DEFAULTS: "alfresco,archive"
 | 
			
		||||
      - SOLR_CREATE_ALFRESCO_DEFAULTS=alfresco,archive
 | 
			
		||||
      #HTTP by default
 | 
			
		||||
      ALFRESCO_SECURE_COMMS: "secret"
 | 
			
		||||
      JAVA_TOOL_OPTIONS:
 | 
			
		||||
        "
 | 
			
		||||
        -Dalfresco.secureComms.secret=secret
 | 
			
		||||
        "
 | 
			
		||||
      - ALFRESCO_SECURE_COMMS=none
 | 
			
		||||
    ports:
 | 
			
		||||
      - 8083:8983 #Browser port
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -28,8 +28,7 @@ services:
 | 
			
		||||
        -Ddb.url=jdbc:postgresql://postgres:5432/alfresco
 | 
			
		||||
        -Dsolr.host=solr6
 | 
			
		||||
        -Dsolr.port=8983
 | 
			
		||||
        -Dsolr.secureComms=secret
 | 
			
		||||
        -Dsolr.sharedSecret=secret
 | 
			
		||||
        -Dsolr.secureComms=none
 | 
			
		||||
        -Dsolr.base.url=/solr
 | 
			
		||||
        -Dindex.subsystem.name=solr6
 | 
			
		||||
        -Dalfresco.restApi.basicAuthScheme=true
 | 
			
		||||
@@ -67,19 +66,15 @@ services:
 | 
			
		||||
    image: alfresco/alfresco-search-services:${SOLR6_TAG}
 | 
			
		||||
    environment:
 | 
			
		||||
      #Solr needs to know how to register itself with Alfresco
 | 
			
		||||
      SOLR_ALFRESCO_HOST: "alfresco"
 | 
			
		||||
      SOLR_ALFRESCO_PORT: "8080"
 | 
			
		||||
      - SOLR_ALFRESCO_HOST=alfresco
 | 
			
		||||
      - SOLR_ALFRESCO_PORT=8080
 | 
			
		||||
      #Alfresco needs to know how to call solr
 | 
			
		||||
      SOLR_SOLR_HOST: "solr6"
 | 
			
		||||
      SOLR_SOLR_PORT: "8983"
 | 
			
		||||
      - SOLR_SOLR_HOST=solr6
 | 
			
		||||
      - SOLR_SOLR_PORT=8983
 | 
			
		||||
      #Create the default alfresco and archive cores
 | 
			
		||||
      SOLR_CREATE_ALFRESCO_DEFAULTS: "alfresco,archive"
 | 
			
		||||
      - SOLR_CREATE_ALFRESCO_DEFAULTS=alfresco,archive
 | 
			
		||||
      #HTTP by default
 | 
			
		||||
      ALFRESCO_SECURE_COMMS: "secret"
 | 
			
		||||
      JAVA_TOOL_OPTIONS:
 | 
			
		||||
        "
 | 
			
		||||
        -Dalfresco.secureComms.secret=secret
 | 
			
		||||
        "
 | 
			
		||||
      - ALFRESCO_SECURE_COMMS=none
 | 
			
		||||
    ports:
 | 
			
		||||
      - 8083:8983 #Browser port
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <groupId>org.alfresco</groupId>
 | 
			
		||||
        <artifactId>alfresco-community-repo-packaging</artifactId>
 | 
			
		||||
        <version>17.42</version>
 | 
			
		||||
        <version>14.93-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <modules>
 | 
			
		||||
 
 | 
			
		||||
@@ -27,9 +27,6 @@ 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>17.42</version>
 | 
			
		||||
        <version>14.93-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <developers>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,76 +0,0 @@
 | 
			
		||||
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;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -1,58 +0,0 @@
 | 
			
		||||
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");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,62 +0,0 @@
 | 
			
		||||
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=60
 | 
			
		||||
solrWaitTimeInSeconds=30
 | 
			
		||||
 | 
			
		||||
# 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
 | 
			
		||||
 
 | 
			
		||||
@@ -1,23 +0,0 @@
 | 
			
		||||
<?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>17.42</version>
 | 
			
		||||
        <version>14.93-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <developers>
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <groupId>org.alfresco</groupId>
 | 
			
		||||
        <artifactId>alfresco-community-repo-tests</artifactId>
 | 
			
		||||
        <version>17.42</version>
 | 
			
		||||
        <version>14.93-SNAPSHOT</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>17.42</version>
 | 
			
		||||
        <version>14.93-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <developers>
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,9 @@ 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;
 | 
			
		||||
@@ -38,20 +40,17 @@ public abstract class RenditionIntegrationTests extends RestTest
 | 
			
		||||
        FileModel file = new FileModel();
 | 
			
		||||
        file.setNodeRef(nodeId);
 | 
			
		||||
 | 
			
		||||
        // 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
 | 
			
		||||
        // 1. 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]. ");
 | 
			
		||||
 | 
			
		||||
        // 3. Verify that a rendition of the file is created and has content using RESTAPI
 | 
			
		||||
        // 2. 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] ");
 | 
			
		||||
 | 
			
		||||
        // 4. Check the returned content type
 | 
			
		||||
        // 3. 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]");
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -347,30 +347,13 @@ public class GetSitesTests extends RestTest
 | 
			
		||||
    public void checkPaginationWithSkipCountAndMaxItems() throws Exception
 | 
			
		||||
    {
 | 
			
		||||
        sites = restClient.authenticateUser(regularUser).withParams("skipCount=10&maxItems=110").withCoreAPI().getSites();
 | 
			
		||||
 | 
			
		||||
        int expectedCount;
 | 
			
		||||
        if (sites.getPagination().isHasMoreItems())
 | 
			
		||||
        {
 | 
			
		||||
            expectedCount = sites.getPagination().getMaxItems();
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            if (sites.getPagination().getTotalItems() < sites.getPagination().getSkipCount())
 | 
			
		||||
            {
 | 
			
		||||
                expectedCount = 0;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                expectedCount = sites.getPagination().getTotalItems() - sites.getPagination().getSkipCount();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        sites.getPagination().assertThat()
 | 
			
		||||
                .field("totalItems").isNotEmpty().and()
 | 
			
		||||
                .field("maxItems").is("110").and()
 | 
			
		||||
                .field("hasMoreItems").is((sites.getPagination().getTotalItems() - sites.getPagination().getSkipCount() > sites.getPagination().getMaxItems())?"true":"false").and()
 | 
			
		||||
                .field("skipCount").is("10").and()
 | 
			
		||||
                .field("count").is(expectedCount);
 | 
			
		||||
                .field("count").is((sites.getPagination().isHasMoreItems()) ? sites.getPagination().getMaxItems()
 | 
			
		||||
                : sites.getPagination().getTotalItems() - sites.getPagination().getSkipCount());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test(groups = { TestGroup.REST_API, TestGroup.SITES, TestGroup.REGRESSION})
 | 
			
		||||
 
 | 
			
		||||
@@ -16,7 +16,7 @@ import org.testng.annotations.Test;
 | 
			
		||||
 */
 | 
			
		||||
public class GetProcessSanityTests extends RestTest
 | 
			
		||||
{
 | 
			
		||||
    private UserModel userWhoStartsProcess, assignee, user;
 | 
			
		||||
    private UserModel userWhoStartsProcess, assignee;
 | 
			
		||||
    private RestProcessModel addedProcess, process;
 | 
			
		||||
 | 
			
		||||
    @BeforeClass(alwaysRun = true)
 | 
			
		||||
@@ -24,7 +24,6 @@ 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);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -60,13 +59,4 @@ 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>17.42</version>
 | 
			
		||||
        <version>14.93-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <developers>
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <groupId>org.alfresco</groupId>
 | 
			
		||||
        <artifactId>alfresco-community-repo-packaging</artifactId>
 | 
			
		||||
        <version>17.42</version>
 | 
			
		||||
        <version>14.93-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <properties>
 | 
			
		||||
@@ -144,7 +144,7 @@
 | 
			
		||||
            <plugin>
 | 
			
		||||
                <groupId>org.codehaus.mojo</groupId>
 | 
			
		||||
                <artifactId>buildnumber-maven-plugin</artifactId>
 | 
			
		||||
                <version>3.0.0</version>
 | 
			
		||||
                <version>1.4</version>
 | 
			
		||||
                <executions>
 | 
			
		||||
                    <execution>
 | 
			
		||||
                        <phase>validate</phase>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										127
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										127
									
								
								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>17.42</version>
 | 
			
		||||
    <version>14.93-SNAPSHOT</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>3</acs.version.minor>
 | 
			
		||||
        <acs.version.minor>2</acs.version.minor>
 | 
			
		||||
        <acs.version.revision>0</acs.version.revision>
 | 
			
		||||
        <acs.version.label />
 | 
			
		||||
        <amp.min.version>${acs.version.major}.0.0</amp.min.version>
 | 
			
		||||
@@ -47,80 +47,78 @@
 | 
			
		||||
        <dependency.alfresco-trashcan-cleaner.version>2.4.1</dependency.alfresco-trashcan-cleaner.version>
 | 
			
		||||
        <dependency.alfresco-jlan.version>7.1</dependency.alfresco-jlan.version>
 | 
			
		||||
        <dependency.alfresco-server-root.version>6.0.1</dependency.alfresco-server-root.version>
 | 
			
		||||
        <dependency.alfresco-messaging-repo.version>1.2.19</dependency.alfresco-messaging-repo.version>
 | 
			
		||||
        <dependency.alfresco-messaging-repo.version>1.2.15</dependency.alfresco-messaging-repo.version>
 | 
			
		||||
        <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-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-transform-model.version>1.4.7</dependency.alfresco-transform-model.version>
 | 
			
		||||
        <dependency.alfresco-greenmail.version>6.2</dependency.alfresco-greenmail.version>
 | 
			
		||||
        <dependency.acs-event-model.version>0.0.15</dependency.acs-event-model.version>
 | 
			
		||||
        <dependency.acs-event-model.version>0.0.13</dependency.acs-event-model.version>
 | 
			
		||||
 | 
			
		||||
        <dependency.spring.version>5.3.21</dependency.spring.version>
 | 
			
		||||
        <dependency.spring.version>5.3.15</dependency.spring.version>
 | 
			
		||||
        <dependency.antlr.version>3.5.2</dependency.antlr.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.jackson.version>2.13.0</dependency.jackson.version>
 | 
			
		||||
        <dependency.jackson-databind.version>2.13.1</dependency.jackson-databind.version>
 | 
			
		||||
        <dependency.cxf.version>3.5.0</dependency.cxf.version>
 | 
			
		||||
        <dependency.opencmis.version>1.0.0</dependency.opencmis.version>
 | 
			
		||||
        <dependency.webscripts.version>8.31</dependency.webscripts.version>
 | 
			
		||||
        <dependency.webscripts.version>8.28</dependency.webscripts.version>
 | 
			
		||||
        <dependency.bouncycastle.version>1.70</dependency.bouncycastle.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.mockito-core.version>3.11.2</dependency.mockito-core.version>
 | 
			
		||||
        <dependency.org-json.version>20211205</dependency.org-json.version>
 | 
			
		||||
        <dependency.commons-dbcp.version>1.4-DBCP330</dependency.commons-dbcp.version>
 | 
			
		||||
        <dependency.commons-io.version>2.11.0</dependency.commons-io.version>
 | 
			
		||||
        <dependency.gson.version>2.8.9</dependency.gson.version>
 | 
			
		||||
        <dependency.gson.version>2.8.5</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.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.xercesImpl.version>2.12.1</dependency.xercesImpl.version>
 | 
			
		||||
        <dependency.slf4j.version>1.7.33</dependency.slf4j.version>
 | 
			
		||||
        <dependency.gytheio.version>0.12</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.truezip.version>7.7.10</dependency.truezip.version>
 | 
			
		||||
        <dependency.poi.version>5.2.2</dependency.poi.version>
 | 
			
		||||
        <dependency.poi.version>4.1.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.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.jboss.logging.version>3.4.3.Final</dependency.jboss.logging.version>
 | 
			
		||||
        <dependency.camel.version>3.7.7</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.2.0</dependency.awaitility.version>
 | 
			
		||||
        <dependency.awaitility.version>4.1.1</dependency.awaitility.version>
 | 
			
		||||
        <dependency.swagger-ui.version>3.38.0</dependency.swagger-ui.version>
 | 
			
		||||
        <dependency.swagger-parser.version>1.0.61</dependency.swagger-parser.version>
 | 
			
		||||
        <dependency.swagger-parser.version>1.0.56</dependency.swagger-parser.version>
 | 
			
		||||
        <dependency.maven-filtering.version>3.1.1</dependency.maven-filtering.version>
 | 
			
		||||
        <dependency.maven-artifact.version>3.8.6</dependency.maven-artifact.version>
 | 
			
		||||
        <dependency.maven-artifact.version>3.8.4</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>2.1.1</dependency.jakarta-annotation-api.version>
 | 
			
		||||
        <dependency.jakarta-annotation-api.version>1.3.5</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>
 | 
			
		||||
        <dependency.jakarta-json-api.version>1.1.6</dependency.jakarta-json-api.version>
 | 
			
		||||
        <dependency.jakarta-json-path.version>2.7.0</dependency.jakarta-json-path.version>
 | 
			
		||||
        <dependency.jakarta-json-path.version>2.5.0</dependency.jakarta-json-path.version>
 | 
			
		||||
        <dependency.jakarta-rpc-api.version>1.1.4</dependency.jakarta-rpc-api.version>
 | 
			
		||||
 | 
			
		||||
        <alfresco.googledrive.version>3.2.1.3</alfresco.googledrive.version>
 | 
			
		||||
        <alfresco.aos-module.version>1.4.1</alfresco.aos-module.version> 
 | 
			
		||||
        <alfresco.api-explorer.version>7.2.0</alfresco.api-explorer.version> <!-- Also in alfresco-enterprise-share -->
 | 
			
		||||
        <alfresco.aos-module.version>1.4.0.1</alfresco.aos-module.version>
 | 
			
		||||
        <alfresco.api-explorer.version>7.2.0-M2</alfresco.api-explorer.version> <!-- Also in alfresco-enterprise-share -->
 | 
			
		||||
 | 
			
		||||
        <alfresco.maven-plugin.version>2.2.0</alfresco.maven-plugin.version>
 | 
			
		||||
        <license-maven-plugin.version>2.0.1.alfresco-2</license-maven-plugin.version>
 | 
			
		||||
        <license-maven-plugin.version>2.0.1.alfresco-1</license-maven-plugin.version>
 | 
			
		||||
 | 
			
		||||
        <dependency.postgresql.version>42.4.0</dependency.postgresql.version>
 | 
			
		||||
        <dependency.mysql.version>8.0.29</dependency.mysql.version>
 | 
			
		||||
        <dependency.postgresql.version>42.3.1</dependency.postgresql.version>
 | 
			
		||||
        <dependency.mysql.version>8.0.27</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.48</dependency.tas-utility.version>
 | 
			
		||||
        <dependency.tas-utility.version>3.0.47</dependency.tas-utility.version>
 | 
			
		||||
        <dependency.rest-assured.version>3.3.0</dependency.rest-assured.version>
 | 
			
		||||
        <dependency.tas-restapi.version>1.87</dependency.tas-restapi.version>
 | 
			
		||||
        <dependency.tas-restapi.version>1.68</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>
 | 
			
		||||
@@ -148,7 +146,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>17.42</tag>
 | 
			
		||||
        <tag>HEAD</tag>
 | 
			
		||||
    </scm>
 | 
			
		||||
 | 
			
		||||
    <distributionManagement>
 | 
			
		||||
@@ -405,7 +403,7 @@
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>org.apache.xmlbeans</groupId>
 | 
			
		||||
                <artifactId>xmlbeans</artifactId>
 | 
			
		||||
                <version>5.1.0</version>
 | 
			
		||||
                <version>3.1.0</version>
 | 
			
		||||
            </dependency>
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>org.json</groupId>
 | 
			
		||||
@@ -565,12 +563,6 @@
 | 
			
		||||
                <groupId>org.alfresco</groupId>
 | 
			
		||||
                <artifactId>alfresco-log-sanitizer</artifactId>
 | 
			
		||||
                <version>${dependency.alfresco-log-sanitizer.version}</version>
 | 
			
		||||
                <exclusions>
 | 
			
		||||
                    <exclusion>
 | 
			
		||||
                        <groupId>log4j</groupId>
 | 
			
		||||
                        <artifactId>log4j</artifactId>
 | 
			
		||||
                    </exclusion>
 | 
			
		||||
                </exclusions>
 | 
			
		||||
            </dependency>
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>org.alfresco.aos-module</groupId>
 | 
			
		||||
@@ -614,7 +606,7 @@
 | 
			
		||||
            </dependency>
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>org.slf4j</groupId>
 | 
			
		||||
                <artifactId>slf4j-reload4j</artifactId>
 | 
			
		||||
                <artifactId>slf4j-log4j12</artifactId>
 | 
			
		||||
                <version>${dependency.slf4j.version}</version>
 | 
			
		||||
            </dependency>
 | 
			
		||||
            <dependency>
 | 
			
		||||
@@ -633,13 +625,13 @@
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>com.drewnoakes</groupId>
 | 
			
		||||
                <artifactId>metadata-extractor</artifactId>
 | 
			
		||||
                <version>2.18.0</version>
 | 
			
		||||
                <version>2.16.0</version>
 | 
			
		||||
            </dependency>
 | 
			
		||||
            <!-- upgrade dependency from TIKA -->
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>com.github.junrar</groupId>
 | 
			
		||||
                <artifactId>junrar</artifactId>
 | 
			
		||||
                <version>7.5.2</version>
 | 
			
		||||
                <version>7.4.0</version>
 | 
			
		||||
            </dependency>
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>com.github.fge</groupId>
 | 
			
		||||
@@ -650,7 +642,7 @@
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>org.jsoup</groupId>
 | 
			
		||||
                <artifactId>jsoup</artifactId>
 | 
			
		||||
                <version>1.15.2</version>
 | 
			
		||||
                <version>1.14.3</version>
 | 
			
		||||
            </dependency>
 | 
			
		||||
            <!-- upgrade dependency from TIKA -->
 | 
			
		||||
            <dependency>
 | 
			
		||||
@@ -729,7 +721,7 @@
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>joda-time</groupId>
 | 
			
		||||
                <artifactId>joda-time</artifactId>
 | 
			
		||||
                <version>2.10.14</version>
 | 
			
		||||
                <version>2.10.13</version>
 | 
			
		||||
            </dependency>
 | 
			
		||||
 | 
			
		||||
            <!-- provided dependencies -->
 | 
			
		||||
@@ -757,13 +749,8 @@
 | 
			
		||||
                <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>
 | 
			
		||||
                <groupId>commons-dbcp</groupId>
 | 
			
		||||
                <artifactId>commons-dbcp</artifactId>
 | 
			
		||||
                <version>${dependency.commons-dbcp.version}</version>
 | 
			
		||||
            </dependency>
 | 
			
		||||
            <dependency>
 | 
			
		||||
@@ -773,12 +760,7 @@
 | 
			
		||||
            </dependency>
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>org.apache.camel</groupId>
 | 
			
		||||
                <artifactId>camel-core</artifactId>
 | 
			
		||||
                <version>${dependency.camel.version}</version>
 | 
			
		||||
            </dependency>
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>org.apache.camel</groupId>
 | 
			
		||||
                <artifactId>camel-spring-xml</artifactId>
 | 
			
		||||
                <artifactId>camel-spring</artifactId>
 | 
			
		||||
                <version>${dependency.camel.version}</version>
 | 
			
		||||
                <exclusions>
 | 
			
		||||
                    <exclusion>
 | 
			
		||||
@@ -807,6 +789,11 @@
 | 
			
		||||
                    </exclusion>
 | 
			
		||||
                </exclusions>
 | 
			
		||||
            </dependency>
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>io.netty</groupId>
 | 
			
		||||
                <artifactId>netty-codec-http</artifactId>
 | 
			
		||||
                <version>4.1.72.Final</version>
 | 
			
		||||
            </dependency>
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <!--  If you are going to bump dependency.camel.version, please check if the netty-codec-http has higher version that the one above.-->
 | 
			
		||||
                <groupId>org.apache.camel</groupId>
 | 
			
		||||
@@ -863,7 +850,7 @@
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>org.reflections</groupId>
 | 
			
		||||
                <artifactId>reflections</artifactId>
 | 
			
		||||
                <version>0.10.2</version>
 | 
			
		||||
                <version>0.9.12</version>
 | 
			
		||||
            </dependency>
 | 
			
		||||
            <!-- swagger parser -->
 | 
			
		||||
            <dependency>
 | 
			
		||||
@@ -874,7 +861,7 @@
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>org.projectlombok</groupId>
 | 
			
		||||
                <artifactId>lombok</artifactId>
 | 
			
		||||
                <version>1.18.24</version>
 | 
			
		||||
                <version>1.18.22</version>
 | 
			
		||||
                <scope>provided</scope>
 | 
			
		||||
            </dependency>
 | 
			
		||||
        </dependencies>
 | 
			
		||||
@@ -894,7 +881,7 @@
 | 
			
		||||
                <plugin>
 | 
			
		||||
                    <groupId>io.fabric8</groupId>
 | 
			
		||||
                    <artifactId>docker-maven-plugin</artifactId>
 | 
			
		||||
                    <version>0.40.1</version>
 | 
			
		||||
                    <version>0.38.0</version>
 | 
			
		||||
                </plugin>
 | 
			
		||||
                <plugin>
 | 
			
		||||
                    <artifactId>maven-surefire-plugin</artifactId>
 | 
			
		||||
@@ -915,7 +902,7 @@
 | 
			
		||||
                <plugin>
 | 
			
		||||
                    <groupId>org.apache.maven.plugins</groupId>
 | 
			
		||||
                    <artifactId>maven-javadoc-plugin</artifactId>
 | 
			
		||||
                    <version>3.4.0</version>
 | 
			
		||||
                    <version>3.3.1</version>
 | 
			
		||||
                </plugin>
 | 
			
		||||
                <plugin>
 | 
			
		||||
                    <groupId>org.apache.maven.plugins</groupId>
 | 
			
		||||
@@ -925,11 +912,11 @@
 | 
			
		||||
                <plugin>
 | 
			
		||||
                    <groupId>org.apache.maven.plugins</groupId>
 | 
			
		||||
                    <artifactId>maven-dependency-plugin</artifactId>
 | 
			
		||||
                    <version>3.3.0</version>
 | 
			
		||||
                    <version>3.1.2</version>
 | 
			
		||||
                </plugin>
 | 
			
		||||
                <plugin>
 | 
			
		||||
                    <artifactId>maven-assembly-plugin</artifactId>
 | 
			
		||||
                    <version>3.4.1</version>
 | 
			
		||||
                    <version>3.3.0</version>
 | 
			
		||||
                </plugin>
 | 
			
		||||
                <plugin>
 | 
			
		||||
                    <groupId>org.alfresco.maven.plugin</groupId>
 | 
			
		||||
@@ -952,7 +939,7 @@
 | 
			
		||||
                                <failOnMissing>true</failOnMissing>
 | 
			
		||||
                                <excludedScopes>provided,test</excludedScopes>
 | 
			
		||||
                                <excludedGroups>^(org\.alfresco|com\.alfresco|org\.activiti|org\.gytheio).*</excludedGroups>
 | 
			
		||||
                                <failIfWarning>true</failIfWarning>
 | 
			
		||||
                                <failIfWarning>false</failIfWarning>
 | 
			
		||||
                                <includedLicenses>
 | 
			
		||||
                                    https://raw.githubusercontent.com/Alfresco/third-party-license-overrides/master/includedLicenses.txt
 | 
			
		||||
                                </includedLicenses>
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <groupId>org.alfresco</groupId>
 | 
			
		||||
        <artifactId>alfresco-community-repo</artifactId>
 | 
			
		||||
        <version>17.42</version>
 | 
			
		||||
        <version>14.93-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <dependencies>
 | 
			
		||||
@@ -47,7 +47,7 @@
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.apache.santuario</groupId>
 | 
			
		||||
            <artifactId>xmlsec</artifactId>
 | 
			
		||||
            <version>3.0.0</version>
 | 
			
		||||
            <version>2.3.0</version>
 | 
			
		||||
        </dependency>
 | 
			
		||||
        <!-- newer version, see REPO-3133 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
@@ -87,11 +87,6 @@
 | 
			
		||||
            <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,33 +1,32 @@
 | 
			
		||||
/*
 | 
			
		||||
 * #%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%
 | 
			
		||||
 */
 | 
			
		||||
/*
 | 
			
		||||
 * #%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%
 | 
			
		||||
 */
 | 
			
		||||
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;
 | 
			
		||||
@@ -59,7 +58,6 @@ 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 - 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%
 | 
			
		||||
 */
 | 
			
		||||
/*
 | 
			
		||||
 * #%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%
 | 
			
		||||
 */
 | 
			
		||||
package org.alfresco.repo.web.scripts.rule;
 | 
			
		||||
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
@@ -38,8 +38,6 @@ 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;
 | 
			
		||||
@@ -87,8 +85,6 @@ public abstract class AbstractRuleWebScript extends DeclarativeWebScript
 | 
			
		||||
    protected FileFolderService fileFolderService;
 | 
			
		||||
    protected NamespaceService namespaceService;
 | 
			
		||||
 | 
			
		||||
    private RuntimeActionService runtimeActionService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sets the node service instance
 | 
			
		||||
     * 
 | 
			
		||||
@@ -149,10 +145,6 @@ 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.
 | 
			
		||||
     * 
 | 
			
		||||
@@ -440,22 +432,10 @@ public abstract class AbstractRuleWebScript extends DeclarativeWebScript
 | 
			
		||||
 | 
			
		||||
    protected void checkRule(Rule rule)
 | 
			
		||||
    {
 | 
			
		||||
        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<String> ruleTypes = rule.getRuleTypes();
 | 
			
		||||
        if (ruleTypes.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 - 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%
 | 
			
		||||
 */
 | 
			
		||||
/*
 | 
			
		||||
 * #%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%
 | 
			
		||||
 */
 | 
			
		||||
package org.alfresco.repo.web.scripts.rule;
 | 
			
		||||
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
@@ -30,7 +30,6 @@ 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;
 | 
			
		||||
@@ -90,7 +89,6 @@ public class ActionQueuePost extends AbstractRuleWebScript
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Execute action
 | 
			
		||||
            ActionAccessRestriction.setActionContext(action, ActionAccessRestriction.V0_ACTION_CONTEXT);
 | 
			
		||||
            actionService.executeAction(action, actionedUponNode, true, async);
 | 
			
		||||
 | 
			
		||||
            // Prepair model
 | 
			
		||||
 
 | 
			
		||||
@@ -167,6 +167,10 @@ public class NodesMetaDataGet extends DeclarativeWebScript
 | 
			
		||||
            {
 | 
			
		||||
                filter.setIncludeType(o.getBoolean("includeType"));
 | 
			
		||||
            }
 | 
			
		||||
            if(o.has("includeChildAssociations"))
 | 
			
		||||
            {
 | 
			
		||||
                filter.setIncludeChildAssociations(o.getBoolean("includeChildAssociations"));
 | 
			
		||||
            }
 | 
			
		||||
            if(o.has("includeParentAssociations"))
 | 
			
		||||
            {
 | 
			
		||||
                filter.setIncludeParentAssociations(o.getBoolean("includeParentAssociations"));
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
 * #%L
 | 
			
		||||
 * Alfresco Remote API
 | 
			
		||||
 * %%
 | 
			
		||||
 * Copyright (C) 2005 - 2022 Alfresco Software Limited
 | 
			
		||||
 * 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 
 | 
			
		||||
@@ -390,9 +390,8 @@ public class LockInfoImpl implements Serializable, LockInfo
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            Date now = dateNow();
 | 
			
		||||
            long remainingTimeoutInSecondsRoundedUp = (Math.max(expires.getTime() - now.getTime(), 0) + 999) / 1000;
 | 
			
		||||
 | 
			
		||||
            return remainingTimeoutInSecondsRoundedUp;
 | 
			
		||||
            long timeout = ((expires.getTime() - now.getTime()) / 1000);
 | 
			
		||||
            return timeout;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user