Compare commits

...

485 Commits

Author SHA1 Message Date
Damian.Ujma@hyland.com
cd8ef77b3e Increase sleep to 4 minutes 2022-09-06 12:27:56 +02:00
Damian.Ujma@hyland.com
8622e0e102 Init 2022-09-06 11:10:46 +02:00
Travis CI User
69170dde35 [maven-release-plugin][skip ci] prepare for next development iteration 2022-09-04 00:10:18 +00:00
Travis CI User
c848024130 [maven-release-plugin][skip ci] prepare release 17.101 2022-09-04 00:10:15 +00:00
Alfresco CI User
553f78bb1e [force] Force release for 2022-09-04. 2022-09-04 00:03:36 +00:00
Travis CI User
9a3ceb21a8 [maven-release-plugin][skip ci] prepare for next development iteration 2022-09-03 17:43:30 +00:00
Travis CI User
57d0ff62dc [maven-release-plugin][skip ci] prepare release 17.100 2022-09-03 17:43:27 +00:00
mstrankowski
42bd94c1da ACS-3461: Update ATS reference to released 1.5.4-A3 2022-09-03 18:58:02 +02:00
Travis CI User
c5dd6538f8 [maven-release-plugin][skip ci] prepare for next development iteration 2022-09-01 05:40:58 +00:00
Travis CI User
152c036d86 [maven-release-plugin][skip ci] prepare release 17.99 2022-09-01 05:40:55 +00:00
rrajoria
f2055f91dc Reverting googledrive changes 2022-09-01 10:27:18 +05:30
Travis CI User
a1d7f0d479 [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-31 14:01:04 +00:00
Travis CI User
8476f01b35 [maven-release-plugin][skip ci] prepare release 17.98 2022-08-31 14:01:01 +00:00
Maciej Pichura
6c4b9e458a ACS-3431 rule set links TAS REST tests (#1342)
* ACS-3431: Initial TAS REST tests for link to rule set.

* ACS-3431: Fixing assertions.

* ACS-3431: Adding rule set assertions, fixing TAS RESTAPI dependency version.

* ACS-3431: Small test refactorings.

* ACS-3431: Small test refactorings.

* ACS-3431: Adding more tests and refactorings.

* ACS-3431: Fixing a TYPO.
2022-08-31 15:25:25 +02:00
Marcin Strankowski
0f99dec012 ACS-3463: Updating AIS and ATC versions (#1348) 2022-08-31 14:45:25 +02:00
Travis CI User
06c7836e70 [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-31 09:54:21 +00:00
Travis CI User
2ceb7384bf [maven-release-plugin][skip ci] prepare release 17.97 2022-08-31 09:54:19 +00:00
rrajoria
d848c83a57 Updating google drive version
Updating google drive version (Test only for JDK 17changes)
2022-08-31 14:46:12 +05:30
Kristian Dimitrov
be7572a978 ACS-3352 GET e2es for newly mapped other fields (#1335)
* ACS-3381: GET e2es for newly mapped other fields

* ACS-3381: Fix failing tests after rebase
2022-08-31 09:53:08 +01:00
Jamal Kaabi-Mofrad
ef45aaf9cc Upgraded Keycloak-Client to match the Identity-Service version. (#1344) 2022-08-30 16:47:37 +01:00
Travis CI User
6f834909f6 [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-28 00:10:34 +00:00
Travis CI User
b928598bd7 [maven-release-plugin][skip ci] prepare release 17.96 2022-08-28 00:10:32 +00:00
Alfresco CI User
678eeab278 [force] Force release for 2022-08-28. 2022-08-28 00:04:02 +00:00
Travis CI User
45f9bd6569 [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-25 15:41:39 +00:00
Travis CI User
23b8c0e7a6 [maven-release-plugin][skip ci] prepare release 17.95 2022-08-25 15:41:37 +00:00
Antonio Felix
9c98f7b0fb Fix/mnt 23087 export of records failing (#1333)
* MNT-23087 - Split the export list into several smaller list for better performance
2022-08-25 15:36:50 +01:00
Travis CI User
6e1d5c81e2 [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-25 11:21:43 +00:00
Travis CI User
092d895f6a [maven-release-plugin][skip ci] prepare release 17.94 2022-08-25 11:21:40 +00:00
Maciej Pichura
a568c87571 ACS-3429, ACS-3336: Rule action mappings (create), validations (update) - part 2 (#1332)
* ACS-3429, ACS-3336: Adding initial TAS tests for create rule with multiple actions, adding action parameters mappings and rule/action validations for rule update.

* ACS-3429: Removing duplicated assertion.

* ACS-3429: Changing NodeRef conversions to use only node id.
2022-08-25 12:46:42 +02:00
Kacper Magdziarz
3aac7be11c MNT-23103 - Downloading a document replaces filename having space with + character (#1327)
* MNT-23103 Change encoder for content disposition filename to be consistent with RFC5987.

Add test covering filename encoding.
2022-08-24 15:59:11 +02:00
Travis CI User
700fbce572 [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-24 13:43:15 +00:00
Travis CI User
7be96e788b [maven-release-plugin][skip ci] prepare release 17.93 2022-08-24 13:43:12 +00:00
George Evangelopoulos
0af001be2a Support for linking to a single rule set (#1324)
* Support for linking to a single rule set

* ACS-3435: Small fix to get parent  node for rule set.

* ACS-3435: Revert unnecessary change

* ACS-3435: added tests

* ACS-3435: move test assertions

* ACS-3435: adding tests

Co-authored-by: mpichura <maciej.pichura@hyland.com>
2022-08-24 15:58:04 +03:00
Travis CI User
f38a36910f [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-24 11:57:18 +00:00
Travis CI User
972f81ab8b [maven-release-plugin][skip ci] prepare release 17.92 2022-08-24 11:57:16 +00:00
Domenico Sibilio
1bd0dfd114 ACS-3351 Bump Alfresco JLAN to 7.2 (#1334) 2022-08-24 13:14:03 +02:00
Travis CI User
775de0e94c [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-21 00:10:37 +00:00
Travis CI User
78d2ed247a [maven-release-plugin][skip ci] prepare release 17.91 2022-08-21 00:10:35 +00:00
Alfresco CI User
5ca3630398 [force] Force release for 2022-08-21. 2022-08-21 00:03:38 +00:00
Travis CI User
ee7383dcab [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-19 15:10:22 +00:00
Travis CI User
36b3dc25c0 [maven-release-plugin][skip ci] prepare release 17.90 2022-08-19 15:10:18 +00:00
Maciej Pichura
0b94042b6f ACS-3429 post support for actions (#1305)
* ACS-3429: Initial attemp to add action mappings for create rule.

* ACS-3429: Adding rule action validation (TBC).

* ACS-3429: Adding some basic unit tests.

* ACS-3429: Fixing existing unit tests.

* ACS-3429: Adding some unit tests, small fixes.

* ACS-3429: Fixing existing TAS tests.

* ACS-3429: Fixing test after merge from master.

* ACS-3429: Updating TAS REST dependency.

* ACS-3429: Small fixes after review.

* ACS-3429: Refactoring conversion of action parameters + unit tests adjustments.

* ACS-3429: More unit tests for action parameter conversions.

* ACS-3429: More unit tests for action parameter conversions.

* ACS-3429: Removing unused imports.

* ACS-3429: Adding missing bean definition.
2022-08-19 16:29:37 +02:00
Travis CI User
27d3701c8b [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-18 13:53:38 +00:00
Travis CI User
dc0102001f [maven-release-plugin][skip ci] prepare release 17.89 2022-08-18 13:53:36 +00:00
krdabrowski
12bc363bcd ACS-3353: POST support for "other fields" (#1287) 2022-08-18 14:19:39 +01:00
Tom Page
2ab89f0d79 ACS-3280 Is inheritance enabled rule settings. (#1317)
* ACS-3280 REST tests for -isInheritanceEnabled- setting.

* ACS-3280 Allow setting/getting isInheritanceEnabled for folders.

* ACS-3280 E2E tests for negative cases.

* ACS-3280 Unit tests for RuleSettingsImpl. [tas]

* Update to released TAS REST API. [tas]

* ACS-3280 Code review fixes.

* ACS-3280 Use correct version of TAS. [tas]
2022-08-18 10:53:19 +01:00
Travis CI User
807e509859 [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-17 08:57:47 +00:00
Travis CI User
403da286e8 [maven-release-plugin][skip ci] prepare release 17.88 2022-08-17 08:57:45 +00:00
mikolajbrzezinski
cc3f8aaff4 ACS-3316 Fix custom models downloading and XSS (#1304)
* Revert "Revert "ACS-3316 Fix HTML sanitisation bypass (#1266)" (#1294)"

This reverts commit 6c407b1ef5.

* ACS-3316 Set node name for download node

* ACS-3316 Update license

Co-authored-by: Damian.Ujma@hyland.com <Damian.Ujma@hyland.com>
2022-08-17 10:14:40 +02:00
George Evangelopoulos
be925ab67d Change exception type (#1316) 2022-08-16 16:44:29 +03:00
Travis CI User
de4ac000dd [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-15 12:59:40 +00:00
Travis CI User
b2b866e0f9 [maven-release-plugin][skip ci] prepare release 17.87 2022-08-15 12:59:38 +00:00
George Evangelopoulos
984bc151af ACS-3290: V1 REST API endpoint for linking to ruleset (#1269)
* ACS-3290: Endpoint for linking to ruleset

* ACS-3290: Small fixes to REST API endpoint definition.

* ACS-3290: Small fixes in bean initialization.

* ACS-3290: Fix changes after rebasing and add exception message

* ACS-3290: Added unit tests

* ACS-3290: Refactoring and moving logic to RulesImpl interface

* ACS-3290: Remove unused imports and refactoring

* ACS-3290: Formatting

Co-authored-by: mpichura <maciej.pichura@hyland.com>
2022-08-15 15:08:40 +03:00
Travis CI User
b057455cde [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-14 00:10:20 +00:00
Travis CI User
40edaccd1a [maven-release-plugin][skip ci] prepare release 17.86 2022-08-14 00:10:18 +00:00
Alfresco CI User
a802a17d92 [force] Force release for 2022-08-14. 2022-08-14 00:03:42 +00:00
Travis CI User
332626421b [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-12 15:16:34 +00:00
Travis CI User
1baf8d6fae [maven-release-plugin][skip ci] prepare release 17.85 2022-08-12 15:16:32 +00:00
Tom Page
4bae0f2060 ACS-3358 Support isShared field. (#1301)
* Use the new include method.

* ACS-3358 Rename the shared field to isShared.

* ACS-3358 Make isShared an optional field.

* ACS-3358 Add TAS tests for the optional isShared field.

* ACS-3358 Upgrade to release version of TAS REST API. [tas]

* ACS-3358 Update test descriptions.

* ACS-3358 Update toString of Rule.
2022-08-12 15:37:57 +01:00
Travis CI User
0c017ac30c [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-11 15:08:22 +00:00
Travis CI User
cc0940e519 [maven-release-plugin][skip ci] prepare release 17.84 2022-08-11 15:08:19 +00:00
dependabot[bot]
0190b9060a Bump email from 1.8 to 1.9 (#1299) 2022-08-11 14:33:55 +00:00
dependabot[bot]
596e964553 Bump cmis from 1.31 to 1.32 (#1300) 2022-08-11 14:01:09 +00:00
dependabot[bot]
5d22e161d7 Bump webdav from 1.6 to 1.7 (#1296) 2022-08-11 13:59:12 +00:00
dependabot[bot]
bb27430f6a Bump dependency.slf4j.version from 1.7.35 to 1.7.36 (#952) 2022-08-11 13:52:38 +00:00
Travis CI User
1af879a7ed [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-11 11:45:25 +00:00
Travis CI User
c029f5afa3 [maven-release-plugin][skip ci] prepare release 17.83 2022-08-11 11:45:22 +00:00
mstrankowski
3b93814d76 Retry tests 2022-08-11 13:07:19 +02:00
mstrankowski
656ecdc41d [skip tests] Retry release 2022-08-11 13:05:41 +02:00
Travis CI User
8150abf8b7 [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-11 10:21:56 +00:00
Travis CI User
cab6fd6d2c [maven-release-plugin][skip ci] prepare release 17.82 2022-08-11 10:21:54 +00:00
dependabot[bot]
e45211ad0f Bump ftp from 1.5 to 1.7 (#1297) 2022-08-11 09:48:29 +00:00
Tom Page
414cba0c1a ACS-3361 Upgrade TAS REST API and check nothing is broken. [tas] (#1295) 2022-08-10 16:42:53 +01:00
Travis CI User
75b74a5d77 [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-10 13:25:09 +00:00
Travis CI User
d3efea8873 [maven-release-plugin][skip ci] prepare release 17.81 2022-08-10 13:25:05 +00:00
mikolajbrzezinski
6c407b1ef5 Revert "ACS-3316 Fix HTML sanitisation bypass (#1266)" (#1294)
This reverts commit 885f21ff86.
2022-08-10 14:36:25 +02:00
Travis CI User
f7dcbc6551 [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-10 10:31:48 +00:00
Travis CI User
ed1ee00cee [maven-release-plugin][skip ci] prepare release 17.80 2022-08-10 10:31:46 +00:00
Tom Page
bba1664fef ACS-3361 Support for inclusionType. (#1286)
* ACS-3361 Support for inclusionType.

* ACS-3361 Update to released version of TAS Rest API. [tas]

* ACS-3361 Better coverage of different inclusion types. [tas]
2022-08-10 10:58:15 +01:00
Travis CI User
d675d58929 [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-09 12:38:17 +00:00
Travis CI User
4f37b984be [maven-release-plugin][skip ci] prepare release 17.79 2022-08-09 12:38:14 +00:00
Marcin Strankowski
9d228add35 Update rest-assured version to 5.1.1, link to newer tas-restapi arti… (#1285)
Update rest-assured version to 5.1.1, link to newer  tas-restapi artifact containing changes
2022-08-09 14:01:44 +02:00
Travis CI User
58d9d0b093 [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-09 09:59:45 +00:00
Travis CI User
f8d66ec76d [maven-release-plugin][skip ci] prepare release 17.78 2022-08-09 09:59:42 +00:00
mstrankowski
94a47d0368 [skip tests] Trigger version update 2022-08-09 11:52:24 +02:00
Tom Page
8884cc9563 ACS_3362 GET rule set can include optional owningFolder field. (#1280)
* ACS_3362 GET rule set can include optional owningFolder field. [skip ci]

* ACS_3362 Update to use release version of TAS. [tas]

* ACS_3362 Refactor RuleSetLoader into its own class. [tas]
2022-08-09 10:05:14 +01:00
dependabot[bot]
594f02e7cd Bump junrar from 7.5.2 to 7.5.3 (#1281) 2022-08-09 09:04:42 +00:00
kavitshah-gl
cb29f1e9ec Feature/apps 1550 (#1212)
* Adding test for the stage AGS Smoke UI Tests for actions in RM site

* pushed the createCategoriesTest in APPS-1550 brach

* pushed the createCategoriesTest in APPS-1550 branch

* pushed the CreateFoldersTests in APPS-1550 branch

* [ags]

* ~ /\[ags\]

* [ags]

* [ags]

* [ags]

* [ags]

* [ags]

* [ags]

* [ags]

* [ags]

* [ags]

* [ags]

* Revert "~ /\[ags\]"

This reverts commit ed9443e5

* [ags]

* [ags]

* [ags]

* [ags]

* [ags]

* [ags]

* [ags]

* [ags]

* [ags]

* [ags]

* [ags]

* [ags]

* [ags]

* Adding FoldersDispositionScheduleTests

* Added foldersDispositionScheduleWithGhosting

* Added foldersDispositionScheduleWithoutGhosting

* Added RecordsDispositionScheduleTests and other fixes

* Added RecordsDispositionScheduleWithGhostingTests

* [ags api]

* [ags]

* [ags]

* [ags]

* [ags]

* [ags]

* [ags]

* [ags]

* [ags]

* [ags]

* [ags]

* [ags]

* [ags]

* [ags]

* [ags]

* [ags]

* Revert "[ags api]"

This reverts commit 2153eafc0f.

* Fixed Review Comments [ags]

Co-authored-by: sbisht <shishuraj.bisht@globallogic.com>
2022-08-09 14:31:28 +05:30
Travis CI User
59816bd071 [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-09 08:30:29 +00:00
Travis CI User
bb77023e1f [maven-release-plugin][skip ci] prepare release 17.77 2022-08-09 08:30:26 +00:00
mstrankowski
fa7cb58044 Retrigger master build due to nexus failure 2022-08-09 09:54:43 +02:00
Travis CI User
4962ce1111 [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-08 15:24:19 +00:00
Travis CI User
20a0bb7194 [maven-release-plugin][skip ci] prepare release 17.76 2022-08-08 15:24:16 +00:00
dependabot[bot]
1e1bebd19c Bump alfresco-messaging-repo from 1.2.19 to 1.2.20 (#1196) 2022-08-08 14:41:57 +00:00
Travis CI User
03dedb4140 [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-08 13:02:05 +00:00
Travis CI User
66f6174b87 [maven-release-plugin][skip ci] prepare release 17.75 2022-08-08 13:02:03 +00:00
mikolajbrzezinski
885f21ff86 ACS-3316 Fix HTML sanitisation bypass (#1266)
* ContentGet context file update

* Get mimetype from ContentReader and check if should be forced to downlaod

* Changes according to comments

* Code duplication removal

* Missing spaces, touch-ups to Javadoc and logic

* tests for slingshot

* Tests for contentGet and formatting changes
2022-08-08 14:26:33 +02:00
Tom Page
501d9204a9 ACS-3360 E2E tests for GET rule sets. [tas] (#1264)
* ACS-3360 GET APIs for rule sets.

Move RulesImpl and RuleSetsImpl into their own package.
Split out node validation into a new class.

* ACS-3360 E2E tests for GET rule sets. [tas]

* ACS-3360 GET APIs for rule sets E2E tests.

* ACS-3360 GET APIs for rule sets E2E tests.

* ACS-3360 GET APIs for rule sets E2E tests.

* ACS-3360 Update comment [skip ci][skip tests]

Co-authored-by: Krystian Dabrowski <krystian.dabrowski@hyland.com>
2022-08-08 11:29:03 +01:00
dependabot[bot]
924005e94e Bump jetty-webapp from 8.2.0.v20160908 to 9.4.34.v20201102 in /remote-api (#270)
* Bump jetty-webapp in /remote-api

Upping jetty to 10.0.11 with a few necessary modifications to avoid errors
Swapping charsets to lowercase, adding ignoring of ambiguous link security issues for jetty (since it is only used in 

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: mstrankowski <marcin.strankowski@hyland.com>
2022-08-08 11:59:07 +02:00
Alfresco CI User
3a34c42d2f [force] Force release for 2022-08-07. 2022-08-07 00:03:34 +00:00
Travis CI User
332af85227 [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-06 13:46:10 +00:00
Travis CI User
556c13eba0 [maven-release-plugin][skip ci] prepare release 17.74 2022-08-06 13:46:08 +00:00
dependabot[bot]
3caf6bf9f3 Bump alfresco-opencmis-extension from 2.0 to 2.1 (#1277) 2022-08-06 13:07:29 +00:00
Travis CI User
b5fcc5370a [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-06 10:13:41 +00:00
Travis CI User
29007871e8 [maven-release-plugin][skip ci] prepare release 17.73 2022-08-06 10:13:39 +00:00
dependabot[bot]
12df503cc2 Bump restapi from 1.100 to 1.101 (#1279) 2022-08-06 09:22:07 +00:00
Travis CI User
e3a9e9c034 [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-06 08:34:50 +00:00
Travis CI User
d116cf397b [maven-release-plugin][skip ci] prepare release 17.72 2022-08-06 08:34:48 +00:00
dependabot[bot]
271c123a00 Bump alfresco-greenmail from 6.2 to 6.4 (#1278) 2022-08-06 08:01:11 +00:00
Travis CI User
5bae1ca9b6 [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-06 01:35:04 +00:00
Travis CI User
f84c82c6a2 [maven-release-plugin][skip ci] prepare release 17.71 2022-08-06 01:35:02 +00:00
dependabot[bot]
c639eec1df Bump acs-event-model from 0.0.15 to 0.0.16 (#1274) 2022-08-06 01:03:07 +00:00
Travis CI User
d2e561dc95 [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-06 00:37:30 +00:00
Travis CI User
54347fbbee [maven-release-plugin][skip ci] prepare release 17.70 2022-08-06 00:37:28 +00:00
dependabot[bot]
ab0d482179 Bump postgresql from 42.4.0 to 42.4.1 (#1271) 2022-08-06 00:01:23 +00:00
Travis CI User
5fed5292d9 [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-05 09:38:41 +00:00
Travis CI User
1e8944a310 [maven-release-plugin][skip ci] prepare release 17.69 2022-08-05 09:38:38 +00:00
Kristian Dimitrov
b97b6751cc ACS-3381: Initial commit (#1272) 2022-08-05 10:04:17 +01:00
Tom Page
af97aca661 ACS-3360 GET APIs for rule sets. (#1263)
ACS-3360 GET APIs for rule sets.

Move RulesImpl and RuleSetsImpl into their own package.
Split out node validation into a new class.
2022-08-04 17:27:51 +02:00
Travis CI User
368acf4724 [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-04 05:56:52 +00:00
Travis CI User
2341f0290e [maven-release-plugin][skip ci] prepare release 17.68 2022-08-04 05:56:49 +00:00
pzurek
2e4f5d5726 Revert "Bump dependency.camel.version from 3.15.0 to 3.18.0 (#1200)"
This reverts commit 2285dc1ecb.
2022-08-04 07:21:17 +02:00
Travis CI User
be118c25ba [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-03 09:43:05 +00:00
Travis CI User
601b743388 [maven-release-plugin][skip ci] prepare release 17.67 2022-08-03 09:43:03 +00:00
Travis CI User
3c3c3b2666 [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-03 07:27:27 +00:00
Travis CI User
b671e17f03 [maven-release-plugin][skip ci] prepare release 17.66 2022-08-03 07:27:24 +00:00
dependabot[bot]
a08b134ec2 Bump restapi from 1.99 to 1.100 (#1270) 2022-08-03 06:53:32 +00:00
Travis CI User
9795349f9b [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-02 13:48:18 +00:00
Travis CI User
f120ba3a87 [maven-release-plugin][skip ci] prepare release 17.65 2022-08-02 13:48:15 +00:00
dependabot[bot]
2285dc1ecb Bump dependency.camel.version from 3.15.0 to 3.18.0 (#1200)
Bumps `dependency.camel.version` from 3.15.0 to 3.18.0.

Updates `camel-core` from 3.15.0 to 3.18.0

Updates `camel-spring-xml` from 3.15.0 to 3.18.0

Updates `camel-activemq` from 3.15.0 to 3.18.0

Updates `camel-amqp` from 3.15.0 to 3.18.0

Updates `camel-jackson` from 3.15.0 to 3.18.0

Updates `camel-directvm` from 3.15.0 to 3.18.0

Updates `camel-direct` from 3.15.0 to 3.18.0

Updates `camel-management` from 3.15.0 to 3.18.0

Updates `camel-mock` from 3.15.0 to 3.18.0

---
updated-dependencies:
- dependency-name: org.apache.camel:camel-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.camel:camel-spring-xml
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.camel:camel-activemq
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.camel:camel-amqp
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.camel:camel-jackson
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.camel:camel-directvm
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.camel:camel-direct
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.camel:camel-management
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.camel:camel-mock
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-08-02 15:04:54 +02:00
Travis CI User
cbded8f967 [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-02 13:02:59 +00:00
Travis CI User
5e3ee41fce [maven-release-plugin][skip ci] prepare release 17.64 2022-08-02 13:02:57 +00:00
Maciej Pichura
6c9163ce65 ACS-3227: REST API TAS tests for create rule with consumer role. (#1262) 2022-08-02 14:33:08 +02:00
krdabrowski
8a79d3bed1 ACS-3229: Rules v1 REST API - Get rule definition - mapping of conditions (#1252)
ACS-3229: Rules v1 REST API - Get rule definition
- adding mapping of "conditions"
- fixing trigger constants - uppercase -> lowercase
- fixing booleanMode - uppercase -> lowercase
2022-08-02 14:10:52 +02:00
Travis CI User
f1c588f1da [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-02 08:54:43 +00:00
Travis CI User
f38902ede9 [maven-release-plugin][skip ci] prepare release 17.63 2022-08-02 08:54:40 +00:00
dependabot[bot]
5f1cf5ef60 Bump docker-maven-plugin from 0.40.1 to 0.40.2 (#1267) 2022-08-02 08:01:57 +00:00
Travis CI User
2a41c1f14a [maven-release-plugin][skip ci] prepare for next development iteration 2022-08-01 09:31:23 +00:00
Travis CI User
4f0cbd7206 [maven-release-plugin][skip ci] prepare release 17.62 2022-08-01 09:31:20 +00:00
dependabot[bot]
0823d5319c Bump restapi from 1.97 to 1.99 (#1265) 2022-08-01 08:42:43 +00:00
krdabrowski
001e7a4bff ACS-3229: Rules v1 REST API - Get rule definition - mapping of actions (#1245)
ACS-3229: Rules v1 REST API - Get rule definition
- adding mapping of "actions"
2022-08-01 10:35:52 +02:00
Domenico Sibilio
aba89218e6 ACS-3347 Upgrade to Java 17 (#1253)
* Addressing JDK-8189366, JDK-8212114, JDK-8208487, changes to default legacy Locale ISO Code conversions and changes to JVM arguments to allow illegal reflective access
2022-08-01 09:30:56 +02:00
Travis CI User
e533af4ecb [maven-release-plugin][skip ci] prepare for next development iteration 2022-07-31 00:09:26 +00:00
Travis CI User
4a7046211b [maven-release-plugin][skip ci] prepare release 17.61 2022-07-31 00:09:24 +00:00
Alfresco CI User
48e902c556 [force] Force release for 2022-07-31. 2022-07-31 00:04:00 +00:00
Vítor Moreira
e178428624 MNT-22979: removed unused commons-dbcp artefact from activiti (#1231) 2022-07-29 16:08:13 +01:00
Maciej Pichura
7b4f7c9174 ACS-3345 e2e REST API TAS tests delete rule (#1256)
* ACS-3345: REST API TAS tests for delete rule.

* ACS-3345: REST API TAS tests for delete rule.

* ACS-3345: REST API TAS tests for delete rule.

* ACS-3345: Fixing the naming.

* ACS-3345: REST API TAS tests for delete rule.
2022-07-29 14:29:56 +02:00
dependabot[bot]
d84424ee5b Bump dependency.spring.version from 5.3.21 to 5.3.22 (#1221) 2022-07-29 12:24:41 +00:00
dependabot[bot]
a4ad5f9211 Bump utility from 3.0.48 to 3.0.49 (#1229) 2022-07-29 11:57:56 +00:00
dependabot[bot]
9fbdc61d3c Bump maven-assembly-plugin from 3.4.1 to 3.4.2 (#1248) 2022-07-29 10:02:47 +00:00
dependabot[bot]
7db6d372da Bump maven-resources-plugin from 3.2.0 to 3.3.0 (#1246) 2022-07-29 08:28:12 +00:00
dependabot[bot]
c334f14cd2 Bump groovy from 3.0.11 to 3.0.12 (#1247) 2022-07-29 08:23:39 +00:00
dependabot[bot]
d584b3c1a3 Bump mysql-connector-java from 8.0.29 to 8.0.30 (#1250) 2022-07-29 08:15:56 +00:00
Travis CI User
b06a74c5cb [maven-release-plugin][skip ci] prepare for next development iteration 2022-07-28 16:25:00 +00:00
Travis CI User
5b723e9176 [maven-release-plugin][skip ci] prepare release 17.60 2022-07-28 16:24:56 +00:00
Kristian Dimitrov
bf69340e4b ACS-2827: Initial commit (#1259) 2022-07-28 16:50:43 +01:00
Travis CI User
b6aeac0c4e [maven-release-plugin][skip ci] prepare for next development iteration 2022-07-28 14:37:18 +00:00
Travis CI User
c1da01ba6e [maven-release-plugin][skip ci] prepare release 17.59 2022-07-28 14:37:15 +00:00
Sara
ecb0d9a329 Feature/acs 3122 update tomcat to rocky linux8 (#1258)
* update tomcat base image to rockylinux8

* add dockerfile to dependabot

* update packages for rockylinux8

* fix time zone double quotes

* correct dependabot indents

* correct dependabot indents

* corrected nbr pull requests
2022-07-28 15:02:39 +01:00
Travis CI User
c3189adf9f [maven-release-plugin][skip ci] prepare for next development iteration 2022-07-28 11:48:42 +00:00
Travis CI User
8a7b8a7a54 [maven-release-plugin][skip ci] prepare release 17.58 2022-07-28 11:48:39 +00:00
Sara
3d35eed39c Feature/acs 3122 update tomcat to rocky linux8 (#1255)
* update tomcat base image to rockylinux8

* add dockerfile to dependabot

* update packages for rockylinux8
2022-07-28 12:15:00 +01:00
Travis CI User
37afef846f [maven-release-plugin][skip ci] prepare for next development iteration 2022-07-28 08:16:48 +00:00
Travis CI User
57a3fbd2d5 [maven-release-plugin][skip ci] prepare release 17.57 2022-07-28 08:16:46 +00:00
Tom Page
378347ae35 ACS-3214 Unit tests for update rule API. (#1257) 2022-07-28 08:12:08 +01:00
Travis CI User
fc8ec4f993 [maven-release-plugin][skip ci] prepare for next development iteration 2022-07-27 15:51:33 +00:00
Travis CI User
bd404080b0 [maven-release-plugin][skip ci] prepare release 17.56 2022-07-27 15:51:30 +00:00
Tom Page
54ba3ea998 ACS-3214 Fix compilation error introduced by integration of two features. 2022-07-27 16:16:58 +01:00
Tom Page
13ee559a29 ACS-3214 Update rules. (#1254) 2022-07-27 15:16:46 +01:00
Travis CI User
69b6fc4603 [maven-release-plugin][skip ci] prepare for next development iteration 2022-07-27 13:24:19 +00:00
Travis CI User
f1dc07be57 [maven-release-plugin][skip ci] prepare release 17.55 2022-07-27 13:24:17 +00:00
krdabrowski
ac9151ed86 Rules v1 REST API - Get rule definition - mapping of "other fields" (#1244)
ACS-3229: Rules v1 REST API - Get rule definition
- adding mapping of so-called "other fields"
2022-07-27 14:02:08 +02:00
Damian Ujma
71080c9c7d ACS-3306 Upgrade activemq to 5.17.1-jre11-rockylinux8 (#1241)
* ACS-3306 Upgrade activemq to 5.17.X

* ACS-3306 Upgrade activemq to 5.17.X

* ACS-3306 Upgrade activemq to 5.17.X

* ACS-3306 Resolve conflicts
2022-07-27 13:25:03 +02:00
Travis CI User
a929982faf [maven-release-plugin][skip ci] prepare for next development iteration 2022-07-27 10:32:48 +00:00
Travis CI User
5e3d5919a0 [maven-release-plugin][skip ci] prepare release 17.54 2022-07-27 10:32:46 +00:00
dependabot[bot]
98a3161ef0 Bump restapi from 1.94 to 1.97 (#1249) 2022-07-27 08:26:25 +00:00
Tom Page
74bf3146b3 ACS-3346 Require CHANGE permission for POST/DELETE rules. (#1251) 2022-07-27 09:03:59 +01:00
Travis CI User
b272c89791 [maven-release-plugin][skip ci] prepare for next development iteration 2022-07-27 07:40:32 +00:00
Travis CI User
632a86c5b7 [maven-release-plugin][skip ci] prepare release 17.53 2022-07-27 07:40:30 +00:00
dependabot[bot]
958d6b771e Bump api-explorer from 7.2.0 to 7.2.1 (#1233)
Bumps [api-explorer](https://github.com/Alfresco/rest-api-explorer) from 7.2.0 to 7.2.1.
- [Release notes](https://github.com/Alfresco/rest-api-explorer/releases)
- [Commits](https://github.com/Alfresco/rest-api-explorer/compare/7.2.0...7.2.1)

---
updated-dependencies:
- dependency-name: org.alfresco:api-explorer
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-07-26 10:39:10 -06:00
Travis CI User
b95233b18a [maven-release-plugin][skip ci] prepare for next development iteration 2022-07-26 11:02:22 +00:00
Travis CI User
aa4ec88ef2 [maven-release-plugin][skip ci] prepare release 17.52 2022-07-26 11:02:20 +00:00
Domenico Sibilio
45ecf340f1 ACS-3342 Test with PostgreSQL 14.4 and 13.7 (#1243) 2022-07-26 12:08:29 +02:00
Travis CI User
81830c8ad4 [maven-release-plugin][skip ci] prepare for next development iteration 2022-07-25 14:42:04 +00:00
Travis CI User
37152229fa [maven-release-plugin][skip ci] prepare release 17.51 2022-07-25 14:42:01 +00:00
Tom Page
182afc58c4 ACS-3227 Update FilePlanRuleInheritanceTest to include a title for the rule. 2022-07-25 15:07:31 +01:00
Tom Page
bc658bbc57 Merge feature/FolderRulesMaster into master. 2022-07-25 14:05:41 +01:00
Tom Page
35f81322b1 ACS-3227 Permissions tests for GET rules. [tas] (#1242) 2022-07-25 14:00:49 +01:00
Tom Page
9e0b69bfa4 ACS-3227 Ensure the rule name is set. (#1240) [tas][ags]
* ACS-3227 Ensure the rule name is set. [tas]

* ACS-3227 Update tests that didn't set rule name.

* Update license year for test file.
2022-07-25 12:35:30 +01:00
Travis CI User
5890e28151 [maven-release-plugin][skip ci] prepare for next development iteration 2022-07-24 00:08:06 +00:00
Travis CI User
dfc0c5674c [maven-release-plugin][skip ci] prepare release 17.50 2022-07-24 00:08:04 +00:00
Alfresco CI User
271feb71c9 [force] Force release for 2022-07-24. 2022-07-24 00:03:24 +00:00
Tom Page
eadc398748 ACS-3227 Add some more comprehensive REST tests for creating rules. (#1239) [tas]
* ACS-3227 Add some more comprehensive REST tests for creating rules.

* ACS-3227 Fix rule name in test. [skip ci]
2022-07-22 14:25:19 +01:00
Tom Page
8f2f8cb04c ACS-3227 Simple rules tests. (#1236) [tas]
* ACS-3227 Initial tests for POST rules API.

* ACS-3227 Add sanity tests for getting created rules.

* Update license header year.
2022-07-22 12:10:01 +01:00
Travis CI User
7a2d6b71ac [maven-release-plugin][skip ci] prepare for next development iteration 2022-07-22 09:38:03 +00:00
Travis CI User
99a503a1e1 [maven-release-plugin][skip ci] prepare release 17.49 2022-07-22 09:37:59 +00:00
rrajoria
e60f8fdecc Updating googledrive version 2022-07-22 14:30:14 +05:30
Tom Page
3f3698f32a ACS-3227 POST Rule Fixes. (#1235)
* ACS-3227 Don't try to load rule set node if using -default-.

It might not exist yet, since it's created along with the first rule.

Also avoid using id of rule before it has been created.

* ACS-3227 Add a hard-coded action while we don't support supplying actions in the POST.
2022-07-21 13:36:17 +01:00
Maciej Pichura
366796947f ACS-3220 Folder rules delete rule v1 API (#1232)
* ACS-3220: Delete single folder rule.

* ACS-3220: Delete single folder rule - adding more negative unit tests.

* ACS-3220: Delete single folder rule - fixing review comments.
2022-07-21 14:27:58 +02:00
Tom Page
84f7726cbd ACS-3225 REST API to create one or more rules. (#1216) [tas]
* ACS-3225: Folder Rules v1 REST API - Create Rule

* ACS-3225 Create one or more rules within a folder/rule set.

* ACS-3225 Update ExtendedRuleServiceImpl in AGS to match new interface.

* ACS-3225 Code review fixes.

Make RuleBuilder an inner class, add documentation to API and rename method to createRules.

Co-authored-by: Krystian Dabrowski <krystian.dabrowski@hyland.com>
2022-07-20 10:23:30 +01:00
Tom Page
06f0f181df ACS-3225 Add license header to new test file. [skip ci] 2022-07-20 09:51:21 +01:00
Tom Page
741aa6948f ACS-3225 Get rules REST tests. (#1228)
* ACS-3225 REST tests for getting one or more rules.

* ACS-3225 Update TAS REST API.

* ACS-3225 [tas] Include new REST tests.
2022-07-20 09:45:01 +01:00
Tom Page
8618e11a33 ACS-3225 Include TAS changes for rules. (#1227) 2022-07-19 15:22:00 +01:00
Travis CI User
59f414d1b1 [maven-release-plugin][skip ci] prepare for next development iteration 2022-07-18 18:22:47 +00:00
Travis CI User
4b5b61e669 [maven-release-plugin][skip ci] prepare release 17.48 2022-07-18 18:22:44 +00:00
MohinishSah
50a2707069 updating Google docs Alpha version 2022-07-18 23:19:28 +05:30
Travis CI User
82605c1d42 [maven-release-plugin][skip ci] prepare for next development iteration 2022-07-18 14:07:11 +00:00
Travis CI User
72d118c23c [maven-release-plugin][skip ci] prepare release 17.47 2022-07-18 14:07:08 +00:00
rrajoria
9f7285d13d Updating googledrive version (#1226) 2022-07-18 19:02:54 +05:30
Travis CI User
118a55e358 [maven-release-plugin][skip ci] prepare for next development iteration 2022-07-18 11:13:36 +00:00
Travis CI User
2a9265fb30 [maven-release-plugin][skip ci] prepare release 17.46 2022-07-18 11:13:33 +00:00
Grzegorz Oleksy
57f02054c4 ACS-3170 Implement Tests For Mail Actions (#1213)
Added tests for restApi with all 4 external endpoints kept track of (running-actions from v0 wasn't needed, as that only allows admin to run actions).
Unit tests added, 1 spring test to verify admin privilege check in AccessRestriction class.

Co-authored-by: mstrankowski <marcin.strankowski@hyland.com>
2022-07-18 12:37:22 +02:00
Travis CI User
5cb66ebbd0 [maven-release-plugin][skip ci] prepare for next development iteration 2022-07-17 00:07:50 +00:00
Travis CI User
f872e2dc9c [maven-release-plugin][skip ci] prepare release 17.45 2022-07-17 00:07:48 +00:00
Alfresco CI User
b34fdb8f75 [force] Force release for 2022-07-17. 2022-07-17 00:03:04 +00:00
Travis CI User
0a77cca00d [maven-release-plugin][skip ci] prepare for next development iteration 2022-07-16 09:08:23 +00:00
Travis CI User
a18ab6fdd1 [maven-release-plugin][skip ci] prepare release 17.44 2022-07-16 09:08:20 +00:00
Travis CI User
d78e61acde [maven-release-plugin][skip ci] prepare for next development iteration 2022-07-13 15:44:52 +00:00
Travis CI User
1508b599cc [maven-release-plugin][skip ci] prepare release 17.43 2022-07-13 15:44:49 +00:00
krdabrowski
0b7909be40 ACS-3229: Rules v1 REST API - Get rule definition (#1205)
ACS-3229: Rules v1 REST API - Get rule definition
2022-07-13 15:59:29 +02:00
Travis CI User
75b9388a12 [maven-release-plugin][skip ci] prepare for next development iteration 2022-07-12 15:45:43 +00:00
Travis CI User
8936db78a5 [maven-release-plugin][skip ci] prepare release 17.42 2022-07-12 15:45:40 +00:00
dependabot[bot]
c475114030 Bump maven-assembly-plugin from 3.3.0 to 3.4.1 (#1202)
Bumps [maven-assembly-plugin](https://github.com/apache/maven-assembly-plugin) from 3.3.0 to 3.4.1.
- [Release notes](https://github.com/apache/maven-assembly-plugin/releases)
- [Commits](https://github.com/apache/maven-assembly-plugin/compare/maven-assembly-plugin-3.3.0...maven-assembly-plugin-3.4.1)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-assembly-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-07-12 16:12:59 +01:00
Travis CI User
11c4537a53 [maven-release-plugin][skip ci] prepare for next development iteration 2022-07-12 14:19:54 +00:00
Travis CI User
e79c2c1792 [maven-release-plugin][skip ci] prepare release 17.41 2022-07-12 14:19:51 +00:00
dependabot[bot]
b94cb56fa1 Bump jsoup from 1.15.1 to 1.15.2 (#1197)
Bumps [jsoup](https://github.com/jhy/jsoup) from 1.15.1 to 1.15.2.
- [Release notes](https://github.com/jhy/jsoup/releases)
- [Changelog](https://github.com/jhy/jsoup/blob/master/CHANGES)
- [Commits](https://github.com/jhy/jsoup/compare/jsoup-1.15.1...jsoup-1.15.2)

---
updated-dependencies:
- dependency-name: org.jsoup:jsoup
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-07-12 14:43:46 +01:00
Travis CI User
40f76a9005 [maven-release-plugin][skip ci] prepare for next development iteration 2022-07-11 12:36:38 +00:00
Travis CI User
eda63061b8 [maven-release-plugin][skip ci] prepare release 17.40 2022-07-11 12:36:35 +00:00
Travis CI User
b05b51d055 [maven-release-plugin][skip ci] prepare for next development iteration 2022-07-10 00:12:18 +00:00
Travis CI User
d6614b900f [maven-release-plugin][skip ci] prepare release 17.39 2022-07-10 00:12:15 +00:00
Alfresco CI User
032a3ad73e [force] Force release for 2022-07-10. 2022-07-10 00:05:38 +00:00
Travis CI User
d49b261611 [maven-release-plugin][skip ci] prepare for next development iteration 2022-07-08 18:02:13 +00:00
Travis CI User
f18a48470b [maven-release-plugin][skip ci] prepare release 17.38 2022-07-08 18:02:11 +00:00
Sara
f87687b632 Feature/acs 3163 secure import action against non recursive zip bomb (#1194)
* Compression ratio based zip bomb protection

* Compression ratio based zip bomb protection

* ACS-3163 Add uncompressed bytes limit and tests

* ACS-3163 remove static fields

* remove duplicated code

* Use Null object for empty tracker

Co-authored-by: pzurek <Piotr.Zurek@hyland.com>
2022-07-08 18:31:43 +01:00
Travis CI User
f632b1e34b [maven-release-plugin][skip ci] prepare for next development iteration 2022-07-07 18:19:59 +00:00
Travis CI User
ed4de81428 [maven-release-plugin][skip ci] prepare release 17.37 2022-07-07 18:19:56 +00:00
krdabrowski
101eb1843d ACS-3198: Folder rules v1 REST API - List rules for node (#1193)
ACS-3198: Rules v1 REST API - List rules for a folder node
2022-07-07 19:40:47 +02:00
Travis CI User
9e7b8fcdce [maven-release-plugin][skip ci] prepare for next development iteration 2022-07-06 16:05:24 +00:00
Travis CI User
6207bfa33c [maven-release-plugin][skip ci] prepare release 17.36 2022-07-06 16:05:20 +00:00
rrajoria
6a8102ce81 PRODSEC-6115: Updating Surf Webscript Version (#1199) 2022-07-06 21:04:45 +05:30
Travis CI User
47977a3fae [maven-release-plugin][skip ci] prepare for next development iteration 2022-07-06 14:49:49 +00:00
Travis CI User
4f2fa0bb77 [maven-release-plugin][skip ci] prepare release 17.35 2022-07-06 14:49:46 +00:00
Marcin Strankowski
43480468af Feature/acs 3169 implement security mechanism for mail action (#1189)
Implementing access restriction for actions
Updating copyrights of modified files
Moving core restriction processing to an AbstractBase class
PR Review fixes
Slight improvement for future extensibility
2022-07-06 16:07:40 +02:00
Travis CI User
92d010842a [maven-release-plugin][skip ci] prepare for next development iteration 2022-07-03 00:13:24 +00:00
Travis CI User
a66a13f03b [maven-release-plugin][skip ci] prepare release 17.34 2022-07-03 00:13:21 +00:00
Alfresco CI User
473db4f8c3 [force] Force release for 2022-07-03. 2022-07-03 00:07:27 +00:00
Travis CI User
bba3f3129e [maven-release-plugin][skip ci] prepare for next development iteration 2022-07-01 19:15:43 +00:00
Travis CI User
34a660e8fa [maven-release-plugin][skip ci] prepare release 17.33 2022-07-01 19:15:40 +00:00
dependabot[bot]
c1bd3416f0 Bump dependency.cxf.version from 3.5.2 to 3.5.3 (#1185)
Bumps `dependency.cxf.version` from 3.5.2 to 3.5.3.

Updates `cxf-rt-frontend-jaxws` from 3.5.2 to 3.5.3

Updates `cxf-rt-frontend-jaxrs` from 3.5.2 to 3.5.3

Updates `cxf-rt-rs-client` from 3.5.2 to 3.5.3

Updates `cxf-rt-transports-http` from 3.5.2 to 3.5.3

Updates `cxf-rt-ws-policy` from 3.5.2 to 3.5.3

---
updated-dependencies:
- dependency-name: org.apache.cxf:cxf-rt-frontend-jaxws
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.apache.cxf:cxf-rt-frontend-jaxrs
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.apache.cxf:cxf-rt-rs-client
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.apache.cxf:cxf-rt-transports-http
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.apache.cxf:cxf-rt-ws-policy
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-07-01 19:43:15 +01:00
dependabot[bot]
90fea37339 Bump woodstox-core from 6.2.8 to 6.3.0 (#1186)
Bumps [woodstox-core](https://github.com/FasterXML/woodstox) from 6.2.8 to 6.3.0.
- [Release notes](https://github.com/FasterXML/woodstox/releases)
- [Commits](https://github.com/FasterXML/woodstox/compare/woodstox-core-6.2.8...woodstox-core-6.3.0)

---
updated-dependencies:
- dependency-name: com.fasterxml.woodstox:woodstox-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-07-01 16:42:31 +01:00
Travis CI User
14addaee2d [maven-release-plugin][skip ci] prepare for next development iteration 2022-07-01 15:25:24 +00:00
Travis CI User
59fcc1dbd2 [maven-release-plugin][skip ci] prepare release 17.32 2022-07-01 15:25:21 +00:00
Jared Ottley
7ef4f21c02 [MNT-22085] Change default email domain (#1191)
- Update the email.server.domain property to use example.com
2022-07-01 08:47:43 -06:00
Travis CI User
fdd9b30854 [maven-release-plugin][skip ci] prepare for next development iteration 2022-06-28 12:16:39 +00:00
Travis CI User
81be6a63e9 [maven-release-plugin][skip ci] prepare release 17.31 2022-06-28 12:16:36 +00:00
dependabot[bot]
7d07fcfadd Bump xmlbeans from 3.1.0 to 5.1.0 (#1155)
* Bump xmlbeans from 3.1.0 to 5.1.0

Bumps xmlbeans from 3.1.0 to 5.1.0.

---
updated-dependencies:
- dependency-name: org.apache.xmlbeans:xmlbeans
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Exclude xmlbeans dependency from poi

* Exclude xmlbeans dependency from poi ooxml and ooxmlschemas

* Exclude xmlbeans dependency from poi scratchpad

* Revert "Exclude xmlbeans dependency from poi scratchpad"

This reverts commit f9058dff0a.

* Exclude xmlbeans dependency from poi scratchpad

* Try with POI 5.0.0

* Revert "Exclude xmlbeans dependency from poi scratchpad"

This reverts commit d0682e8a67.

* Revert "Exclude xmlbeans dependency from poi ooxml and ooxmlschemas"

This reverts commit e0f7ad49d9.

* Revert "Exclude xmlbeans dependency from poi"

This reverts commit 4267f37157.

* Try with POI 5.2.2

* Try with Tika 2.4.0

* Revert "Try with Tika 2.4.0"

This reverts commit a041b0353b.

* Try with Tika 2.4.0

* Spring security version up

* Bump tika to the most recent version

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: mikolajbrzezinski <mikolaj.brzezinski@hyland.com>
Co-authored-by: mikolajbrzezinski <86791239+mikolajbrzezinski@users.noreply.github.com>
2022-06-28 13:32:41 +02:00
Travis CI User
56c92c9717 [maven-release-plugin][skip ci] prepare for next development iteration 2022-06-27 07:57:59 +00:00
Travis CI User
8c4a6882f3 [maven-release-plugin][skip ci] prepare release 17.30 2022-06-27 07:57:57 +00:00
dependabot[bot]
96d29a1e07 Bump mysql-connector-java from 8.0.27 to 8.0.29 (#1176)
Bumps [mysql-connector-java](https://github.com/mysql/mysql-connector-j) from 8.0.27 to 8.0.29.
- [Release notes](https://github.com/mysql/mysql-connector-j/releases)
- [Changelog](https://github.com/mysql/mysql-connector-j/blob/release/8.0/CHANGES)
- [Commits](https://github.com/mysql/mysql-connector-j/compare/8.0.27...8.0.29)

---
updated-dependencies:
- dependency-name: mysql:mysql-connector-java
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-27 09:21:29 +02:00
Travis CI User
6a49f8d82d [maven-release-plugin][skip ci] prepare for next development iteration 2022-06-26 00:09:41 +00:00
Travis CI User
22efbe0fa9 [maven-release-plugin][skip ci] prepare release 17.29 2022-06-26 00:09:38 +00:00
Alfresco CI User
a5643285eb [force] Force release for 2022-06-26. 2022-06-26 00:03:42 +00:00
Travis CI User
9cd4c1bb3b [maven-release-plugin][skip ci] prepare for next development iteration 2022-06-24 09:27:09 +00:00
Travis CI User
5c9c4f906e [maven-release-plugin][skip ci] prepare release 17.28 2022-06-24 09:27:06 +00:00
dependabot[bot]
9f2d3c9df3 Bump restapi from 1.86 to 1.87 (#1183)
Bumps [restapi](https://github.com/Alfresco/alfresco-tas-restapi) from 1.86 to 1.87.
- [Release notes](https://github.com/Alfresco/alfresco-tas-restapi/releases)
- [Commits](https://github.com/Alfresco/alfresco-tas-restapi/compare/v1.86...v1.87)

---
updated-dependencies:
- dependency-name: org.alfresco.tas:restapi
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-24 10:50:00 +02:00
Travis CI User
96f1c9ac7e [maven-release-plugin][skip ci] prepare for next development iteration 2022-06-23 08:07:55 +00:00
Travis CI User
f5e9e1cf1b [maven-release-plugin][skip ci] prepare release 17.27 2022-06-23 08:07:53 +00:00
Domenico Sibilio
fdf0e502dc ACS-3181 Skip MySQL 5 tests on master (#1179) 2022-06-23 09:35:15 +02:00
Travis CI User
e0a3307e7b [maven-release-plugin][skip ci] prepare for next development iteration 2022-06-22 13:35:08 +00:00
Travis CI User
ad0e08e888 [maven-release-plugin][skip ci] prepare release 17.26 2022-06-22 13:35:05 +00:00
krdabrowski
12455d37b6 ACS-2606: ACS - migration Mockito version from 3.* to 4.* (#1146)
ACS-2606: ACS - migration Mockito version from 3.* to 4.*
2022-06-22 12:02:10 +02:00
Travis CI User
a575fb2a76 [maven-release-plugin][skip ci] prepare for next development iteration 2022-06-21 12:47:26 +00:00
Travis CI User
a3732ce389 [maven-release-plugin][skip ci] prepare release 17.25 2022-06-21 12:47:24 +00:00
dependabot[bot]
0f7dc33fe3 Bump restapi from 1.80 to 1.86 (#1178)
Bumps [restapi](https://github.com/Alfresco/alfresco-tas-restapi) from 1.80 to 1.86.
- [Release notes](https://github.com/Alfresco/alfresco-tas-restapi/releases)
- [Commits](https://github.com/Alfresco/alfresco-tas-restapi/compare/v1.80...v1.86)

---
updated-dependencies:
- dependency-name: org.alfresco.tas:restapi
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-21 14:06:20 +02:00
Travis CI User
15cd38cd06 [maven-release-plugin][skip ci] prepare for next development iteration 2022-06-21 08:26:04 +00:00
Travis CI User
818d55c0d5 [maven-release-plugin][skip ci] prepare release 17.24 2022-06-21 08:25:59 +00:00
dependabot[bot]
3da0d23bbc Bump spring-security-core from 5.7.1 to 5.7.2 (#1175)
Bumps [spring-security-core](https://github.com/spring-projects/spring-security) from 5.7.1 to 5.7.2.
- [Release notes](https://github.com/spring-projects/spring-security/releases)
- [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc)
- [Commits](https://github.com/spring-projects/spring-security/compare/5.7.1...5.7.2)

---
updated-dependencies:
- dependency-name: org.springframework.security:spring-security-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-21 09:48:47 +02:00
Travis CI User
19ff7d2d8d [maven-release-plugin][skip ci] prepare for next development iteration 2022-06-21 05:33:36 +00:00
Travis CI User
77e18133cc [maven-release-plugin][skip ci] prepare release 17.23 2022-06-21 05:33:33 +00:00
rrajoria
cc58af56cf PRODSEC-6115: Removing Exception Stack (#1171) 2022-06-21 10:27:11 +05:30
Travis CI User
496cc45f22 [maven-release-plugin][skip ci] prepare for next development iteration 2022-06-20 10:37:22 +00:00
Travis CI User
6d0ecac664 [maven-release-plugin][skip ci] prepare release 17.22 2022-06-20 10:37:20 +00:00
Damian Ujma
7c0f6998ec PRODSEC-6261 - Add the missing Object Level Authorization call (#1160)
* PRODSEC-6261 Add 'shouldNotGetProcessesByNotInvolvedUser' test

* PRODSEC-6261 Add user validation to 'getProcess' method

* PRODSEC-6261 Add TestRail annotation minor fix
2022-06-20 11:59:25 +02:00
dependabot[bot]
cc9fe10c05 Bump acs-event-model from 0.0.13 to 0.0.15 (#1166)
Bumps [acs-event-model](https://github.com/Alfresco/acs-event-model) from 0.0.13 to 0.0.15.
- [Release notes](https://github.com/Alfresco/acs-event-model/releases)
- [Commits](https://github.com/Alfresco/acs-event-model/commits)

---
updated-dependencies:
- dependency-name: org.alfresco:acs-event-model
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-20 09:06:29 +02:00
dependabot[bot]
e139a14914 Bump buildnumber-maven-plugin from 1.4 to 3.0.0 (#829)
Bumps [buildnumber-maven-plugin](https://github.com/mojohaus/buildnumber-maven-plugin) from 1.4 to 3.0.0.
- [Release notes](https://github.com/mojohaus/buildnumber-maven-plugin/releases)
- [Commits](https://github.com/mojohaus/buildnumber-maven-plugin/compare/buildnumber-maven-plugin-1.4...buildnumber-maven-plugin-3.0.0)

---
updated-dependencies:
- dependency-name: org.codehaus.mojo:buildnumber-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-20 09:05:48 +02:00
Domenico Sibilio
b73858c3fb Downgrade mysql-connector-java from 8.0.29 to 8.0.27 (#1165)
This reverts commit 6320621f0d.
2022-06-20 09:02:45 +02:00
Travis CI User
d531e9a9ea [maven-release-plugin][skip ci] prepare for next development iteration 2022-06-19 00:10:18 +00:00
Travis CI User
9ae834956a [maven-release-plugin][skip ci] prepare release 17.21 2022-06-19 00:10:16 +00:00
Alfresco CI User
0aedca8365 [force] Force release for 2022-06-19. 2022-06-19 00:03:54 +00:00
dependabot[bot]
6320621f0d Bump mysql-connector-java from 8.0.27 to 8.0.29 (#1087)
Bumps [mysql-connector-java](https://github.com/mysql/mysql-connector-j) from 8.0.27 to 8.0.29.
- [Release notes](https://github.com/mysql/mysql-connector-j/releases)
- [Changelog](https://github.com/mysql/mysql-connector-j/blob/release/8.0/CHANGES)
- [Commits](https://github.com/mysql/mysql-connector-j/commits)

---
updated-dependencies:
- dependency-name: mysql:mysql-connector-java
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-16 10:50:27 +02:00
dependabot[bot]
69a01309fb Bump dependency.spring.version from 5.3.20 to 5.3.21 (#1161)
Bumps `dependency.spring.version` from 5.3.20 to 5.3.21.

Updates `spring-aop` from 5.3.20 to 5.3.21
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v5.3.20...v5.3.21)

Updates `spring-beans` from 5.3.20 to 5.3.21
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v5.3.20...v5.3.21)

Updates `spring-context` from 5.3.20 to 5.3.21
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v5.3.20...v5.3.21)

Updates `spring-context-support` from 5.3.20 to 5.3.21
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v5.3.20...v5.3.21)

Updates `spring-core` from 5.3.20 to 5.3.21
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v5.3.20...v5.3.21)

Updates `spring-expression` from 5.3.20 to 5.3.21
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v5.3.20...v5.3.21)

Updates `spring-jdbc` from 5.3.20 to 5.3.21
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v5.3.20...v5.3.21)

Updates `spring-jms` from 5.3.20 to 5.3.21
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v5.3.20...v5.3.21)

Updates `spring-test` from 5.3.20 to 5.3.21
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v5.3.20...v5.3.21)

Updates `spring-orm` from 5.3.20 to 5.3.21
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v5.3.20...v5.3.21)

Updates `spring-tx` from 5.3.20 to 5.3.21
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v5.3.20...v5.3.21)

Updates `spring-web` from 5.3.20 to 5.3.21
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v5.3.20...v5.3.21)

Updates `spring-webmvc` from 5.3.20 to 5.3.21
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v5.3.20...v5.3.21)

---
updated-dependencies:
- dependency-name: org.springframework:spring-aop
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.springframework:spring-beans
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.springframework:spring-context
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.springframework:spring-context-support
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.springframework:spring-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.springframework:spring-expression
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.springframework:spring-jdbc
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.springframework:spring-jms
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.springframework:spring-test
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.springframework:spring-orm
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.springframework:spring-tx
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.springframework:spring-web
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.springframework:spring-webmvc
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-16 10:34:05 +02:00
dependabot[bot]
ebb153d8c7 Bump jakarta.annotation-api from 2.1.0 to 2.1.1 (#1162)
Bumps [jakarta.annotation-api](https://github.com/eclipse-ee4j/common-annotations-api) from 2.1.0 to 2.1.1.
- [Release notes](https://github.com/eclipse-ee4j/common-annotations-api/releases)
- [Commits](https://github.com/eclipse-ee4j/common-annotations-api/compare/2.1.0...2.1.1)

---
updated-dependencies:
- dependency-name: jakarta.annotation:jakarta.annotation-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-16 10:12:27 +02:00
dependabot[bot]
e7802ec42e Bump swagger-parser from 1.0.60 to 1.0.61 (#1164)
Bumps [swagger-parser](https://github.com/swagger-api/swagger-parser) from 1.0.60 to 1.0.61.
- [Release notes](https://github.com/swagger-api/swagger-parser/releases)
- [Commits](https://github.com/swagger-api/swagger-parser/compare/v1.0.60...v1.0.61)

---
updated-dependencies:
- dependency-name: io.swagger:swagger-parser
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-16 10:03:11 +02:00
Travis CI User
96e1b1c533 [maven-release-plugin][skip ci] prepare for next development iteration 2022-06-15 15:26:11 +00:00
Travis CI User
fc87e136eb [maven-release-plugin][skip ci] prepare release 17.20 2022-06-15 15:26:09 +00:00
dependabot[bot]
f187aa40b8 Bump maven-dependency-plugin from 3.1.2 to 3.3.0 (#1015)
Bumps [maven-dependency-plugin](https://github.com/apache/maven-dependency-plugin) from 3.1.2 to 3.3.0.
- [Release notes](https://github.com/apache/maven-dependency-plugin/releases)
- [Commits](https://github.com/apache/maven-dependency-plugin/compare/maven-dependency-plugin-3.1.2...maven-dependency-plugin-3.3.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-dependency-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-15 13:38:15 +02:00
dependabot[bot]
11860b0439 Bump json from 20211205 to 20220320 (#1026)
Bumps [json](https://github.com/douglascrockford/JSON-java) from 20211205 to 20220320.
- [Release notes](https://github.com/douglascrockford/JSON-java/releases)
- [Changelog](https://github.com/stleary/JSON-java/blob/master/docs/RELEASES.md)
- [Commits](https://github.com/douglascrockford/JSON-java/commits)

---
updated-dependencies:
- dependency-name: org.json:json
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-15 13:35:14 +02:00
dependabot[bot]
da31ad770b Bump joda-time from 2.10.13 to 2.10.14 (#1027)
Bumps [joda-time](https://github.com/JodaOrg/joda-time) from 2.10.13 to 2.10.14.
- [Release notes](https://github.com/JodaOrg/joda-time/releases)
- [Changelog](https://github.com/JodaOrg/joda-time/blob/master/RELEASE-NOTES.txt)
- [Commits](https://github.com/JodaOrg/joda-time/compare/v2.10.13...v2.10.14)

---
updated-dependencies:
- dependency-name: joda-time:joda-time
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-15 13:12:18 +02:00
Travis CI User
31f3521952 [maven-release-plugin][skip ci] prepare for next development iteration 2022-06-15 09:15:13 +00:00
Travis CI User
d253bb4174 [maven-release-plugin][skip ci] prepare release 17.19 2022-06-15 09:15:10 +00:00
dependabot[bot]
c6d3313378 Bump spring-core from 5.3.18 to 5.3.20 (#1134)
Bumps [spring-core](https://github.com/spring-projects/spring-framework) from 5.3.18 to 5.3.20.
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v5.3.18...v5.3.20)

---
updated-dependencies:
- dependency-name: org.springframework:spring-core
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-15 10:14:07 +02:00
dependabot[bot]
d5069526c6 Bump swagger-parser from 1.0.56 to 1.0.60 (#1129)
Bumps [swagger-parser](https://github.com/swagger-api/swagger-parser) from 1.0.56 to 1.0.60.
- [Release notes](https://github.com/swagger-api/swagger-parser/releases)
- [Commits](https://github.com/swagger-api/swagger-parser/compare/v1.0.56...v1.0.60)

---
updated-dependencies:
- dependency-name: io.swagger:swagger-parser
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-15 10:13:54 +02:00
dependabot[bot]
6c9e8eb8f0 Bump spring-security-core from 5.6.1 to 5.7.1 (#1124)
Bumps [spring-security-core](https://github.com/spring-projects/spring-security) from 5.6.1 to 5.7.1.
- [Release notes](https://github.com/spring-projects/spring-security/releases)
- [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc)
- [Commits](https://github.com/spring-projects/spring-security/compare/5.6.1...5.7.1)

---
updated-dependencies:
- dependency-name: org.springframework.security:spring-security-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-15 10:13:39 +02:00
dependabot[bot]
356f2f6bcb Bump xmlsec from 2.3.0 to 3.0.0 (#1099)
Bumps xmlsec from 2.3.0 to 3.0.0.

---
updated-dependencies:
- dependency-name: org.apache.santuario:xmlsec
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-15 10:02:43 +02:00
dependabot[bot]
29ef840b8a Bump awaitility from 4.1.1 to 4.2.0 (#1002)
Bumps [awaitility](https://github.com/awaitility/awaitility) from 4.1.1 to 4.2.0.
- [Release notes](https://github.com/awaitility/awaitility/releases)
- [Changelog](https://github.com/awaitility/awaitility/blob/master/changelog.txt)
- [Commits](https://github.com/awaitility/awaitility/compare/awaitility-4.1.1...awaitility-4.2.0)

---
updated-dependencies:
- dependency-name: org.awaitility:awaitility
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-15 09:59:36 +02:00
dependabot[bot]
90298c3df7 Bump junrar from 7.4.1 to 7.5.2 (#1143)
Bumps [junrar](https://github.com/junrar/junrar) from 7.4.1 to 7.5.2.
- [Release notes](https://github.com/junrar/junrar/releases)
- [Changelog](https://github.com/junrar/junrar/blob/master/CHANGELOG.md)
- [Commits](https://github.com/junrar/junrar/compare/v7.4.1...v7.5.2)

---
updated-dependencies:
- dependency-name: com.github.junrar:junrar
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-15 09:59:00 +02:00
dependabot[bot]
7d39fe0be6 Bump jakarta.annotation-api from 1.3.5 to 2.1.0 (#1041)
Bumps [jakarta.annotation-api](https://github.com/eclipse-ee4j/common-annotations-api) from 1.3.5 to 2.1.0.
- [Release notes](https://github.com/eclipse-ee4j/common-annotations-api/releases)
- [Commits](https://github.com/eclipse-ee4j/common-annotations-api/compare/1.3.5...2.1.0)

---
updated-dependencies:
- dependency-name: jakarta.annotation:jakarta.annotation-api
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-15 09:50:37 +02:00
dependabot[bot]
d377ef86f0 Bump utility from 3.0.47 to 3.0.48 (#976)
Bumps [utility](https://github.com/Alfresco/alfresco-tas-utility) from 3.0.47 to 3.0.48.
- [Release notes](https://github.com/Alfresco/alfresco-tas-utility/releases)
- [Changelog](https://github.com/Alfresco/alfresco-tas-utility/blob/master/docs/CHANGELOG.md)
- [Commits](https://github.com/Alfresco/alfresco-tas-utility/compare/utility-3.0.47...utility-3.0.48)

---
updated-dependencies:
- dependency-name: org.alfresco.tas:utility
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-15 09:48:02 +02:00
dependabot[bot]
2fa9a80bcf Bump dependency.spring.version from 5.3.18 to 5.3.20 (#1109)
Bumps `dependency.spring.version` from 5.3.18 to 5.3.20.

Updates `spring-aop` from 5.3.18 to 5.3.20
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v5.3.18...v5.3.20)

Updates `spring-beans` from 5.3.18 to 5.3.20
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v5.3.18...v5.3.20)

Updates `spring-context` from 5.3.18 to 5.3.20
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v5.3.18...v5.3.20)

Updates `spring-context-support` from 5.3.18 to 5.3.20
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v5.3.18...v5.3.20)

Updates `spring-core` from 5.3.18 to 5.3.20
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v5.3.18...v5.3.20)

Updates `spring-expression` from 5.3.18 to 5.3.20
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v5.3.18...v5.3.20)

Updates `spring-jdbc` from 5.3.18 to 5.3.20
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v5.3.18...v5.3.20)

Updates `spring-jms` from 5.3.18 to 5.3.20
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v5.3.18...v5.3.20)

Updates `spring-test` from 5.3.18 to 5.3.20
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v5.3.18...v5.3.20)

Updates `spring-orm` from 5.3.18 to 5.3.20
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v5.3.18...v5.3.20)

Updates `spring-tx` from 5.3.18 to 5.3.20
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v5.3.18...v5.3.20)

Updates `spring-web` from 5.3.18 to 5.3.20
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v5.3.18...v5.3.20)

Updates `spring-webmvc` from 5.3.18 to 5.3.20
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v5.3.18...v5.3.20)

---
updated-dependencies:
- dependency-name: org.springframework:spring-aop
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.springframework:spring-beans
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.springframework:spring-context
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.springframework:spring-context-support
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.springframework:spring-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.springframework:spring-expression
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.springframework:spring-jdbc
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.springframework:spring-jms
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.springframework:spring-test
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.springframework:spring-orm
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.springframework:spring-tx
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.springframework:spring-web
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.springframework:spring-webmvc
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-15 09:41:11 +02:00
dependabot[bot]
da80d4c98c Bump metadata-extractor from 2.16.0 to 2.18.0 (#1106)
Bumps [metadata-extractor](https://github.com/drewnoakes/metadata-extractor) from 2.16.0 to 2.18.0.
- [Release notes](https://github.com/drewnoakes/metadata-extractor/releases)
- [Commits](https://github.com/drewnoakes/metadata-extractor/compare/2.16.0...2.18.0)

---
updated-dependencies:
- dependency-name: com.drewnoakes:metadata-extractor
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-15 09:39:45 +02:00
dependabot[bot]
6adb6a145b Bump dependency.webscripts.version from 8.29 to 8.30 (#1128)
Bumps `dependency.webscripts.version` from 8.29 to 8.30.

Updates `spring-surf-core-configservice` from 8.29 to 8.30

Updates `spring-webscripts` from 8.29 to 8.30
- [Release notes](https://github.com/Alfresco/surf-webscripts/releases)
- [Commits](https://github.com/Alfresco/surf-webscripts/compare/spring-surf-webscripts-parent-8.29...spring-surf-webscripts-parent-8.30)

Updates `spring-webscripts` from 8.29 to 8.30
- [Release notes](https://github.com/Alfresco/surf-webscripts/releases)
- [Commits](https://github.com/Alfresco/surf-webscripts/compare/spring-surf-webscripts-parent-8.29...spring-surf-webscripts-parent-8.30)

Updates `spring-webscripts-api` from 8.29 to 8.30

---
updated-dependencies:
- dependency-name: org.alfresco.surf:spring-surf-core-configservice
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.alfresco.surf:spring-webscripts
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.alfresco.surf:spring-webscripts:tests
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.alfresco.surf:spring-webscripts-api
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-15 09:38:31 +02:00
dependabot[bot]
597822d18f Bump jboss-logging from 3.4.3.Final to 3.5.0.Final (#1091)
Bumps [jboss-logging](https://github.com/jboss-logging/jboss-logging) from 3.4.3.Final to 3.5.0.Final.
- [Release notes](https://github.com/jboss-logging/jboss-logging/releases)
- [Commits](https://github.com/jboss-logging/jboss-logging/compare/3.4.3.Final...3.5.0.Final)

---
updated-dependencies:
- dependency-name: org.jboss.logging:jboss-logging
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-15 09:25:19 +02:00
Travis CI User
94ecbe7423 [maven-release-plugin][skip ci] prepare for next development iteration 2022-06-15 06:24:05 +00:00
Travis CI User
444fa5f74d [maven-release-plugin][skip ci] prepare release 17.18 2022-06-15 06:24:02 +00:00
Sara
41bea282a6 Feature/acs 3015 analyse error prone action executor action (#1153)
* ACS-3015 move ErrorProneAction code to test folder

* ACS-3015 remove old commented out code

* ACS-3015 fix context

* ACS-3015 fix context path

* ACS-3015 move test context to test resources

* ACS-3015 correct path to moved test context

* ACS-3015 fix context problem for TestCase tests

* ACS-3015 moved MockUserNotifier to test folder
2022-06-15 06:45:58 +01:00
Travis CI User
aad4a2a5b8 [maven-release-plugin][skip ci] prepare for next development iteration 2022-06-14 16:06:47 +00:00
Travis CI User
52dfa72da1 [maven-release-plugin][skip ci] prepare release 17.17 2022-06-14 16:06:44 +00:00
dependabot[bot]
63a685f6fa Bump maven-javadoc-plugin from 3.3.1 to 3.4.0 (#1075)
Bumps [maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin) from 3.3.1 to 3.4.0.
- [Release notes](https://github.com/apache/maven-javadoc-plugin/releases)
- [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.3.1...maven-javadoc-plugin-3.4.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-javadoc-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-14 17:28:00 +02:00
dependabot[bot]
37caea4946 Bump icu4j from 70.1 to 71.1 (#1057)
Bumps [icu4j](https://github.com/unicode-org/icu) from 70.1 to 71.1.
- [Release notes](https://github.com/unicode-org/icu/releases)
- [Commits](https://github.com/unicode-org/icu/commits)

---
updated-dependencies:
- dependency-name: com.ibm.icu:icu4j
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-14 16:51:11 +02:00
dependabot[bot]
346fa18bc9 Bump mybatis from 3.5.9 to 3.5.10 (#1131)
Bumps [mybatis](https://github.com/mybatis/mybatis-3) from 3.5.9 to 3.5.10.
- [Release notes](https://github.com/mybatis/mybatis-3/releases)
- [Commits](https://github.com/mybatis/mybatis-3/compare/mybatis-3.5.9...mybatis-3.5.10)

---
updated-dependencies:
- dependency-name: org.mybatis:mybatis
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-14 16:50:19 +02:00
dependabot[bot]
0846347003 Bump aspectjrt from 1.9.7 to 1.9.9.1 (#1042)
Bumps [aspectjrt](https://github.com/eclipse/org.aspectj) from 1.9.7 to 1.9.9.1.
- [Release notes](https://github.com/eclipse/org.aspectj/releases)
- [Commits](https://github.com/eclipse/org.aspectj/commits)

---
updated-dependencies:
- dependency-name: org.aspectj:aspectjrt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-14 16:48:35 +02:00
dependabot[bot]
4f7fe1db48 Bump groovy from 3.0.9 to 3.0.11 (#1144)
Bumps [groovy](https://github.com/apache/groovy) from 3.0.9 to 3.0.11.
- [Release notes](https://github.com/apache/groovy/releases)
- [Commits](https://github.com/apache/groovy/commits)

---
updated-dependencies:
- dependency-name: org.codehaus.groovy:groovy
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-14 16:46:15 +02:00
Piotr Żurek
6f27737d90 ACS-2322 Don't compare audit properties for CMIS TCK RootFolderTest (#1159)
* ACS-2322 
Check the passthrough implementation
Skip properties which might be modified asynchronously
Update copyright headers
Slight refactoring and using Mockito.spy instead of proxy
2022-06-14 16:45:46 +02:00
Travis CI User
921a266708 [maven-release-plugin][skip ci] prepare for next development iteration 2022-06-14 14:31:59 +00:00
Travis CI User
b3b569cfb7 [maven-release-plugin][skip ci] prepare release 17.16 2022-06-14 14:31:55 +00:00
dependabot[bot]
5e5e5b0065 Bump postgresql from 42.3.2 to 42.4.0 (#1150)
Bumps [postgresql](https://github.com/pgjdbc/pgjdbc) from 42.3.2 to 42.4.0.
- [Release notes](https://github.com/pgjdbc/pgjdbc/releases)
- [Changelog](https://github.com/pgjdbc/pgjdbc/blob/master/CHANGELOG.md)
- [Commits](https://github.com/pgjdbc/pgjdbc/compare/REL42.3.2...REL42.4.0)

---
updated-dependencies:
- dependency-name: org.postgresql:postgresql
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-14 15:55:47 +02:00
dependabot[bot]
1773916bd8 Bump lombok from 1.18.22 to 1.18.24 (#1071)
Bumps [lombok](https://github.com/projectlombok/lombok) from 1.18.22 to 1.18.24.
- [Release notes](https://github.com/projectlombok/lombok/releases)
- [Changelog](https://github.com/projectlombok/lombok/blob/master/doc/changelog.markdown)
- [Commits](https://github.com/projectlombok/lombok/compare/v1.18.22...v1.18.24)

---
updated-dependencies:
- dependency-name: org.projectlombok:lombok
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-14 15:34:55 +02:00
dependabot[bot]
ba0fd9cec4 Bump FastInfoset from 2.0.0 to 2.1.0 (#1060)
Bumps FastInfoset from 2.0.0 to 2.1.0.

---
updated-dependencies:
- dependency-name: com.sun.xml.fastinfoset:FastInfoset
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-14 15:26:37 +02:00
dependabot[bot]
c27130145a Bump maven-artifact from 3.8.4 to 3.8.6 (#1156)
Bumps [maven-artifact](https://github.com/apache/maven) from 3.8.4 to 3.8.6.
- [Release notes](https://github.com/apache/maven/releases)
- [Commits](https://github.com/apache/maven/compare/maven-3.8.4...maven-3.8.6)

---
updated-dependencies:
- dependency-name: org.apache.maven:maven-artifact
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-14 15:21:13 +02:00
dependabot[bot]
dc59b4ed66 Bump docker-maven-plugin from 0.39.1 to 0.40.1 (#1157)
Bumps [docker-maven-plugin](https://github.com/fabric8io/docker-maven-plugin) from 0.39.1 to 0.40.1.
- [Release notes](https://github.com/fabric8io/docker-maven-plugin/releases)
- [Changelog](https://github.com/fabric8io/docker-maven-plugin/blob/master/doc/changelog.md)
- [Commits](https://github.com/fabric8io/docker-maven-plugin/compare/v0.39.1...v0.40.1)

---
updated-dependencies:
- dependency-name: io.fabric8:docker-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-14 15:20:09 +02:00
Travis CI User
a42cc36b4e [maven-release-plugin][skip ci] prepare for next development iteration 2022-06-14 13:19:59 +00:00
Travis CI User
4ed61ff6fc [maven-release-plugin][skip ci] prepare release 17.15 2022-06-14 13:19:56 +00:00
dependabot[bot]
a904122d50 Bump dependency.cxf.version from 3.5.0 to 3.5.2 (#1066)
Bumps `dependency.cxf.version` from 3.5.0 to 3.5.2.

Updates `cxf-rt-frontend-jaxws` from 3.5.0 to 3.5.2

Updates `cxf-rt-frontend-jaxrs` from 3.5.0 to 3.5.2

Updates `cxf-rt-rs-client` from 3.5.0 to 3.5.2

Updates `cxf-rt-transports-http` from 3.5.0 to 3.5.2

Updates `cxf-rt-ws-policy` from 3.5.0 to 3.5.2

---
updated-dependencies:
- dependency-name: org.apache.cxf:cxf-rt-frontend-jaxws
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.apache.cxf:cxf-rt-frontend-jaxrs
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.apache.cxf:cxf-rt-rs-client
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.apache.cxf:cxf-rt-transports-http
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.apache.cxf:cxf-rt-ws-policy
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-14 14:29:17 +02:00
dependabot[bot]
c92aaf5971 Bump jsoup from 1.14.3 to 1.15.1 (#1112)
Bumps [jsoup](https://github.com/jhy/jsoup) from 1.14.3 to 1.15.1.
- [Release notes](https://github.com/jhy/jsoup/releases)
- [Changelog](https://github.com/jhy/jsoup/blob/master/CHANGES)
- [Commits](https://github.com/jhy/jsoup/compare/jsoup-1.14.3...jsoup-1.15.1)

---
updated-dependencies:
- dependency-name: org.jsoup:jsoup
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-14 13:54:01 +02:00
dependabot[bot]
c1a02281f2 Bump woodstox-core from 6.2.7 to 6.2.8 (#897)
Bumps [woodstox-core](https://github.com/FasterXML/woodstox) from 6.2.7 to 6.2.8.
- [Release notes](https://github.com/FasterXML/woodstox/releases)
- [Commits](https://github.com/FasterXML/woodstox/compare/woodstox-core-6.2.7...woodstox-core-6.2.8)

---
updated-dependencies:
- dependency-name: com.fasterxml.woodstox:woodstox-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-14 13:46:07 +02:00
dependabot[bot]
78ab42e913 Bump docker-java from 3.2.12 to 3.2.13 (#967)
Bumps [docker-java](https://github.com/docker-java/docker-java) from 3.2.12 to 3.2.13.
- [Release notes](https://github.com/docker-java/docker-java/releases)
- [Changelog](https://github.com/docker-java/docker-java/blob/master/CHANGELOG.md)
- [Commits](https://github.com/docker-java/docker-java/compare/3.2.12...3.2.13)

---
updated-dependencies:
- dependency-name: com.github.docker-java:docker-java
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-14 13:42:25 +02:00
Travis CI User
bf6a2e6bfa [maven-release-plugin][skip ci] prepare for next development iteration 2022-06-14 11:23:11 +00:00
Travis CI User
85920def46 [maven-release-plugin][skip ci] prepare release 17.14 2022-06-14 11:23:08 +00:00
kcichonczyk
b88fab188e Revert "Revert "[ATS-988] Fixed Intermittent failure (ConcurrentModificationException) caused by a new call to getData() from configScheduler. (#1103)" (#1148)" (#1158)
This reverts commit bf3e7390f5.
2022-06-14 10:22:59 +02:00
Travis CI User
767f513aa5 [maven-release-plugin][skip ci] prepare for next development iteration 2022-06-12 00:09:34 +00:00
Travis CI User
b79daf0349 [maven-release-plugin][skip ci] prepare release 17.13 2022-06-12 00:09:31 +00:00
Alfresco CI User
657dd5bf7a [force] Force release for 2022-06-12. 2022-06-12 00:03:00 +00:00
Travis CI User
7dff462ac9 [maven-release-plugin][skip ci] prepare for next development iteration 2022-06-10 10:21:15 +00:00
Travis CI User
24c31ee9ab [maven-release-plugin][skip ci] prepare release 17.12 2022-06-10 10:21:11 +00:00
Piotr Żurek
f1a3aa696e ACS-3150 Upgrade jackson and gson libraries (#1151) 2022-06-10 11:10:48 +02:00
kcichonczyk
bf3e7390f5 Revert "[ATS-988] Fixed Intermittent failure (ConcurrentModificationException) caused by a new call to getData() from configScheduler. (#1103)" (#1148)
This reverts commit b4bf6e0e39.
2022-06-08 13:59:17 +02:00
kcichonczyk
b4bf6e0e39 [ATS-988] Fixed Intermittent failure (ConcurrentModificationException) caused by a new call to getData() from configScheduler. (#1103) 2022-06-08 13:50:32 +02:00
Travis CI User
fa73d88db2 [maven-release-plugin][skip ci] prepare for next development iteration 2022-06-05 00:10:32 +00:00
Travis CI User
9b9874aa48 [maven-release-plugin][skip ci] prepare release 17.11 2022-06-05 00:10:30 +00:00
Alfresco CI User
d17915227f [force] Force release for 2022-06-05. 2022-06-05 00:04:08 +00:00
Travis CI User
c83a9b956e [maven-release-plugin][skip ci] prepare for next development iteration 2022-06-02 06:41:14 +00:00
Travis CI User
7fc2caca5a [maven-release-plugin][skip ci] prepare release 17.10 2022-06-02 06:41:11 +00:00
Travis CI User
901936410e [maven-release-plugin][skip ci] prepare for next development iteration 2022-06-02 05:41:45 +00:00
Travis CI User
9503e790df [maven-release-plugin][skip ci] prepare release 17.9 2022-06-02 05:41:42 +00:00
kavitshah-gl
c0947cef35 Feature/apps 2755 UI conversion (#1127)
* RM-2366 - UI to Rest Conversion

* RM-2366 - UI to Rest Conversion Skipping Test Cases

* RM-2366 - Correcting RDAdmin UserName

* RM-2366 - Adding License Header

* Adding Test case for FileUnfiledRecordsTests

* CreateElectronicRecordsTests

* Added TestClass for InplaceRecordSearchTests

* Added TestClass for SearchRecordsTests and Utility Changes for InplaceRecordSearchTests

* Revert "RM-2366 - UI to Rest Conversion Skipping Test Cases"

This reverts commit 37828788de.

* Refactoring code cleanup

* AddRelationshipToHoldRecord added in comunity repo

* AddRelationshipToHoldRecord added in branch

* Adding SearchRecordsTests for Community AGS Records

* Adding License Header

* Adding TestCases for AddRelationshipTests

* Adding TestCases for AddRelationshipTests

* Analysing Test Failure in Travis

* Analysing Test Failure in Travis

* Analysing Test Failure in Travis

* Revert "Analysing Test Failure in Travis"

This reverts commit b02df3edcd.

* Analysing Test Failure in Travis

* [skip repo][skip db][skip tas]

* [skip repo][skip db][skip tas]

* [skip repo][skip db][skip tas]

* [skip repo][skip db][skip tas]

* [skip repo][skip db][skip tas]

* Fix all review comments

Co-authored-by: sbisht <shishuraj.bisht@globallogic.com>
2022-06-02 09:34:21 +05:30
Travis CI User
8deeed78ef [maven-release-plugin][skip ci] prepare for next development iteration 2022-05-31 13:45:27 +00:00
Travis CI User
39ffc0a00c [maven-release-plugin][skip ci] prepare release 17.8 2022-05-31 13:45:25 +00:00
Marcin Strankowski
0885fb157a ACS-3013: Uppercasing services used to allow security proxy (#1141)
Not much happens in class, check node, create version.
Added Beans including security interceptors, but VersionService has no restrictions and for node service all there is are a few checks, so it likely never was a security issue to begin with.
2022-05-31 15:04:43 +02:00
Travis CI User
0f5dab60ea [maven-release-plugin][skip ci] prepare for next development iteration 2022-05-30 12:14:00 +00:00
Travis CI User
aa70ee42d6 [maven-release-plugin][skip ci] prepare release 17.7 2022-05-30 12:13:57 +00:00
Kacper Magdziarz
b7bd6aa215 [ACS-3006] Revert changes made to implement a validation logic (#1139)
* Revert "ACS-2744 Private action validation logic (#1051)"

This reverts commit 64998b5c53.

* Revert "[ACS-2747] Prevent private action execution from the V1 HTTP API. Added end-to-end test method. (#1108)"

This reverts commit 8edfd4bdce.
2022-05-30 13:18:44 +02:00
Travis CI User
e1b6203cdc [maven-release-plugin][skip ci] prepare for next development iteration 2022-05-29 00:09:49 +00:00
Travis CI User
69a3bda874 [maven-release-plugin][skip ci] prepare release 17.6 2022-05-29 00:09:47 +00:00
Alfresco CI User
c8037d7b21 [force] Force release for 2022-05-29. 2022-05-29 00:03:38 +00:00
Travis CI User
e6382d8f6c [maven-release-plugin][skip ci] prepare for next development iteration 2022-05-25 12:15:11 +00:00
Travis CI User
6ddd2f0539 [maven-release-plugin][skip ci] prepare release 17.5 2022-05-25 12:15:08 +00:00
Kacper Magdziarz
93718dc296 ACS-2888 - add usage of bean with security interceptor. (#1135) 2022-05-25 13:25:48 +02:00
Travis CI User
c5b42dc0f2 [maven-release-plugin][skip ci] prepare for next development iteration 2022-05-24 11:40:08 +00:00
Travis CI User
3f65bc6057 [maven-release-plugin][skip ci] prepare release 17.4 2022-05-24 11:40:05 +00:00
Kristian Dimitrov
e3d56ad557 ACS-2827: Add Search Tests To CMIS-TAS (#1125)
* ACS-2827: Initial commit

* ACS-2827: Fix build

* ACS-2827: Rename test files

* ACS-2827: Increase retry time
2022-05-24 11:51:28 +01:00
Travis CI User
5a92d7f013 [maven-release-plugin][skip ci] prepare for next development iteration 2022-05-24 09:24:57 +00:00
Travis CI User
1de387abc0 [maven-release-plugin][skip ci] prepare release 17.3 2022-05-24 09:24:54 +00:00
Damian Ujma
83e06193d1 ACS-2800: Replace throwing NPE to CmisInvalidArgumentException (#1130)
* ACS-2800 Throw CmisInvalidArgumentException if type cannot be found

* ACS-2800 Reformat code
2022-05-24 10:43:09 +02:00
Travis CI User
02a2d88712 [maven-release-plugin][skip ci] prepare for next development iteration 2022-05-22 00:09:24 +00:00
Travis CI User
589b99e17d [maven-release-plugin][skip ci] prepare release 17.2 2022-05-22 00:09:21 +00:00
Alfresco CI User
74d8b50ac0 [force] Force release for 2022-05-22. 2022-05-22 00:03:24 +00:00
alandavis
906b6d4e5d amp.min.version needs to be 7.0.0 not 7.1.0 as was the case for 23.1 (which starts at 1 rather than 0)
[skip ci] as it is okay for now
2022-05-19 18:41:15 +01:00
Travis CI User
5f90fd945f [maven-release-plugin][skip ci] prepare for next development iteration 2022-05-19 15:41:42 +00:00
Travis CI User
3670437c2e [maven-release-plugin][skip ci] prepare release 17.1 2022-05-19 15:41:37 +00:00
alandavis
a128916bb4 Use 17.1-SNAPSHOT for ACS 7.3.0
[skip tests] as we have just run them
[no downstream] as we want to skip tests in enterprise repo too
2022-05-19 16:35:40 +01:00
Travis CI User
ea7de7e1e7 [maven-release-plugin][skip ci] prepare for next development iteration 2022-05-19 12:02:38 +00:00
Travis CI User
11acd44283 [maven-release-plugin][skip ci] prepare release 16.1 2022-05-19 12:02:35 +00:00
alandavis
af41e4b54c Change Master branch to 7.3.0 2022-05-19 12:09:27 +01:00
Travis CI User
cf8f27721a [maven-release-plugin][skip ci] prepare for next development iteration 2022-05-17 21:00:09 +00:00
Travis CI User
f04b1d2e33 [maven-release-plugin][skip ci] prepare release 23.1.0.30 2022-05-17 21:00:06 +00:00
montgolfiere
1f9e861e03 ACS-2925: Elasticsearch - refactor DB switching to not use Solr-specific properties / debug log (#1089)
* ACS-2925: Elasticsearch - refactor DB switching to not use Solr-specific properties / debug log

- as per TP suggestion, thanks

- new generic query.* props

  - query.cmis.queryConsistency
  - query.fts.queryConsistency
  - query.hybrid.enabled

- deprecate current solr.query.* props (eg. upgrade)

  - solr.query.cmis.queryConsistency
  - solr.query.fts.queryConsistency
  - solr.query.hybrid.enabled


- another attempt using two inject properties (deprecated + new). See option C1 in ACS-2925

- also unrelated lic header change (LocalPipelineTransform.java) to fix build warning
2022-05-17 21:22:00 +01:00
Marcin Strankowski
f5c1e26a9b ACS-2850: fix for intermittent failure on expiryLock test (#1083)
* ACS-2850: fix for intermittent failure on expiryLock test

First issue was int rounding of '(expirationDate - new Date())/1000', which for really close values of timeout set and passed through lockInfo could be rounded down to 0. Replaced by a rounding up formula.

Second issue was treating timeout == 0 as timeout.infinite. WebDav Infinite timeout has it's own marker "-1", in case of 0, lock was automatically turned into infinite time lock, while it should be an exception instead as creating a lock for 0s timeout is a programming error - the lock would immediatelly be expired upon creation (perhaps even with a date in the past, seeing as the expiryDate is filled).
Changes made clarify the intent behind calling the method instead of obfuscating it by passing the int value through date operations
2022-05-17 17:10:32 +02:00
Travis CI User
cd8b3594aa [maven-release-plugin][skip ci] prepare for next development iteration 2022-05-17 14:03:53 +00:00
Travis CI User
57e3c09981 [maven-release-plugin][skip ci] prepare release 23.1.0.29 2022-05-17 14:03:51 +00:00
mikolajbrzezinski
1ccb8a2164 Mnt 22905/case sensitive query fix (#1107)
* useCQ = true

* useCQ back to original

* useCQ = true

* Copyright Update

* useCQ restored, Javascrpit changed

* Javascript changes to filter

* PR comments requested change

* Revert "PR comments requested change"

This reverts commit 0673b6c3ff.

* Revert "useCQ restored, Javascrpit changed"

This reverts commit 00b79b5aca.

* Revert "Copyright Update"

This reverts commit 76d1f1c005.

* Revert "useCQ = true"

This reverts commit 215ad952f5.

* Revert "useCQ back to original"

This reverts commit deb5e82218.

* Revert "useCQ = true"

This reverts commit 115910ffc1.

* test change

* Initial changes

* Further changes

* Space deleted

* jobtitle search

* Restore check sorting and mock

* Avoid null [hint:useCQ]

* Wrong sign

* Fix

* Clean up

* Initial changes

* Rename Method
2022-05-17 15:17:56 +02:00
Travis CI User
26c412bd80 [maven-release-plugin][skip ci] prepare for next development iteration 2022-05-15 00:10:01 +00:00
Travis CI User
e4552968c6 [maven-release-plugin][skip ci] prepare release 23.1.0.28 2022-05-15 00:09:59 +00:00
Alfresco CI User
2fa31de761 [force] Force release for 2022-05-15. 2022-05-15 00:03:21 +00:00
alandavis
04ae83c74c Revert "ACS-2864 Use maven props in AGS test version.properties so we don't have to update the value"
This reverts commit b36e21ad04.
2022-05-09 17:13:50 +01:00
alandavis
b36e21ad04 ACS-2864 Use maven props in AGS test version.properties so we don't have to update the value
(cherry picked from commit 4a4bb2de02)
2022-05-09 16:22:37 +01:00
Travis CI User
9a615b50ea [maven-release-plugin][skip ci] prepare for next development iteration 2022-05-09 11:58:37 +00:00
Travis CI User
169e5efca2 [maven-release-plugin][skip ci] prepare release 23.1.0.27 2022-05-09 11:58:35 +00:00
kcichonczyk
8edfd4bdce [ACS-2747] Prevent private action execution from the V1 HTTP API. Added end-to-end test method. (#1108) 2022-05-09 13:14:10 +02:00
Travis CI User
810cd9f067 [maven-release-plugin][skip ci] prepare for next development iteration 2022-05-06 04:36:18 +00:00
Travis CI User
63f5bc534b [maven-release-plugin][skip ci] prepare release 23.1.0.26 2022-05-06 04:36:15 +00:00
Sbisht19
ebb6e333d3 Origin/feature/apps 1164 alfresco logs (#1102)
* Added test group for alfresco logs test cases to make them skipped in single pipeline

* Added import statement for TestGroup

* Added import statement for TestGroup

Co-authored-by: Suneet Gupta <suneet.gupta@hyland.com>
2022-05-05 20:57:57 +05:30
Travis CI User
8f141aed1e [maven-release-plugin][skip ci] prepare for next development iteration 2022-05-04 11:22:08 +00:00
Travis CI User
2a734c5a78 [maven-release-plugin][skip ci] prepare release 23.1.0.25 2022-05-04 11:22:05 +00:00
evasques
a7cceff6bf MNT-22968 - Bump Freemarker (#1093) 2022-05-04 10:39:33 +01:00
Alfresco CI User
7cafcb6a6b [force] Force release for 2022-05-01. 2022-05-01 00:03:58 +00:00
Travis CI User
652e10e5a3 [maven-release-plugin][skip ci] prepare for next development iteration 2022-04-24 00:10:33 +00:00
Travis CI User
ea7a1631c2 [maven-release-plugin][skip ci] prepare release 23.1.0.24 2022-04-24 00:10:31 +00:00
Alfresco CI User
e18aab83c5 [force] Force release for 2022-04-24. 2022-04-24 00:03:07 +00:00
Travis CI User
d6dce92351 [maven-release-plugin][skip ci] prepare for next development iteration 2022-04-22 13:06:28 +00:00
Travis CI User
5c31774753 [maven-release-plugin][skip ci] prepare release 23.1.0.23 2022-04-22 13:06:26 +00:00
alandavis
e331e4bd08 ACS-2768 tidy up start-compose.sh 2022-04-22 13:21:44 +01:00
Travis CI User
c9d27e55d6 [maven-release-plugin][skip ci] prepare for next development iteration 2022-04-21 17:28:10 +00:00
Travis CI User
d647c96ae4 [maven-release-plugin][skip ci] prepare release 23.1.0.22 2022-04-21 17:28:03 +00:00
Kacper Magdziarz
5a6f9a60f3 ACS-2768 Fix of Automate update of t-router and t-engine references in repositories (#1081) 2022-04-21 17:47:50 +01:00
Travis CI User
ce2c0e2ac2 [maven-release-plugin][skip ci] prepare for next development iteration 2022-04-21 10:21:11 +00:00
Travis CI User
dfa9e754d5 [maven-release-plugin][skip ci] prepare release 23.1.0.21 2022-04-21 10:21:07 +00:00
Kacper Magdziarz
860065cf6c ACS-2768 Automate update of t-router and t-engine references in repositories (#1067)
* ACS-2768 reduce places need update of t-router and t-engine references in repositories
replace alfresco-transform-model with alfresco-transform-core property

Co-authored-by: alandavis <alan.davis@alfresco.com>
2022-04-21 11:11:43 +02:00
Travis CI User
2d7f8fba87 [maven-release-plugin][skip ci] prepare for next development iteration 2022-04-20 13:14:27 +00:00
Travis CI User
c2c4171756 [maven-release-plugin][skip ci] prepare release 23.1.0.20 2022-04-20 13:14:24 +00:00
Marcin Strankowski
af884cbb0e Fix/acs 2851 intermittent integration full tests bulk 2 (#1074)
* ACS-2851: Reverting commented out unstable test, as the intermittent failure seems unreproducible
2022-04-20 14:39:30 +02:00
Travis CI User
fb0be16155 [maven-release-plugin][skip ci] prepare for next development iteration 2022-04-20 09:57:27 +00:00
Travis CI User
f9d95136b2 [maven-release-plugin][skip ci] prepare release 23.1.0.19 2022-04-20 09:57:25 +00:00
Damian Ujma
26453c4112 ACS-2674 - fix/ACS-2674_delete_existing_rendition (#1073)
* ACS-2674 Preventive delete an existing rendition of the file

* ACS-2674 Correct the comment
2022-04-20 11:03:27 +02:00
Travis CI User
cb26098e8b [maven-release-plugin][skip ci] prepare for next development iteration 2022-04-17 00:08:03 +00:00
Travis CI User
6766bfcfdf [maven-release-plugin][skip ci] prepare release 23.1.0.18 2022-04-17 00:08:01 +00:00
Alfresco CI User
48df1e25ed [force] Force release for 2022-04-17. 2022-04-17 00:03:05 +00:00
Travis CI User
52918e4ff5 [maven-release-plugin][skip ci] prepare for next development iteration 2022-04-13 21:45:40 +00:00
Travis CI User
40d70e797c [maven-release-plugin][skip ci] prepare release 23.1.0.17 2022-04-13 21:45:37 +00:00
alandavis
6011868759 Pick up t-core 2.6.0-A3 2022-04-13 19:45:13 +01:00
Travis CI User
79ad480ddb [maven-release-plugin][skip ci] prepare for next development iteration 2022-04-13 09:44:54 +00:00
Travis CI User
c12d8f98be [maven-release-plugin][skip ci] prepare release 23.1.0.16 2022-04-13 09:44:52 +00:00
Damian Ujma
d2faadac57 ACS-2794 Use SearchEngineResultSet interface rather than concrete implementation (#1063) 2022-04-13 11:10:22 +02:00
Travis CI User
7f1d28a417 [maven-release-plugin][skip ci] prepare for next development iteration 2022-04-12 14:14:52 +00:00
Travis CI User
fab02e5484 [maven-release-plugin][skip ci] prepare release 23.1.0.15 2022-04-12 14:14:48 +00:00
Marcin Strankowski
5274687ec1 Feature/acs 2787 split travis jobs to reduce max time (#1062)
* ACS-2787: Splitting AGS 01 job to 2 parts (01, 04)

For MySQL the job executes for 31-35 minutes, split this job into 2 parts to reduce max execution time for community-repo

* ACS-2787: Intermittent test failure commented out, issue created ACS-2850

* ACS-2787: Commenting out intermittent failure, issue created ACS-2851
2022-04-12 15:40:08 +02:00
Travis CI User
b52e67b7df [maven-release-plugin][skip ci] prepare for next development iteration 2022-04-12 13:27:02 +00:00
Travis CI User
77f414dbf1 [maven-release-plugin][skip ci] prepare release 23.1.0.14 2022-04-12 13:26:59 +00:00
dependabot[bot]
c45ce63bd2 Bump docker-maven-plugin from 0.38.0 to 0.39.1 (#987)
Bumps [docker-maven-plugin](https://github.com/fabric8io/docker-maven-plugin) from 0.38.0 to 0.39.1.
- [Release notes](https://github.com/fabric8io/docker-maven-plugin/releases)
- [Changelog](https://github.com/fabric8io/docker-maven-plugin/blob/master/doc/changelog.md)
- [Commits](https://github.com/fabric8io/docker-maven-plugin/compare/v0.38.0...v0.39.1)

---
updated-dependencies:
- dependency-name: io.fabric8:docker-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-12 14:38:13 +02:00
Travis CI User
0a784a0674 [maven-release-plugin][skip ci] prepare for next development iteration 2022-04-10 00:08:08 +00:00
Travis CI User
1da1506160 [maven-release-plugin][skip ci] prepare release 23.1.0.13 2022-04-10 00:08:05 +00:00
Alfresco CI User
79dd212428 [force] Force release for 2022-04-10. 2022-04-10 00:02:57 +00:00
Travis CI User
fd859a4191 [maven-release-plugin][skip ci] prepare for next development iteration 2022-04-08 10:41:14 +00:00
Travis CI User
e61f6df323 [maven-release-plugin][skip ci] prepare release 23.1.0.12 2022-04-08 10:41:09 +00:00
Piotr Żurek
64998b5c53 ACS-2744 Private action validation logic (#1051) 2022-04-08 11:56:31 +02:00
Travis CI User
784c9d47b3 [maven-release-plugin][skip ci] prepare for next development iteration 2022-04-07 14:00:59 +00:00
Travis CI User
b5617c3bd9 [maven-release-plugin][skip ci] prepare release 23.1.0.11 2022-04-07 14:00:56 +00:00
Vítor Moreira
53777cd5b9 MNT-22946: bump spring version to 5.3.18 (#1054) 2022-04-07 14:05:07 +01:00
Travis CI User
ddb8ad16ac [maven-release-plugin][skip ci] prepare for next development iteration 2022-04-07 11:00:32 +00:00
Travis CI User
a3ed766957 [maven-release-plugin][skip ci] prepare release 23.1.0.10 2022-04-07 11:00:30 +00:00
dependabot[bot]
22a0343c41 Bump dependency.webscripts.version from 8.28 to 8.29 (#1052) 2022-04-07 09:58:16 +00:00
Travis CI User
43fb3cfdc5 [maven-release-plugin][skip ci] prepare for next development iteration 2022-04-07 08:32:04 +00:00
Travis CI User
8accceb08e [maven-release-plugin][skip ci] prepare release 23.1.0.9 2022-04-07 08:32:01 +00:00
Marcin Strankowski
71eab3e347 Feature/acs 2787 improve build speed of community repo (#1049)
* ACS-2787: Improving cache management for community repo
2022-04-07 09:33:32 +02:00
alandavis
8d378fc340 ACS-2765 t-model is now part of t-core 2.6.0-A2 2022-04-07 08:03:59 +01:00
Travis CI User
73a8ac61ed [maven-release-plugin][skip ci] prepare for next development iteration 2022-04-06 11:50:05 +00:00
Travis CI User
67d3159650 [maven-release-plugin][skip ci] prepare release 23.1.0.8 2022-04-06 11:50:02 +00:00
alandavis
ec8a760122 ACS-2765 Upgrade to t-core 2.5.7 2022-04-06 12:04:39 +01:00
Travis CI User
3d0ceca6da [maven-release-plugin][skip ci] prepare for next development iteration 2022-04-05 15:32:17 +00:00
Travis CI User
8c25d1f7e6 [maven-release-plugin][skip ci] prepare release 23.1.0.7 2022-04-05 15:32:14 +00:00
Travis CI User
1e0972eaa1 [maven-release-plugin][skip ci] prepare for next development iteration 2022-04-03 00:13:20 +00:00
Travis CI User
616c666114 [maven-release-plugin][skip ci] prepare release 23.1.0.6 2022-04-03 00:13:17 +00:00
Alfresco CI User
8520548e72 [force] Force release for 2022-04-03. 2022-04-03 00:03:10 +00:00
Travis CI User
63f7f07465 [maven-release-plugin][skip ci] prepare for next development iteration 2022-03-28 09:04:17 +00:00
Travis CI User
35a3ff8032 [maven-release-plugin][skip ci] prepare release 23.1.0.5 2022-03-28 09:04:14 +00:00
Kacper Magdziarz
695bf90891 [ACS-962] - Attempt to fix concurrency failing in test. (#1019)
ACS-962 Extract waitForMethodToFinish for TestHelper to avoid code duplication.
2022-03-28 10:18:16 +02:00
Travis CI User
d4dcc4fe2c [maven-release-plugin][skip ci] prepare for next development iteration 2022-03-27 00:12:34 +00:00
Travis CI User
ee44b6afa2 [maven-release-plugin][skip ci] prepare release 23.1.0.4 2022-03-27 00:12:31 +00:00
Alfresco CI User
28b580b9fc [force] Force release for 2022-03-27. 2022-03-27 00:02:43 +00:00
Travis CI User
7dc7a743f5 [maven-release-plugin][skip ci] prepare for next development iteration 2022-03-24 12:02:47 +00:00
Travis CI User
4bc92df38e [maven-release-plugin][skip ci] prepare release 23.1.0.3 2022-03-24 12:02:43 +00:00
Alfresco CI User
048df99d91 [force] Force release for 2022-03-24. 2022-03-24 11:52:55 +00:00
Travis CI User
b477d122f3 [maven-release-plugin][skip ci] prepare for next development iteration 2022-03-22 12:28:22 +00:00
Travis CI User
0cc2fe46cf [maven-release-plugin][skip ci] prepare release 23.1.0.2 2022-03-22 12:28:19 +00:00
Tom Page
671e1934bd ACS-2735 Update hardcoded version number to 23.1.0. 2022-03-22 11:42:09 +00:00
Tom Page
d0452aaddb Revert "Revert "ACS-2608 Support force directive. (#992)""
This reverts commit 464db778fa.
2022-03-22 10:45:16 +00:00
Tom Page
464db778fa Revert "ACS-2608 Support force directive. (#992)"
This reverts commit 905e813aa4.
2022-03-22 10:44:55 +00:00
Tom Page
905e813aa4 ACS-2608 Support force directive. (#992)
* ACS-2608 Support force directive.

* ACS-2608 Rename bash variable to match convention.

* ACS-2608 Use 14.121.x for branch.

* [force 7.2.0-A27.1] ACS-2608 Test force release.

* [force 7.2.0-A27.1] ACS-2608 Fix regex for force.

* [maven-release-plugin][skip ci] prepare release 14.121.1

* [maven-release-plugin][skip ci] prepare for next development iteration

* [force 7.2.0-A27.2] ACS-2608 Test force release.

* [maven-release-plugin][skip ci] prepare release 14.121.2

* [maven-release-plugin][skip ci] prepare for next development iteration

* [force 7.2.0-A27.3] ACS-2608 Test force release.

* [maven-release-plugin][skip ci] prepare release 14.121.3

* [maven-release-plugin][skip ci] prepare for next development iteration

* [force 7.2.0-A27.4] ACS-2608 Test force release.

* [maven-release-plugin][skip ci] prepare release 14.121.4

* [maven-release-plugin][skip ci] prepare for next development iteration

* ACS-2608 Revert change to version.

Co-authored-by: Travis CI User <build@alfresco.com>
2022-03-22 10:35:09 +00:00
alandavis
b55ba47c5e amp.min.version now has a 1 as its 1st digit with the new Hyland version number scheme such as 23.1 2022-03-21 17:11:03 +00:00
alandavis
0607bb1485 Set acs.version.major/minor versions 23.1.0 2022-03-21 17:07:53 +00:00
Travis CI User
f7c8298308 [maven-release-plugin][skip ci] prepare for next development iteration 2022-03-21 13:23:25 +00:00
Travis CI User
86de88ebaa [maven-release-plugin][skip ci] prepare release 23.1.0.1 2022-03-21 13:23:22 +00:00
alandavis
76ba0a38e5 Switch master branch ready for 23.1.0 development 2022-03-21 12:38:08 +00:00
Travis CI User
3ad642f388 [maven-release-plugin][skip ci] prepare for next development iteration 2022-03-21 11:30:57 +00:00
Travis CI User
e113eb3561 [maven-release-plugin][skip ci] prepare release 14.146 2022-03-21 11:30:55 +00:00
alandavis
1dc1852a69 Increment version.schema to next multiple of 1000. i.e. 17000 for the next major/minor version 2022-03-21 10:18:29 +00:00
290 changed files with 19389 additions and 3889 deletions

View File

@@ -158,3 +158,9 @@ updates:
- "8.16"
registries:
- maven-repository-artifacts-alfresco-com-nexus-content-groups-int
- package-ecosystem: "docker"
directory: "packaging/docker-alfresco/"
schedule:
interval: "daily"
time: "22:00"
timezone: Africa/Abidjan

11
.github/workflows/hackathon.yml vendored Normal file
View File

@@ -0,0 +1,11 @@
name: Hackathon
on:
push:
jobs:
sleep:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: sleep 240

View File

@@ -1,7 +1,7 @@
---
dist: focal
language: java
jdk: openjdk11
jdk: openjdk17
services:
- docker
@@ -26,13 +26,16 @@ branches:
env:
global:
- TRANSFORMERS_TAG=$(mvn help:evaluate -Dexpression=dependency.alfresco-transform-core.version -q -DforceStdout)
- TAS_SCRIPTS=../alfresco-community-repo/packaging/tests/scripts
- TAS_ENVIRONMENT=./packaging/tests/environment
- LOG_WARN="-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn"
stages:
- name: prepare
if: commit_message !~ /\[skip tests\]/ AND commit_message !~ /\[force[^\]]*\]/
- name: test
if: commit_message !~ /\[skip tests\]/
if: commit_message !~ /\[skip tests\]/ AND commit_message !~ /\[force[^\]]*\]/
- name: release
if: commit_message !~ /\[no release\]/ AND (branch = master OR branch =~ /release\/.*/) AND type != pull_request AND fork = false
- name: update_downstream
@@ -43,7 +46,13 @@ install: travis_retry travis_wait 40 bash scripts/travis/build.sh
jobs:
include:
- name: "Prepare"
stage: prepare
install: skip
script: travis_retry travis_wait 80 bash scripts/travis/prepare.sh
- name: "Source Clear Scan (SCA)"
stage: test
if: branch = master OR branch =~ /release\/.*/
# Run Veracode
install: skip
@@ -51,318 +60,325 @@ jobs:
- name: "Core, Data-Model, Repository - AllUnitTestsSuite - Build and test"
if: commit_message !~ /\[skip repo\]/
install: skip
script:
- travis_retry mvn -B test -pl core,data-model
- travis_retry mvn -B test -pl "repository,mmt" "-Dtest=AllUnitTestsSuite,AllMmtUnitTestSuite"
- travis_retry mvn -B test -pl core,data-model -am -DfailIfNoTests=false
- travis_retry mvn -B test -pl "repository,mmt" -am "-Dtest=AllUnitTestsSuite,AllMmtUnitTestSuite" -DfailIfNoTests=false
- name: "Repository - AppContext01TestSuite"
if: commit_message !~ /\[skip repo\]/
install: skip
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext01TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:14.4 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.17.1-jre11-rockylinux8
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AppContext01TestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - AppContext02TestSuite"
if: commit_message !~ /\[skip repo\]/
install: skip
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext02TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:14.4 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.17.1-jre11-rockylinux8
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AppContext02TestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - AppContext03TestSuite"
if: commit_message !~ /\[skip repo\]/
install: skip
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext03TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:14.4 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.17.1-jre11-rockylinux8
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AppContext03TestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - AppContext04TestSuite"
if: commit_message !~ /\[skip repo\]/
install: skip
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext04TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:14.4 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.17.1-jre11-rockylinux8
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AppContext04TestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - AppContext05TestSuite"
if: commit_message !~ /\[skip repo\]/
install: skip
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:14.4 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.17.1-jre11-rockylinux8
- mkdir -p "${HOME}/tmp"
- cp repository/src/test/resources/realms/alfresco-realm.json "${HOME}/tmp"
- export HOST_IP=$(hostname -I | cut -f1 -d' ')
- docker run -d -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin -e DB_VENDOR=h2 -p 8999:8080 -e KEYCLOAK_IMPORT=/tmp/alfresco-realm.json -v $HOME/tmp/alfresco-realm.json:/tmp/alfresco-realm.json alfresco/alfresco-identity-service:1.2
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext05TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco "-Didentity-service.auth-server-url=http://${HOST_IP}:8999/auth"
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AppContext05TestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco "-Didentity-service.auth-server-url=http://${HOST_IP}:8999/auth"
- name: "Repository - AppContext06TestSuite"
if: commit_message !~ /\[skip repo\]/
install: skip
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext06TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:14.4 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.17.1-jre11-rockylinux8
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AppContext06TestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - AppContextExtraTestSuite"
if: commit_message !~ /\[skip repo\]/
install: skip
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContextExtraTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:14.4 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.17.1-jre11-rockylinux8
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AppContextExtraTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - MiscContextTestSuite"
if: commit_message !~ /\[skip repo\]/
install: skip
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
script: travis_wait 20 mvn -B test -pl repository -Dtest=MiscContextTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:14.4 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.17.1-jre11-rockylinux8
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=MiscContextTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - SearchTestSuite"
if: commit_message !~ /\[skip repo\]/
install: skip
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=SearchTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco -Dindex.subsystem.name=solr6
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:14.4 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.17.1-jre11-rockylinux8
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=SearchTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco -Dindex.subsystem.name=solr6
- name: "Repository - MariaDB 10.2.18 tests"
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
install: skip
before_script:
- docker run -d -p 3307:3306 --name mariadb -e MYSQL_ROOT_PASSWORD=alfresco -e MYSQL_USER=alfresco -e MYSQL_DATABASE=alfresco -e MYSQL_PASSWORD=alfresco mariadb:10.2.18 --transaction-isolation=READ-COMMITTED --max-connections=300 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.17.1-jre11-rockylinux8
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
- name: "Repository - MariaDB 10.4 tests"
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
install: skip
before_script:
- docker run -d -p 3307:3306 --name mariadb -e MYSQL_ROOT_PASSWORD=alfresco -e MYSQL_USER=alfresco -e MYSQL_DATABASE=alfresco -e MYSQL_PASSWORD=alfresco mariadb:10.4 --transaction-isolation=READ-COMMITTED --max-connections=300 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.17.1-jre11-rockylinux8
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
- name: "Repository - MariaDB 10.5 tests"
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
install: skip
before_script:
- docker run -d -p 3307:3306 --name mariadb -e MYSQL_ROOT_PASSWORD=alfresco -e MYSQL_USER=alfresco -e MYSQL_DATABASE=alfresco -e MYSQL_PASSWORD=alfresco mariadb:10.5 --transaction-isolation=READ-COMMITTED --max-connections=300 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.17.1-jre11-rockylinux8
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
- name: "Repository - MariaDB 10.6 tests"
# We run tests on the latest version of MariaDB on pull requests plus the normal master and release branches - ignored on feature branches
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ ) OR commit_message =~ /\[db\]/ OR commit_message =~ /\[latest db\]/
install: skip
before_script:
- docker run -d -p 3307:3306 --name mariadb -e MYSQL_ROOT_PASSWORD=alfresco -e MYSQL_USER=alfresco -e MYSQL_DATABASE=alfresco -e MYSQL_PASSWORD=alfresco mariadb:10.6 --transaction-isolation=READ-COMMITTED --max-connections=300 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
- name: "Repository - MySQL 5.7.23 tests"
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
before_script:
- docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=alfresco -e MYSQL_USER=alfresco -e MYSQL_DATABASE=alfresco -e MYSQL_PASSWORD=alfresco mysql:5.7.23 --transaction-isolation='READ-COMMITTED' --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=com.mysql.jdbc.Driver -Ddb.name=alfresco -Ddb.url=jdbc:mysql://localhost:3307/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.17.1-jre11-rockylinux8
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
- name: "Repository - MySQL 8 tests"
# We run tests on the latest version of MySQL on pull requests plus the normal master and release branches - ignored on feature branches
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ ) OR commit_message =~ /\[db\]/ OR commit_message =~ /\[latest db\]/
install: skip
before_script:
- docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=alfresco -e MYSQL_USER=alfresco -e MYSQL_DATABASE=alfresco -e MYSQL_PASSWORD=alfresco mysql:8 --transaction-isolation='READ-COMMITTED'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=com.mysql.jdbc.Driver -Ddb.name=alfresco -Ddb.url=jdbc:mysql://localhost:3307/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.17.1-jre11-rockylinux8
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=com.mysql.jdbc.Driver -Ddb.name=alfresco -Ddb.url=jdbc:mysql://localhost:3307/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - PostgreSQL 10.9 tests"
- name: "Repository - PostgreSQL 13.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:10.9 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.7 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.17.1-jre11-rockylinux8
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - PostgreSQL 11.7 tests"
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:11.7 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - PostgreSQL 11.12 tests"
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:11.12 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - PostgreSQL 12.4 tests"
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:12.4 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - PostgreSQL 12.7 tests"
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:12.7 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - PostgreSQL 13.1 tests"
- name: "Repository - PostgreSQL 14.4 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\]/
if: commit_message !~ /\[skip db\]/ OR commit_message =~ /\[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.1 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- 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\]/
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:14.4 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.17.1-jre11-rockylinux8
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - Messaging tests"
if: commit_message !~ /\[skip repo\]/
install: skip
before_script:
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=CamelRoutesTest,CamelComponentsTest
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.17.1-jre11-rockylinux8
script: travis_wait 20 mvn -B test -pl repository -am -Dtest=CamelRoutesTest,CamelComponentsTest -DfailIfNoTests=false
- name: "Remote-api - AppContext01TestSuite"
if: commit_message !~ /\[skip repo\]/
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:14.4 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.17.1-jre11-rockylinux8
script: travis_wait 20 mvn -B test -pl remote-api -Dtest=AppContext01TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Remote-api - AppContext02TestSuite"
if: commit_message !~ /\[skip repo\]/
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:14.4 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.17.1-jre11-rockylinux8
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
script: travis_wait 20 mvn -B test -pl remote-api -Dtest=AppContext02TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Remote-api - AppContext03TestSuite"
if: commit_message !~ /\[skip repo\]/
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:14.4 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.17.1-jre11-rockylinux8
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
script: travis_wait 20 mvn -B test -pl remote-api -Dtest=AppContext03TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Remote-api - AppContext04TestSuite"
if: commit_message !~ /\[skip repo\]/
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:14.4 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.17.1-jre11-rockylinux8
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
script: travis_wait 20 mvn -B test -pl remote-api -Dtest=AppContext04TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Remote-api - AppContextExtraTestSuite"
if: commit_message !~ /\[skip repo\]/
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:14.4 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.17.1-jre11-rockylinux8
script: travis_wait 20 mvn -B test -pl remote-api -Dtest=AppContextExtraTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "REST API TAS tests part1"
# TAS tests are generally skipped on feature branches as they will be repeated on the enterprise repo or community packaging builds
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
install: travis_retry travis_wait 40 env REQUIRES_LOCAL_IMAGES=true bash scripts/travis/build.sh
before_script:
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
script: travis_wait 60 mvn -B install -f packaging/tests/tas-restapi/pom.xml -Pall-tas-tests,run-restapi-part1 -Denvironment=default -DrunBugs=false
script: travis_wait 60 mvn -B verify -f packaging/tests/tas-restapi/pom.xml -Pall-tas-tests,run-restapi-part1 -Denvironment=default -DrunBugs=false
- name: "REST API TAS tests part2"
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
install: travis_retry travis_wait 40 env REQUIRES_LOCAL_IMAGES=true bash scripts/travis/build.sh
before_script:
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
script: travis_wait 60 mvn -B install -f packaging/tests/tas-restapi/pom.xml -Pall-tas-tests,run-restapi-part2 -Denvironment=default -DrunBugs=false
script: travis_wait 60 mvn -B verify -f packaging/tests/tas-restapi/pom.xml -Pall-tas-tests,run-restapi-part2 -Denvironment=default -DrunBugs=false
- name: "REST API TAS tests part3"
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
install: travis_retry travis_wait 40 env REQUIRES_LOCAL_IMAGES=true bash scripts/travis/build.sh
before_script:
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
script: travis_wait 60 mvn -B install -f packaging/tests/tas-restapi/pom.xml -Pall-tas-tests,run-restapi-part3 -Denvironment=default -DrunBugs=false
script: travis_wait 60 mvn -B verify -f packaging/tests/tas-restapi/pom.xml -Pall-tas-tests,run-restapi-part3 -Denvironment=default -DrunBugs=false
- name: "CMIS TAS tests - BROWSER binding"
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
install: travis_retry travis_wait 40 env REQUIRES_LOCAL_IMAGES=true bash scripts/travis/build.sh
before_script:
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
script: travis_wait 40 mvn -B install -f packaging/tests/tas-cmis/pom.xml -Pall-tas-tests,run-cmis-browser -Denvironment=default -DrunBugs=false
script: travis_wait 40 mvn -B verify -f packaging/tests/tas-cmis/pom.xml -Pall-tas-tests,run-cmis-browser -Denvironment=default -DrunBugs=false
- name: "CMIS TAS tests - ATOM binding"
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
install: travis_retry travis_wait 40 env REQUIRES_LOCAL_IMAGES=true bash scripts/travis/build.sh
before_script:
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
script: travis_wait 40 mvn -B install -f packaging/tests/tas-cmis/pom.xml -Pall-tas-tests,run-cmis-atom -Denvironment=default -DrunBugs=false
script: travis_wait 40 mvn -B verify -f packaging/tests/tas-cmis/pom.xml -Pall-tas-tests,run-cmis-atom -Denvironment=default -DrunBugs=false
- name: "CMIS TAS tests - WEBSERVICES binding"
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
install: travis_retry travis_wait 40 env REQUIRES_LOCAL_IMAGES=true bash scripts/travis/build.sh
before_script:
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
script: travis_wait 40 mvn -B install -f packaging/tests/tas-cmis/pom.xml -Pall-tas-tests,run-cmis-webservices -Denvironment=default -DrunBugs=false
script: travis_wait 40 mvn -B verify -f packaging/tests/tas-cmis/pom.xml -Pall-tas-tests,run-cmis-webservices -Denvironment=default -DrunBugs=false
- name: "Email TAS tests"
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
install: travis_retry travis_wait 40 env REQUIRES_LOCAL_IMAGES=true bash scripts/travis/build.sh
before_script:
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal.yml
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
script: travis_wait 30 mvn -B install -f packaging/tests/tas-email/pom.xml -Pall-tas-tests -Denvironment=default -DrunBugs=false
script: travis_wait 30 mvn -B verify -f packaging/tests/tas-email/pom.xml -Pall-tas-tests -Denvironment=default -DrunBugs=false
- name: "WebDAV TAS tests"
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
install: travis_retry travis_wait 40 env REQUIRES_LOCAL_IMAGES=true bash scripts/travis/build.sh
before_script:
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal.yml
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
script: travis_wait 30 mvn -B install -f packaging/tests/tas-webdav/pom.xml -Pall-tas-tests -Denvironment=default -DrunBugs=false
script: travis_wait 30 mvn -B verify -f packaging/tests/tas-webdav/pom.xml -Pall-tas-tests -Denvironment=default -DrunBugs=false
- name: "Integration TAS tests"
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
install: travis_retry travis_wait 40 env REQUIRES_LOCAL_IMAGES=true bash scripts/travis/build.sh
before_script:
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal.yml
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
script: travis_wait 30 mvn -B install -f packaging/tests/tas-integration/pom.xml -Pall-tas-tests -Denvironment=default -DrunBugs=false
script: travis_wait 30 mvn -B verify -f packaging/tests/tas-integration/pom.xml -Pall-tas-tests -Denvironment=default -DrunBugs=false
- name: "Share Services - ShareServicesTestSuite"
if: commit_message !~ /\[skip repo\]/
install: skip
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
script: travis_wait 20 mvn -B test -pl :alfresco-share-services -Dtest=ShareServicesTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:14.4 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
- name: "AGS Unit & Integration Tests 01 (PostgreSQL)"
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags\]/
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
script: travis_retry travis_wait 80 mvn -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-postgres -PagsAllTestSuitePt1 -f amps/ags/pom.xml ${LOG_WARN}
- name: "AGS Integration Tests 02 (PostgreSQL)"
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags\]/
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
script: travis_retry travis_wait 80 mvn -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-postgres -PagsAllTestSuitePt2 -f amps/ags/pom.xml ${LOG_WARN}
- name: "AGS Integration Tests 03 (PostgreSQL)"
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags\]/
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
script: travis_retry travis_wait 80 mvn -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-postgres -PagsAllTestSuitePt3 -f amps/ags/pom.xml ${LOG_WARN}
- name: "AGS Unit & Integration Tests 04 (PostgreSQL)"
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags\]/
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
script: travis_retry travis_wait 80 mvn -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-postgres -PagsAllTestSuitePt4 -f amps/ags/pom.xml ${LOG_WARN}
- name: "AGS Unit & Integration Tests 01 (MySQL) "
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags on MySQL\]/
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
script: travis_retry travis_wait 80 mvn -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-mysql -PagsAllTestSuitePt1 -f amps/ags/pom.xml ${LOG_WARN}
- name: "AGS Integration Tests 02 (MySQL) "
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags on MySQL\]/
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
script: travis_retry travis_wait 80 mvn -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-mysql -PagsAllTestSuitePt2 -f amps/ags/pom.xml ${LOG_WARN}
- name: "AGS Integration Tests 03 (MySQL) "
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags on MySQL\]/
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags\]/
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
script: travis_retry travis_wait 80 mvn -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-mysql -PagsAllTestSuitePt3 -f amps/ags/pom.xml ${LOG_WARN}
- name: "AGS Unit & Integration Tests 04 (MySQL) "
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags on MySQL\]/
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
script: travis_retry travis_wait 80 mvn -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-mysql -PagsAllTestSuitePt4 -f amps/ags/pom.xml ${LOG_WARN}
- name: "AGS Community Rest API Tests"
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags\]/
install: travis_retry travis_wait 40 env REQUIRES_LOCAL_IMAGES=true bash scripts/travis/build.sh
addons:
artifacts:
paths:
@@ -373,11 +389,12 @@ jobs:
before_script:
- ${TAS_SCRIPTS}/start-compose.sh ./amps/ags/rm-community/rm-community-repo/docker-compose.yml
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8080/alfresco"
script: travis_wait 40 mvn -B test -pl :alfresco-governance-services-automation-community-rest-api -Dskip.automationtests=false -Pags
script: travis_wait 40 mvn -B test -pl :alfresco-governance-services-automation-community-rest-api -am -DfailIfNoTests=false -Dskip.automationtests=false -Pags
after_script: bash amps/ags/travis/scripts/getLogs.sh
- name: "Push to Nexus"
stage: release
install: skip
before_script: bash scripts/travis/verify_release_tag.sh
script: travis_wait 40 bash scripts/travis/maven_release.sh

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-amps</artifactId>
<version>14.146-SNAPSHOT</version>
<version>17.102-SNAPSHOT</version>
</parent>
<modules>
@@ -30,16 +30,20 @@
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<!-- Keeping illegal-access=permit for Java 11 compatibility, even though it has no effect on JDK 17 -->
<argLine>
--illegal-access=permit
--add-opens=java.base/java.lang=ALL-UNNAMED
</argLine>
</configuration>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<!-- Keeping illegal-access=permit for Java 11 compatibility, even though it has no effect on JDK 17 -->
<configuration>
<argLine>
--illegal-access=permit
--add-opens=java.base/java.lang=ALL-UNNAMED
</argLine>
</configuration>
</plugin>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-governance-services-community-parent</artifactId>
<version>14.146-SNAPSHOT</version>
<version>17.102-SNAPSHOT</version>
</parent>
<modules>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-governance-services-automation-community-repo</artifactId>
<version>14.146-SNAPSHOT</version>
<version>17.102-SNAPSHOT</version>
</parent>
<build>
@@ -45,7 +45,7 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-reload4j</artifactId>
<version>1.7.35</version>
<version>${dependency.slf4j.version}</version>
<scope>test</scope>
</dependency>
<dependency>
@@ -87,7 +87,7 @@
<dependency>
<groupId>com.github.docker-java</groupId>
<artifactId>docker-java</artifactId>
<version>3.2.12</version>
<version>3.2.13</version>
</dependency>
</dependencies>
</project>

View File

@@ -26,8 +26,6 @@
*/
package org.alfresco.rest.v0;
import static org.testng.AssertJUnit.assertTrue;
import java.text.MessageFormat;
import org.alfresco.rest.core.v0.BaseAPI;
@@ -38,7 +36,9 @@ import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import static org.testng.AssertJUnit.assertTrue;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertNotNull;
/**
* Methods to make API requests using v0 API on Records Management Custom Model Reference Definitions
*
@@ -57,6 +57,8 @@ public class CustomDefinitionsAPI extends BaseAPI
* create reference endpoint
*/
private static final String CREATE_RELATIONSHIP_API_ENDPOINT = "{0}node/{1}/customreferences";
private static final String GET_RELATIONSHIP_API_ENDPOINT = "{0}node/{1}/relationships";
private static final String DELETE_RELATIONSHIP_API_ENDPOINT = "{0}node/{1}/targetnode/{2}/uniqueName/{3}";
/**
* logger
@@ -141,4 +143,48 @@ public class CustomDefinitionsAPI extends BaseAPI
assertTrue("Creating relationship from " + recordNodeIdFrom + " to " + recordNodeIdTo + " failed.", success);
}
public void createRelationship(
String adminUser,
String adminPassword,
int expectedStatus,
String recordNodeIdFrom,
String recordNodeIdTo,
CustomDefinitions relationshipType) {
//create the request body
JSONObject requestParams = new JSONObject();
requestParams.put("toNode", NODE_REF_WORKSPACE_SPACES_STORE + recordNodeIdTo);
requestParams.put("refId", getCustomReferenceId(adminUser, adminPassword, relationshipType
.getDefinition()));
//send the API request to create the relationship
JSONObject setRelationshipStatus = doPostRequest(adminUser, adminPassword, requestParams,
MessageFormat.format(CREATE_RELATIONSHIP_API_ENDPOINT, "{0}", NODE_PREFIX + recordNodeIdFrom));
//check the response
assertEquals("POST request for createRelationship was not successful.", expectedStatus, setRelationshipStatus.getJSONObject("status").get("code"));
}
public JSONObject getRelationshipDetails(
String adminUser,
String adminPassword,
String nodeRef) {
//send the API request to create the relationship
JSONObject relationshipDetails = doGetRequest(adminUser, adminPassword,
MessageFormat.format(GET_RELATIONSHIP_API_ENDPOINT, "{0}", NODE_PREFIX + nodeRef));
//check the response
assertNotNull("The Relationship detail is not found for the Noderef " + nodeRef, relationshipDetails);
return relationshipDetails;
}
public void deleteRelationship(
String adminUser,
String adminPassword,
String recordNodeIdFrom,
String recordNodeIdTo,
String relationshipUniqueName) {
//send the API request to create the relationship
JSONObject setRelationshipStatus = doDeleteRequest(adminUser, adminPassword,
MessageFormat.format(DELETE_RELATIONSHIP_API_ENDPOINT, "{0}", NODE_PREFIX + recordNodeIdFrom,NODE_PREFIX + recordNodeIdTo,relationshipUniqueName));
//check the response
boolean success = (setRelationshipStatus != null) && setRelationshipStatus.getBoolean("success");
assertTrue("Deleting relationship from " + recordNodeIdFrom + " to " + recordNodeIdTo + " failed.", success);
}
}

View File

@@ -74,4 +74,27 @@ public class RecordFoldersAPI extends BaseAPI
return null;
}
public HttpResponse postFolderAction(String user, String password, JSONObject requestParams, String recordFolder) {
String recNodeRef = getNodeRefSpacesStore() + contentService.getNodeRef(user, password, RM_SITE_ID, recordFolder);
try {
requestParams.put("nodeRef", recNodeRef);
return doPostJsonRequest(user, password, SC_OK, requestParams, RM_ACTIONS_API);
}
catch (Exception error) {
LOGGER.error("Unable to extract response parameter", error);
}
return null;
}
public HttpResponse postRecordAction(String user, String password, JSONObject requestParams, String recordId) {
try {
requestParams.put("nodeRef", recordId);
return doPostJsonRequest(user, password, SC_OK, requestParams, RM_ACTIONS_API);
}
catch (JSONException error) {
LOGGER.error("Unable to extract response parameter", error);
}
return null;
}
}

View File

@@ -53,9 +53,12 @@ import static org.springframework.http.HttpStatus.OK;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.Date;
import java.util.TimeZone;
import java.util.stream.Collectors;
import lombok.Getter;
@@ -91,6 +94,7 @@ 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.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.testng.annotations.BeforeClass;
@@ -121,6 +125,8 @@ public class BaseRMRestTest extends RestTest
@Getter(value = PROTECTED)
private SearchAPI searchApi;
protected static final String iso8601_DateFormat="yyyy-MM-dd'T'HH:mm:ss.SSSXXX";
/**
* Asserts the given status code
*
@@ -161,7 +167,7 @@ public class BaseRMRestTest extends RestTest
*/
@Override
@BeforeClass (alwaysRun = true)
public void checkServerHealth() throws Exception
public void checkServerHealth()
{
// Create RM Site if not exist
createRMSiteIfNotExists();
@@ -628,8 +634,8 @@ public class BaseRMRestTest extends RestTest
* Returns search results for the given search term
*
* @param user
* @param term
* @param query language
* @param q
* @param queryLanguage language
* @return
* @throws Exception
*/
@@ -956,5 +962,34 @@ public class BaseRMRestTest extends RestTest
return false;
}
}
/**
* Helper method to get the Previous Date in the YYYY-MM-ddTHH:mm:ss.SSSXXX format
* @param previousDays number of previous days while calculating the date as output
* @return previousDate as String in the ISO 8601 Date Format
*/
protected String getIso8601Date(int previousDays) {
Date date = new Date(System.currentTimeMillis());
Date previousDate = new Date(date.getTime() - previousDays);
// Conversion
SimpleDateFormat sdf= new SimpleDateFormat(iso8601_DateFormat);;
sdf.setTimeZone(TimeZone.getDefault());
return sdf.format(previousDate);
}
/**
* Helper method to provide the Edited Disposition Date Json
* The Edited Disposition Date is modified to previous date so that CUTOFF & DESTROY Steps will be enabled
* @return JsonObject with the format {"name":"editDispositionActionAsOfDate","params":{"asOfDate":{"iso8601":"Previous Date"}}}
*/
protected JSONObject editDispositionDateJson() {
JSONObject requestParams = new JSONObject();
requestParams.put("name","editDispositionActionAsOfDate");
JSONObject params = new JSONObject();
requestParams.put("params",params);
JSONObject asOfDate = new JSONObject();
params.put("asOfDate",asOfDate);
asOfDate.put("iso8601",getIso8601Date(1));
return requestParams;
}
}

View File

@@ -73,6 +73,7 @@ import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import org.alfresco.utility.model.TestGroup;
/**
* API tests for declaring document as record and filing it immediately to a record folder location within the file plan
@@ -257,7 +258,7 @@ public class DeclareAndFileDocumentAsRecordTests extends BaseRMRestTest
* Then I receive an error indicating that I have attempted to declare and file a document into an invalid record folder
* And the document is not declared as a record
*/
@Test (dataProvider = "invalidDestinationPaths")
@Test (dataProvider = "invalidDestinationPaths",groups = { TestGroup.NOT_SUPPORTED_ON_SINGLE_PIPELINE })
public void declareAndFileToInvalidLocationUsingActionsAPI(String containerPath, String expectedException) throws Exception
{
STEP("Declare document as record with an invalid location parameter value");

View File

@@ -62,6 +62,7 @@ import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import org.alfresco.utility.model.TestGroup;
/**
* API tests for declaring a document version as record and filing to a record folder location within the file plan
@@ -207,7 +208,7 @@ public class FileVersionAsRecordTests extends BaseRMRestTest
* record folder
* And the document is not declared as a version record
*/
@Test (dataProvider = "invalidDestinationPaths")
@Test (dataProvider = "invalidDestinationPaths", groups = { TestGroup.NOT_SUPPORTED_ON_SINGLE_PIPELINE })
public void declareVersionAndFileToInvalidLocationUsingActionsAPI(String containerPath, String expectedException) throws Exception
{
STEP("Declare document as record version with an invalid location parameter value");

View File

@@ -0,0 +1,202 @@
/*
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2022 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
* If the software was purchased under a paid Alfresco license, the terms of
* the paid license agreement will prevail. Otherwise, the software is
* provided under the following open source license terms:
* -
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* -
* Alfresco is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
* -
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
* #L%
*/
package org.alfresco.rest.rm.community.records;
import static org.alfresco.rest.core.v0.BaseAPI.RM_SITE_ID;
import static org.alfresco.rest.rm.community.base.TestData.HOLD_DESCRIPTION;
import static org.alfresco.rest.rm.community.base.TestData.HOLD_REASON;
import static org.alfresco.rest.rm.community.util.CommonTestUtils.generateTestPrefix;
import java.util.Collections;
import org.alfresco.rest.rm.community.base.BaseRMRestTest;
import org.alfresco.rest.rm.community.model.custom.CustomDefinitions;
import org.alfresco.rest.rm.community.model.record.Record;
import org.alfresco.rest.rm.community.model.recordcategory.RecordCategory;
import org.alfresco.rest.rm.community.model.recordcategory.RecordCategoryChild;
import org.alfresco.rest.v0.CustomDefinitionsAPI;
import org.alfresco.rest.v0.HoldsAPI;
import org.alfresco.rest.v0.RMRolesAndActionsAPI;
import org.alfresco.rest.v0.RecordsAPI;
import org.alfresco.rest.v0.RecordCategoriesAPI;
import org.alfresco.test.AlfrescoTest;
import org.apache.commons.lang.StringUtils;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.testng.annotations.Test;
import static org.apache.commons.httpclient.HttpStatus.SC_INTERNAL_SERVER_ERROR;
import static org.apache.commons.httpclient.HttpStatus.SC_OK;
/**
* Add Relationship tests
* @author Kavit Shah
*/
public class AddRelationshipTests extends BaseRMRestTest
{
private final String TEST_PREFIX = generateTestPrefix(AddRelationshipTests.class);
private final String CATEGORY = TEST_PREFIX + "category";
private final String HOLD1 = TEST_PREFIX + "hold1";
private final String FOLDER = TEST_PREFIX + "RM_2709_1814_FOLDER";
private final String RECORD1 = TEST_PREFIX + "RM_2709_1814_RECORD_ONE";
private final String RECORD2 = TEST_PREFIX + "RM_1814_RECORD_TWO";
private String hold1NodeRef;
@Autowired
private HoldsAPI holdsAPI;
@Autowired
private RecordsAPI recordsAPI;
@Autowired
private CustomDefinitionsAPI customDefinitionsAPI;
@Autowired
private RMRolesAndActionsAPI rmRolesAndActionsAPI;
@Autowired
private RecordCategoriesAPI recordCategoriesAPI;
@Test (priority = 1)
@AlfrescoTest (jira = "RM-1814")
public void addRelationshipToHoldRecord()
{
String CATEGORY_RELATIONSHIP = CATEGORY + "To Hold";
//create RM site
createRMSiteIfNotExists();
//create record category, record folder and records
RecordCategory recordCategory = createCategoryIfDoesNotExist(CATEGORY_RELATIONSHIP);
RecordCategoryChild recordCategoryChild = createRecordFolderInCategory(FOLDER, recordCategory);
createRecordItems(recordCategoryChild, RECORD1);
Record record2 = createRecordItems(recordCategoryChild, RECORD2);
//create Hold
hold1NodeRef = holdsAPI.createHoldAndGetNodeRef(getAdminUser().getUsername(),
getAdminUser().getPassword(), HOLD1, HOLD_REASON, HOLD_DESCRIPTION);
//add RECORD2 to holds
holdsAPI.addItemsToHolds(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(),
SC_OK, Collections.singletonList(record2.getId()),
Collections.singletonList(hold1NodeRef));
// get records nodeRefs
String elRecordFullName1 = recordsAPI.getRecordFullName(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(), FOLDER, RECORD1);
String elRecordNodeRef1 = recordsAPI.getRecordNodeRef(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(), elRecordFullName1, "/" + CATEGORY_RELATIONSHIP + "/" + FOLDER);
String elRecordFullName2 = recordsAPI.getRecordFullName(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(), FOLDER, RECORD2);
String elRecordNodeRef2 = recordsAPI.getRecordNodeRef(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(), elRecordFullName2, "/" + CATEGORY_RELATIONSHIP + "/" + FOLDER);
// create Relationship
customDefinitionsAPI.createRelationship(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(),
SC_INTERNAL_SERVER_ERROR,
formatNodeRef(elRecordNodeRef1),
formatNodeRef(elRecordNodeRef2),
CustomDefinitions.ATTACHMENT);
//delete preconditions
deletePrecondition();
}
@Test (priority = 2)
@AlfrescoTest (jira = "RM-1874")
public void deleteRelationship()
{
String CATEGORY_RELATIONSHIP = CATEGORY + "deleteRelationship";
// create RM site
createRMSiteIfNotExists();
// create record category, record folder and records
RecordCategory recordCategory = createCategoryIfDoesNotExist(CATEGORY_RELATIONSHIP);
RecordCategoryChild recordCategoryChild = createRecordFolderInCategory(FOLDER, recordCategory);
createRecordItems(recordCategoryChild, RECORD1);
createRecordItems(recordCategoryChild, RECORD2);
// Add Relationship
String elRecordFullName1 = recordsAPI.getRecordFullName(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(), FOLDER, RECORD1);
String elRecordNodeRef1 = recordsAPI.getRecordNodeRef(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(), elRecordFullName1, "/" + CATEGORY_RELATIONSHIP + "/" + FOLDER);
String elRecordFullName2 = recordsAPI.getRecordFullName(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(), FOLDER, RECORD2);
String elRecordNodeRef2 = recordsAPI.getRecordNodeRef(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(), elRecordFullName2, "/" + CATEGORY_RELATIONSHIP + "/" + FOLDER);
customDefinitionsAPI.createRelationship(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(),
formatNodeRef(elRecordNodeRef1),
formatNodeRef(elRecordNodeRef2),
CustomDefinitions.ATTACHMENT);
// Get RelationshipDetails
JSONObject relationshipDetails = customDefinitionsAPI.getRelationshipDetails(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(),
formatNodeRef(elRecordNodeRef1));
// Delete RelationshipDetails
customDefinitionsAPI.deleteRelationship(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(),
formatNodeRef(elRecordNodeRef1),
formatNodeRef(elRecordNodeRef2),
relationshipUniqueName(relationshipDetails));
// delete category
tearDown(CATEGORY_RELATIONSHIP);
}
private void deletePrecondition()
{
holdsAPI.deleteHold(getAdminUser(), hold1NodeRef);
}
private Record createRecordItems(RecordCategoryChild recordCategoryChild, String record) {
return createElectronicRecord(recordCategoryChild.getId(), record);
}
private RecordCategory createCategoryIfDoesNotExist(String CATEGORY_ALL) {
return createRootCategory(getDataUser().usingAdmin().getAdminUser(), CATEGORY_ALL);
}
private RecordCategoryChild createRecordFolderInCategory(String FOLDER_SEARCH, RecordCategory recordCategory) {
return createFolder(getDataUser().usingAdmin().getAdminUser(), recordCategory.getId(), FOLDER_SEARCH);
}
private String formatNodeRef(String nodeRef) {
return StringUtils.remove(nodeRef,"workspace://SpacesStore/");
}
private void tearDown(String category) {
rmRolesAndActionsAPI.deleteAllItemsInContainer(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(), RM_SITE_ID, FOLDER);
rmRolesAndActionsAPI.deleteAllItemsInContainer(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(), RM_SITE_ID, category);
recordCategoriesAPI.deleteCategory(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(), category);
}
private String relationshipUniqueName(JSONObject relationshipDetails) {
return relationshipDetails.getJSONObject("data").getJSONArray("items").getJSONObject(0).getJSONObject("node")
.get("relationshipUniqueName").toString();
}
}

View File

@@ -0,0 +1,148 @@
/*-
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2022 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
* If the software was purchased under a paid Alfresco license, the terms of
* the paid license agreement will prevail. Otherwise, the software is
* provided under the following open source license terms:
* -
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* -
* Alfresco is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
* -
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
* #L%
*/
package org.alfresco.rest.rm.community.records;
import static java.util.Arrays.asList;
import static org.alfresco.rest.rm.community.util.CommonTestUtils.generateTestPrefix;
import static org.alfresco.rest.rm.community.utils.CoreUtil.createBodyForMoveCopy;
import static org.alfresco.rest.rm.community.utils.CoreUtil.toContentModel;
import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.createElectronicRecordModel;
import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.getFile;
import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.IMAGE_FILE;
import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.createRecordModel;
import static org.alfresco.utility.data.RandomData.getRandomName;
import static org.alfresco.utility.report.log.Step.STEP;
import static org.springframework.http.HttpStatus.CREATED;
import static org.springframework.http.HttpStatus.OK;
import org.alfresco.rest.model.RestNodeModel;
import org.alfresco.rest.rm.community.base.BaseRMRestTest;
import org.alfresco.rest.rm.community.model.record.Record;
import org.alfresco.rest.rm.community.model.recordcategory.RecordCategory;
import org.alfresco.rest.rm.community.requests.gscore.api.RecordFolderAPI;
import org.alfresco.test.AlfrescoTest;
import org.alfresco.utility.model.UserModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import org.alfresco.rest.v0.RMRolesAndActionsAPI;
/**
* This class contains the tests for
* CreateElectronicRecordsTests Action REST API
*
* @author Shishuraj Bisht
*/
public class CreateElectronicRecordsTests extends BaseRMRestTest {
private RecordCategory rootCategory;
private UserModel updateUser;
/**
* data prep services
*/
@Autowired
private RMRolesAndActionsAPI rmRolesAndActionsAPI;
private final String TEST_PREFIX = generateTestPrefix(CreateElectronicRecordsTests.class);
private final String RM_ADMIN = TEST_PREFIX + "rm_admin";
@BeforeClass (alwaysRun = true)
public void preConditions()
{
STEP("Create RM Site");
createRMSiteIfNotExists();
STEP("Create RM Admin user");
rmRolesAndActionsAPI.createUserAndAssignToRole(getAdminUser().getUsername(), getAdminUser().getPassword(), RM_ADMIN,
getAdminUser().getPassword(),
"Administrator");
STEP("Create root level category");
rootCategory = createRootCategory(getRandomName("Category"));
STEP("Create the record folder1 inside the rootCategory");
String recordFolder1 = createCategoryFolderInFilePlan().getId();
}
/**
* Test v0 methods to create and get electronic records.
*/
@Test
@AlfrescoTest (jira = "RM-2768")
public void createElectronicRecordTest() throws Exception {
//create electronic record in record folder
String recordFolder1 = createRecordFolder(rootCategory.getId(), getRandomName("recFolder")).getId();
RecordFolderAPI recordFolderAPI = getRestAPIFactory().getRecordFolderAPI();
Record electronicRecord = recordFolderAPI.createRecord(createElectronicRecordModel(), recordFolder1, getFile(IMAGE_FILE));
assertStatusCode(CREATED);
STEP("Check the electronic record has been created");
assertStatusCode(CREATED);
// Get recordsAPI instance initialised to updateUser
org.alfresco.rest.rm.community.requests.gscore.api.RecordsAPI recordsAPI = getRestAPIFactory().getRecordsAPI(updateUser);
for (Record record: asList(electronicRecord)) {
recordsAPI.getRecord(record.getId());
assertStatusCode(OK);
// Generate update metadata
String newName = getModifiedPropertyValue(record.getName());
String newTitle = getModifiedPropertyValue(record.getProperties().getTitle());
String newDescription = getModifiedPropertyValue(record.getProperties().getDescription());
// Update record
recordsAPI.updateRecord(createRecordModel(newName, newDescription, newTitle), record.getId());
assertStatusCode(OK);
}
// move the record from one folder1 to folder2
STEP("Create the record folder2 inside the rootCategory");
String recordFolder2 = createCategoryFolderInFilePlan().getId();
STEP("Move record from folder1 to folder2");
RestNodeModel electronicDocRestNodeModel = getRestAPIFactory()
.getNodeAPI(toContentModel(electronicRecord.getId()))
.move(createBodyForMoveCopy(recordFolder2));
assertStatusCode(OK);
}
private String getModifiedPropertyValue(String originalValue) {
/* to be used to append to modifications */
String MODIFIED_PREFIX = "modified_";
return MODIFIED_PREFIX + originalValue;
}
@AfterClass (alwaysRun = true)
public void deletePreConditions() {
STEP("Delete the created rootCategory along with corresponding record folders/records present in it");
getRestAPIFactory().getRecordCategoryAPI().deleteRecordCategory(rootCategory.getId());
}
}

View File

@@ -0,0 +1,145 @@
/*
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2022 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
* If the software was purchased under a paid Alfresco license, the terms of
* the paid license agreement will prevail. Otherwise, the software is
* provided under the following open source license terms:
* -
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* -
* Alfresco is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
* -
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
* #L%
*/
package org.alfresco.rest.rm.community.records;
import org.alfresco.dataprep.CMISUtil;
import org.alfresco.rest.rm.community.base.BaseRMRestTest;
import org.alfresco.rest.rm.community.model.record.Record;
import org.alfresco.rest.v0.RMRolesAndActionsAPI;
import org.alfresco.rest.v0.RecordsAPI;
import org.alfresco.test.AlfrescoTest;
import org.alfresco.utility.constants.UserRole;
import org.alfresco.utility.model.FileModel;
import org.alfresco.utility.model.FolderModel;
import org.alfresco.utility.model.SiteModel;
import org.alfresco.utility.model.UserModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentAlias.UNFILED_RECORDS_CONTAINER_ALIAS;
import static org.alfresco.rest.rm.community.util.CommonTestUtils.generateTestPrefix;
import static org.alfresco.utility.report.log.Step.STEP;
import static org.springframework.http.HttpStatus.CREATED;
import static org.testng.Assert.assertTrue;
/**
* This class contains the tests for
* Create the Document, marking them as Record, Hiding them using Site Collaborator
* The Rm_Admin user then verofy if he is able to access the documents using Rest Api
*
* @author Kavit Shah
*/
public class DeclareInPlaceRecordTests extends BaseRMRestTest {
private final String TEST_PREFIX = generateTestPrefix(DeclareInPlaceRecordTests.class);
private final String RM_ADMIN = TEST_PREFIX + "rm_admin";
private UserModel testUser;
private UserModel RmAdminUser;
private SiteModel testSite;
private FolderModel testFolder;
/**
* data prep services
*/
@Autowired
private RMRolesAndActionsAPI rmRolesAndActionsAPI;
@Autowired
private RecordsAPI recordsAPI;
@BeforeClass(alwaysRun = true)
public void preConditions() {
STEP("Create RM Site");
createRMSiteIfNotExists();
STEP("Create RM Admin user");
rmRolesAndActionsAPI.createUserAndAssignToRole(getAdminUser().getUsername(), getAdminUser().getPassword(), RM_ADMIN,
getAdminUser().getPassword(),
"Administrator");
RmAdminUser = new UserModel(RM_ADMIN,getAdminUser().getPassword());
STEP("Create collab_user user");
testUser = getDataUser().createRandomTestUser();
testSite = dataSite.usingAdmin().createPublicRandomSite();
// invite collab_user to Collaboration site with Contributor role
getDataUser().addUserToSite(testUser, testSite, UserRole.SiteContributor);
testFolder = dataContent.usingSite(testSite).usingUser(testUser).createFolder();
}
@Test
@AlfrescoTest(jira = "RM-2366")
public void declareInplaceRecord() {
// Upload document in a folder in a collaboration site
FileModel uploadedDocHidden = dataContent.usingSite(testSite)
.usingUser(testUser)
.usingResource(testFolder)
.createContent(CMISUtil.DocumentType.TEXT_PLAIN);
// declare uploadedDocument as record
Record uploadedRecordHidden = getRestAPIFactory().getFilesAPI(testUser).declareAsRecord(uploadedDocHidden.getNodeRefWithoutVersion());
assertStatusCode(CREATED);
recordsAPI.hideRecord(testUser.getUsername(),testUser.getPassword(),uploadedRecordHidden.getId());
// Upload document in a folder in a collaboration site
FileModel uploadedDocWithoutHidden = dataContent.usingSite(testSite)
.usingUser(testUser)
.usingResource(testFolder)
.createContent(CMISUtil.DocumentType.TEXT_PLAIN);
Record uploadedRecordWithoutHidden = getRestAPIFactory().getFilesAPI(testUser).declareAsRecord(uploadedDocWithoutHidden.getNodeRefWithoutVersion());
assertStatusCode(CREATED);
assertTrue(isRecordChildOfUnfiledContainer(uploadedRecordHidden.getId()), uploadedRecordHidden.getId() + " doesn't exist in Unfiled Records");
assertTrue(isRecordChildOfUnfiledContainer(uploadedRecordWithoutHidden.getId()), uploadedRecordWithoutHidden.getId() + " doesn't exist in Unfiled Records");
}
@AfterClass(alwaysRun = true)
public void deletePreConditions() {
STEP("Delete the records created in the test");
getRestAPIFactory()
.getUnfiledContainersAPI(RmAdminUser)
.getUnfiledContainerChildren(UNFILED_RECORDS_CONTAINER_ALIAS)
.getEntries()
.stream()
.forEach(x -> getRestAPIFactory()
.getRecordsAPI()
.deleteRecord(x.getEntry().getId()));
}
private boolean isRecordChildOfUnfiledContainer(String recordId) {
return getRestAPIFactory()
.getUnfiledContainersAPI(RmAdminUser)
.getUnfiledContainerChildren(UNFILED_RECORDS_CONTAINER_ALIAS)
.getEntries()
.stream()
.anyMatch(c -> c.getEntry().getId().equals(recordId));
}
}

View File

@@ -0,0 +1,226 @@
/*
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2022 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
* If the software was purchased under a paid Alfresco license, the terms of
* the paid license agreement will prevail. Otherwise, the software is
* provided under the following open source license terms:
* -
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* -
* Alfresco is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
* -
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
* #L%
*/
package org.alfresco.rest.rm.community.records;
import org.alfresco.dataprep.CMISUtil;
import org.alfresco.rest.core.v0.BaseAPI;
import org.alfresco.rest.model.RestNodeModel;
import org.alfresco.rest.rm.community.base.BaseRMRestTest;
import org.alfresco.rest.rm.community.model.record.Record;
import org.alfresco.rest.rm.community.model.recordcategory.RecordCategory;
import org.alfresco.rest.rm.community.model.recordcategory.RecordCategoryChild;
import org.alfresco.rest.rm.community.requests.gscore.api.RecordFolderAPI;
import org.alfresco.rest.rm.community.requests.gscore.api.UnfiledRecordFolderAPI;
import org.alfresco.rest.v0.RMRolesAndActionsAPI;
import org.alfresco.rest.v0.RecordsAPI;
import org.alfresco.test.AlfrescoTest;
import org.alfresco.utility.constants.UserRole;
import org.alfresco.utility.model.FileModel;
import org.alfresco.utility.model.SiteModel;
import org.alfresco.utility.model.UserModel;
import org.apache.chemistry.opencmis.client.api.CmisObject;
import org.apache.http.HttpResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import java.util.HashMap;
import java.util.Map;
import static org.alfresco.rest.core.v0.APIUtils.convertHTTPResponseToJSON;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentAlias.UNFILED_RECORDS_CONTAINER_ALIAS;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.UNFILED_RECORD_FOLDER_TYPE;
import static org.alfresco.rest.rm.community.util.CommonTestUtils.generateTestPrefix;
import static org.alfresco.rest.rm.community.utils.CoreUtil.createBodyForMoveCopy;
import static org.alfresco.rest.rm.community.utils.CoreUtil.toContentModel;
import static org.alfresco.utility.data.RandomData.getRandomAlphanumeric;
import static org.alfresco.utility.data.RandomData.getRandomName;
import static org.alfresco.utility.report.log.Step.STEP;
import static org.springframework.http.HttpStatus.CREATED;
public class FileUnfiledRecordsTests extends BaseRMRestTest {
private final String TEST_PREFIX = generateTestPrefix(FileUnfiledRecordsTests.class);
private final String RM_ADMIN = TEST_PREFIX + "rm_admin";
public static final String NODE_REF_WORKSPACE_SPACES_STORE = "workspace://SpacesStore/";
private UserModel testUser;
private SiteModel testSite;
private String unfiledRecordFolderId;
private UserModel RmAdminUser;
private RecordCategory rootCategory;
private RecordCategoryChild recordFolder;
private final String recordName = "RM-2790 record";
private final String recordTitle = recordName + " title";
private final String recordDescription = recordName + " description";
/**
* data prep services
*/
@Autowired
private RMRolesAndActionsAPI rmRolesAndActionsAPI;
@Autowired
private RecordsAPI recordsAPI;
@BeforeClass(alwaysRun = true)
public void preConditions() {
STEP("Create RM Site");
createRMSiteIfNotExists();
STEP("Create RM Admin user");
rmRolesAndActionsAPI.createUserAndAssignToRole(getAdminUser().getUsername(), getAdminUser().getPassword(), RM_ADMIN,
getAdminUser().getPassword(),
"Administrator");
RmAdminUser = new UserModel(RM_ADMIN, getAdminUser().getPassword());
STEP("Create collab_user user");
testUser = getDataUser().createRandomTestUser();
testSite = dataSite.usingAdmin().createPublicRandomSite();
// invite collab_user to Collaboration site with Contributor role
getDataUser().addUserToSite(testUser, testSite, UserRole.SiteContributor);
}
@Test
@AlfrescoTest(jira = "RM-2790")
public void fileUnfiledRecords() throws Exception {
STEP("Upload the document to test site and then make it reacord");
// Upload document in a folder in a collaboration site
FileModel uploadedDocbyCollabUser = dataContent.usingSite(testSite)
.usingUser(testUser)
.createContent(CMISUtil.DocumentType.TEXT_PLAIN);
// declare uploadedDocument as record
Record uploadedDocRecordbyCollabUser = getRestAPIFactory().getFilesAPI(testUser)
.declareAsRecord(uploadedDocbyCollabUser.getNodeRefWithoutVersion());
assertStatusCode(CREATED);
STEP("Create root level category");
rootCategory = createRootCategory(RmAdminUser, getRandomName("Category"));
STEP("Create the record folder inside the rootCategory");
recordFolder = createFolder(RmAdminUser, rootCategory.getId(), getRandomName("Folder"));
STEP("Create a non-electronic record by completing some of the fields");
Map<Enum<?>, String> non_electronic_records_properties = new HashMap<>();
non_electronic_records_properties.put(BaseAPI.RMProperty.TITLE, recordTitle);
non_electronic_records_properties.put(BaseAPI.RMProperty.DESCRIPTION, recordDescription);
non_electronic_records_properties.put(BaseAPI.RMProperty.NAME, recordName);
non_electronic_records_properties.put(BaseAPI.RMProperty.PHYSICAL_SIZE, "");
non_electronic_records_properties.put(BaseAPI.RMProperty.NUMBER_OF_COPIES, "");
non_electronic_records_properties.put(BaseAPI.RMProperty.SHELF, "");
non_electronic_records_properties.put(BaseAPI.RMProperty.STORAGE_LOCATION, "");
non_electronic_records_properties.put(BaseAPI.RMProperty.BOX, "");
non_electronic_records_properties.put(BaseAPI.RMProperty.FILE, "");
HttpResponse nonElectronicRecordHttpResponse = recordsAPI.createNonElectronicRecord(getAdminUser().getUsername(),
getAdminUser().getPassword(), non_electronic_records_properties, rootCategory.getName(), recordFolder.getName());
String nonElectronicRecordId = getNodeRef(nonElectronicRecordHttpResponse);
STEP("Check the non-electronic record has been created");
assertStatusCode(CREATED);
STEP("Create a electronic record by completing some of the fields");
Map<BaseAPI.RMProperty, String> electronic_records_properties = new HashMap<>();
electronic_records_properties.put(BaseAPI.RMProperty.DESCRIPTION, recordDescription);
electronic_records_properties.put(BaseAPI.RMProperty.NAME, recordName);
recordsAPI.uploadElectronicRecord(RmAdminUser.getUsername(),
RmAdminUser.getPassword(), electronic_records_properties, recordFolder.getName(), CMISUtil.DocumentType.TEXT_PLAIN);
CmisObject electronicRecord = recordsAPI.getRecord(RmAdminUser.getUsername(),
RmAdminUser.getPassword(),recordFolder.getName(), electronic_records_properties.get(BaseAPI.RMProperty.NAME));
STEP("Check the electronic record has been created");
assertStatusCode(CREATED);
STEP("Create a root folder under FilePlan - Unfiled");
String unFiledFolder = createUnFileFolder();
STEP("Move all the Unfiled Records to unFiledFolder");
RestNodeModel uploadDocRestNodeModel = getRestAPIFactory()
.getNodeAPI(toContentModel(uploadedDocRecordbyCollabUser.getId()))
.move(createBodyForMoveCopy(unFiledFolder));
RestNodeModel nonElectronicDocRestNodeModel = getRestAPIFactory()
.getNodeAPI(toContentModel(nonElectronicRecordId))
.move(createBodyForMoveCopy(unFiledFolder));
RestNodeModel electronicDocRestNodeModel = getRestAPIFactory()
.getNodeAPI(toContentModel(electronicRecord.getId()))
.move(createBodyForMoveCopy(unFiledFolder));
STEP("Move all the Record present in the unFiledFolder to Folder inside Root Category");
getRestAPIFactory()
.getNodeAPI(toContentModel(uploadDocRestNodeModel.getId()))
.move(createBodyForMoveCopy(recordFolder.getId()));
getRestAPIFactory()
.getNodeAPI(toContentModel(nonElectronicDocRestNodeModel.getId()))
.move(createBodyForMoveCopy(recordFolder.getId()));
getRestAPIFactory()
.getNodeAPI(toContentModel(electronicDocRestNodeModel.getId()))
.move(createBodyForMoveCopy(recordFolder.getId()));
getRestAPIFactory().getRecordsAPI().deleteRecord(uploadDocRestNodeModel.getId());
getRestAPIFactory().getRecordsAPI().deleteRecord(nonElectronicDocRestNodeModel.getId());
getRestAPIFactory().getRecordsAPI().deleteRecord(electronicDocRestNodeModel.getId());
UnfiledRecordFolderAPI unfiledRecordFoldersAPI = getRestAPIFactory().getUnfiledRecordFoldersAPI();
unfiledRecordFoldersAPI.deleteUnfiledRecordFolder(unFiledFolder);
RecordFolderAPI recordFolderAPI = getRestAPIFactory().getRecordFolderAPI();
String recordFolderId = recordFolder.getId();
recordFolderAPI.deleteRecordFolder(recordFolderId);
}
@AfterClass (alwaysRun = true)
public void deletePreConditions()
{
STEP("Delete the created rootCategory along with corresponding record folders/records present in it");
getRestAPIFactory().getRecordCategoryAPI().deleteRecordCategory(rootCategory.getId());
}
private String createUnFileFolder() {
String categoryName = "RM-2790 record Category name " + getRandomAlphanumeric();
unfiledRecordFolderId = createUnfiledContainerChild(UNFILED_RECORDS_CONTAINER_ALIAS,
categoryName + getRandomAlphanumeric(), UNFILED_RECORD_FOLDER_TYPE).getId();
return unfiledRecordFolderId;
}
private String getNodeRef(HttpResponse httpResponse) {
return convertHTTPResponseToJSON(httpResponse).getString("persistedObject")
.replace(NODE_REF_WORKSPACE_SPACES_STORE, "");
}
}

View File

@@ -0,0 +1,179 @@
/*
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2022 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
* If the software was purchased under a paid Alfresco license, the terms of
* the paid license agreement will prevail. Otherwise, the software is
* provided under the following open source license terms:
* -
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* -
* Alfresco is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
* -
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
* #L%
*/
package org.alfresco.rest.rm.community.records;
import org.alfresco.dataprep.CMISUtil;
import org.alfresco.rest.rm.community.base.BaseRMRestTest;
import org.alfresco.rest.rm.community.model.record.Record;
import org.alfresco.rest.v0.RecordsAPI;
import org.alfresco.utility.Utility;
import org.alfresco.utility.constants.UserRole;
import org.alfresco.utility.model.FileModel;
import org.alfresco.utility.model.SiteModel;
import org.alfresco.utility.model.UserModel;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import static org.alfresco.utility.report.log.Step.STEP;
import static org.junit.Assert.assertNotNull;
import static org.springframework.http.HttpStatus.CREATED;
import static org.springframework.test.util.AssertionErrors.assertTrue;
import static org.testng.Assert.fail;
public class InplaceRecordSearchTests extends BaseRMRestTest {
private UserModel siteCollaborator, siteConsumer, nonSiteMember;
private SiteModel privateSite;
private Record uploadedDocRecordbyCollabUser;
private FileModel uploadedDocbyCollabUser;
@Autowired
private RecordsAPI recordsAPI;
@BeforeClass(alwaysRun = true)
public void preConditions() {
STEP("Create RM Site");
createRMSiteIfNotExists();
// And a private collaboration site
privateSite = dataSite.usingAdmin().createPrivateRandomSite();
// And a site collaborator
siteCollaborator = getDataUser().createRandomTestUser();
getDataUser().addUserToSite(siteCollaborator, privateSite, UserRole.SiteCollaborator);
// And a site consumer
siteConsumer = getDataUser().createRandomTestUser();
getDataUser().addUserToSite(siteConsumer, privateSite, UserRole.SiteConsumer);
nonSiteMember = getDataUser().createRandomTestUser();
}
/**
* Given a RM site
* And a private collaboration site
* And a site collaborator
* And a site consumer
* And a user who is not a member of the site
* And a document that isn't a record
* When the collaborator declares it as a record
* Then the collaborator can browse to the record in the document library
* And can find the record using live search
* And can find the record using advanced search
* And the consumer can browse to the record in the document library
* And can find the record using live search
* And can find the record using advanced search
* And the user who is not a member of the site can't find the record using live search
* And can't find the record using advanced search
*/
@Test
public void searchForInplaceRecord() {
// And a document that isn't a record
uploadedDocbyCollabUser = dataContent.usingSite(privateSite)
.usingUser(siteCollaborator)
.createContent(CMISUtil.DocumentType.TEXT_PLAIN);
assertNotNull(uploadedDocbyCollabUser.getNodeRef());
// declare uploadedDocument as record
uploadedDocRecordbyCollabUser = getRestAPIFactory().getFilesAPI(siteCollaborator)
.declareAsRecord(uploadedDocbyCollabUser.getNodeRefWithoutVersion());
assertStatusCode(CREATED);
assertNotNull(uploadedDocRecordbyCollabUser.getId());
STEP("Allow the Document to be index for it to be available");
try
{
Utility.sleep(1000, 40000, () ->
{
JSONObject siteConsumerSearchJson = getSearchApi().liveSearchForDocuments(siteConsumer.getUsername(),
siteConsumer.getPassword(),
uploadedDocbyCollabUser.getName());
assertTrue("Site Consumer not able to find the document.",siteConsumerSearchJson.getJSONArray("items").length() != 0);
});
}
catch (InterruptedException e)
{
fail("InterruptedException received while waiting for results.");
}
try
{
Utility.sleep(1000, 40000, () ->
{
JSONObject siteCollaboratorSearchJson = getSearchApi().liveSearchForDocuments(siteCollaborator.getUsername(),
siteCollaborator.getPassword(),
uploadedDocbyCollabUser.getName());
assertTrue("Site Collaborator not able to find the document.",siteCollaboratorSearchJson.getJSONArray("items").length() != 0);
});
}
catch (InterruptedException e)
{
fail("InterruptedException received while waiting for results.");
}
JSONObject nonSiteMemberSearchJson = getSearchApi().liveSearchForDocuments(nonSiteMember.getUsername(),
nonSiteMember.getPassword(),
uploadedDocbyCollabUser.getName());
assertTrue("Non Site Member is able to access restricted document.",nonSiteMemberSearchJson.getJSONArray("items").isEmpty());
}
/**
* Given @see {@link #searchForInplaceRecord()}
* When the collaboration user hides the record in the collaboration site
* Then the collaborator can not browse to the record in the document library
* And can't find the record using live search
* And can't find the record using advanced search
*/
@Test(dependsOnMethods = {"searchForInplaceRecord"})
public void usersCantFindRecordAfterHide() {
recordsAPI.hideRecord(siteCollaborator.getUsername(),siteCollaborator.getPassword(),uploadedDocRecordbyCollabUser.getId());
JSONObject siteCollaboratorSearchJson = getSearchApi().liveSearchForDocuments(siteCollaborator.getUsername(),
siteCollaborator.getPassword(),
uploadedDocbyCollabUser.getName());
assertTrue("Site Collaborator able to find the document after it is hidden.",siteCollaboratorSearchJson.getJSONArray("items").isEmpty());
}
@AfterClass
public void tearDown() {
// clean-up collab site
dataSite.usingAdmin().deleteSite(privateSite);
// clean-up users siteCollaborator, siteConsumer, nonSiteMember
dataUser.deleteUser(siteCollaborator);
dataUser.deleteUser(siteConsumer);
dataUser.deleteUser(nonSiteMember);
}
}

View File

@@ -0,0 +1,539 @@
/*
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2022 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
* If the software was purchased under a paid Alfresco license, the terms of
* the paid license agreement will prevail. Otherwise, the software is
* provided under the following open source license terms:
* -
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* -
* Alfresco is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
* -
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
* #L%
*/
package org.alfresco.rest.rm.community.records;
import org.alfresco.dataprep.CMISUtil;
import org.alfresco.rest.core.v0.BaseAPI;
import org.alfresco.rest.rm.community.base.BaseRMRestTest;
import org.alfresco.rest.rm.community.model.record.RecordContent;
import org.alfresco.rest.rm.community.model.recordcategory.RecordCategory;
import org.alfresco.rest.rm.community.model.recordcategory.RecordCategoryChild;
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChild;
import org.alfresco.rest.rm.community.requests.gscore.api.UnfiledContainerAPI;
import org.alfresco.rest.v0.RMRolesAndActionsAPI;
import org.alfresco.rest.v0.RecordsAPI;
import org.alfresco.rest.v0.SearchAPI;
import org.alfresco.utility.Utility;
import org.alfresco.utility.model.UserModel;
import org.apache.http.HttpResponse;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import org.json.JSONArray;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.HashMap;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import static org.alfresco.rest.rm.community.base.TestData.ELECTRONIC_RECORD_NAME;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentAlias.UNFILED_RECORDS_CONTAINER_ALIAS;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.CONTENT_TYPE;
import static org.alfresco.rest.rm.community.model.user.UserPermissions.*;
import static org.alfresco.rest.rm.community.util.CommonTestUtils.generateTestPrefix;
import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.createTempFile;
import static org.alfresco.utility.report.log.Step.STEP;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.fail;
import static org.testng.Assert.assertTrue;
/**
* Tests the search of records in Records Search page
* @author Kavit Shah
*/
public class SearchRecordsTests extends BaseRMRestTest {
private Optional<UserModel> nonRmSiteUser, rm_user_search, rm_manager, rm_admin_search;
/** The default password used when creating test users. */
public static final String ROLE_RM_MANAGER = "RecordsManager";
private final String TEST_PREFIX = generateTestPrefix(SearchRecordsTests.class);
private final String CATEGORY_ALL = TEST_PREFIX + "everybody's category";
private final String FOLDER_SEARCH = TEST_PREFIX + "basic search folder";
private final String FOLDER_ADMIN_ONLY = TEST_PREFIX + "rm admin category";
private final String CATEGORY_ADMIN_ONLY = TEST_PREFIX + "rm admin category";
public static final String ROLE_RM_USER = "User";
public static final String ADMIN = "Administrator";
private final String ELECTRONIC_RECORD = TEST_PREFIX + " Electronic";
private final String UNFILED_ELECTRONIC_RECORD = TEST_PREFIX + " Unfiled Electronic";
private final String NON_ELECTRONIC_RECORD = TEST_PREFIX + " Non-Electronic";
private final String ADMIN_ELECTRONIC_RECORD = TEST_PREFIX + " admin Electronic";
public static final String TITLE = "Title";
public static final String DESCRIPTION = "Description";
public static final String TEST_CONTENT = "This is some test content";
private RecordCategory categoryAll, category_Admin_Only;
@Autowired
private RMRolesAndActionsAPI rmRolesAndActionsAPI;
@Autowired
private SearchAPI searchAPI;
@Autowired
private RecordsAPI recordsAPI;
@BeforeClass (alwaysRun = true)
public void createRecordsForSearch()
{
createRMSiteIfNotExists();
nonRmSiteUser = Optional.ofNullable(getDataUser().createRandomTestUser());
// create RM manager and RM user
createRMManager();
createRMUser();
createRMAdmin();
categoryAll = createCategoryIfDoesNotExist(CATEGORY_ALL);
createRecordFolderInCategory(FOLDER_SEARCH, categoryAll);
category_Admin_Only = createCategoryIfDoesNotExist(CATEGORY_ADMIN_ONLY);
createRecordFolderInCategory(FOLDER_ADMIN_ONLY,category_Admin_Only);
// upload records in folder in category and in Unfiled Records
uploadElectronicRecordInContainer(ELECTRONIC_RECORD, FOLDER_SEARCH);
createNonElectronicRecordInContainer(NON_ELECTRONIC_RECORD, CATEGORY_ALL, FOLDER_SEARCH);
uploadElectronicRecordInContainer(ADMIN_ELECTRONIC_RECORD, FOLDER_ADMIN_ONLY);
UnfiledContainerChild electronicRecord = UnfiledContainerChild.builder()
.name(UNFILED_ELECTRONIC_RECORD)
.nodeType(CONTENT_TYPE)
.content(RecordContent.builder().mimeType("text/plain").build())
.build();
getRecordsFromUnfiledRecordsContainer(electronicRecord);
}
/**
* Given I have created record category X which contains record folder Y which contains record Z
* And I have selected to display record category id in the search results
* When I issue a record search whose results will contain record X
* Then record X is displayed in the results
* And the record category X's ID is also displayed in search result meta-data for record X
*/
@Test(priority = 1)
public void searchResultsWithRecordCategoryIdentifier() {
AtomicBoolean electronicRecordFound = new AtomicBoolean(false);
AtomicReference<JSONArray> items = new AtomicReference<>();
AtomicBoolean recordCategoryIdentifier = new AtomicBoolean(false);
STEP("Open the record search page and search by the items created");
try {
Utility.sleep(1000, 40000, () -> {
JSONObject searchResult = (searchAPI
.rmSearch(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(),
"rm",
"keywords:" + TEST_PREFIX + "*",
"records/true,undeclared/true,vital/false,folders/false,categories/false,frozen/false,cutoff/false",
"rma:identifier/asc"));
items.set((JSONArray) searchResult.get("items"));
assertFalse("Site Consumer not able to find the document.", ((JSONArray)searchResult.get("items")).isEmpty());
});
}
catch (InterruptedException e) {
fail("InterruptedException received while waiting for results.");
}
STEP("Check that the records from file plan have the record category identifier displayed");
List searchList = IntStream.range(0, items.get().length()).mapToObj(i-> items.get().get(i)).collect(Collectors.toList());
searchList.stream().forEach(x -> {
Map<String, String> reconstructedUtilMap = Arrays.stream(x.toString().split(","))
.map(s -> s.split(":"))
.collect(Collectors.toMap(s -> s[0], s -> s[1]));
if(reconstructedUtilMap.get("\"name\"").contains(TEST_PREFIX + " Electronic")) {
electronicRecordFound.set(true);
}
});
assertFalse("The File Name with the Prefix " + TEST_PREFIX + " as Electronic Record was not found.", !electronicRecordFound.get());
STEP("Change the search filter to return only record folders and record categories");
try {
Utility.sleep(1000, 40000, () -> {
JSONObject searchResult = (searchAPI
.rmSearch(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(),
"rm",
"keywords:" + TEST_PREFIX + "*",
"records/false,undeclared/true,vital/false,folders/true,categories/true,frozen/false,cutoff/false",
"rma:identifier/asc"));
items.set((JSONArray) searchResult.get("items"));
assertFalse("Site Consumer not able to find the document.", ((JSONArray)searchResult.get("items")).isEmpty());
});
}
catch (InterruptedException e) {
fail("InterruptedException received while waiting for results.");
}
STEP("Check that the records folders and categories don't have a record category identifier displayed");
List recordFolderSearchList = IntStream.range(0, items.get().length()).mapToObj(i-> items.get().get(i)).collect(Collectors.toList());
recordFolderSearchList.stream().forEach(x -> {
Map<String, String> reconstructedUtilMap = Arrays.stream(x.toString().split(","))
.map(s -> s.split(":"))
.collect(Collectors.toMap(s -> s[0], s -> s[1]));
if(null != reconstructedUtilMap.get("\"rma_recordCategoryIdentifier\"")) {
recordCategoryIdentifier.set(true);
}
});
assertFalse("Record Category Identifier displayed for " + TEST_PREFIX + ".", recordCategoryIdentifier.get());
}
/**
* User with RM User role can see the records he has permission over and all in Unfiled Records
* <p>
* Given that I am a RM User
* I can see only the records in File Plan I have permission over and all in Unfiled Records
*/
@Test (priority = 2)
public void nonRMUserSearchResults() {
try {
Utility.sleep(1000, 40000, () -> {
List<String> stringList = (searchAPI
.searchForDocumentsAsUser(nonRmSiteUser.get().getUsername(),
nonRmSiteUser.get().getPassword(),
ELECTRONIC_RECORD));
assertFalse("The file with search term " + ELECTRONIC_RECORD + " was found using RM Not Site User "+ nonRmSiteUser.get().getUsername(),getResult(ELECTRONIC_RECORD,stringList));
});
}
catch (InterruptedException e) {
fail("InterruptedException received while waiting for results.");
}
try {
Utility.sleep(1000, 40000, () -> {
List<String> stringList = (searchAPI
.searchForDocumentsAsUser(nonRmSiteUser.get().getUsername(),
nonRmSiteUser.get().getPassword(),
UNFILED_ELECTRONIC_RECORD));
assertFalse("The file with search term " + UNFILED_ELECTRONIC_RECORD + " was not found using RM Not Site User "+ nonRmSiteUser.get().getUsername(),getResult(UNFILED_ELECTRONIC_RECORD,stringList));
});
}
catch (InterruptedException e) {
fail("InterruptedException received while waiting for results.");
}
try {
Utility.sleep(1000, 40000, () -> {
List<String> stringList = (searchAPI
.searchForDocumentsAsUser(nonRmSiteUser.get().getUsername(),
nonRmSiteUser.get().getPassword(),
NON_ELECTRONIC_RECORD));
assertFalse("The file with search term " + NON_ELECTRONIC_RECORD + " was not found using RM Not Site User "+ nonRmSiteUser.get().getUsername(),getResult(NON_ELECTRONIC_RECORD,stringList));
});
}
catch (InterruptedException e) {
fail("InterruptedException received while waiting for results.");
}
try {
Utility.sleep(1000, 40000, () -> {
List<String> stringList = searchAPI
.searchForDocumentsAsUser(nonRmSiteUser.get().getUsername(),
nonRmSiteUser.get().getPassword(),
ADMIN_ELECTRONIC_RECORD);
assertFalse("The file with search term " + ADMIN_ELECTRONIC_RECORD + " was not found using RM Not Site User "+ nonRmSiteUser.get().getUsername(),getResult(ADMIN_ELECTRONIC_RECORD,stringList));
});
}
catch (InterruptedException e) {
fail("InterruptedException received while waiting for results.");
}
}
/**
* User with RM User role can see the records he has permission over and all in Unfiled Records
* <p>
* Given that I am a RM User
* I can see only the records in File Plan I have permission over and all in Unfiled Records
*/
@Test (priority = 3)
public void rmUserSearchResults() {
getRestAPIFactory().getRMUserAPI().addUserPermission(categoryAll.getId(), rm_user_search.get(), PERMISSION_READ_RECORDS);
getRestAPIFactory().getRMUserAPI().addUserPermission(categoryAll.getId(), rm_user_search.get(), PERMISSION_FILE_RECORDS);
try {
Utility.sleep(1000, 40000, () -> {
List<String> stringList = (searchAPI
.searchForDocumentsAsUser(rm_user_search.get().getUsername(),
rm_user_search.get().getPassword(),
ELECTRONIC_RECORD));
assertTrue(getResult(ELECTRONIC_RECORD,stringList),"The file with search term" + ELECTRONIC_RECORD + " was not found using RM User "+ rm_user_search.get().getUsername());
});
}
catch (InterruptedException e) {
fail("InterruptedException received while waiting for results.");
}
try {
Utility.sleep(1000, 40000, () -> {
List<String> stringList = (searchAPI
.searchForDocumentsAsUser(rm_user_search.get().getUsername(),
rm_user_search.get().getPassword(),
UNFILED_ELECTRONIC_RECORD));
assertTrue(getResult(UNFILED_ELECTRONIC_RECORD,stringList),"The file with search term" + UNFILED_ELECTRONIC_RECORD + " was not found using RM User "+ rm_user_search.get().getUsername());
});
}
catch (InterruptedException e) {
fail("InterruptedException received while waiting for results.");
}
try {
Utility.sleep(1000, 40000, () -> {
List<String> stringList = (searchAPI
.searchForDocumentsAsUser(rm_user_search.get().getUsername(),
rm_user_search.get().getPassword(),
NON_ELECTRONIC_RECORD));
assertTrue(getResult(NON_ELECTRONIC_RECORD,stringList),"The file with search term" + NON_ELECTRONIC_RECORD + " was not found using RM User "+ rm_user_search.get().getUsername());
});
}
catch (InterruptedException e) {
fail("InterruptedException received while waiting for results.");
}
try {
Utility.sleep(1000, 40000, () -> {
List<String> stringList = searchAPI
.searchForDocumentsAsUser(rm_user_search.get().getUsername(),
rm_user_search.get().getPassword(),
ADMIN_ELECTRONIC_RECORD);
assertFalse("The file with search term" + ADMIN_ELECTRONIC_RECORD + " was not found using RM User "+ rm_user_search.get().getUsername(),getResult(ADMIN_ELECTRONIC_RECORD,stringList));
});
}
catch (InterruptedException e) {
fail("InterruptedException received while waiting for results.");
}
}
/**
* User with RM Manager role can see the records he has permission over and all in Unfiled Records
* <p>
* Given that I am a RM Manager
* I can see only the records in File Plan I have permission over and all in Unfiled Records
*/
@Test (priority = 4)
public void rmManagerSearchResults() {
getRestAPIFactory().getRMUserAPI().addUserPermission(categoryAll.getId(), rm_manager.get(), PERMISSION_READ_RECORDS);
try {
Utility.sleep(1000, 40000, () -> {
List<String> stringList = (searchAPI
.searchForDocumentsAsUser(rm_manager.get().getUsername(),
rm_manager.get().getPassword(),
ELECTRONIC_RECORD));
assertTrue(getResult(ELECTRONIC_RECORD,stringList),"The file with search term " + ELECTRONIC_RECORD + " was not found using RM manager User "+ rm_manager.get().getUsername());
});
}
catch (InterruptedException e) {
fail("InterruptedException received while waiting for results.");
}
try {
Utility.sleep(1000, 40000, () -> {
List<String> stringList = (searchAPI
.searchForDocumentsAsUser(rm_manager.get().getUsername(),
rm_manager.get().getPassword(),
UNFILED_ELECTRONIC_RECORD));
assertTrue(getResult(UNFILED_ELECTRONIC_RECORD,stringList),"The file with search term " + UNFILED_ELECTRONIC_RECORD + " was not found using RM manager User "+ rm_manager.get().getUsername());
});
}
catch (InterruptedException e) {
fail("InterruptedException received while waiting for results.");
}
try {
Utility.sleep(1000, 40000, () -> {
List<String> stringList = (searchAPI
.searchForDocumentsAsUser(rm_manager.get().getUsername(),
rm_manager.get().getPassword(),
NON_ELECTRONIC_RECORD));
assertTrue(getResult(NON_ELECTRONIC_RECORD,stringList),"The file with search term " + NON_ELECTRONIC_RECORD + " was not found using RM manager User "+ rm_manager.get().getUsername());
});
}
catch (InterruptedException e) {
fail("InterruptedException received while waiting for results.");
}
try {
Utility.sleep(1000, 40000, () -> {
List<String> stringList = searchAPI
.searchForDocumentsAsUser(rm_manager.get().getUsername(),
rm_manager.get().getPassword(),
ADMIN_ELECTRONIC_RECORD);
assertFalse("The file with search term" + ADMIN_ELECTRONIC_RECORD + " was found using RM manager User "+ rm_manager.get().getUsername(),getResult(ADMIN_ELECTRONIC_RECORD,stringList));
});
}
catch (InterruptedException e) {
fail("InterruptedException received while waiting for results.");
}
}
/**
* User with RM Administrator role can see all the records
*
* Given that I am a RM Administrator
* I can see all the records in File Plan and Unfiled Records through RM Search and Advanced Search
*/
@Test(priority = 5)
public void rmAdminSearchResults() {
try {
Utility.sleep(1000, 40000, () -> {
List<String> stringList = (searchAPI
.searchForDocumentsAsUser(rm_admin_search.get().getUsername(),
rm_admin_search.get().getPassword(),
ELECTRONIC_RECORD));
assertTrue(getResult(ELECTRONIC_RECORD,stringList),"The file with search term " + ELECTRONIC_RECORD + " was not found using RM Admin User "+ rm_admin_search.get().getUsername());
});
}
catch (InterruptedException e) {
fail("InterruptedException received while waiting for results.");
}
try {
Utility.sleep(1000, 40000, () -> {
List<String> stringList = (searchAPI
.searchForDocumentsAsUser(rm_admin_search.get().getUsername(),
rm_admin_search.get().getPassword(),
UNFILED_ELECTRONIC_RECORD));
assertTrue(getResult(UNFILED_ELECTRONIC_RECORD,stringList),"The file with search term " + UNFILED_ELECTRONIC_RECORD + " was not found using RM Admin User "+ rm_admin_search.get().getUsername());
});
}
catch (InterruptedException e) {
fail("InterruptedException received while waiting for results.");
}
try {
Utility.sleep(1000, 40000, () -> {
List<String> stringList = (searchAPI
.searchForDocumentsAsUser(rm_admin_search.get().getUsername(),
rm_admin_search.get().getPassword(),
NON_ELECTRONIC_RECORD));
assertTrue(getResult(NON_ELECTRONIC_RECORD,stringList),"The file with search term " + NON_ELECTRONIC_RECORD + " was not found using RM Admin User "+ rm_admin_search.get().getUsername());
});
}
catch (InterruptedException e) {
fail("InterruptedException received while waiting for results.");
}
}
private void createRMManager() {
// create RM manager
rm_manager = Optional.ofNullable(getDataUser().createRandomTestUser());
rmRolesAndActionsAPI.assignRoleToUser(
getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(),
rm_manager.get().getUsername(),
ROLE_RM_MANAGER
);
}
private void createRMUser() {
// create RM manager
rm_user_search = Optional.ofNullable(getDataUser().createRandomTestUser());
rmRolesAndActionsAPI.assignRoleToUser(
getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(),
rm_user_search.get().getUsername(),
ROLE_RM_USER
);
}
private void createRMAdmin() {
// create RM Admin
rm_admin_search = Optional.ofNullable(getDataUser().createRandomTestUser());
rmRolesAndActionsAPI.assignRoleToUser(
getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(),
rm_admin_search.get().getUsername(),
ADMIN
);
}
private RecordCategory createCategoryIfDoesNotExist(String CATEGORY_ALL) {
return createRootCategory(getDataUser().usingAdmin().getAdminUser(), CATEGORY_ALL);
}
private RecordCategoryChild createRecordFolderInCategory(String FOLDER_SEARCH, RecordCategory recordCategory) {
return createFolder(getDataUser().usingAdmin().getAdminUser(), recordCategory.getId(), FOLDER_SEARCH);
}
private void uploadElectronicRecordInContainer(String electronic_record, String folder_search) {
recordsAPI.uploadElectronicRecord(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(),
getDefaultElectronicRecordProperties(electronic_record), folder_search, CMISUtil.DocumentType.TEXT_PLAIN);
}
protected HttpResponse createNonElectronicRecordInContainer(String name, String categoryName, String folderName) {
Map<BaseAPI.RMProperty, String> defaultProperties = new HashMap<>();
defaultProperties.put(BaseAPI.RMProperty.NAME, name);
defaultProperties.put(BaseAPI.RMProperty.TITLE, TITLE);
defaultProperties.put(BaseAPI.RMProperty.DESCRIPTION, DESCRIPTION);
return recordsAPI.createNonElectronicRecord(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(), defaultProperties, categoryName, folderName);
}
public Map<BaseAPI.RMProperty, String> getDefaultElectronicRecordProperties(String recordName) {
Map<BaseAPI.RMProperty, String> defaultProperties = new HashMap<>();
defaultProperties.put(BaseAPI.RMProperty.NAME, recordName);
defaultProperties.put(BaseAPI.RMProperty.TITLE, TITLE);
defaultProperties.put(BaseAPI.RMProperty.DESCRIPTION, DESCRIPTION);
defaultProperties.put(BaseAPI.RMProperty.CONTENT, TEST_CONTENT);
return defaultProperties;
}
@AfterClass(alwaysRun = true)
public void standardSearchTeardown() {
// delete categories
deleteRecordCategory(categoryAll.getId());
deleteRecordCategory(category_Admin_Only.getId());
// delete users
Optional.of(nonRmSiteUser).ifPresent(x -> getDataUser().deleteUser(x.get()));
Optional.of(rm_user_search).ifPresent(x -> getDataUser().deleteUser(x.get()));
Optional.of(rm_manager).ifPresent(x -> getDataUser().deleteUser(x.get()));
Optional.of(rm_admin_search).ifPresent(x -> getDataUser().deleteUser(x.get()));
}
private boolean getResult(String partialRecordName, List<String> searchResults) {
if(null != searchResults) {
for (String searchResult : searchResults) {
if (searchResult.startsWith(partialRecordName)) {
return true;
}
}
}
return false;
}
private Object[][] getRecordsFromUnfiledRecordsContainer(UnfiledContainerChild electronicRecord)
{
UnfiledContainerAPI unfiledContainersAPI = getRestAPIFactory().getUnfiledContainersAPI();
return new String[][] {
{ unfiledContainersAPI.uploadRecord(electronicRecord, UNFILED_RECORDS_CONTAINER_ALIAS,
createTempFile(ELECTRONIC_RECORD_NAME, ELECTRONIC_RECORD_NAME)).getId()}
};
}
}

View File

@@ -0,0 +1,211 @@
/*
* #%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.smoke;
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.audit.AuditEntry;
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.rest.v0.service.RMAuditService;
import org.alfresco.test.AlfrescoTest;
import org.alfresco.utility.model.UserModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.testng.annotations.Test;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import static org.alfresco.rest.core.v0.BaseAPI.NODE_PREFIX;
import static org.alfresco.rest.core.v0.BaseAPI.RM_SITE_ID;
import static org.alfresco.rest.rm.community.model.audit.AuditEvents.DELETE_PERSON;
import static org.alfresco.rest.rm.community.model.audit.AuditEvents.LOGIN_SUCCESSFUL;
import static org.alfresco.rest.rm.community.records.SearchRecordsTests.*;
import static org.alfresco.rest.rm.community.util.CommonTestUtils.generateTestPrefix;
import static org.junit.Assert.assertFalse;
import static org.testng.AssertJUnit.assertTrue;
/**
* Audit Access tests
* @author Kavit Shah
*/
public class AuditAccessTests extends BaseRMRestTest {
private Optional<UserModel> deletedUser;
private final String TEST_PREFIX = generateTestPrefix(AuditAccessTests.class);
private static final String DELETE_USER_EVENT = "Delete User";
private final String record1 = TEST_PREFIX + "RM-2967 uploaded record";
private final String classifiedRecord = TEST_PREFIX + "RM-2967 classified record";
private final String folderName = TEST_PREFIX + "RM-2967 folder";
private final String categoryName = TEST_PREFIX + "RM-2967 category";
private final String editedCategoryName = "edited " + categoryName;
private final String editedFolderName = "edited " + folderName;
private final String editedRecordName = "edited " + record1;
private final String login_successfull = "Login Successful";
private RecordCategory categoryAll;
@Autowired
private RMRolesAndActionsAPI rmRolesAndActionsAPI;
@Autowired
private RecordsAPI recordsAPI;
@Autowired
private RMAuditService rmAuditService;
@Test(priority = 1)
@AlfrescoTest(jira = "RM-2967")
public void deleteRMUsersShowFullAuditTest() {
createTestPrecondition();
updateCategoryMetadata();
updateFolderMetadata();
updateRecordMetadata();
// delete record category and folder with rm_admin_deleted
rmRolesAndActionsAPI.deleteAllItemsInContainer(deletedUser.get().getUsername(), deletedUser.get().getPassword(),
RM_SITE_ID, editedFolderName);
rmRolesAndActionsAPI.deleteAllItemsInContainer(deletedUser.get().getUsername(), deletedUser.get().getPassword(),
RM_SITE_ID, editedCategoryName);
// delete the user
Optional.of(deletedUser).ifPresent(x -> getDataUser().deleteUser(x.get()));
//check for RM-5235 fix
List<AuditEntry> auditEntries = rmAuditService.getAuditEntriesFilteredByEvent(getDataUser().usingAdmin().getAdminUser(),
DELETE_PERSON);
assertTrue("Delete user event not found in the audit log.", auditEntries.stream().anyMatch(
auditEntry -> auditEntry.getEvent().equals(DELETE_USER_EVENT)));
}
@Test(priority = 2)
public void filterEventsByLoginSuccessful()
{
createRMSiteIfNotExists();
List<AuditEntry> auditEntries = rmAuditService.getAuditEntriesFilteredByEvent(getDataUser().usingAdmin().getAdminUser(),
LOGIN_SUCCESSFUL);
assertFalse("Audit results should contain at least one Login Successful event",
auditEntries.isEmpty());
assertTrue("Audit results contain only Login Successful events",
auditEntries.stream()
.allMatch(e -> e.getEvent().startsWith(LOGIN_SUCCESSFUL.toString()) || e.getEvent().startsWith(login_successfull)));
}
/**
* Creates the required precondition for the test
* <p/>
* See Precondition in current class JavaDoc
*/
private void createTestPrecondition() {
createRMSiteIfNotExists();
// create "rm deleted user" user if it does not exist and assign it to RM Administrator role
createDeletedUser();
// create category and folder
categoryAll = createCategoryIfDoesNotExist(categoryName,deletedUser.get());
createRecordFolderInCategory(folderName,categoryAll,deletedUser.get());
// upload an electronic record
recordsAPI.uploadElectronicRecord(deletedUser.get().getUsername(), deletedUser.get().getPassword(), getDefaultElectronicRecordProperties(record1), folderName, CMISUtil.DocumentType.TEXT_PLAIN);
// upload another electronic record and classify it
recordsAPI.uploadElectronicRecord(deletedUser.get().getUsername(), deletedUser.get().getPassword(), getDefaultElectronicRecordProperties(classifiedRecord), folderName, CMISUtil.DocumentType.TEXT_PLAIN);
}
private void createDeletedUser() {
// create Deleted User
deletedUser = Optional.ofNullable(getDataUser().createRandomTestUser());
rmRolesAndActionsAPI.assignRoleToUser(
getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(),
deletedUser.get().getUsername(),
ADMIN
);
}
private void updateCategoryMetadata() {
HashMap<BaseAPI.RMProperty, String> categoryProperties = new HashMap<>();
categoryProperties.put(BaseAPI.RMProperty.NAME, editedCategoryName);
categoryProperties.put(BaseAPI.RMProperty.TITLE, "edited " + TITLE);
categoryProperties.put(BaseAPI.RMProperty.DESCRIPTION, "edited " + DESCRIPTION);
// edit some category's properties
String categoryNodeRef = NODE_PREFIX + rmRolesAndActionsAPI.getItemNodeRef(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(), "/" + categoryName);
rmRolesAndActionsAPI.updateMetadata(deletedUser.get().getUsername(), deletedUser.get().getPassword(), categoryNodeRef, categoryProperties);
}
private void updateFolderMetadata() {
HashMap<BaseAPI.RMProperty, String> folderProperties = new HashMap<>();
folderProperties.put(BaseAPI.RMProperty.NAME, editedFolderName);
folderProperties.put(BaseAPI.RMProperty.TITLE, "edited " + TITLE);
folderProperties.put(BaseAPI.RMProperty.DESCRIPTION, "edited " + DESCRIPTION);
// edit some folder's properties
String folderNodeRef = NODE_PREFIX + rmRolesAndActionsAPI.getItemNodeRef(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(), "/" + editedCategoryName + "/" + folderName);
rmRolesAndActionsAPI.updateMetadata(deletedUser.get().getUsername(), deletedUser.get().getPassword(), folderNodeRef, folderProperties);
}
private void updateRecordMetadata() {
HashMap<BaseAPI.RMProperty, String> recordProperties = new HashMap<>();
recordProperties.put(BaseAPI.RMProperty.NAME, editedRecordName);
recordProperties.put(BaseAPI.RMProperty.TITLE, "edited " + TITLE);
recordProperties.put(BaseAPI.RMProperty.AUTHOR, "edited author");
recordProperties.put(BaseAPI.RMProperty.DESCRIPTION, "edited " + DESCRIPTION);
// edit some record's properties
String recordName = recordsAPI.getRecordFullName(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(), editedFolderName, record1);
String recordNodeRef = NODE_PREFIX + rmRolesAndActionsAPI.getItemNodeRef(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(), "/" + editedCategoryName + "/" + editedFolderName + "/" + recordName);
rmRolesAndActionsAPI.updateMetadata(deletedUser.get().getUsername(), deletedUser.get().getPassword(), recordNodeRef, recordProperties);
}
private RecordCategory createCategoryIfDoesNotExist(String CATEGORY_ALL, UserModel deletedUser) {
return createRootCategory(deletedUser, CATEGORY_ALL);
}
private RecordCategoryChild createRecordFolderInCategory(String FOLDER_SEARCH, RecordCategory recordCategory, UserModel deletedUser) {
return createFolder(deletedUser, recordCategory.getId(), FOLDER_SEARCH);
}
private 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;
}
}

View File

@@ -0,0 +1,104 @@
/*
* #%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.smoke;
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.rules.ActionsOnRule;
import org.alfresco.rest.rm.community.model.rules.RuleDefinition;
import org.alfresco.rest.rm.community.requests.gscore.api.RecordFolderAPI;
import org.alfresco.rest.v0.RMRolesAndActionsAPI;
import org.alfresco.rest.v0.RulesAPI;
import org.alfresco.test.AlfrescoTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.testng.annotations.Test;
import java.util.Collections;
import static org.alfresco.rest.core.v0.BaseAPI.NODE_PREFIX;
import static org.alfresco.rest.rm.community.base.TestData.ELECTRONIC_RECORD_NAME;
import static org.alfresco.rest.rm.community.base.TestData.NONELECTRONIC_RECORD_NAME;
import static org.alfresco.rest.rm.community.util.CommonTestUtils.generateTestPrefix;
import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.*;
import static org.alfresco.utility.data.RandomData.getRandomName;
import static org.alfresco.utility.report.log.Step.STEP;
import static org.springframework.http.HttpStatus.*;
public class BasicRulesIntegrationTests extends BaseRMRestTest {
@Autowired
private RMRolesAndActionsAPI rmRolesAndActionsAPI;
private final static String title = "Rule to complete";
private final static String description = "Rule to describe";
private final String TEST_PREFIX = generateTestPrefix(CreateCategoriesTests.class);
private final String RM_ADMIN = TEST_PREFIX + "rm_admin";
@Autowired
private RulesAPI rulesAPI;
@Test
@AlfrescoTest(jira = "RM-2794")
public void basicRulesIntegration() {
STEP("Create the RM site if doesn't exist");
createRMSiteIfNotExists();
STEP("Create RM Admin user");
rmRolesAndActionsAPI.createUserAndAssignToRole(getAdminUser().getUsername(), getAdminUser().getPassword(), RM_ADMIN,
getAdminUser().getPassword(),
"Administrator");
STEP("Create record categories and record folders");
RecordCategory Category = createRootCategory(getRandomName("recordCategory"));
String recordFolder1 = createRecordFolder(Category.getId(), getRandomName("recFolder")).getId();
//create a rule for completing a record
RuleDefinition ruleDefinition = RuleDefinition.createNewRule().title("name").description("description1")
.applyToChildren(true).title(title)
.actions(Collections.singletonList(ActionsOnRule.COMPLETE_RECORD.getActionValue()));
rulesAPI.createRule(getAdminUser().getUsername(), getAdminUser().getPassword(), NODE_PREFIX + Category.getId(), ruleDefinition);
RecordFolderAPI recordFolderAPI = getRestAPIFactory().getRecordFolderAPI();
//create two electronic record in record folder
String electronicRecordId1 = createElectronicRecord(recordFolder1, ELECTRONIC_RECORD_NAME).getId();
String electronicRecordId2 = createElectronicRecord(recordFolder1, ELECTRONIC_RECORD_NAME).getId();
assertStatusCode(CREATED);
// Update the rules for record Category
rulesAPI.updateRule(getAdminUser().getUsername(), getAdminUser().getPassword(),
NODE_PREFIX + Category.getId(), ruleDefinition.description("description").id(description));
//Delete the root category and rules
deleteRecordCategory(Category.getId());
rulesAPI.deleteAllRulesOnContainer(getAdminUser().getUsername(), getAdminUser().getPassword(), NODE_PREFIX + Category.getId());
}
}

View File

@@ -0,0 +1,125 @@
/*
* #%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.smoke;
import org.alfresco.rest.rm.community.base.BaseRMRestTest;
import org.alfresco.rest.rm.community.model.fileplan.FilePlan;
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.test.AlfrescoTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentAlias.FILE_PLAN_ALIAS;
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.junit.Assert.assertFalse;
import static org.springframework.http.HttpStatus.OK;
import static org.testng.Assert.assertEquals;
public class CreateCategoriesTests extends BaseRMRestTest {
@Autowired
private RMRolesAndActionsAPI rmRolesAndActionsAPI;
private RecordCategory rootCategory;
private final String TEST_PREFIX = generateTestPrefix(CreateCategoriesTests.class);
private final String RM_ADMIN = TEST_PREFIX + "rm_admin";
private RecordCategory Category1;
private RecordCategory Category2;
private RecordCategory SubCategory1;
private RecordCategory SubCategory2;
@BeforeClass(alwaysRun = true)
public void preconditionForCreateCategoriesTests()
{
STEP("Create the RM site if doesn't exist");
createRMSiteIfNotExists();
STEP("Create RM Admin user");
rmRolesAndActionsAPI.createUserAndAssignToRole(getAdminUser().getUsername(), getAdminUser().getPassword(), RM_ADMIN,
getAdminUser().getPassword(),
"Administrator");
STEP("Create two category");
Category1 = createRootCategory(getRandomName("Category1"));
Category2= createRootCategory(getRandomName("Category2"));
STEP("Create Sub category");
RecordCategoryChild subCategory1 = createRecordCategory(Category1.getId(), getRandomName("subCategory1"));
RecordCategoryChild subCategory2 = createRecordCategory(Category2.getId(), getRandomName("subCategory2"));
}
@Test @AlfrescoTest(jira = "RM-2756")
public void createCategories() throws Exception {
FilePlan filePlan = getRestAPIFactory().getFilePlansAPI().getFilePlan(FILE_PLAN_ALIAS);
STEP("copy category 1 to File Plan.");
getRestAPIFactory().getNodeAPI(toContentModel(Category1.getId())).copy(createBodyForMoveCopy(filePlan.getId()));
STEP("copy category 1 to category 2");
getRestAPIFactory().getNodeAPI(toContentModel(Category1.getId())).copy(createBodyForMoveCopy(Category2.getId()));
String categoryName = "Category name " + getRandomAlphanumeric();
String categoryTitle = "Category title " + getRandomAlphanumeric();
// Create the root record category
RecordCategory Category1 = createRootCategory(categoryName, categoryTitle);
String newCategoryName = "Rename " + categoryName;
// Build the properties which will be updated
RecordCategory recordCategoryUpdated = Category1.builder().name(newCategoryName).build();
// Update the record category
RecordCategory renamedRecordCategory = getRestAPIFactory().getRecordCategoryAPI().updateRecordCategory(recordCategoryUpdated,Category1.getId());
// Verify the status code
assertStatusCode(OK);
// verify renamed component and editTitle component still has this parent
assertEquals(renamedRecordCategory.getParentId(), filePlan.getId());
STEP("move category 1 edited copy to File Plan");
getRestAPIFactory().getNodeAPI(toContentModel(renamedRecordCategory.getId())).move(createBodyForMoveCopy(filePlan.getId()));
assertStatusCode(OK);
// delete All the categories
deleteRecordCategory(Category1.getId());
deleteRecordCategory(Category2.getId());
}
}

View File

@@ -0,0 +1,147 @@
/*
* #%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.smoke;
import org.alfresco.rest.rm.community.base.BaseRMRestTest;
import org.alfresco.rest.rm.community.model.common.ReviewPeriod;
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.recordfolder.RecordFolder;
import org.alfresco.rest.rm.community.model.recordfolder.RecordFolderProperties;
import org.alfresco.rest.rm.community.requests.gscore.api.RecordCategoryAPI;
import org.alfresco.rest.rm.community.requests.gscore.api.RecordFolderAPI;
import org.alfresco.rest.v0.RMRolesAndActionsAPI;
import org.alfresco.test.AlfrescoTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
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.*;
public class CreateFoldersTests extends BaseRMRestTest {
@Autowired
private RMRolesAndActionsAPI rmRolesAndActionsAPI;
private final String TEST_PREFIX = generateTestPrefix(CreateCategoriesTests.class);
private final String RM_ADMIN = TEST_PREFIX + "rm_admin";
private RecordCategory Category1;
private RecordCategory Category2;
private RecordCategoryChild recordCategoryChild;
@BeforeClass(alwaysRun = true)
public void preconditionForCreateFolderTests() {
STEP("Create the RM site if doesn't exist");
createRMSiteIfNotExists();
STEP("Create RM Admin user");
rmRolesAndActionsAPI.createUserAndAssignToRole(getAdminUser().getUsername(), getAdminUser().getPassword(), RM_ADMIN,
getAdminUser().getPassword(),
"Administrator");
STEP("Create two category");
Category1 = createRootCategory(getRandomName("Category1"));
Category2 = createRootCategory(getRandomName("Category2"));
// Create a record folder inside the category 1
recordCategoryChild = createRecordFolder(Category1.getId(), getRandomName("recFolder"));
}
@Test
@AlfrescoTest(jira = "RM-2757")
public void createFolders() throws Exception {
// Create record category first
String folderDescription = "The folder description is updated" + getRandomAlphanumeric();
String folderName = "The folder name is updated" + getRandomAlphanumeric();
String folderTitle = "Update title " + getRandomAlphanumeric();
String location = "Location "+ getRandomAlphanumeric();
// Create the record folder properties to update
RecordFolder recordFolder = RecordFolder.builder()
.name(folderName)
.properties(RecordFolderProperties.builder()
.title(folderTitle)
.description(folderDescription)
.vitalRecordIndicator(true)
.reviewPeriod(new ReviewPeriod("month","1"))
.location(location)
.build())
.build();
// Update the record folder
RecordFolder updatedRecordFolder = getRestAPIFactory().getRecordFolderAPI().updateRecordFolder(recordFolder, recordCategoryChild.getId());
// Check the Response Status Code
assertStatusCode(OK);
STEP("copy updated Record in category 1 and category 2");
getRestAPIFactory().getNodeAPI(toContentModel(updatedRecordFolder.getId())).copy(createBodyForMoveCopy(Category1.getId()));
//assertStatusCode(OK);
getRestAPIFactory().getNodeAPI(toContentModel(updatedRecordFolder.getId())).copy(createBodyForMoveCopy(Category2.getId()));
//assertStatusCode(OK);
// Delete the Updated folder
RecordFolderAPI recordFolderAPI = getRestAPIFactory().getRecordFolderAPI();
String recordFolderId = updatedRecordFolder.getId();
recordFolderAPI.deleteRecordFolder(recordFolderId);
// Check the response status code
assertStatusCode(NO_CONTENT);
// Check the record folder is not found
recordFolderAPI.getRecordFolder(recordFolderId);
// Check the response status code
assertStatusCode(NOT_FOUND);
STEP("move updated Record from category 1 to category 2");
getRestAPIFactory().getNodeAPI(toContentModel(updatedRecordFolder.getId())).move(createBodyForMoveCopy(Category2.getId()));
// move category 2 to category 1
getRestAPIFactory().getNodeAPI(toContentModel(Category2.getId())).move(createBodyForMoveCopy(Category1.getId()));
// Delete the record category
RecordCategoryAPI recordCategoryAPI = getRestAPIFactory().getRecordCategoryAPI();
String recordCategoryId = Category1.getId();
recordCategoryAPI.deleteRecordCategory(recordCategoryId);
// Verify the status code
assertStatusCode(NO_CONTENT);
}
}

View File

@@ -0,0 +1,122 @@
/*
* #%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.smoke;
import lombok.Getter;
import org.alfresco.dataprep.CMISUtil;
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.rm.community.model.rules.ActionsOnRule;
import org.alfresco.rest.rm.community.model.rules.RuleDefinition;
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChildEntry;
import org.alfresco.rest.rm.community.requests.gscore.api.UnfiledContainerAPI;
import org.alfresco.rest.v0.RulesAPI;
import org.alfresco.test.AlfrescoTest;
import org.alfresco.utility.data.DataContent;
import org.alfresco.utility.data.DataSite;
import org.alfresco.utility.data.DataUserAIS;
import org.alfresco.utility.model.FileModel;
import org.alfresco.utility.model.FolderModel;
import org.alfresco.utility.model.SiteModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import static lombok.AccessLevel.PROTECTED;
import static org.alfresco.rest.core.v0.BaseAPI.NODE_PREFIX;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentAlias.UNFILED_RECORDS_CONTAINER_ALIAS;
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 DeclareDocsAsRecordsOnUpdateRuleNewVersionTests extends BaseRMRestTest {
@Autowired
private DataSite dataSite;
private SiteModel publicSite;
private RecordCategory recordCategory;
@Autowired
private RulesAPI rulesAPI;
@Autowired
protected DataContent dataContent;
@Autowired
@Getter(value = PROTECTED)
protected DataUserAIS dataUser;
private final static String title = "Rule to convert document as record";
@BeforeClass (alwaysRun = true)
public void setUp()
{
publicSite = dataSite.usingAdmin().createPublicRandomSite();
recordCategory = createRootCategory(getRandomName("recordCategory"));
}
@Test
@AlfrescoTest(jira = "RM-1521")
public void declareDocsAsRecordsOnUpdateRuleNewVersion() {
FolderModel testFolder;
STEP("Create test collaboration site to store documents in.");
publicSite = dataSite.usingAdmin().createPublicRandomSite();
STEP("Create a record folder with a DECLARE_AS_RECORD");
RecordCategoryChild folderWithRule = createFolder(recordCategory.getId(), getRandomName("recordFolder"));
RuleDefinition ruleDefinition = RuleDefinition.createNewRule().title("name").description("description")
.applyToChildren(true)
.actions(Collections.singletonList(ActionsOnRule.DECLARE_AS_RECORD.getActionValue()));
rulesAPI.createRule(getAdminUser().getUsername(), getAdminUser().getPassword(), NODE_PREFIX + folderWithRule.getId(), ruleDefinition);
STEP("Create a document in the collaboration site");
FileModel testFile = dataContent.usingSite(publicSite)
.usingAdmin()
.createContent(CMISUtil.DocumentType.TEXT_PLAIN);
assertStatusCode(CREATED);
// verify the declared record is in Unfilled Records folder
UnfiledContainerAPI unfiledContainersAPI = getRestAPIFactory().getUnfiledContainersAPI();
List<UnfiledContainerChildEntry> matchingRecords = unfiledContainersAPI.getUnfiledContainerChildren(UNFILED_RECORDS_CONTAINER_ALIAS)
.getEntries()
.stream()
.filter(e -> e.getEntry().getId().equals(testFile.getNodeRefWithoutVersion()))
.collect(Collectors.toList());
//delete rm items
deleteRecordCategory(recordCategory.getId());
STEP("Delete the record.");
//delete created collaboration site
dataSite.deleteSite(publicSite);
}
}

View File

@@ -0,0 +1,238 @@
/*
* #%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.smoke;
import org.alfresco.dataprep.CMISUtil;
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.rm.community.model.recordfolder.RecordFolderCollection;
import org.alfresco.rest.rm.community.model.user.UserRoles;
import org.alfresco.rest.v0.RecordCategoriesAPI;
import org.alfresco.rest.v0.service.RoleService;
import org.alfresco.test.AlfrescoTest;
import org.alfresco.utility.Utility;
import org.alfresco.utility.data.DataContent;
import org.alfresco.utility.data.DataSite;
import org.alfresco.utility.model.FileModel;
import org.alfresco.utility.model.FileType;
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.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import java.util.concurrent.atomic.AtomicReference;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentAlias.UNFILED_RECORDS_CONTAINER_ALIAS;
import static org.alfresco.rest.rm.community.model.user.UserPermissions.PERMISSION_FILING;
import static org.alfresco.rest.rm.community.util.CommonTestUtils.generateTestPrefix;
import static org.alfresco.rest.rm.community.utils.CoreUtil.toContentModel;
import static org.alfresco.utility.report.log.Step.STEP;
import static org.springframework.test.util.AssertionErrors.assertTrue;
import static org.testng.Assert.*;
public class FileAsRecordTests extends BaseRMRestTest {
private static final String CATEGORY_MANAGER = "catManager" + generateTestPrefix(FileAsRecordTests.class);
private static final String CATEGORY_ADMIN = "catAdmin" + generateTestPrefix(FileAsRecordTests.class);
private static final String FOLDER_MANAGER = "recordFolder" + generateTestPrefix(FileAsRecordTests.class);
private static final String FOLDER_ADMIN = "recordFolder" + generateTestPrefix(FileAsRecordTests.class);
private UserModel nonRMuser,rmManager;
private SiteModel testSite;
private FileModel document, documentDeclared;
private RecordCategory category_manager, category_admin;
private RecordCategoryChild folder_admin, folder_manager ;
@Autowired
private DataSite dataSite;
@Autowired
private DataContent dataContent;
@Autowired
private RoleService roleService;
@Autowired
private RecordCategoriesAPI recordCategoriesAPI;
/**
* Create preconditions:
* <pre>
* 1. RM site is created
* 2. Two users: user without RM role and a user with RM manager role
* 3. Two Record categories with one folder each
* 4. User with RM MANAGER role has Filling permission over one category
* </pre>
*/
@BeforeClass(alwaysRun = true)
public void preconditionForFileAsRecordRecordTests()
{
STEP("Create the RM site if doesn't exist");
createRMSiteIfNotExists();
STEP("Create a user");
nonRMuser = dataUser.createRandomTestUser("testUser");
STEP("Create a collaboration site");
testSite = dataSite.usingUser(nonRMuser).createPublicRandomSite();
STEP("Create a document with the user without RM role");
document = dataContent.usingSite(testSite)
.usingUser(nonRMuser)
.createContent(CMISUtil.DocumentType.TEXT_PLAIN);
STEP("Create two categories with two folders");
category_manager = createRootCategory(CATEGORY_MANAGER);
category_admin = createRootCategory(CATEGORY_ADMIN);
folder_admin = createFolder(category_admin.getId(),FOLDER_ADMIN);
folder_manager = createFolder(category_manager.getId(),FOLDER_MANAGER);
STEP("Create an rm user and give filling permission over CATEGORY_MANAGER record category");
RecordCategory recordCategory = new RecordCategory().builder()
.id(category_manager.getId())
.build();
rmManager = roleService.createCollaboratorWithRMRoleAndPermission(testSite, recordCategory,
UserRoles.ROLE_RM_MANAGER, PERMISSION_FILING);
}
/**
* Given I have selected the record folder I want to file my declared record to
* When I confirm the action
* Then the dialog closes
* And the document is now shown as a record in the collaboration site
* And if I navigated to the record folder, as any user who had the right permissions, then I would see the
* record filed
*/
@Test
@AlfrescoTest(jira = "RM-6780")
public void checkFileAsRecordToRecordFolder() throws Exception {
AtomicReference<RecordFolderCollection> apiChildren = new AtomicReference<>();
STEP("Create a document with the user with RM role");
documentDeclared = dataContent.usingSite(testSite).usingUser(rmManager)
.createContent(new FileModel("checkDeclareAndFileToRecordFolder", FileType.TEXT_PLAIN));
STEP("Declare and file into a record folder the document uploaded");
getRestAPIFactory().getActionsAPI(rmManager).declareAndFile(documentDeclared,
Utility.buildPath(CATEGORY_MANAGER, FOLDER_MANAGER));
STEP("Check the file is a record within the collaboration site");
try
{
Utility.sleep(1000, 40000, () ->
{
JSONObject collaboratorSearchJson = getSearchApi().liveSearchForDocuments(rmManager.getUsername(),
rmManager.getPassword(),
documentDeclared.getName());
assertTrue("Rm Manager not able to find the document.", collaboratorSearchJson.getJSONArray("items").length() != 0);
});
}
catch (InterruptedException e)
{
fail("InterruptedException received while waiting for results.");
}
STEP("Check the record is filed into the record folder.");
// Get children from API
// List children from API
try
{
Utility.sleep(1000, 40000, () ->
{
apiChildren.set((RecordFolderCollection) getRestAPIFactory()
.getRecordFolderAPI(rmManager).getRecordFolderChildren(folder_manager.getId(), "include=properties")
.assertThat().entriesListIsNotEmpty().assertThat().entriesListIsNotEmpty());
});
}
catch (InterruptedException e)
{
fail("InterruptedException received while waiting for results.");
}
assertEquals(apiChildren.get()
.getEntries()
.get(0)
.getEntry()
.getProperties()
.getOriginalName(),documentDeclared.getName());
}
/**
* Given I have selected the "File As Record" action
* When I confirm the action without selecting a location to file to
* Then the record is declared in the unfiled folder
*/
@Test
@AlfrescoTest (jira = "RM-6780")
public void fileAsRecordToUnfiledRecordFolder() throws Exception {
STEP("Create a document with the user without RM role");
FileModel inplaceRecord = dataContent.usingSite(testSite).usingUser(rmManager)
.createContent(new FileModel("declareAndFileToIntoUnfiledRecordFolder",
FileType.TEXT_PLAIN));
STEP("Click on Declare and file without selecting a record folder");
getRestAPIFactory().getActionsAPI(rmManager).declareAndFile(inplaceRecord,"");
STEP("Check the file is declared in unfiled record folder");
Assert.assertTrue(isMatchingRecordInUnfiledRecords(inplaceRecord), "Record should be filed to Unfiled Records folder");
}
@AfterClass(alwaysRun = true)
public void cleanUpForFileAsRecordRecordTests() {
STEP("Delete the collaboration site");
dataSite.usingUser(nonRMuser).deleteSite(testSite);
STEP("Empty the trashcan.");
restClient.authenticateUser(nonRMuser).withCoreAPI().usingTrashcan().deleteNodeFromTrashcan(toContentModel(testSite.getId()));
getRestAPIFactory()
.getUnfiledContainersAPI(rmManager)
.getUnfiledContainerChildren(UNFILED_RECORDS_CONTAINER_ALIAS)
.getEntries()
.stream()
.forEach(x -> getRestAPIFactory()
.getRecordsAPI()
.deleteRecord(x.getEntry().getId()));
STEP("Cleanup Documents inside folders");
STEP("Delete folders");
getRestAPIFactory().getRecordFolderAPI().deleteRecordFolder(folder_admin.getId());
getRestAPIFactory().getRecordFolderAPI().deleteRecordFolder(folder_manager.getId());
STEP("Delete categories");
recordCategoriesAPI.deleteCategory(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(), category_manager.getName());
recordCategoriesAPI.deleteCategory(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(), category_admin.getName());
STEP("Delete Users");
dataUser.deleteUser(nonRMuser);
dataUser.deleteUser(rmManager);
}
}

View File

@@ -0,0 +1,108 @@
/*
* #%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.smoke;
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.v0.RecordFoldersAPI;
import org.alfresco.rest.v0.service.DispositionScheduleService;
import org.alfresco.test.AlfrescoTest;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import static org.alfresco.rest.rm.community.model.recordcategory.RetentionPeriodProperty.CREATED_DATE;
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;
public class FoldersDispositionScheduleTests extends BaseRMRestTest {
private RecordCategory Category1;
@Autowired
private DispositionScheduleService dispositionScheduleService;
@Autowired
private RecordFoldersAPI recordFoldersAPI;
private final String TEST_PREFIX = generateTestPrefix(FoldersDispositionScheduleTests.class);
private final String folderDisposition = TEST_PREFIX + "RM-2937 folder ghosting";
private final String electronicRecord = "RM-2937 electronic 2 record";
private final String nonElectronicRecord = "RM-2937 non-electronic record";
@BeforeClass(alwaysRun = true)
private void setUp(){
STEP("Create the RM site if doesn't exist");
createRMSiteIfNotExists();
STEP("Create record category");
Category1 = createRootCategory(getRandomName("Title"));
}
@Test
@AlfrescoTest (jira = "RM-2937")
public void foldersDispositionScheduleWithGhosting() {
//create retention schedule
dispositionScheduleService.createCategoryRetentionSchedule(Category1.getName(), false);
// add cut off step
dispositionScheduleService.addCutOffAfterPeriodStep(Category1.getName(), "day|2", CREATED_DATE);
// add destroy step with ghosting
dispositionScheduleService.addDestroyWithGhostingImmediatelyAfterCutOff(Category1.getName());
//create folders
RecordCategoryChild FOLDER_DESTROY = createFolder(getAdminUser(),Category1.getId(),folderDisposition);
Record elRecord = createElectronicRecord(FOLDER_DESTROY.getId(),electronicRecord);
Record nonElRecord = createNonElectronicRecord(FOLDER_DESTROY.getId(),nonElectronicRecord);
// complete records
completeRecord(elRecord.getId());
completeRecord(nonElRecord.getId());
// edit disposition date
recordFoldersAPI.postFolderAction(getAdminUser().getUsername(),
getAdminUser().getPassword(),editDispositionDateJson(),FOLDER_DESTROY.getName());
// cut off the FOLDER_DESTROY
recordFoldersAPI.postFolderAction(getAdminUser().getUsername(),
getAdminUser().getPassword(),new JSONObject().put("name","cutoff"),FOLDER_DESTROY.getName());
// Destroy the FOLDER_DESTROY
recordFoldersAPI.postFolderAction(getAdminUser().getUsername(),
getAdminUser().getPassword(),new JSONObject().put("name","destroy"),FOLDER_DESTROY.getName());
}
@AfterMethod(alwaysRun = true)
private void deletePreconditions() {
deleteRecordCategory(Category1.getId());
}
}

View File

@@ -0,0 +1,116 @@
/*
* #%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.smoke;
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.v0.RecordFoldersAPI;
import org.alfresco.rest.v0.service.DispositionScheduleService;
import org.alfresco.test.AlfrescoTest;
import org.alfresco.utility.Utility;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import static org.alfresco.rest.rm.community.model.recordcategory.RetentionPeriodProperty.CREATED_DATE;
import static org.alfresco.rest.rm.community.model.recordcategory.RetentionPeriodProperty.CUT_OFF_DATE;
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;
public class FoldersDispositionScheduleWithoutGhostRecordTests extends BaseRMRestTest {
private RecordCategory Category1;
@Autowired
private DispositionScheduleService dispositionScheduleService;
@Autowired
private RecordFoldersAPI recordFoldersAPI;
private final String TEST_PREFIX = generateTestPrefix(FoldersDispositionScheduleWithoutGhostRecordTests.class);
private final String folderDisposition = TEST_PREFIX + "RM-2937 folder ghosting";
private final String electronicRecord = "RM-2937 electronic 2 record";
private final String nonElectronicRecord = "RM-2937 non-electronic record";
@BeforeClass(alwaysRun = true)
private void setUp(){
STEP("Create the RM site if doesn't exist");
createRMSiteIfNotExists();
STEP("Create record category");
Category1 = createRootCategory(getRandomName("Title"));
}
@Test
@AlfrescoTest(jira="RM-2937")
public void foldersDispositionScheduleWithoutGhosting() {
//create retention schedule
dispositionScheduleService.createCategoryRetentionSchedule(Category1.getName(), false);
// add cut off step
dispositionScheduleService.addCutOffAfterPeriodStep(Category1.getName(), "day|2", CREATED_DATE);
// add destroy step with ghosting
dispositionScheduleService.addDestroyWithoutGhostingAfterPeriodStep(Category1.getName(), "day|1", CUT_OFF_DATE);
//create folders
RecordCategoryChild FOLDER_DESTROY = createFolder(getAdminUser(),Category1.getId(),folderDisposition);
Record elRecord = createElectronicRecord(FOLDER_DESTROY.getId(),electronicRecord);
Record nonElRecord = createNonElectronicRecord(FOLDER_DESTROY.getId(),nonElectronicRecord);
// complete records
completeRecord(elRecord.getId());
completeRecord(nonElRecord.getId());
// edit disposition date
recordFoldersAPI.postFolderAction(getAdminUser().getUsername(),
getAdminUser().getPassword(),editDispositionDateJson(),FOLDER_DESTROY.getName());
// cut off the FOLDER_DESTROY
recordFoldersAPI.postFolderAction(getAdminUser().getUsername(),
getAdminUser().getPassword(),new JSONObject().put("name","cutoff"),FOLDER_DESTROY.getName());
// edit disposition date
recordFoldersAPI.postFolderAction(getAdminUser().getUsername(),
getAdminUser().getPassword(),editDispositionDateJson(),FOLDER_DESTROY.getName());
Utility.waitToLoopTime(5,"Waiting for Edit Disposition to be processed");
// Destroy the FOLDER_DESTROY
recordFoldersAPI.postFolderAction(getAdminUser().getUsername(),
getAdminUser().getPassword(),new JSONObject().put("name","destroy"),FOLDER_DESTROY.getName());
}
@AfterMethod(alwaysRun = true)
private void deletePreconditions() {
deleteRecordCategory(Category1.getId());
}
}

View File

@@ -0,0 +1,202 @@
/*
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2022 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
* If the software was purchased under a paid Alfresco license, the terms of
* the paid license agreement will prevail. Otherwise, the software is
* provided under the following open source license terms:
* -
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* -
* Alfresco is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
* -
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
* #L%
*/
package org.alfresco.rest.rm.community.smoke;
import org.alfresco.rest.core.v0.RMEvents;
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.v0.RMRolesAndActionsAPI;
import org.alfresco.rest.v0.RecordFoldersAPI;
import org.alfresco.rest.v0.RecordsAPI;
import org.alfresco.rest.v0.service.DispositionScheduleService;
import org.alfresco.test.AlfrescoTest;
import org.alfresco.utility.Utility;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.testng.annotations.Test;
import java.io.IOException;
import java.time.Instant;
import static org.alfresco.rest.rm.community.base.TestData.DEFAULT_PASSWORD;
import static org.alfresco.rest.rm.community.model.recordcategory.RetentionPeriodProperty.CUT_OFF_DATE;
import static org.alfresco.rest.rm.community.util.CommonTestUtils.generateTestPrefix;
import static org.alfresco.utility.report.log.Step.STEP;
/**
* Contains recordsDispositionScheduleWithoutGhosting test which checks disposition schedule cut off, transfer and destroy without maintaining metadata steps applied to records
* <p/>
* Precondition:
* <p/>
* RM site created, contains an empty category "RM-2801 disposition for records". <p/>
* RM user has RM admin role. <p/>
* A transfer location named "transferred files" is created to which RM user has access
* <p/>
* <img src="doc-files/Disposition Schedule without ghosting.png" alt="Records Disposition Schedule without ghosting" />
*
* @author Kavit Shah
*/
public class RecordsDispositionScheduleTests extends BaseRMRestTest {
/** data prep 6services */
@Autowired
private RMRolesAndActionsAPI rmRolesAndActionsAPI;
@Autowired
private RecordsAPI recordsAPI;
@Autowired
private RecordFoldersAPI recordFoldersAPI;
@Autowired
private DispositionScheduleService dispositionScheduleService;
private RecordCategory Category1;
private final String TEST_PREFIX = generateTestPrefix(RecordsDispositionScheduleTests.class);
private final String RM_ADMIN = TEST_PREFIX + "rm_admin";
private final String recordsCategory = TEST_PREFIX + "RM-2801 category";
private final String folderDisposition = TEST_PREFIX + "RM-2801 folder";
@Test
@AlfrescoTest(jira="RM-2801")
public void recordsDispositionScheduleWithoutGhosting() {
// create test precondition
createTestPrecondition(recordsCategory);
// create disposition schedule
dispositionScheduleService.createCategoryRetentionSchedule(Category1.getName(), true);
// add cut off step
dispositionScheduleService.addCutOffImmediatelyStep(Category1.getName());
// add transfer step
dispositionScheduleService.addTransferAfterEventStep(Category1.getName(),"transferred records","all_allowances_granted_are_terminated");
// add destroy step without retaining metadata
dispositionScheduleService.addDestroyWithoutGhostingAfterPeriodStep(Category1.getName(), "day|1", CUT_OFF_DATE);
// create a folder and an electronic and a non-electronic record in it
RecordCategoryChild FOLDER_DESTROY = createFolder(getAdminUser(),Category1.getId(),folderDisposition);
String electronicRecord = "RM-2801 electronic record";
Record elRecord = createElectronicRecord(FOLDER_DESTROY.getId(), electronicRecord);
String nonElectronicRecord = "RM-2801 non-electronic record";
Record nonElRecord = createNonElectronicRecord(FOLDER_DESTROY.getId(), nonElectronicRecord);
// complete records and cut them off
String nonElRecordName = recordsAPI.getRecordFullName(getAdminUser().getUsername(),
getAdminUser().getPassword(), folderDisposition, nonElectronicRecord);
String elRecordName = recordsAPI.getRecordFullName(getAdminUser().getUsername(),
getAdminUser().getPassword(), folderDisposition, electronicRecord);
// complete records and cut them off
completeRecord(elRecord.getId());
completeRecord(nonElRecord.getId());
String nonElRecordNameNodeRef = recordsAPI.getRecordNodeRef(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(), nonElRecordName, "/" + Category1.getName() + "/" + folderDisposition);
recordFoldersAPI.postRecordAction(getAdminUser().getUsername(),
getAdminUser().getPassword(),new JSONObject().put("name","cutoff"),nonElRecordNameNodeRef);
String elRecordNameNodeRef = recordsAPI.getRecordNodeRef(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(), elRecordName, "/" + Category1.getName() + "/" + folderDisposition);
recordFoldersAPI.postRecordAction(getAdminUser().getUsername(),
getAdminUser().getPassword(),new JSONObject().put("name","cutoff"),elRecordNameNodeRef);
// ensure the complete event action is displayed for both events
rmRolesAndActionsAPI.completeEvent(getAdminUser().getUsername(),
getAdminUser().getPassword(), nonElRecordName, RMEvents.ALL_ALLOWANCES_GRANTED_ARE_TERMINATED, Instant.now());
rmRolesAndActionsAPI.completeEvent(getAdminUser().getUsername(),
getAdminUser().getPassword(), elRecordName, RMEvents.ALL_ALLOWANCES_GRANTED_ARE_TERMINATED, Instant.now());
// Create and Complete transfer
HttpResponse nonElRecordNameHttpResponse = recordFoldersAPI.postRecordAction(getAdminUser().getUsername(),
getAdminUser().getPassword(),new JSONObject().put("name","transfer"),recordsAPI.getRecordNodeRef(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(), nonElRecordName, "/" + Category1.getName() + "/" + folderDisposition));
String nonElRecordNameTransferId = getTransferId(nonElRecordNameHttpResponse,nonElRecordNameNodeRef);
recordFoldersAPI.postRecordAction(getAdminUser().getUsername(),
getAdminUser().getPassword(),new JSONObject().put("name","transferComplete"),nonElRecordNameTransferId);
HttpResponse elRecordNameHttpResponse = recordFoldersAPI.postRecordAction(getAdminUser().getUsername(),
getAdminUser().getPassword(),new JSONObject().put("name","transfer"),recordsAPI.getRecordNodeRef(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(), elRecordName, "/" + Category1.getName() + "/" + folderDisposition));
String elRecordNameTransferId = getTransferId(elRecordNameHttpResponse,elRecordNameNodeRef);
recordFoldersAPI.postRecordAction(getAdminUser().getUsername(),
getAdminUser().getPassword(),new JSONObject().put("name","transferComplete"),elRecordNameTransferId);
// edit the disposition schedule date to current date
recordFoldersAPI.postRecordAction(getAdminUser().getUsername(),
getAdminUser().getPassword(),editDispositionDateJson(),nonElRecordNameNodeRef);
recordFoldersAPI.postRecordAction(getAdminUser().getUsername(),
getAdminUser().getPassword(),editDispositionDateJson(),elRecordNameNodeRef);
Utility.waitToLoopTime(5,"Waiting for Edit Disposition to be processed");
// destroy records
recordFoldersAPI.postRecordAction(getAdminUser().getUsername(),
getAdminUser().getPassword(),new JSONObject().put("name","destroy"),nonElRecordNameNodeRef);
recordFoldersAPI.postRecordAction(getAdminUser().getUsername(),
getAdminUser().getPassword(),new JSONObject().put("name","destroy"),elRecordNameNodeRef);
// delete category
deleteRecordCategory(Category1.getId());
}
private void createTestPrecondition(String categoryName) {
createRMSiteIfNotExists();
// create "rm admin" user if it does not exist and assign it to RM Administrator role
rmRolesAndActionsAPI.createUserAndAssignToRole(
getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(),
RM_ADMIN, DEFAULT_PASSWORD, "Administrator");
// create category
STEP("Create two category");
Category1 = createRootCategory(categoryName,"Title");
}
private String getTransferId(HttpResponse httpResponse,String nodeRef) {
HttpEntity entity = httpResponse.getEntity();
String responseString = null;
try {
responseString = EntityUtils.toString(entity, "UTF-8");
} catch (IOException e) {
throw new RuntimeException(e);
}
JSONObject result = new JSONObject(responseString);
return result
.getJSONObject("results")
.get(nodeRef)
.toString();
}
}

View File

@@ -0,0 +1,200 @@
/*
* #%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.smoke;
import org.alfresco.rest.core.v0.RMEvents;
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.v0.RMRolesAndActionsAPI;
import org.alfresco.rest.v0.RecordFoldersAPI;
import org.alfresco.rest.v0.RecordsAPI;
import org.alfresco.rest.v0.service.DispositionScheduleService;
import org.alfresco.test.AlfrescoTest;
import org.alfresco.utility.Utility;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.testng.annotations.Test;
import java.io.IOException;
import java.time.Instant;
import static org.alfresco.rest.rm.community.base.TestData.DEFAULT_PASSWORD;
import static org.alfresco.rest.rm.community.util.CommonTestUtils.generateTestPrefix;
import static org.alfresco.utility.report.log.Step.STEP;
/**
* Contains recordsDispositionScheduleWithGhosting test which checks disposition schedule cut off, transfer and destroy with maintaining record metadata steps applied to records
* <p/>
* Precondition:
* <p/>
* RM site created, contains an empty category "RM-2937 disposition for records with ghosting". <p/>
* RM user has RM admin role. <p/>
* A transfer location named "transferred files with ghosting" is created to which RM user has access
* <p/>
* <img src="doc-files/Disposition Schedule with ghosting.png" alt="Records Disposition Schedule with ghosting" />
*
* @author Kavit Shah
*/
public class RecordsDispositionScheduleWithGhostingTests extends BaseRMRestTest {
/** data prep 6services */
@Autowired
private RMRolesAndActionsAPI rmRolesAndActionsAPI;
@Autowired
private RecordsAPI recordsAPI;
@Autowired
private RecordFoldersAPI recordFoldersAPI;
@Autowired
private DispositionScheduleService dispositionScheduleService;
private RecordCategory Category1;
private final String TEST_PREFIX = generateTestPrefix(RecordsDispositionScheduleTests.class);
private final String RM_ADMIN = TEST_PREFIX + "rm_admin";
private final String recordsCategory = TEST_PREFIX + "RM-2801 category";
private final String folderDisposition = TEST_PREFIX + "RM-2801 folder";
@Test
@AlfrescoTest(jira="RM-2801")
public void recordsDispositionScheduleWithGhosting() {
// create test precondition
createTestPrecondition(recordsCategory);
// create disposition schedule
dispositionScheduleService.createCategoryRetentionSchedule(Category1.getName(), true);
// add cut off step
dispositionScheduleService.addCutOffImmediatelyStep(Category1.getName());
// add transfer step
dispositionScheduleService.addTransferAfterEventStep(Category1.getName(),"transferred records","all_allowances_granted_are_terminated");
// add destroy step without retaining metadata
dispositionScheduleService.addDestroyWithGhostingImmediatelyAfterCutOff(Category1.getName());
// create a folder and an electronic and a non-electronic record in it
RecordCategoryChild FOLDER_DESTROY = createFolder(getAdminUser(),Category1.getId(),folderDisposition);
String electronicRecord = "RM-2801 electronic record";
Record elRecord = createElectronicRecord(FOLDER_DESTROY.getId(), electronicRecord);
String nonElectronicRecord = "RM-2801 non-electronic record";
Record nonElRecord = createNonElectronicRecord(FOLDER_DESTROY.getId(), nonElectronicRecord);
// complete records and cut them off
String nonElRecordName = recordsAPI.getRecordFullName(getAdminUser().getUsername(),
getAdminUser().getPassword(), folderDisposition, nonElectronicRecord);
String elRecordName = recordsAPI.getRecordFullName(getAdminUser().getUsername(),
getAdminUser().getPassword(), folderDisposition, electronicRecord);
// complete records and cut them off
completeRecord(elRecord.getId());
completeRecord(nonElRecord.getId());
String nonElRecordNameNodeRef = recordsAPI.getRecordNodeRef(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(), nonElRecordName, "/" + Category1.getName() + "/" + folderDisposition);
recordFoldersAPI.postRecordAction(getAdminUser().getUsername(),
getAdminUser().getPassword(),new JSONObject().put("name","cutoff"),nonElRecordNameNodeRef);
String elRecordNameNodeRef = recordsAPI.getRecordNodeRef(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(), elRecordName, "/" + Category1.getName() + "/" + folderDisposition);
recordFoldersAPI.postRecordAction(getAdminUser().getUsername(),
getAdminUser().getPassword(),new JSONObject().put("name","cutoff"),elRecordNameNodeRef);
// ensure the complete event action is displayed for both events
rmRolesAndActionsAPI.completeEvent(getAdminUser().getUsername(),
getAdminUser().getPassword(), nonElRecordName, RMEvents.ALL_ALLOWANCES_GRANTED_ARE_TERMINATED, Instant.now());
rmRolesAndActionsAPI.completeEvent(getAdminUser().getUsername(),
getAdminUser().getPassword(), elRecordName, RMEvents.ALL_ALLOWANCES_GRANTED_ARE_TERMINATED, Instant.now());
// Create and Complete transfer
HttpResponse nonElRecordNameHttpResponse = recordFoldersAPI.postRecordAction(getAdminUser().getUsername(),
getAdminUser().getPassword(),new JSONObject().put("name","transfer"),recordsAPI.getRecordNodeRef(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(), nonElRecordName, "/" + Category1.getName() + "/" + folderDisposition));
String nonElRecordNameTransferId = getTransferId(nonElRecordNameHttpResponse,nonElRecordNameNodeRef);
recordFoldersAPI.postRecordAction(getAdminUser().getUsername(),
getAdminUser().getPassword(),new JSONObject().put("name","transferComplete"),nonElRecordNameTransferId);
HttpResponse elRecordNameHttpResponse = recordFoldersAPI.postRecordAction(getAdminUser().getUsername(),
getAdminUser().getPassword(),new JSONObject().put("name","transfer"),recordsAPI.getRecordNodeRef(getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(), elRecordName, "/" + Category1.getName() + "/" + folderDisposition));
String elRecordNameTransferId = getTransferId(elRecordNameHttpResponse,elRecordNameNodeRef);
recordFoldersAPI.postRecordAction(getAdminUser().getUsername(),
getAdminUser().getPassword(),new JSONObject().put("name","transferComplete"),elRecordNameTransferId);
// edit the disposition schedule date to current date
recordFoldersAPI.postRecordAction(getAdminUser().getUsername(),
getAdminUser().getPassword(),editDispositionDateJson(),nonElRecordNameNodeRef);
recordFoldersAPI.postRecordAction(getAdminUser().getUsername(),
getAdminUser().getPassword(),editDispositionDateJson(),elRecordNameNodeRef);
Utility.waitToLoopTime(5,"Waiting for Edit Disposition to be processed");
// destroy records
recordFoldersAPI.postRecordAction(getAdminUser().getUsername(),
getAdminUser().getPassword(),new JSONObject().put("name","destroy"),nonElRecordNameNodeRef);
recordFoldersAPI.postRecordAction(getAdminUser().getUsername(),
getAdminUser().getPassword(),new JSONObject().put("name","destroy"),elRecordNameNodeRef);
// delete category
deleteRecordCategory(Category1.getId());
}
private void createTestPrecondition(String categoryName) {
createRMSiteIfNotExists();
// create "rm admin" user if it does not exist and assign it to RM Administrator role
rmRolesAndActionsAPI.createUserAndAssignToRole(
getDataUser().usingAdmin().getAdminUser().getUsername(),
getDataUser().usingAdmin().getAdminUser().getPassword(),
RM_ADMIN, DEFAULT_PASSWORD, "Administrator");
// create category
STEP("Create two category");
Category1 = createRootCategory(categoryName,"Title");
}
private String getTransferId(HttpResponse httpResponse,String nodeRef) {
HttpEntity entity = httpResponse.getEntity();
String responseString = null;
try {
responseString = EntityUtils.toString(entity, "UTF-8");
} catch (IOException e) {
throw new RuntimeException(e);
}
JSONObject result = new JSONObject(responseString);
return result
.getJSONObject("results")
.get(nodeRef)
.toString();
}
}

View File

@@ -0,0 +1,124 @@
/*
* #%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.smoke;
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.rules.ActionsOnRule;
import org.alfresco.rest.rm.community.model.rules.RuleDefinition;
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainer;
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChild;
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChildProperties;
import org.alfresco.rest.v0.RMRolesAndActionsAPI;
import org.alfresco.rest.v0.RulesAPI;
import org.alfresco.test.AlfrescoTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.testng.annotations.Test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import static org.alfresco.rest.core.v0.BaseAPI.NODE_PREFIX;
import static org.alfresco.rest.rm.community.base.TestData.ELECTRONIC_RECORD_NAME;
import static org.alfresco.rest.rm.community.base.TestData.NONELECTRONIC_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.*;
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.*;
public class UnfiledRecordsRuleTests extends BaseRMRestTest {
@Autowired
private RMRolesAndActionsAPI rmRolesAndActionsAPI;
private final String TEST_PREFIX = generateTestPrefix(CreateCategoriesTests.class);
private final String RM_ADMIN = TEST_PREFIX + "rm_admin";
private RecordCategory Category2;
private RecordCategoryChild Folder2;
@Autowired
private RulesAPI rulesAPI;
@Test
@AlfrescoTest(jira = "RM-2794")
public void unfiledRecordsRule() {
STEP("Create the RM site if doesn't exist");
createRMSiteIfNotExists();
STEP("Create RM Admin user");
rmRolesAndActionsAPI.createUserAndAssignToRole(getAdminUser().getUsername(), getAdminUser().getPassword(), RM_ADMIN,
getAdminUser().getPassword(),
"Administrator");
STEP("Create record categories and record folders");
Category2 = createRootCategory(getRandomName("recordCategory"));
Folder2 = createFolder(Category2.getId(), getRandomName("recordFolder"));
STEP("Get the unfiled records container");
UnfiledContainer container = getRestAPIFactory().getUnfiledContainersAPI().getUnfiledContainer(UNFILED_RECORDS_CONTAINER_ALIAS);
// Check the response code
assertStatusCode(OK);
//create a rule
RuleDefinition ruleDefinition = RuleDefinition.createNewRule().title("name").description("description")
.applyToChildren(true)
.actions(Collections.singletonList(ActionsOnRule.FILE_TO.getActionValue()));
rulesAPI.createRule(getAdminUser().getUsername(), getAdminUser().getPassword(), NODE_PREFIX + container.getId(), ruleDefinition);
//upload an electronic record
UnfiledContainerChild electronicRecord = UnfiledContainerChild.builder()
.name(ELECTRONIC_RECORD_NAME)
.nodeType(CONTENT_TYPE)
.content(RecordContent.builder().mimeType("text/plain").build())
.build();
assertStatusCode(OK);
// create a non-electronic record
UnfiledContainerChild nonelectronicRecord = UnfiledContainerChild.builder()
.properties(UnfiledContainerChildProperties.builder()
.description(NONELECTRONIC_RECORD_NAME)
.title("Title")
.build())
.name(NONELECTRONIC_RECORD_NAME)
.nodeType(NON_ELECTRONIC_RECORD_TYPE)
.build();
assertStatusCode(OK);
//delete the record created, delete the rule from UnfilledRecord page, delete the category created
rulesAPI.deleteAllRulesOnContainer(getAdminUser().getUsername(), getAdminUser().getPassword(), NODE_PREFIX + container.getId());
deleteRecordCategory(Category2.getId());
assertStatusCode(NO_CONTENT);
}
}

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-governance-services-community-parent</artifactId>
<version>14.146-SNAPSHOT</version>
<version>17.102-SNAPSHOT</version>
</parent>
<modules>

View File

@@ -1,4 +1,3 @@
TRANSFORMERS_TAG=2.5.7
SOLR6_TAG=2.0.3
POSTGRES_TAG=13.3
ACTIVEMQ_TAG=5.16.1
POSTGRES_TAG=14.4
ACTIVEMQ_TAG=5.17.1-jre11-rockylinux8

View File

@@ -8,7 +8,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-governance-services-community-repo-parent</artifactId>
<version>14.146-SNAPSHOT</version>
<version>17.102-SNAPSHOT</version>
</parent>
<properties>
@@ -361,6 +361,12 @@
<integrationTestSuite>**/AllTestSuitePt3.class</integrationTestSuite>
</properties>
</profile>
<profile>
<id>agsAllTestSuitePt4</id>
<properties>
<integrationTestSuite>**/AllTestSuitePt4.class</integrationTestSuite>
</properties>
</profile>
<profile>
<id>use-mysql</id>
@@ -428,7 +434,7 @@
</run>
</image>
<image>
<name>alfresco/alfresco-activemq:${dependency.activemq.version}</name>
<name>alfresco/alfresco-activemq:${dependency.activemq.version}-jre11-rockylinux8</name>
<run>
<ports>
<port>${activemq.port1}:${activemq.port1}</port>
@@ -499,7 +505,7 @@
</run>
</image>
<image>
<name>alfresco/alfresco-activemq:${dependency.activemq.version}</name>
<name>alfresco/alfresco-activemq:${dependency.activemq.version}-jre11-rockylinux8</name>
<run>
<ports>
<port>${activemq.port1}:${activemq.port1}</port>

View File

@@ -156,25 +156,24 @@ public class ExtendedRuleServiceImpl extends RuleServiceImpl
* @see org.alfresco.repo.rule.RuleServiceImpl#saveRule(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.cmr.rule.Rule)
*/
@Override
public void saveRule(final NodeRef nodeRef, final Rule rule)
public Rule saveRule(final NodeRef nodeRef, final Rule rule)
{
validateWormLockRuleAction(rule);
if (filePlanService.isFilePlanComponent(nodeRef))
{
AuthenticationUtil.runAsSystem(new RunAsWork<Void>()
return AuthenticationUtil.runAsSystem(new RunAsWork<Rule>()
{
@Override
public Void doWork()
public Rule doWork()
{
ExtendedRuleServiceImpl.super.saveRule(nodeRef, rule);
return null;
return ExtendedRuleServiceImpl.super.saveRule(nodeRef, rule);
}
});
}
else
{
super.saveRule(nodeRef, rule);
return super.saveRule(nodeRef, rule);
}
}

View File

@@ -43,19 +43,16 @@ import org.junit.runner.RunWith;
@ClassnameFilters({
// The following packages are run by Pt1. IF YOU CHANGE THIS LIST ALSO CHANGE IT IN AllTestSuitePt3.
"org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.action\\..*Test",
"org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.capabilities\\..*Test",
"org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.jscript\\..*Test",
"org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.security\\..*Test",
"org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.service\\..*Test",
"org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.webscript\\..*Test",
// There appears to be some common setup taking place in the first 2 packages, which is why all legacy tests are
// together even though they take a little longer to run that way.
"org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.jscript\\..*Test",
// Exclude all UnitTests
"!.*UnitTest",
// Put the test classes you want to exclude here
"!.*DispositionServiceImplTest",
"!.*FilePlanPermissionServiceImplTest",
// above 2 tests from service package require setup from FileReportActionTest so they've been moved to part 4
"!.*DataLoadSystemTest",
"!.*RM2072Test",
"!.*RM2190Test",

View File

@@ -0,0 +1,78 @@
/*
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2022 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
* If the software was purchased under a paid Alfresco license, the terms of
* the paid license agreement will prevail. Otherwise, the software is
* provided under the following open source license terms:
* -
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* -
* Alfresco is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
* -
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
* #L%
*/
package org.alfresco.module.org_alfresco_module_rm.test;
import org.junit.extensions.cpsuite.ClasspathSuite;
import org.junit.extensions.cpsuite.ClasspathSuite.ClassnameFilters;
import org.junit.extensions.cpsuite.ClasspathSuite.SuiteTypes;
import org.junit.extensions.cpsuite.SuiteType;
import org.junit.runner.RunWith;
/**
* Convenience test suite that runs all the tests. THIS HAS BEEN SPLIT INTO PARTS SO THAT THE BUILD TIME IS REDUCED.
*
* @author Marcin Strankowski
* @since 2.1
*/
@RunWith(ClasspathSuite.class)
@SuiteTypes({SuiteType.TEST_CLASSES, SuiteType.RUN_WITH_CLASSES, SuiteType.JUNIT38_TEST_CLASSES})
@ClassnameFilters({
// The following packages are run by Pt1. IF YOU CHANGE THIS LIST ALSO CHANGE IT IN AllTestSuitePt3.
"org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.action\\..*Test",
"org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.capabilities\\..*Test",
"org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.security\\..*Test",
"org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.webscript\\..*Test",
"org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.service\\.*DispositionServiceImplTest",
"org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.service\\.*FilePlanPermissionServiceImplTest",
// 2 tests from service package are here, they seem to require FileReportActionTest being ran beforehand
// and it would take too much time to run them in 1st test suite
// Exclude all UnitTests
"!.*UnitTest",
// Put the test classes you want to exclude here
"!.*DataLoadSystemTest",
"!.*RM2072Test",
"!.*RM2190Test",
"!.*RM981SystemTest",
"!.*RM3993Test",
"!.*RM4163Test",
"!.*RecordsManagementEventServiceImplTest",
"!.*RmRestApiTest",
"!.*NotificationServiceHelperSystemTest",
"!.*RetryingTransactionHelperBaseTest",
"!.*RMCaveatConfigServiceImplTest",
// This test is running successfully locally but not on bamboo (if executed as a single test).
// The problem can be reproduced if the whole test suite is run locally as well.
// Tests should not be dependant on other test classes and should run in any order without any problems.
"!.*EmailMapScriptTest"
})
public class AllTestSuitePt4
{
}

View File

@@ -82,13 +82,7 @@ public class FilePlanRuleInheritanceTest extends BaseRMTestCase
public void given()
{
filePlan = createFilePlan();
// create a rule that applies to childre
Action completeRecordAction = actionService.createAction(DeclareRecordAction.NAME);
rule = new Rule();
rule.setRuleType("inbound");
rule.setAction(completeRecordAction);
rule.applyToChildren(true);
rule = createRuleThatAppliesToChildren();
}
public void when()
@@ -127,13 +121,7 @@ public class FilePlanRuleInheritanceTest extends BaseRMTestCase
public void given()
{
filePlan = createFilePlan();
// create a rule that applies to childre
Action completeRecordAction = actionService.createAction(DeclareRecordAction.NAME);
rule = new Rule();
rule.setRuleType("inbound");
rule.setAction(completeRecordAction);
rule.applyToChildren(true);
rule = createRuleThatAppliesToChildren();
}
public void when()
@@ -171,13 +159,7 @@ public class FilePlanRuleInheritanceTest extends BaseRMTestCase
public void given()
{
filePlan = createFilePlan();
// create a rule that applies to childre
Action completeRecordAction = actionService.createAction(DeclareRecordAction.NAME);
rule = new Rule();
rule.setRuleType("inbound");
rule.setAction(completeRecordAction);
rule.applyToChildren(true);
rule = createRuleThatAppliesToChildren();
}
public void when()
@@ -215,13 +197,7 @@ public class FilePlanRuleInheritanceTest extends BaseRMTestCase
public void given()
{
filePlan = createFilePlan();
// create a rule that applies to childre
Action completeRecordAction = actionService.createAction(DeclareRecordAction.NAME);
rule = new Rule();
rule.setRuleType("inbound");
rule.setAction(completeRecordAction);
rule.applyToChildren(true);
rule = createRuleThatAppliesToChildren();
}
public void when()
@@ -261,13 +237,7 @@ public class FilePlanRuleInheritanceTest extends BaseRMTestCase
{
filePlan = createFilePlan();
recordCategory = filePlanService.createRecordCategory(filePlan, GUID.generate());
// create a rule that applies to childre
Action completeRecordAction = actionService.createAction(DeclareRecordAction.NAME);
rule = new Rule();
rule.setRuleType("inbound");
rule.setAction(completeRecordAction);
rule.applyToChildren(true);
rule = createRuleThatAppliesToChildren();
}
public void when()
@@ -286,4 +256,15 @@ public class FilePlanRuleInheritanceTest extends BaseRMTestCase
}
});
}
private Rule createRuleThatAppliesToChildren()
{
Action completeRecordAction = actionService.createAction(DeclareRecordAction.NAME);
Rule rule = new Rule();
rule.setRuleType("inbound");
rule.setTitle("Rule name");
rule.setAction(completeRecordAction);
rule.applyToChildren(true);
return rule;
}
}

View File

@@ -4,7 +4,7 @@
# Version label
version.major=7
version.minor=0
version.minor=3
version.revision=0
version.label=
@@ -15,4 +15,4 @@ version.edition=Community
version.scmrevision=@scm-path@-r@scm-revision@
# Build number
version.build=r@scm-revision@-b@build-number@
version.build=r@scm-revision@-b@build-number@

View File

@@ -168,6 +168,7 @@
<property name="nodeService" ref="NodeService"/>
<property name="ruleService" ref="RuleService"/>
<property name="actionService" ref="ActionService"/>
<property name="runtimeActionService" ref="actionService"/>
<property name="dictionaryService" ref="DictionaryService"/>
<property name="fileFolderService" ref="FileFolderService"/>
<property name="namespaceService" ref="NamespaceService" />

View File

@@ -27,7 +27,7 @@
package org.alfresco.module.org_alfresco_module_rm.action.impl;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.verifyNoInteractions;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.module.org_alfresco_module_rm.action.BaseActionUnitTest;
@@ -86,7 +86,7 @@ public class FileReportActionUnitTest extends BaseActionUnitTest
fileReportAction.executeImpl(getMockedAction(), actionedUponNodeRef);
// == then ==
verifyZeroInteractions(mockedReportService, mockedNodeService);
verifyNoInteractions(mockedReportService, mockedNodeService);
}
/**
@@ -110,6 +110,6 @@ public class FileReportActionUnitTest extends BaseActionUnitTest
fileReportAction.executeImpl(getMockedAction(), actionedUponNodeRef);
// == then ==
verifyZeroInteractions(mockedReportService, mockedNodeService);
verifyNoInteractions(mockedReportService, mockedNodeService);
}
}

View File

@@ -28,7 +28,7 @@
package org.alfresco.module.org_alfresco_module_rm.action.impl;
import static org.alfresco.module.org_alfresco_module_rm.test.util.AlfMock.generateText;
import static org.mockito.Matchers.any;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;

View File

@@ -38,8 +38,8 @@ import static org.alfresco.module.org_alfresco_module_rm.model.RecordsManagement
import static org.alfresco.module.org_alfresco_module_rm.model.rma.type.RmSiteType.DEFAULT_SITE_NAME;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

View File

@@ -27,7 +27,7 @@
package org.alfresco.module.org_alfresco_module_rm.bootstrap;
import static org.mockito.Matchers.anyString;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

View File

@@ -28,8 +28,8 @@
package org.alfresco.module.org_alfresco_module_rm.capability;
import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

View File

@@ -29,9 +29,9 @@ package org.alfresco.module.org_alfresco_module_rm.capability.declarative.condit
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyBoolean;
import static org.mockito.Matchers.eq;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;

View File

@@ -29,7 +29,7 @@ package org.alfresco.module.org_alfresco_module_rm.content;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.verifyNoInteractions;
import static org.mockito.Mockito.when;
import java.io.File;
@@ -125,6 +125,6 @@ public class EagerContentStoreCleanerUnitTest extends BaseUnitTest
eagerContentStoreCleaner.deleteFromStore(AlfMock.generateText(), mock(ContentStore.class));
verifyZeroInteractions(mockedContentCleanser);
verifyNoInteractions(mockedContentCleanser);
}
}

View File

@@ -35,9 +35,9 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;

View File

@@ -31,7 +31,7 @@ import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.verifyNoInteractions;
import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest;
import org.junit.Test;
@@ -73,7 +73,7 @@ public class DictionaryBootstrapPostProcessorUnitTest extends BaseUnitTest
// === then ===
verify(mockedBeanFactory, times(1)).containsBean(BEAN_SITESERVICE_BOOTSTRAP);
verifyNoMoreInteractions(mockedBeanFactory);
verifyZeroInteractions(mockedBeanDefinition);
verifyNoInteractions(mockedBeanDefinition);
}
/**

View File

@@ -27,7 +27,7 @@
package org.alfresco.module.org_alfresco_module_rm.model.rma.aspect;
import static org.mockito.Matchers.any;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

View File

@@ -26,8 +26,8 @@
*/
package org.alfresco.module.org_alfresco_module_rm.model.rma.type;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

View File

@@ -27,8 +27,8 @@
package org.alfresco.module.org_alfresco_module_rm.patch.v22;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

View File

@@ -32,7 +32,7 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.verifyNoInteractions;
import java.util.Collections;
import java.util.HashSet;
@@ -72,7 +72,7 @@ public class RMv22RemoveInPlaceRolesFromAllPatchUnitTest extends BaseUnitTest
patch.applyInternal();
// then
verifyZeroInteractions(mockedAuthorityService);
verifyNoInteractions(mockedAuthorityService);
}
/**

View File

@@ -30,8 +30,8 @@ package org.alfresco.module.org_alfresco_module_rm.patch.v23;
import static java.util.Arrays.asList;
import static org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel.ASPECT_SAVED_SEARCH;
import static org.alfresco.module.org_alfresco_module_rm.model.rma.type.RmSiteType.DEFAULT_SITE_NAME;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyMap;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyMap;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

View File

@@ -29,7 +29,7 @@ package org.alfresco.module.org_alfresco_module_rm.patch.v24;
import static org.alfresco.module.org_alfresco_module_rm.test.util.AlfMock.generateNodeRef;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.verifyNoInteractions;
import static org.mockito.Mockito.when;
import java.util.Collections;
@@ -81,7 +81,7 @@ public class RMv24FilePlanContainerRuleInheritancePatchUnitTest
patch.applyInternal();
// then
verifyZeroInteractions(mockedNodeService);
verifyNoInteractions(mockedNodeService);
}
/**

View File

@@ -27,8 +27,8 @@
package org.alfresco.module.org_alfresco_module_rm.patch.v32;
import static org.mockito.Matchers.anyMap;
import static org.mockito.Matchers.anyObject;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyMap;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -92,8 +92,8 @@ public class RMv32HoldReportUpdatePatchUnitTest
patch.applyInternal();
verify(mockedNodeService, times(1)).addAspect(hold_report, ContentModel.ASPECT_VERSIONABLE, null);
verify(mockedVersionService, times(1)).createVersion((NodeRef) anyObject(), anyMap());
verify(mockedContentWriter, times(1)).putContent((InputStream) anyObject());
verify(mockedVersionService, times(1)).createVersion((NodeRef) any(), anyMap());
verify(mockedContentWriter, times(1)).putContent((InputStream) any());
}
}

View File

@@ -28,7 +28,7 @@
package org.alfresco.module.org_alfresco_module_rm.patch.v33;
import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.any;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

View File

@@ -33,13 +33,13 @@ import static java.util.Collections.emptyList;
import static org.alfresco.model.ContentModel.ASSOC_CONTAINS;
import static org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel.ASSOC_FROZEN_CONTENT;
import static org.alfresco.module.org_alfresco_module_rm.patch.v35.RMv35HoldNewChildAssocPatch.PATCH_ASSOC_NAME;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyMap;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyMap;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.verifyNoInteractions;
import static org.mockito.Mockito.when;
import java.util.ArrayList;

View File

@@ -32,7 +32,7 @@ import static org.alfresco.module.org_alfresco_module_rm.test.util.AlfMock.gener
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;

View File

@@ -28,7 +28,7 @@
package org.alfresco.module.org_alfresco_module_rm.script.hold;
import static org.alfresco.module.org_alfresco_module_rm.test.util.WebScriptExceptionMatcher.badRequest;
import static org.mockito.Matchers.eq;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.when;
import java.util.Collections;

View File

@@ -30,8 +30,8 @@ package org.alfresco.module.org_alfresco_module_rm.test.util;
import static java.util.Collections.emptyMap;
import static org.mockito.ArgumentMatchers.nullable;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.lenient;

View File

@@ -28,7 +28,7 @@ package org.alfresco.module.org_alfresco_module_rm.util;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

View File

@@ -27,8 +27,8 @@
package org.alfresco.module.org_alfresco_module_rm.version;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;

View File

@@ -30,7 +30,7 @@ package org.alfresco.rm.rest.api.sites;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
import static org.mockito.Matchers.any;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-governance-services-community-repo-parent</artifactId>
<version>14.146-SNAPSHOT</version>
<version>17.102-SNAPSHOT</version>
</parent>
<build>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo</artifactId>
<version>14.146-SNAPSHOT</version>
<version>17.102-SNAPSHOT</version>
</parent>
<modules>

View File

@@ -8,7 +8,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-amps</artifactId>
<version>14.146-SNAPSHOT</version>
<version>17.102-SNAPSHOT</version>
</parent>
<properties>

View File

@@ -176,7 +176,6 @@ public class NodeBrowserScript extends NodeBrowserPost implements Serializable
{
status.setCode(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
status.setMessage(e.getMessage());
status.setException(e);
status.setRedirect(true);
}
return tmplMap;

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2005 - 2020 Alfresco Software Limited.
* Copyright 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.
@@ -40,6 +40,7 @@ import org.json.JSONObject;
import org.junit.Assert;
import org.springframework.extensions.webscripts.TestWebScriptServer;
import org.springframework.extensions.webscripts.TestWebScriptServer.GetRequest;
import org.springframework.extensions.webscripts.TestWebScriptServer.Response;
import java.io.Serializable;
import java.util.ArrayList;
@@ -194,13 +195,13 @@ public class SlingshotContentGetTest extends BaseWebScriptTest
NodeRef rootFolder = createNode(companyHome, "rootFolder", ContentModel.TYPE_FOLDER);
NodeRef doc1 = createNodeWithTextContent(rootFolder, "doc1", ContentModel.TYPE_CONTENT, "doc1 file content");
NodeRef doc1 = createNodeWithTextContent(rootFolder, "doc1", ContentModel.TYPE_CONTENT, "doc1 file content", MimetypeMap.MIMETYPE_TEXT_PLAIN);
NodeRef folderX = createNode(rootFolder, "X", ContentModel.TYPE_FOLDER);
NodeRef folderY = createNode(folderX, "Y", ContentModel.TYPE_FOLDER);
NodeRef folderZ = createNode(folderY, "Z", ContentModel.TYPE_FOLDER);
NodeRef doc2 = createNodeWithTextContent(folderZ, "doc2", ContentModel.TYPE_CONTENT, "doc2 file content");
NodeRef doc2 = createNodeWithTextContent(folderZ, "doc2", ContentModel.TYPE_CONTENT, "doc2 file content", MimetypeMap.MIMETYPE_TEXT_PLAIN);
// uri with relative path at the end
String uri = URL_CONTENT_DOWNLOAD + doc1.getId() + "/X/Y/Z/doc2";
@@ -212,7 +213,50 @@ public class SlingshotContentGetTest extends BaseWebScriptTest
nodeService.deleteNode(rootFolder);
}
public NodeRef createNodeWithTextContent(NodeRef parentNode, String nodeCmName, QName nodeType, String content)
public void testForcedAttachment() throws Exception
{
Repository repositoryHelper = (Repository) getServer().getApplicationContext().getBean("repositoryHelper");
NodeRef companyHome = repositoryHelper.getCompanyHome();
NodeRef rootFolder = createNode(companyHome, "rootFolder", ContentModel.TYPE_FOLDER);
NodeRef testhtml = createNodeWithTextContent(rootFolder, "testhtml", ContentModel.TYPE_CONTENT, "testhtml content", MimetypeMap.MIMETYPE_HTML);
NodeRef testpdf = createNodeWithTextContent(rootFolder, "testpdf", ContentModel.TYPE_CONTENT, "testpdf content", MimetypeMap.MIMETYPE_PDF);
String uri = URL_CONTENT_DOWNLOAD + testhtml.getId() + "?a=false";
GetRequest req = new GetRequest(uri);
Response res = sendRequest(req, 200);
assertEquals("attachment", res.getHeader("Content-Disposition"));
assertEquals(MimetypeMap.MIMETYPE_HTML + ";charset=UTF-8", res.getContentType());
uri = URL_CONTENT_DOWNLOAD + testhtml.getId();
res = sendRequest(new GetRequest(uri), 200);
assertEquals("attachment", res.getHeader("Content-Disposition"));
assertEquals(MimetypeMap.MIMETYPE_HTML + ";charset=UTF-8", res.getContentType());
uri = URL_CONTENT_DOWNLOAD + testhtml.getId() + "?a=true";
res = sendRequest(new GetRequest(uri), 200);
assertEquals("attachment", res.getHeader("Content-Disposition"));
assertEquals(MimetypeMap.MIMETYPE_HTML + ";charset=UTF-8", res.getContentType());
uri = URL_CONTENT_DOWNLOAD + testpdf.getId() + "?a=false";
res = sendRequest(new GetRequest(uri), 200);
assertNull(res.getHeader("Content-Disposition"));
assertEquals(MimetypeMap.MIMETYPE_PDF + ";charset=UTF-8", res.getContentType());
uri = URL_CONTENT_DOWNLOAD + testpdf.getId();
res = sendRequest(new GetRequest(uri), 200);
assertNull(res.getHeader("Content-Disposition"));
assertEquals(MimetypeMap.MIMETYPE_PDF + ";charset=UTF-8", res.getContentType());
uri = URL_CONTENT_DOWNLOAD + testpdf.getId() + "?a=true";
res = sendRequest(new GetRequest(uri), 200);
assertEquals("attachment", res.getHeader("Content-Disposition"));
assertEquals(MimetypeMap.MIMETYPE_PDF + ";charset=UTF-8", res.getContentType());
nodeService.deleteNode(rootFolder);
}
public NodeRef createNodeWithTextContent(NodeRef parentNode, String nodeCmName, QName nodeType, String content, String mimetype)
{
NodeRef nodeRef = createNode(parentNode, nodeCmName, nodeType);
@@ -220,7 +264,7 @@ public class SlingshotContentGetTest extends BaseWebScriptTest
if (content != null)
{
ContentWriter writer = contentService.getWriter(nodeRef, ContentModel.PROP_CONTENT, true);
writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN);
writer.setMimetype(mimetype);
writer.setEncoding("UTF-8");
writer.putContent(content);
}

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo</artifactId>
<version>14.146-SNAPSHOT</version>
<version>17.102-SNAPSHOT</version>
</parent>
<dependencies>

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2005-2011 Alfresco Software Limited.
* Copyright (C) 2005-2022 Alfresco Software Limited.
*
* This file is part of Alfresco
*
@@ -16,6 +16,7 @@
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/
package org.alfresco.query;
import java.util.Collections;
@@ -55,7 +56,7 @@ public class ListBackedPagingResults<R> implements PagingResults<R>
}
this.results = Collections.unmodifiableList(
list.subList(start, end));
list.subList(Math.min(start, end), end));
this.size = list.size();
this.hasMore = ! (list.size() == end);
}

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo</artifactId>
<version>14.146-SNAPSHOT</version>
<version>17.102-SNAPSHOT</version>
</parent>
<properties>
@@ -134,7 +134,7 @@
<dependency>
<groupId>com.fasterxml.woodstox</groupId>
<artifactId>woodstox-core</artifactId>
<version>6.2.7</version>
<version>6.3.0</version>
</dependency>
<!-- the cxf libs were updated, see dependencyManagement section -->

View File

@@ -78,6 +78,10 @@ public class ObjectTypeIdLuceneBuilder extends BaseLuceneBuilder
String field = getLuceneFieldName();
String stringValue = getValueAsString(value);
TypeDefinitionWrapper type = cmisDictionaryService.findType(stringValue);
if (type == null)
{
throw new CmisInvalidArgumentException("Unknown type: " + stringValue);
}
return lqpa
.getFieldQuery(field, type.getAlfrescoClass().toString(), AnalysisMode.IDENTIFIER, luceneFunction);
}

View File

@@ -146,7 +146,7 @@ public interface NamespaceService extends NamespacePrefixResolver
/** Email Server Application Model Prefix */
static final String EMAILSERVER_MODEL_PREFIX = "emailserver";
/**
* Register a prefix for namespace uri.
*

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Data model classes
* %%
* Copyright (C) 2005 - 2016 Alfresco Software Limited
* Copyright (C) 2005 - 2022 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -25,7 +25,7 @@
*/
package org.alfresco.repo.dictionary;
import static org.mockito.Matchers.anyString;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo</artifactId>
<version>14.146-SNAPSHOT</version>
<version>17.102-SNAPSHOT</version>
</parent>
<dependencies>

View File

@@ -9,6 +9,6 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-packaging</artifactId>
<version>14.146-SNAPSHOT</version>
<version>17.102-SNAPSHOT</version>
</parent>
</project>

View File

@@ -1,6 +1,6 @@
# Fetch image based on Tomcat 9.0, Java 11 and Centos 7
# Fetch image based on Tomcat 9.0, Java 17 and Rocky Linux 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:tomcat9-jre17-rockylinux8-202205140719
# Set default docker_context.
ARG resource_path=target
@@ -65,12 +65,12 @@ RUN sed -i -e "s_log4j.appender.File.File\=alfresco.log_log4j.appender.File.File
# fontconfig is required by Activiti worflow diagram generator
# installing pinned dependencies as well
RUN yum install -y fontconfig-2.13.0-4.3.el7 \
dejavu-fonts-common-2.33-6.el7 \
fontpackages-filesystem-1.44-8.el7 \
freetype-2.8-14.el7_9.1 \
libpng-1.5.13-8.el7 \
dejavu-sans-fonts-2.33-6.el7 && \
RUN yum install -y fontconfig-2.13.1-4.el8 \
dejavu-fonts-common-2.35-7.el8 \
fontpackages-filesystem-1.44-22.el8 \
freetype-2.9.1-4.el8_3.1 \
libpng-1.6.34-5.el8 \
dejavu-sans-fonts-2.35-7.el8 && \
yum clean all
# The standard configuration is to have all Tomcat files owned by root with group GROUPNAME and whilst owner has read/write privileges,

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-packaging</artifactId>
<version>14.146-SNAPSHOT</version>
<version>17.102-SNAPSHOT</version>
</parent>
<properties>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo</artifactId>
<version>14.146-SNAPSHOT</version>
<version>17.102-SNAPSHOT</version>
</parent>
<modules>

View File

@@ -1,4 +1,3 @@
TRANSFORMERS_TAG=2.5.7
SOLR6_TAG=2.0.3
POSTGRES_TAG=13.3
ACTIVEMQ_TAG=5.16.1
POSTGRES_TAG=14.4
ACTIVEMQ_TAG=5.17.1-jre11-rockylinux8

View File

@@ -6,7 +6,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-packaging</artifactId>
<version>14.146-SNAPSHOT</version>
<version>17.102-SNAPSHOT</version>
</parent>
<modules>

View File

@@ -27,6 +27,9 @@ fi
echo "Starting ACS stack in ${DOCKER_COMPOSE_PATH}"
export TRANSFORMERS_TAG=$(mvn help:evaluate -Dexpression=dependency.alfresco-transform-core.version -q -DforceStdout)
export TRANSFORM_ROUTER_TAG=$(mvn help:evaluate -Dexpression=dependency.alfresco-transform-service.version -q -DforceStdout)
# .env files are picked up from project directory correctly on docker-compose 1.23.0+
docker-compose --file "${DOCKER_COMPOSE_PATH}" --project-directory $(dirname "${DOCKER_COMPOSE_PATH}") up -d

View File

@@ -9,7 +9,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-tests</artifactId>
<version>14.146-SNAPSHOT</version>
<version>17.102-SNAPSHOT</version>
</parent>
<developers>

View File

@@ -0,0 +1,76 @@
package org.alfresco.cmis.search;
import java.lang.reflect.Method;
import org.alfresco.cmis.CmisProperties;
import org.alfresco.utility.Utility;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.test.context.ContextConfiguration;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
@ContextConfiguration("classpath:alfresco-cmis-context.xml")
@Component
@Scope(value = "prototype")
public abstract class AbstractCmisE2ETest extends AbstractE2EFunctionalTest
{
private static Logger LOGGER = LoggerFactory.getLogger(AbstractCmisE2ETest.class);
@Autowired
protected CmisProperties cmisProperties;
public String documentContent = "CMIS document content";
@BeforeMethod(alwaysRun = true)
public void showStartTestInfo(Method method)
{
LOGGER.info(String.format("*** STARTING Test: [%s] ***", method.getName()));
}
@AfterMethod(alwaysRun = true)
public void showEndTestInfo(Method method)
{
LOGGER.info(String.format("*** ENDING Test: [%s] ***", method.getName()));
}
public Integer getElasticWaitTimeInSeconds()
{
return cmisProperties.envProperty().getSolrWaitTimeInSeconds();
}
/**
* Repeat Elastic Query till results count returns expectedCountResults
* @param query CMIS Query to be executed
* @param expectedCountResults Number of results expected
* @return true when results count is equals to expectedCountResults
*/
protected boolean waitForIndexing(String query, long expectedCountResults)
{
for (int searchCount = 1; searchCount <= SEARCH_MAX_ATTEMPTS; searchCount++)
{
try
{
cmisApi.withQuery(query).assertResultsCount().equals(expectedCountResults);
return true;
}
catch (AssertionError ae)
{
LOGGER.info(String.format("WaitForIndexing in Progress: %s", ae));
}
Utility.waitToLoopTime(getElasticWaitTimeInSeconds(), "Wait For Indexing");
}
return false;
}
}

View File

@@ -0,0 +1,58 @@
package org.alfresco.cmis.search;
import org.alfresco.cmis.CmisWrapper;
import org.alfresco.dataprep.SiteService.Visibility;
import org.alfresco.utility.data.DataContent;
import org.alfresco.utility.data.DataSite;
import org.alfresco.utility.data.DataUser;
import org.alfresco.utility.data.RandomData;
import org.alfresco.utility.model.SiteModel;
import org.alfresco.utility.model.UserModel;
import org.alfresco.utility.network.ServerHealth;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.testng.annotations.BeforeClass;
@ContextConfiguration ("classpath:alfresco-cmis-context.xml")
public abstract class AbstractE2EFunctionalTest extends AbstractTestNGSpringContextTests
{
/** The number of retries that a query will be tried before giving up. */
protected static final int SEARCH_MAX_ATTEMPTS = 20;
@Autowired
protected ServerHealth serverHealth;
@Autowired
protected DataSite dataSite;
@Autowired
protected DataContent dataContent;
@Autowired
protected CmisWrapper cmisApi;
@Autowired
protected DataUser dataUser;
protected UserModel testUser, adminUserModel;
protected SiteModel testSite;
protected static String unique_searchString;
@BeforeClass (alwaysRun = true)
public void setup()
{
serverHealth.assertServerIsOnline();
adminUserModel = dataUser.getAdminUser();
testUser = dataUser.createRandomTestUser("UserSearch");
testSite = new SiteModel(RandomData.getRandomName("SiteSearch"));
testSite.setVisibility(Visibility.PRIVATE);
testSite = dataSite.usingUser(testUser).createSite(testSite);
unique_searchString = testSite.getTitle().replace("SiteSearch", "Unique");
}
}

View File

@@ -0,0 +1,62 @@
package org.alfresco.cmis.search;
import org.alfresco.utility.Utility;
import org.alfresco.utility.data.provider.XMLDataConfig;
import org.alfresco.utility.data.provider.XMLTestDataProvider;
import org.alfresco.utility.model.FileModel;
import org.alfresco.utility.model.FileType;
import org.alfresco.utility.model.FolderModel;
import org.alfresco.utility.model.QueryModel;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
public class SearchInFolderTests extends AbstractCmisE2ETest
{
private FolderModel parentFolder, subFolder1, subFolder2, subFolder3;
private FileModel subFile1, subFile2, subFile3, subFile4, subFile5;
@BeforeClass(alwaysRun = true)
public void createTestData() throws Exception
{
// create input data
parentFolder = FolderModel.getRandomFolderModel();
subFolder1 = FolderModel.getRandomFolderModel();
subFolder2 = FolderModel.getRandomFolderModel();
subFolder3 = new FolderModel("subFolder");
subFile5 = new FileModel("fifthFile.txt",FileType.TEXT_PLAIN, "fifthFile content");
subFile1 = new FileModel("firstFile", FileType.MSEXCEL);
subFile2 = FileModel.getRandomFileModel(FileType.MSPOWERPOINT2007);
subFile3 = FileModel.getRandomFileModel(FileType.TEXT_PLAIN);
subFile4 = new FileModel("fourthFile", "fourthFileTitle", "fourthFileDescription", FileType.MSWORD2007);
cmisApi.authenticateUser(testUser).usingSite(testSite).createFolder(parentFolder)
.then().usingResource(parentFolder)
.createFile(subFile5).assertThat().contentIs("fifthFile content")
.createFolder(subFolder1)
.createFolder(subFolder2)
.createFolder(subFolder3)
.createFile(subFile1)
.createFile(subFile2)
.createFile(subFile3)
.createFile(subFile4);
// wait for index
Utility.waitToLoopTime(getElasticWaitTimeInSeconds());
}
@AfterClass(alwaysRun = true)
public void cleanupEnvironment()
{
dataContent.deleteSite(testSite);
}
@Test(dataProviderClass = XMLTestDataProvider.class, dataProvider = "getQueriesData")
@XMLDataConfig(file = "src/test/resources/search-in-folder.xml")
public void executeCMISQuery(QueryModel query)
{
String currentQuery = String.format(query.getValue(), parentFolder.getNodeRef());
cmisApi.authenticateUser(testUser);
Assert.assertTrue(waitForIndexing(currentQuery, query.getResults()), String.format("Result count not as expected for query: %s", currentQuery));
}
}

View File

@@ -7,7 +7,7 @@ alfresco.port=8082
admin.user=admin
admin.password=admin
solrWaitTimeInSeconds=30
solrWaitTimeInSeconds=60
# in containers we cannot access directly JMX, so we will use http://jolokia.org agent
# disabling this we will use direct JMX calls to server

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--CMIS Queries: passing the search query as first param and results expected -->
<testData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<queries>
<query value="SELECT cmis:name, cmis:parentId, cmis:path, cmis:allowedChildObjectTypeIds FROM cmis:folder where IN_FOLDER('%s') AND cmis:name = 'subFolder'" expectedResults="1" />
<query value="SELECT cmis:name, cmis:objectId, cmis:lastModifiedBy, cmis:creationDate, cmis:contentStreamFileName FROM cmis:document where IN_FOLDER('%s') AND cmis:name = 'fourthFile'" expectedResults="1" />
<query value="SELECT cmis:parentId FROM cmis:folder where IN_FOLDER('%s')" expectedResults="3" />
<query value="SELECT * FROM cmis:document where IN_FOLDER('%s')" expectedResults="5" />
<query value="SELECT * FROM cmis:document where IN_FOLDER('%s') ORDER BY cmis:name ASC" expectedResults="5" />
<query value="SELECT * FROM cmis:document where IN_FOLDER('%s') ORDER BY cmis:name DESC" expectedResults="5" />
<query value="SELECT * FROM cmis:folder where IN_FOLDER('%s') ORDER BY cmis:lastModificationDate ASC" expectedResults="3" />
<query value="SELECT * FROM cmis:folder where IN_FOLDER('%s') ORDER BY cmis:lastModificationDate DESC" expectedResults="3" />
<query value="SELECT * FROM cmis:document where IN_FOLDER('%s') ORDER BY cmis:createdBy DESC" expectedResults="5" />
<query value="SELECT * FROM cmis:document where IN_FOLDER('%s') AND cmis:name IS NOT NULL" expectedResults="5" />
<query value="SELECT * FROM cmis:folder where IN_FOLDER('%s') AND cmis:name IS NOT NULL" expectedResults="3" />
<query value="SELECT * FROM cmis:document where IN_FOLDER('%s') AND cmis:name LIKE 'fourthFile'" expectedResults="1" />
<query value="SELECT * FROM cmis:folder where IN_FOLDER('%s') AND NOT(cmis:name NOT IN ('subFolder'))" expectedResults="1" />
<query value="SELECT * FROM cmis:document where IN_FOLDER('%s') AND cmis:name IN ('fourthFile', 'fifthFile.txt')" expectedResults="2" />
<query value="SELECT * FROM cmis:document where IN_FOLDER('%s') AND cmis:name NOT IN ('fourthFile', 'fifthFile.txt')" expectedResults="3" />
<query value="SELECT * FROM cmis:folder where IN_FOLDER('%s') AND cmis:name &lt;&gt; 'subFolder'" expectedResults="2" />
<query value="SELECT cmis:secondaryObjectTypeIds FROM cmis:folder where IN_FOLDER('%s') AND cmis:name = 'subFolder'" expectedResults="1" />
</queries>
</testData>

View File

@@ -9,7 +9,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-tests</artifactId>
<version>14.146-SNAPSHOT</version>
<version>17.102-SNAPSHOT</version>
</parent>
<developers>

View File

@@ -9,7 +9,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-tests</artifactId>
<version>14.146-SNAPSHOT</version>
<version>17.102-SNAPSHOT</version>
</parent>
<developers>
@@ -106,8 +106,10 @@
<suiteXmlFiles>
<suiteXmlFile>${suiteXmlFile}</suiteXmlFile>
</suiteXmlFiles>
<!-- Keeping illegal-access=warn for Java 11 compatibility, even though it has no effect on JDK 17 -->
<argLine>
--illegal-access=warn
--add-opens=java.base/java.lang=ALL-UNNAMED
</argLine>
</configuration>
</plugin>

View File

@@ -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();

View File

@@ -9,7 +9,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-tests</artifactId>
<version>14.146-SNAPSHOT</version>
<version>17.102-SNAPSHOT</version>
</parent>
<developers>
@@ -78,8 +78,10 @@
<suiteXmlFiles>
<suiteXmlFile>${suiteXmlFile}</suiteXmlFile>
</suiteXmlFiles>
<!-- Keeping illegal-access=warn for Java 11 compatibility, even though it has no effect on JDK 17 -->
<argLine>
--illegal-access=warn
--add-opens=java.base/java.lang=ALL-UNNAMED
</argLine>
</configuration>
</plugin>

View File

@@ -0,0 +1,102 @@
package org.alfresco.rest.actions.access;
import com.google.gson.Gson;
import org.alfresco.rest.actions.access.pojo.Action;
import org.alfresco.rest.actions.access.pojo.ActionCondition;
import org.alfresco.rest.actions.access.pojo.Rule;
import org.alfresco.utility.model.UserModel;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class AccessRestrictionUtil {
public static final String MAIL_ACTION = "mail";
public static final String ERROR_MESSAGE_FIELD = "message";
public static final String ERROR_MESSAGE_ACCESS_RESTRICTED =
"Only admin or system user is allowed to define uses of or directly execute this action";
private static final String ERROR_MESSAGE_FAILED_TO_SEND_EMAIL = "Failed to send email to:";
public static Map<String, String> createMailParameters(UserModel sender, UserModel recipient) {
Map<String, String> parameterValues = new HashMap<>();
parameterValues.put("from", sender.getEmailAddress());
parameterValues.put("to", recipient.getEmailAddress());
parameterValues.put("subject", "Test");
parameterValues.put("text", "<html>content</html>");
return parameterValues;
}
public static Rule createRuleWithAction(String actionName, Map<String, String> parameterValues) {
Rule rule = new Rule();
rule.setId("");
rule.setTitle("Test rule title");
rule.setDescription("Test rule description");
rule.setRuleType(List.of("inbound"));
rule.setDisabled(false);
rule.setApplyToChildren(false);
rule.setExecuteAsynchronously(false);
Action compositeAction = new Action();
compositeAction.setActionDefinitionName("composite-action");
ActionCondition actionCondition = new ActionCondition();
actionCondition.setConditionDefinitionName("no-condition");
actionCondition.setParameterValues(new HashMap<>());
compositeAction.setConditions(List.of(actionCondition));
Action action = createAction(actionName, parameterValues);
compositeAction.setActions(List.of(action));
rule.setAction(compositeAction);
return rule;
}
public static Action createActionWithParameters(String actionName, Map<String, String> parameterValues) {
Action compositeAction = new Action();
compositeAction.setActionDefinitionName("composite-action");
ActionCondition actionCondition = new ActionCondition();
actionCondition.setConditionDefinitionName("no-condition");
actionCondition.setParameterValues(new HashMap<>());
compositeAction.setConditions(List.of(actionCondition));
Action action = createAction(actionName, parameterValues);
action.setExecuteAsynchronously(false);
compositeAction.setActions(List.of(action));
return action;
}
public static Action createAction(String actionName, Map<String, String> parameterValues) {
Action action = new Action();
action.setActionDefinitionName(actionName);
action.setParameterValues(parameterValues);
return action;
}
public static String mapObjectToJSON(Object object) {
Gson gson = new Gson();
return gson.toJson(object);
}
/**
* Return error message that in fact means that the action has passed access restriction correctly,
* but due to non-configured smtp couldn't send email.
*
* @param userModel
* @return
*/
public static String getExpectedEmailSendFailureMessage(UserModel userModel) {
return ERROR_MESSAGE_FAILED_TO_SEND_EMAIL + userModel.getEmailAddress();
}
}

View File

@@ -0,0 +1,84 @@
package org.alfresco.rest.actions.access;
import org.alfresco.rest.RestTest;
import org.alfresco.rest.core.RestRequest;
import org.alfresco.rest.core.RestResponse;
import org.alfresco.rest.core.RestWrapper;
import org.alfresco.utility.model.UserModel;
import org.json.simple.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.util.Map;
import static org.alfresco.rest.actions.access.AccessRestrictionUtil.ERROR_MESSAGE_ACCESS_RESTRICTED;
import static org.alfresco.rest.actions.access.AccessRestrictionUtil.ERROR_MESSAGE_FIELD;
import static org.alfresco.rest.actions.access.AccessRestrictionUtil.MAIL_ACTION;
import static org.alfresco.rest.actions.access.AccessRestrictionUtil.createMailParameters;
import static org.alfresco.rest.actions.access.AccessRestrictionUtil.getExpectedEmailSendFailureMessage;
import static org.hamcrest.Matchers.containsString;
public class FormProcAdminAccessRestrictionTest extends RestTest {
private static final String ACTION_FORM_PROCESSOR_ENDPOINT = "alfresco/service/api/action/%s/formprocessor";
private static final String PROPERTY_PREFIX = "prop_";
private UserModel adminUser;
private UserModel testUser;
@Autowired
protected RestWrapper restClient;
@BeforeClass(alwaysRun = true)
public void dataPreparation() throws Exception {
adminUser = dataUser.getAdminUser();
testUser = dataUser.createRandomTestUser();
}
@BeforeMethod(alwaysRun=true)
public void setup() {
restClient.configureRequestSpec()
.setBasePath("")
.addHeader("Content-Type", "application/json");
}
@Test
public void userShouldNotCreateAMailForm() {
restClient.authenticateUser(testUser);
String body = generateBody(createMailParameters(adminUser, testUser));
String endpoint = String.format(ACTION_FORM_PROCESSOR_ENDPOINT, MAIL_ACTION);
RestRequest request = RestRequest.requestWithBody(HttpMethod.POST, body, endpoint);
RestResponse response = restClient.process(request);
response.assertThat().statusCode(HttpStatus.INTERNAL_SERVER_ERROR.value())
.assertThat().body(ERROR_MESSAGE_FIELD, containsString(ERROR_MESSAGE_ACCESS_RESTRICTED));
}
@Test
public void adminShouldCreateAMailForm() {
restClient.authenticateUser(adminUser);
String body = generateBody(createMailParameters(adminUser, testUser));
String endpoint = String.format(ACTION_FORM_PROCESSOR_ENDPOINT, MAIL_ACTION);
RestRequest request = RestRequest.requestWithBody(HttpMethod.POST, body, endpoint);
RestResponse response = restClient.process(request);
response.assertThat().statusCode(HttpStatus.INTERNAL_SERVER_ERROR.value())
.assertThat().body(ERROR_MESSAGE_FIELD, containsString(getExpectedEmailSendFailureMessage(testUser)));
}
private String generateBody(Map<String, String> mailParameters) {
JSONObject json = new JSONObject();
mailParameters.forEach((key, value) -> json.put(PROPERTY_PREFIX + key, value));
return json.toJSONString();
}
}

View File

@@ -0,0 +1,102 @@
package org.alfresco.rest.actions.access;
import org.alfresco.rest.RestTest;
import org.alfresco.rest.actions.access.pojo.Rule;
import org.alfresco.rest.core.RestRequest;
import org.alfresco.rest.core.RestResponse;
import org.alfresco.rest.core.RestWrapper;
import org.alfresco.utility.model.FileModel;
import org.alfresco.utility.model.FileType;
import org.alfresco.utility.model.FolderModel;
import org.alfresco.utility.model.UserModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import static org.alfresco.rest.actions.access.AccessRestrictionUtil.ERROR_MESSAGE_ACCESS_RESTRICTED;
import static org.alfresco.rest.actions.access.AccessRestrictionUtil.ERROR_MESSAGE_FIELD;
import static org.alfresco.rest.actions.access.AccessRestrictionUtil.MAIL_ACTION;
import static org.alfresco.rest.actions.access.AccessRestrictionUtil.createMailParameters;
import static org.alfresco.rest.actions.access.AccessRestrictionUtil.createRuleWithAction;
import static org.alfresco.rest.actions.access.AccessRestrictionUtil.mapObjectToJSON;
import static org.hamcrest.Matchers.containsString;
public class RuleAdminAccessRestrictionTest extends RestTest {
private static final String CREATE_RULE_ENDPOINT = "alfresco/service/api/node/workspace/SpacesStore/%s/ruleset/rules";
private UserModel adminUser;
private UserModel testUser;
private FolderModel testFolder;
@Autowired
protected RestWrapper restClient;
@BeforeClass(alwaysRun = true)
public void dataPreparation() throws Exception {
adminUser = dataUser.getAdminUser();
testUser = dataUser.createRandomTestUser();
testSite = dataSite.usingUser(testUser)
.createPublicRandomSite();
testFolder = dataContent.usingUser(testUser)
.usingSite(testSite)
.createFolder();
}
@BeforeMethod(alwaysRun=true)
public void setup() {
restClient.configureRequestSpec().setBasePath("");
}
@Test
public void userShouldNotBeAbleToCreateANewRule() {
restClient.authenticateUser(testUser);
Rule rule = createRuleWithAction(MAIL_ACTION, createMailParameters(adminUser, testUser));
String ruleRequestBody = mapObjectToJSON(rule);
String ruleEndpoint = String.format(CREATE_RULE_ENDPOINT, testFolder.getNodeRef());
RestRequest request = RestRequest.requestWithBody(HttpMethod.POST, ruleRequestBody, ruleEndpoint);
RestResponse response = restClient.process(request);
response.assertThat().statusCode(HttpStatus.INTERNAL_SERVER_ERROR.value())
.assertThat().body(ERROR_MESSAGE_FIELD, containsString(ERROR_MESSAGE_ACCESS_RESTRICTED));
}
@Test
public void adminShouldBeAbleToCreateANewRule() {
restClient.authenticateUser(adminUser);
Rule rule = createRuleWithAction(MAIL_ACTION, createMailParameters(adminUser, testUser));
String ruleRequestBody = mapObjectToJSON(rule);
String ruleEndpoint = String.format(CREATE_RULE_ENDPOINT, testFolder.getNodeRef());
RestRequest request = RestRequest.requestWithBody(HttpMethod.POST, ruleRequestBody, ruleEndpoint);
RestResponse response = restClient.process(request);
response.assertThat().statusCode(HttpStatus.OK.value());
}
@Test
public void userShouldAddAFileToFolderWithMailRule() {
restClient.authenticateUser(adminUser);
Rule rule = createRuleWithAction(MAIL_ACTION, createMailParameters(adminUser, testUser));
String ruleRequestBody = mapObjectToJSON(rule);
String ruleEndpoint = String.format(CREATE_RULE_ENDPOINT, testFolder.getNodeRef());
RestRequest request = RestRequest.requestWithBody(HttpMethod.POST, ruleRequestBody, ruleEndpoint);
RestResponse response = restClient.process(request);
response.assertThat().statusCode(HttpStatus.OK.value());
dataContent.usingUser(testUser)
.usingSite(testSite)
.usingResource(testFolder)
.createContent(FileModel.getRandomFileModel(FileType.TEXT_PLAIN));
}
}

View File

@@ -0,0 +1,76 @@
package org.alfresco.rest.actions.access;
import org.alfresco.rest.actions.access.pojo.Action;
import org.alfresco.rest.RestTest;
import org.alfresco.rest.core.RestRequest;
import org.alfresco.rest.core.RestResponse;
import org.alfresco.rest.core.RestWrapper;
import org.alfresco.utility.model.UserModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import static org.alfresco.rest.actions.access.AccessRestrictionUtil.ERROR_MESSAGE_ACCESS_RESTRICTED;
import static org.alfresco.rest.actions.access.AccessRestrictionUtil.ERROR_MESSAGE_FIELD;
import static org.alfresco.rest.actions.access.AccessRestrictionUtil.MAIL_ACTION;
import static org.alfresco.rest.actions.access.AccessRestrictionUtil.createActionWithParameters;
import static org.alfresco.rest.actions.access.AccessRestrictionUtil.createMailParameters;
import static org.alfresco.rest.actions.access.AccessRestrictionUtil.getExpectedEmailSendFailureMessage;
import static org.alfresco.rest.actions.access.AccessRestrictionUtil.mapObjectToJSON;
import static org.hamcrest.Matchers.containsString;
public class V0AdminAccessRestrictionTest extends RestTest {
private static final String ACTION_QUEUE_ENDPOINT = "alfresco/service/api/actionQueue?async=false";
private UserModel adminUser;
private UserModel testUser;
@Autowired
protected RestWrapper restClient;
@BeforeClass(alwaysRun = true)
public void dataPreparation() throws Exception {
adminUser = dataUser.getAdminUser();
testUser = dataUser.createRandomTestUser();
testSite = dataSite.usingUser(testUser)
.createPublicRandomSite();
}
@BeforeMethod(alwaysRun=true)
public void setup() {
restClient.configureRequestSpec().setBasePath("");
}
@Test
public void userShouldNotExecuteMailActionQueue() {
restClient.authenticateUser(testUser);
Action action = createActionWithParameters(MAIL_ACTION, createMailParameters(adminUser, testUser));
String actionRequestBody = mapObjectToJSON(action);
RestRequest request = RestRequest.requestWithBody(HttpMethod.POST, actionRequestBody, ACTION_QUEUE_ENDPOINT);
RestResponse response = restClient.process(request);
response.assertThat().statusCode(HttpStatus.INTERNAL_SERVER_ERROR.value())
.assertThat().body(ERROR_MESSAGE_FIELD, containsString(ERROR_MESSAGE_ACCESS_RESTRICTED));
}
@Test
public void adminShouldExecuteMailActionQueue() {
restClient.authenticateUser(adminUser);
Action action = createActionWithParameters(MAIL_ACTION, createMailParameters(adminUser, testUser));
String actionRequestBody = mapObjectToJSON(action);
RestRequest request = RestRequest.requestWithBody(HttpMethod.POST, actionRequestBody, ACTION_QUEUE_ENDPOINT);
RestResponse response = restClient.process(request);
response.assertThat().statusCode(HttpStatus.INTERNAL_SERVER_ERROR.value())
.assertThat().body(ERROR_MESSAGE_FIELD, containsString(getExpectedEmailSendFailureMessage(testUser)));
}
}

View File

@@ -0,0 +1,64 @@
package org.alfresco.rest.actions.access;
import org.alfresco.rest.RestTest;
import org.alfresco.utility.model.FolderModel;
import org.alfresco.utility.model.UserModel;
import org.springframework.http.HttpStatus;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import org.alfresco.rest.core.RestWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import static org.alfresco.rest.actions.access.AccessRestrictionUtil.ERROR_MESSAGE_ACCESS_RESTRICTED;
import static org.alfresco.rest.actions.access.AccessRestrictionUtil.MAIL_ACTION;
import static org.alfresco.rest.actions.access.AccessRestrictionUtil.createMailParameters;
import static org.hamcrest.Matchers.notNullValue;
import static org.hamcrest.Matchers.nullValue;
public class V1AdminAccessRestrictionTest extends RestTest {
private UserModel adminUser;
private UserModel testUser;
private FolderModel testFolder;
@Autowired
protected RestWrapper restClient;
@BeforeClass(alwaysRun = true)
public void dataPreparation() throws Exception {
adminUser = dataUser.getAdminUser();
testUser = dataUser.createRandomTestUser();
testSite = dataSite.usingUser(testUser)
.createPublicRandomSite();
testFolder = dataContent.usingUser(testUser)
.usingSite(testSite)
.createFolder();
}
@Test
public void userShouldNotExecuteMailAction() throws Exception {
restClient.authenticateUser(testUser)
.withCoreAPI()
.usingActions()
.executeAction(MAIL_ACTION, testFolder, createMailParameters(adminUser, testUser));
restClient.onResponse()
.assertThat().statusCode(HttpStatus.INTERNAL_SERVER_ERROR.value())
.assertThat().body("entry.id", nullValue());
restClient.assertLastError().containsSummary(ERROR_MESSAGE_ACCESS_RESTRICTED);
}
@Test
public void adminShouldExecuteMailAction() throws Exception {
restClient.authenticateUser(adminUser)
.withCoreAPI()
.usingActions()
.executeAction(MAIL_ACTION, testFolder, createMailParameters(adminUser, testUser));
restClient.onResponse()
.assertThat().statusCode(HttpStatus.ACCEPTED.value())
.assertThat().body("entry.id", notNullValue());
}
}

View File

@@ -0,0 +1,57 @@
package org.alfresco.rest.actions.access.pojo;
import java.util.List;
import java.util.Map;
public class Action {
private String actionDefinitionName;
private String actionedUponNode;
private List<ActionCondition> conditions;
private List<Action> actions;
private Map<String, String> parameterValues;
private boolean executeAsynchronously;
public void setExecuteAsynchronously(boolean executeAsynchronously) {
this.executeAsynchronously = executeAsynchronously;
}
public String getActionDefinitionName() {
return actionDefinitionName;
}
public void setActionDefinitionName(String actionDefinitionName) {
this.actionDefinitionName = actionDefinitionName;
}
public String getActionedUponNode() {
return actionedUponNode;
}
public void setActionedUponNode(String actionedUponNode) {
this.actionedUponNode = actionedUponNode;
}
public List<ActionCondition> getConditions() {
return conditions;
}
public void setConditions(List<ActionCondition> conditions) {
this.conditions = conditions;
}
public List<Action> getActions() {
return actions;
}
public void setActions(List<Action> actions) {
this.actions = actions;
}
public Map<String, String> getParameterValues() {
return parameterValues;
}
public void setParameterValues(Map<String, String> parameterValues) {
this.parameterValues = parameterValues;
}
}

View File

@@ -0,0 +1,24 @@
package org.alfresco.rest.actions.access.pojo;
import java.util.Map;
public class ActionCondition {
private String conditionDefinitionName;
private Map<String, String> parameterValues;
public String getConditionDefinitionName() {
return conditionDefinitionName;
}
public void setConditionDefinitionName(String conditionDefinitionName) {
this.conditionDefinitionName = conditionDefinitionName;
}
public Map<String, String> getParameterValues() {
return parameterValues;
}
public void setParameterValues(Map<String, String> parameterValues) {
this.parameterValues = parameterValues;
}
}

View File

@@ -0,0 +1,78 @@
package org.alfresco.rest.actions.access.pojo;
import java.util.List;
public class Rule {
private String id;
private String title;
private String description;
private List<String> ruleType;
private boolean executeAsynchronously;
private boolean disabled;
private boolean applyToChildren;
private Action action;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public List<String> getRuleType() {
return ruleType;
}
public void setRuleType(List<String> ruleType) {
this.ruleType = ruleType;
}
public boolean isExecuteAsynchronously() {
return executeAsynchronously;
}
public void setExecuteAsynchronously(boolean executeAsynchronously) {
this.executeAsynchronously = executeAsynchronously;
}
public boolean isDisabled() {
return disabled;
}
public void setDisabled(boolean disabled) {
this.disabled = disabled;
}
public boolean isApplyToChildren() {
return applyToChildren;
}
public void setApplyToChildren(boolean applyToChildren) {
this.applyToChildren = applyToChildren;
}
public Action getAction() {
return action;
}
public void setAction(Action action) {
this.action = action;
}
}

View File

@@ -7,9 +7,7 @@ import org.alfresco.utility.Utility;
import org.alfresco.utility.model.FileModel;
import org.alfresco.utility.model.FolderModel;
import org.alfresco.utility.model.SiteModel;
import org.alfresco.utility.model.UserModel;
import org.springframework.http.HttpStatus;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
@@ -40,17 +38,20 @@ public abstract class RenditionIntegrationTests extends RestTest
FileModel file = new FileModel();
file.setNodeRef(nodeId);
// 1. Create a rendition of the file using RESTAPI
// 1. Preemptively delete an existing rendition of the file using RESTAPI
restClient.withCoreAPI().usingNode(file).deleteNodeRendition(renditionId);
// 2. Create a rendition of the file using RESTAPI
restClient.withCoreAPI().usingNode(file).createNodeRendition(renditionId);
Assert.assertEquals(Integer.valueOf(restClient.getStatusCode()).intValue(), HttpStatus.ACCEPTED.value(),
"Failed to submit a request for rendition. [" + fileName+ ", " + renditionId+"] [source file, rendition ID]. ");
// 2. Verify that a rendition of the file is created and has content using RESTAPI
// 3. Verify that a rendition of the file is created and has content using RESTAPI
RestResponse restResponse = restClient.withCoreAPI().usingNode(file).getNodeRenditionContentUntilIsCreated(renditionId);
Assert.assertEquals(Integer.valueOf(restClient.getStatusCode()).intValue(), HttpStatus.OK.value(),
"Failed to produce rendition. [" + fileName+ ", " + renditionId+"] [source file, rendition ID] ");
// 3. Check the returned content type
// 4. Check the returned content type
Assert.assertEquals(restClient.getResponseHeaders().getValue("Content-Type"), expectedMimeType+";charset=UTF-8",
"Rendition was created but it has the wrong Content-Type. [" + fileName+ ", " + renditionId + "] [source file, rendition ID]");

View File

@@ -0,0 +1,395 @@
/*
* #%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.rest.rules;
import static java.util.stream.Collectors.toList;
import static org.alfresco.rest.rules.RulesTestsUtils.*;
import static org.alfresco.utility.constants.UserRole.SiteCollaborator;
import static org.alfresco.utility.constants.UserRole.SiteConsumer;
import static org.alfresco.utility.constants.UserRole.SiteContributor;
import static org.alfresco.utility.constants.UserRole.SiteManager;
import static org.alfresco.utility.model.FileModel.getRandomFileModel;
import static org.alfresco.utility.model.FileType.TEXT_PLAIN;
import static org.alfresco.utility.report.log.Step.STEP;
import static org.junit.Assert.assertEquals;
import static org.springframework.http.HttpStatus.BAD_REQUEST;
import static org.springframework.http.HttpStatus.CREATED;
import static org.springframework.http.HttpStatus.FORBIDDEN;
import static org.springframework.http.HttpStatus.NOT_FOUND;
import java.io.Serializable;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.IntStream;
import org.alfresco.rest.RestTest;
import org.alfresco.rest.model.RestActionBodyExecTemplateModel;
import org.alfresco.rest.model.RestRuleModel;
import org.alfresco.rest.model.RestRuleModelsCollection;
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.TestGroup;
import org.alfresco.utility.model.UserModel;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
/**
* Tests for POST /nodes/{nodeId}/rule-sets/{ruleSetId}/rules.
*/
@Test(groups = {TestGroup.RULES})
public class CreateRulesTests extends RestTest
{
private static final String IGNORE_ID = "id";
private static final String IGNORE_IS_SHARED = "isShared";
private UserModel user;
private SiteModel site;
private FolderModel ruleFolder;
@BeforeClass(alwaysRun = true)
public void dataPreparation()
{
user = dataUser.createRandomTestUser();
site = dataSite.usingUser(user).createPublicRandomSite();
ruleFolder = dataContent.usingUser(user).usingSite(site).createFolder();
}
/**
* Check we can create a rule.
* <p>
* Also check that the isShared field is not returned when not requested.
*/
@Test (groups = { TestGroup.REST_API, TestGroup.RULES, TestGroup.SANITY })
public void createRule()
{
RestRuleModel ruleModel = createRuleModelWithModifiedValues();
RestRuleModel rule = restClient.authenticateUser(user).withCoreAPI().usingNode(ruleFolder).usingDefaultRuleSet()
.createSingleRule(ruleModel);
RestRuleModel expectedRuleModel = createRuleModelWithModifiedValues();
expectedRuleModel.setActions(addActionContextParams(expectedRuleModel.getActions()));
expectedRuleModel.setConditions(createEmptyConditionModel());
restClient.assertStatusCodeIs(CREATED);
rule.assertThat().isEqualTo(expectedRuleModel, IGNORE_ID, IGNORE_IS_SHARED)
.assertThat().field("id").isNotNull()
.assertThat().field("isShared").isNull();
}
/** Check creating a rule in a non-existent folder returns an error. */
@Test (groups = { TestGroup.REST_API, TestGroup.RULES })
public void createRuleInNonExistentFolder()
{
STEP("Try to create a rule in non-existent folder.");
FolderModel nonExistentFolder = FolderModel.getRandomFolderModel();
nonExistentFolder.setNodeRef("fake-id");
RestRuleModel ruleModel = new RestRuleModel();
ruleModel.setName("ruleName");
restClient.authenticateUser(user).withCoreAPI().usingNode(nonExistentFolder).usingDefaultRuleSet().createSingleRule(ruleModel);
restClient.assertStatusCodeIs(NOT_FOUND);
restClient.assertLastError().containsSummary("fake-id was not found");
}
/** Check creating a rule in a non-existent rule set returns an error. */
@Test (groups = { TestGroup.REST_API, TestGroup.RULES })
public void createRuleInNonExistentRuleSet()
{
STEP("Try to create a rule in non-existent rule set.");
RestRuleModel ruleModel = new RestRuleModel();
ruleModel.setName("ruleName");
restClient.authenticateUser(user).withCoreAPI().usingNode(ruleFolder).usingRuleSet("fake-id").createSingleRule(ruleModel);
restClient.assertStatusCodeIs(NOT_FOUND);
restClient.assertLastError().containsSummary("fake-id was not found");
}
/** Try to create a rule without a name and check the error. */
@Test (groups = { TestGroup.REST_API, TestGroup.RULES })
public void createRuleWithEmptyName()
{
RestRuleModel ruleModel = createRuleModel("");
restClient.authenticateUser(user).withCoreAPI().usingNode(ruleFolder).usingDefaultRuleSet().createSingleRule(ruleModel);
restClient.assertStatusCodeIs(BAD_REQUEST);
restClient.assertLastError().containsSummary("Rule name is a mandatory parameter");
}
/** Check we can create two rules with the same name. */
@Test (groups = { TestGroup.REST_API, TestGroup.RULES })
public void duplicateRuleNameIsAcceptable()
{
RestRuleModel ruleModel = createRuleModel("duplicateRuleName");
STEP("Create two identical rules");
RestRuleModel ruleA = restClient.authenticateUser(user).withCoreAPI().usingNode(ruleFolder).usingDefaultRuleSet().createSingleRule(ruleModel);
RestRuleModel ruleB = restClient.authenticateUser(user).withCoreAPI().usingNode(ruleFolder).usingDefaultRuleSet().createSingleRule(ruleModel);
// Check that the names are the same but the ids are different.
ruleA.assertThat().field("name").is(ruleB.getName());
ruleA.assertThat().field("id").isNot(ruleB.getId());
}
/** Check that a user without permission to view the folder cannot create a rule in it. */
public void requireReadPermissionToCreateRule()
{
STEP("Create a user and use them to create a private site containing a folder");
UserModel privateUser = dataUser.createRandomTestUser();
SiteModel privateSite = dataSite.usingUser(privateUser).createPrivateRandomSite();
FolderModel privateFolder = dataContent.usingUser(privateUser).usingSite(privateSite).createFolder();
STEP("Try to use a different user to create a rule in the private folder");
RestRuleModel ruleModel = new RestRuleModel();
ruleModel.setName("ruleName");
restClient.authenticateUser(user).withCoreAPI().usingNode(privateFolder).usingDefaultRuleSet().createSingleRule(ruleModel);
restClient.assertStatusCodeIs(FORBIDDEN);
restClient.assertLastError().containsSummary("Insufficient permissions to manage rules");
}
/** Check that a Collaborator cannot create a rule in a private folder. */
public void siteCollaboratorCannotCreateRule()
{
testRolePermissionsWith(SiteCollaborator);
restClient.assertStatusCodeIs(FORBIDDEN);
restClient.assertLastError().containsSummary("Insufficient permissions to manage rules");
}
/** Check that a Contributor cannot create a rule in a private folder. */
public void siteContributorCannotCreateRule()
{
testRolePermissionsWith(SiteContributor);
restClient.assertStatusCodeIs(FORBIDDEN);
restClient.assertLastError().containsSummary("Insufficient permissions to manage rules");
}
/** Check that a Consumer cannot create a rule in a private folder. */
public void siteConsumerCannotCreateRule()
{
testRolePermissionsWith(SiteConsumer);
restClient.assertStatusCodeIs(FORBIDDEN);
restClient.assertLastError().containsSummary("Insufficient permissions to manage rules");
}
/** Check that a siteManager can create a rule in a private folder. */
public void siteManagerCanCreateRule()
{
testRolePermissionsWith(SiteManager)
.assertThat().field("id").isNotNull()
.assertThat().field("name").is("testRule");
restClient.assertStatusCodeIs(CREATED);
}
/** Check we can't create a rule under a document node. */
@Test (groups = { TestGroup.REST_API, TestGroup.RULES })
public void tryToCreateRuleUnderDocument()
{
STEP("Create a document.");
FileModel fileModel = dataContent.usingUser(user).usingSite(site).createContent(getRandomFileModel(TEXT_PLAIN));
RestRuleModel ruleModel = new RestRuleModel();
ruleModel.setName("ruleName");
restClient.authenticateUser(user).withCoreAPI().usingNode(fileModel).usingDefaultRuleSet().createSingleRule(ruleModel);
restClient.assertStatusCodeIs(BAD_REQUEST);
restClient.assertLastError().containsSummary("folder is expected");
}
/** Check we can create several rules. */
@Test (groups = { TestGroup.REST_API, TestGroup.RULES })
public void createRules()
{
STEP("Create a list of rules in one POST request");
List<String> ruleNames = List.of("ruleA", "ruleB", "ruleC");
List<RestRuleModel> ruleModels = ruleNames.stream().map(RulesTestsUtils::createRuleModel).collect(toList());
RestRuleModelsCollection rules = restClient.authenticateUser(user).withCoreAPI().usingNode(ruleFolder).usingDefaultRuleSet()
.createListOfRules(ruleModels);
restClient.assertStatusCodeIs(CREATED);
assertEquals("Unexpected number of rules received in response.", ruleNames.size(), rules.getEntries().size());
IntStream.range(0, ruleModels.size()).forEach(i ->
rules.getEntries().get(i).onModel()
.assertThat().field("id").isNotNull()
.assertThat().field("name").is(ruleNames.get(i)));
}
/** Try to create several rules with an error in one of them. */
@Test (groups = { TestGroup.REST_API, TestGroup.RULES })
public void createRulesWithOneError()
{
STEP("Try to create a three rules but the middle one has an error.");
RestRuleModel ruleA = createRuleModel("ruleA");
RestRuleModel ruleB = createRuleModel("");
// Don't set a name for Rule B.
RestRuleModel ruleC = createRuleModel("ruleC");
List<RestRuleModel> ruleModels = List.of(ruleA, ruleB, ruleC);
restClient.authenticateUser(user).withCoreAPI().usingNode(ruleFolder).usingDefaultRuleSet().createListOfRules(ruleModels);
restClient.assertStatusCodeIs(BAD_REQUEST);
restClient.assertLastError().containsSummary("Rule name is a mandatory parameter");
}
/** Check we can create a rule without description. */
@Test (groups = { TestGroup.REST_API, TestGroup.RULES })
public void createRuleWithoutDescription()
{
RestRuleModel ruleModel = createRuleModelWithDefaultValues();
UserModel admin = dataUser.getAdminUser();
RestRuleModel rule = restClient.authenticateUser(admin).withCoreAPI().usingNode(ruleFolder).usingDefaultRuleSet()
.createSingleRule(ruleModel);
restClient.assertStatusCodeIs(CREATED);
rule.assertThat().field("id").isNotNull()
.assertThat().field("name").is(RULE_NAME_DEFAULT)
.assertThat().field("description").isNull();
}
/** Check we can create a rule without specifying triggers but with the default "inbound" value. */
@Test (groups = { TestGroup.REST_API, TestGroup.RULES })
public void createRuleWithoutTriggers()
{
RestRuleModel ruleModel = createRuleModelWithDefaultValues();
UserModel admin = dataUser.getAdminUser();
RestRuleModel rule = restClient.authenticateUser(admin).withCoreAPI().usingNode(ruleFolder).usingDefaultRuleSet()
.createSingleRule(ruleModel);
restClient.assertStatusCodeIs(CREATED);
rule.assertThat().field("id").isNotNull()
.assertThat().field("name").is(RULE_NAME_DEFAULT)
.assertThat().field("triggers").is(List.of("inbound"));
}
/** Check we can create a rule without error script. */
@Test (groups = { TestGroup.REST_API, TestGroup.RULES })
public void createRuleWithoutErrorScript()
{
RestRuleModel ruleModel = createRuleModelWithDefaultValues();
UserModel admin = dataUser.getAdminUser();
RestRuleModel rule = restClient.authenticateUser(admin).withCoreAPI().usingNode(ruleFolder).usingDefaultRuleSet()
.createSingleRule(ruleModel);
restClient.assertStatusCodeIs(CREATED);
rule.assertThat().field("id").isNotNull()
.assertThat().field("name").is(RULE_NAME_DEFAULT)
.assertThat().field("errorScript").isNull();
}
/** Check we can create a rule with irrelevant isShared flag, and it doesn't have impact to the process. */
@Test (groups = { TestGroup.REST_API, TestGroup.RULES })
public void createRuleWithSharedFlag()
{
RestRuleModel ruleModel = createRuleModelWithDefaultValues();
ruleModel.setIsShared(true);
UserModel admin = dataUser.getAdminUser();
RestRuleModel rule = restClient.authenticateUser(admin).withCoreAPI().usingNode(ruleFolder).usingDefaultRuleSet()
.createSingleRule(ruleModel);
restClient.assertStatusCodeIs(CREATED);
rule.assertThat().field("id").isNotNull()
.assertThat().field("name").is(RULE_NAME_DEFAULT)
.assertThat().field("isShared").isNull();
}
/** Check we can create a rule. */
@Test (groups = { TestGroup.REST_API, TestGroup.RULES, TestGroup.SANITY })
public void createRuleAndIncludeFieldsInResponse()
{
RestRuleModel ruleModel = createRuleModel("ruleName");
RestRuleModel rule = restClient.authenticateUser(user).withCoreAPI().usingNode(ruleFolder).usingDefaultRuleSet()
.include("isShared")
.createSingleRule(ruleModel);
restClient.assertStatusCodeIs(CREATED);
rule.assertThat().field("isShared").isNotNull();
}
public RestRuleModel testRolePermissionsWith(UserRole userRole)
{
STEP("Create a user and use them to create a private site containing a folder");
SiteModel privateSite = dataSite.usingUser(user).createPrivateRandomSite();
FolderModel privateFolder = dataContent.usingUser(user).usingSite(privateSite).createFolder();
STEP(String.format("Add a user with '%s' role in the private site's folder", userRole.toString()));
UserModel userWithRole = dataUser.createRandomTestUser();
dataUser.addUserToSite(userWithRole, privateSite, userRole);
RestRuleModel ruleModel = createRuleModel("testRule", List.of(createDefaultActionModel()));
return restClient.authenticateUser(userWithRole).withCoreAPI().usingNode(privateFolder).usingDefaultRuleSet().createSingleRule(ruleModel);
}
/**
* Check we can create a rule with several actions.
*/
@Test(groups = {TestGroup.REST_API, TestGroup.RULES})
public void createRuleWithActions()
{
final Map<String, Serializable> copyParams =
Map.of("destination-folder", "dummy-folder-node", "deep-copy", true);
final RestActionBodyExecTemplateModel copyAction = createCustomActionModel("copy", copyParams);
final Map<String, Serializable> checkOutParams =
Map.of("destination-folder", "dummy-folder-node", "assoc-name", "cm:checkout", "assoc-type",
"cm:contains");
final RestActionBodyExecTemplateModel checkOutAction = createCustomActionModel("check-out", checkOutParams);
final Map<String, Serializable> scriptParams = Map.of("script-ref", "dummy-script-node-id");
final RestActionBodyExecTemplateModel scriptAction = createCustomActionModel("script", scriptParams);
final RestRuleModel ruleModel = createRuleModelWithDefaultValues();
ruleModel.setActions(Arrays.asList(copyAction, checkOutAction, scriptAction));
final UserModel admin = dataUser.getAdminUser();
final RestRuleModel rule = restClient.authenticateUser(admin).withCoreAPI().usingNode(ruleFolder).usingDefaultRuleSet()
.createSingleRule(ruleModel);
final RestRuleModel expectedRuleModel = createRuleModelWithDefaultValues();
expectedRuleModel.setActions(addActionContextParams(Arrays.asList(copyAction, checkOutAction, scriptAction)));
expectedRuleModel.setConditions(createEmptyConditionModel());
expectedRuleModel.setTriggers(List.of("inbound"));
restClient.assertStatusCodeIs(CREATED);
rule.assertThat().isEqualTo(expectedRuleModel, IGNORE_ID, IGNORE_IS_SHARED)
.assertThat().field("isShared").isNull();
}
}

Some files were not shown because too many files have changed in this diff Show More