From 4bae0f2060d8b602a52f17a5b4d093d05fa47248 Mon Sep 17 00:00:00 2001 From: Tom Page Date: Fri, 12 Aug 2022 15:37:57 +0100 Subject: [PATCH] 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. --- .../alfresco/rest/rules/CreateRulesTests.java | 23 +- .../alfresco/rest/rules/GetRuleSetsTests.java | 7 +- .../alfresco/rest/rules/GetRulesTests.java | 47 +++- .../alfresco/rest/rules/UpdateRulesTests.java | 24 +- pom.xml | 2 +- .../java/org/alfresco/rest/api/Rules.java | 16 +- .../rest/api/impl/rules/RuleLoader.java | 64 +++++ .../rest/api/impl/rules/RuleSetLoader.java | 2 +- .../rest/api/impl/rules/RulesImpl.java | 34 ++- .../alfresco/rest/api/model/rules/Rule.java | 41 ++-- .../rest/api/nodes/NodeRulesRelation.java | 14 +- .../alfresco/public-rest-context.xml | 6 + .../rest/api/impl/rules/RuleLoaderTest.java | 121 ++++++++++ .../rest/api/impl/rules/RulesImplTest.java | 220 ++++++++---------- .../rest/api/model/rules/RuleTest.java | 6 +- .../rest/api/nodes/NodeRulesRelationTest.java | 23 +- .../framework/tests/core/ParamsExtender.java | 6 + 17 files changed, 458 insertions(+), 198 deletions(-) create mode 100644 remote-api/src/main/java/org/alfresco/rest/api/impl/rules/RuleLoader.java create mode 100644 remote-api/src/test/java/org/alfresco/rest/api/impl/rules/RuleLoaderTest.java diff --git a/packaging/tests/tas-restapi/src/test/java/org/alfresco/rest/rules/CreateRulesTests.java b/packaging/tests/tas-restapi/src/test/java/org/alfresco/rest/rules/CreateRulesTests.java index 0d01ddb434..f8a80614e0 100644 --- a/packaging/tests/tas-restapi/src/test/java/org/alfresco/rest/rules/CreateRulesTests.java +++ b/packaging/tests/tas-restapi/src/test/java/org/alfresco/rest/rules/CreateRulesTests.java @@ -72,7 +72,11 @@ public class CreateRulesTests extends RestTest ruleFolder = dataContent.usingUser(user).usingSite(site).createFolder(); } - /** Check we can create a rule. */ + /** + * Check we can create a rule. + *

+ * Also check that the isShared field is not returned when not requested. + */ @Test (groups = { TestGroup.REST_API, TestGroup.RULES, TestGroup.SANITY }) public void createRule() { @@ -83,7 +87,8 @@ public class CreateRulesTests extends RestTest restClient.assertStatusCodeIs(CREATED); rule.assertThat().field("id").isNotNull() - .assertThat().field("name").is("ruleName"); + .assertThat().field("name").is("ruleName") + .assertThat().field("isShared").isNull(); } /** Check creating a rule in a non-existent folder returns an error. */ @@ -252,6 +257,20 @@ public class CreateRulesTests extends RestTest restClient.assertLastError().containsSummary("Rule name is a mandatory parameter"); } + /** 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"); diff --git a/packaging/tests/tas-restapi/src/test/java/org/alfresco/rest/rules/GetRuleSetsTests.java b/packaging/tests/tas-restapi/src/test/java/org/alfresco/rest/rules/GetRuleSetsTests.java index 29eb3bc8a2..a774966424 100644 --- a/packaging/tests/tas-restapi/src/test/java/org/alfresco/rest/rules/GetRuleSetsTests.java +++ b/packaging/tests/tas-restapi/src/test/java/org/alfresco/rest/rules/GetRuleSetsTests.java @@ -33,7 +33,6 @@ import static org.springframework.http.HttpStatus.OK; import org.alfresco.rest.RestTest; import org.alfresco.rest.model.RestRuleModel; -import org.alfresco.rest.model.RestRuleModelsCollection; import org.alfresco.rest.model.RestRuleSetModel; import org.alfresco.rest.model.RestRuleSetModelsCollection; import org.alfresco.utility.model.FolderModel; @@ -122,7 +121,7 @@ public class GetRuleSetsTests extends RestTest STEP("Get the rule sets and owning folders"); RestRuleSetModelsCollection ruleSets = restClient.authenticateUser(user).withCoreAPI() .usingNode(ruleFolder) - .usingParams("include=owningFolder") + .include("owningFolder") .getListOfRuleSets(); restClient.assertStatusCodeIs(OK); @@ -139,7 +138,7 @@ public class GetRuleSetsTests extends RestTest STEP("Get the rule sets and inclusion type"); RestRuleSetModelsCollection ruleSets = restClient.authenticateUser(user).withCoreAPI() .usingNode(ruleFolder) - .usingParams("include=inclusionType") + .include("inclusionType") .getListOfRuleSets(); restClient.assertStatusCodeIs(OK); @@ -201,7 +200,7 @@ public class GetRuleSetsTests extends RestTest STEP("Get the rule set and owning folder"); RestRuleSetModel ruleSet = restClient.authenticateUser(user).withCoreAPI() .usingNode(ruleFolder) - .usingParams("include=owningFolder") + .include("owningFolder") .getRuleSet(ruleSetId); restClient.assertStatusCodeIs(OK); diff --git a/packaging/tests/tas-restapi/src/test/java/org/alfresco/rest/rules/GetRulesTests.java b/packaging/tests/tas-restapi/src/test/java/org/alfresco/rest/rules/GetRulesTests.java index a4bbecac66..58c1b4e593 100644 --- a/packaging/tests/tas-restapi/src/test/java/org/alfresco/rest/rules/GetRulesTests.java +++ b/packaging/tests/tas-restapi/src/test/java/org/alfresco/rest/rules/GetRulesTests.java @@ -91,7 +91,11 @@ public class GetRulesTests extends RestTest assertTrue("Expected no rules to be present.", rules.isEmpty()); } - /** Check we can get all the rules for a folder. */ + /** + * Check we can get all the rules for a folder. + *

+ * Also check that the isShared field is not returned when not requested. + */ @Test (groups = { TestGroup.REST_API, TestGroup.RULES, TestGroup.SANITY }) public void getRulesList() { @@ -102,8 +106,9 @@ public class GetRulesTests extends RestTest rules.assertThat().entriesListCountIs(createdRules.size()); IntStream.range(0, createdRules.size()).forEach(i -> rules.getEntries().get(i).onModel() - .assertThat().field("id").is(createdRules.get(i).getId()) - .assertThat().field("name").is(createdRules.get(i).getName())); + .assertThat().field("id").is(createdRules.get(i).getId()) + .assertThat().field("name").is(createdRules.get(i).getName()) + .assertThat().field("isShared").isNull()); } /** Check we get a 404 if trying to load rules for a folder that doesn't exist. */ @@ -128,7 +133,26 @@ public class GetRulesTests extends RestTest restClient.assertStatusCodeIs(NOT_FOUND); } - /** Check we can get a rule by its id. */ + /** Check we can get all the rules for a folder along with the extra "include" fields. */ + @Test (groups = { TestGroup.REST_API, TestGroup.RULES, TestGroup.SANITY }) + public void getRulesListWithIncludedFields() + { + STEP("Get the rules that apply to the folder"); + RestRuleModelsCollection rules = restClient.authenticateUser(user).withCoreAPI().usingNode(ruleFolder).usingDefaultRuleSet() + .include("isShared") + .getListOfRules(); + + rules.assertThat().entriesListCountIs(createdRules.size()); + IntStream.range(0, createdRules.size()).forEach(i -> + rules.getEntries().get(i).onModel() + .assertThat().field("isShared").isNotNull()); + } + + /** + * Check we can get a rule by its id. + *

+ * Also check that the isShared field is not returned when not requested. + */ @Test (groups = { TestGroup.REST_API, TestGroup.RULES, TestGroup.SANITY }) public void getSingleRule() { @@ -138,7 +162,8 @@ public class GetRulesTests extends RestTest restClient.assertStatusCodeIs(OK); rule.assertThat().field("id").is(createdRuleA.getId()) - .assertThat().field("name").is(createdRuleA.getName()); + .assertThat().field("name").is(createdRuleA.getName()) + .assertThat().field("isShared").isNull(); } /** Check we get a 404 if trying to load a rule from a folder that doesn't exist. */ @@ -174,6 +199,18 @@ public class GetRulesTests extends RestTest restClient.assertStatusCodeIs(NOT_FOUND); } + /** Check we can get a rule by its id along with any included fields. */ + @Test (groups = { TestGroup.REST_API, TestGroup.RULES, TestGroup.SANITY }) + public void getSingleRuleWithIncludedFields() + { + STEP("Load a particular rule"); + RestRuleModel rule = restClient.authenticateUser(user).withCoreAPI().usingNode(ruleFolder).usingDefaultRuleSet() + .include("isShared") + .getSingleRule(createdRuleA.getId()); + + rule.assertThat().field("isShared").isNotNull(); + } + /** Check that a user without read permission cannot view the folder rules. */ public void requireReadPermissionToGetRule() { diff --git a/packaging/tests/tas-restapi/src/test/java/org/alfresco/rest/rules/UpdateRulesTests.java b/packaging/tests/tas-restapi/src/test/java/org/alfresco/rest/rules/UpdateRulesTests.java index 4392334a26..036f420316 100644 --- a/packaging/tests/tas-restapi/src/test/java/org/alfresco/rest/rules/UpdateRulesTests.java +++ b/packaging/tests/tas-restapi/src/test/java/org/alfresco/rest/rules/UpdateRulesTests.java @@ -64,7 +64,11 @@ public class UpdateRulesTests extends RestTest ruleFolder = dataContent.usingUser(user).usingSite(site).createFolder(); } - /** Check we can update a rule. */ + /** + * Check we can update a rule. + *

+ * Also check that the isShared field is not returned when not requested. + */ @Test (groups = { TestGroup.REST_API, TestGroup.RULES, TestGroup.SANITY }) public void updateRule() { @@ -77,7 +81,8 @@ public class UpdateRulesTests extends RestTest restClient.assertStatusCodeIs(OK); updatedRule.assertThat().field("id").is(rule.getId()) - .assertThat().field("name").is("Updated rule name"); + .assertThat().field("name").is("Updated rule name") + .assertThat().field("isShared").isNull(); } /** Check we get a 404 if trying to update a rule in a folder that doesn't exist. */ @@ -179,6 +184,21 @@ public class UpdateRulesTests extends RestTest updatedRule.assertThat().field("id").is(rule.getId()); } + /** Check we can update a rule and get the included fields. */ + @Test (groups = { TestGroup.REST_API, TestGroup.RULES, TestGroup.SANITY }) + public void updateRuleWithIncludedFields() + { + RestRuleModel rule = createAndSaveRule("Rule name"); + + STEP("Try to update the rule."); + RestRuleModel updatedRuleModel = createRuleModel("Updated rule name"); + RestRuleModel updatedRule = restClient.authenticateUser(user).withCoreAPI().usingNode(ruleFolder).usingDefaultRuleSet() + .include("isShared") + .updateRule(rule.getId(), updatedRuleModel); + + updatedRule.assertThat().field("isShared").isNotNull(); + } + private RestRuleModel createAndSaveRule(String name) { return createAndSaveRule(name, List.of(createActionModel())); diff --git a/pom.xml b/pom.xml index 7d46a34545..96c74abbe3 100644 --- a/pom.xml +++ b/pom.xml @@ -120,7 +120,7 @@ 2.7.4 3.0.49 5.1.1 - 1.108 + 1.110 1.32 1.9 1.7 diff --git a/remote-api/src/main/java/org/alfresco/rest/api/Rules.java b/remote-api/src/main/java/org/alfresco/rest/api/Rules.java index d8b00fc405..4b299ba62e 100644 --- a/remote-api/src/main/java/org/alfresco/rest/api/Rules.java +++ b/remote-api/src/main/java/org/alfresco/rest/api/Rules.java @@ -26,6 +26,8 @@ package org.alfresco.rest.api; +import java.util.List; + import org.alfresco.rest.api.model.rules.Rule; import org.alfresco.rest.framework.core.exceptions.InvalidArgumentException; import org.alfresco.rest.framework.resource.parameters.CollectionWithPagingInfo; @@ -33,8 +35,6 @@ import org.alfresco.rest.framework.resource.parameters.Paging; import org.alfresco.service.Experimental; import org.alfresco.service.cmr.rule.RuleServiceException; -import java.util.List; - /** * Folder node rules API. * @@ -47,10 +47,11 @@ public interface Rules * * @param folderNodeId - folder node ID * @param ruleSetId - rule set ID + * @param includes - The list of optional fields to include in the response. * @param paging - {@link Paging} information * @return {@link CollectionWithPagingInfo} containing a list page of folder rules */ - CollectionWithPagingInfo getRules(String folderNodeId, String ruleSetId, Paging paging); + CollectionWithPagingInfo getRules(String folderNodeId, String ruleSetId, List includes, Paging paging); /** * Get rule for rule's ID and check associations with folder node and rule set node @@ -58,9 +59,10 @@ public interface Rules * @param folderNodeId - folder node ID * @param ruleSetId - rule set ID * @param ruleId - rule ID + * @param includes - The list of optional fields to include in the response. * @return {@link Rule} definition */ - Rule getRuleById(String folderNodeId, String ruleSetId, String ruleId); + Rule getRuleById(String folderNodeId, String ruleSetId, String ruleId, List includes); /** * Create new rules (and potentially a rule set if "_default_" is supplied). @@ -68,11 +70,12 @@ public interface Rules * @param folderNodeId The node id of a folder. * @param ruleSetId The id of a rule set (or "_default_" to use/create the default rule set for the folder). * @param rule The definition of the rule. + * @param includes The list of optional fields to include in the response. * @return The newly created rules. * @throws InvalidArgumentException If the nodes are not the expected types, or the rule set does not correspond to the folder. * @throws RuleServiceException If the folder is already linked to another rule set. */ - List createRules(String folderNodeId, String ruleSetId, List rule); + List createRules(String folderNodeId, String ruleSetId, List rule, List includes); /** * Update a rule. @@ -81,9 +84,10 @@ public interface Rules * @param ruleSetId The id of a rule set within the folder (or "_default_" to use the default rule set for the folder). * @param ruleId The rule id. * @param rule The new version of the rule. + * @param includes The list of optional fields to include in the response. * @return The newly updated rule. */ - Rule updateRuleById(String folderNodeId, String ruleSetId, String ruleId, Rule rule); + Rule updateRuleById(String folderNodeId, String ruleSetId, String ruleId, Rule rule, List includes); /** * Delete rule for rule's ID and check associations with folder node and rule set node diff --git a/remote-api/src/main/java/org/alfresco/rest/api/impl/rules/RuleLoader.java b/remote-api/src/main/java/org/alfresco/rest/api/impl/rules/RuleLoader.java new file mode 100644 index 0000000000..38a4e557ba --- /dev/null +++ b/remote-api/src/main/java/org/alfresco/rest/api/impl/rules/RuleLoader.java @@ -0,0 +1,64 @@ +/* + * #%L + * Alfresco Remote API + * %% + * Copyright (C) 2005 - 2022 Alfresco Software Limited + * %% + * This file is part of the Alfresco software. + * If the software was purchased under a paid Alfresco license, the terms of + * the paid license agreement will prevail. Otherwise, the software is + * provided under the following open source license terms: + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + * #L% + */ +package org.alfresco.rest.api.impl.rules; + +import java.util.List; + +import org.alfresco.rest.api.model.rules.Rule; +import org.alfresco.service.Experimental; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.rule.RuleService; + +/** Responsible for creating {@link Rule} objects. */ +@Experimental +public class RuleLoader +{ + public static final String IS_SHARED = "isShared"; + private RuleService ruleService; + private NodeValidator nodeValidator; + + public Rule loadRule(org.alfresco.service.cmr.rule.Rule ruleModel, List includes) + { + Rule rule = Rule.from(ruleModel); + if (includes != null && includes.contains(IS_SHARED)) + { + NodeRef ruleSet = ruleService.getRuleSetNode(ruleModel.getNodeRef()); + boolean isShared = nodeValidator.isRuleSetNotNullAndShared(ruleSet); + rule.setIsShared(isShared); + } + return rule; + } + + public void setRuleService(RuleService ruleService) + { + this.ruleService = ruleService; + } + + public void setNodeValidator(NodeValidator nodeValidator) + { + this.nodeValidator = nodeValidator; + } +} diff --git a/remote-api/src/main/java/org/alfresco/rest/api/impl/rules/RuleSetLoader.java b/remote-api/src/main/java/org/alfresco/rest/api/impl/rules/RuleSetLoader.java index 3e7d10bf38..864462f5d0 100644 --- a/remote-api/src/main/java/org/alfresco/rest/api/impl/rules/RuleSetLoader.java +++ b/remote-api/src/main/java/org/alfresco/rest/api/impl/rules/RuleSetLoader.java @@ -52,7 +52,7 @@ public class RuleSetLoader * @param includes A list of fields to include. * @return The rule set object. */ - protected RuleSet loadRuleSet(NodeRef ruleSetNodeRef, NodeRef folderNodeRef, List includes) + public RuleSet loadRuleSet(NodeRef ruleSetNodeRef, NodeRef folderNodeRef, List includes) { String ruleSetId = ruleSetNodeRef.getId(); RuleSet ruleSet = RuleSet.of(ruleSetId); diff --git a/remote-api/src/main/java/org/alfresco/rest/api/impl/rules/RulesImpl.java b/remote-api/src/main/java/org/alfresco/rest/api/impl/rules/RulesImpl.java index 929ad97f96..bde57033f5 100644 --- a/remote-api/src/main/java/org/alfresco/rest/api/impl/rules/RulesImpl.java +++ b/remote-api/src/main/java/org/alfresco/rest/api/impl/rules/RulesImpl.java @@ -50,47 +50,53 @@ public class RulesImpl implements Rules private Nodes nodes; private RuleService ruleService; private NodeValidator validator; + private RuleLoader ruleLoader; @Override - public CollectionWithPagingInfo getRules(final String folderNodeId, final String ruleSetId, final Paging paging) + public CollectionWithPagingInfo getRules(final String folderNodeId, + final String ruleSetId, + final List includes, + final Paging paging) { final NodeRef folderNodeRef = validator.validateFolderNode(folderNodeId, false); - final NodeRef ruleSetNodeRef = validator.validateRuleSetNode(ruleSetId, folderNodeRef); + validator.validateRuleSetNode(ruleSetId, folderNodeRef); - final boolean isShared = validator.isRuleSetNotNullAndShared(ruleSetNodeRef); final List rules = ruleService.getRules(folderNodeRef).stream() - .map(ruleModel -> Rule.from(ruleModel, isShared)) + .map(ruleModel -> ruleLoader.loadRule(ruleModel, includes)) .collect(Collectors.toList()); return ListPage.of(rules, paging); } @Override - public Rule getRuleById(final String folderNodeId, final String ruleSetId, final String ruleId) + public Rule getRuleById(final String folderNodeId, final String ruleSetId, final String ruleId, final List includes) { final NodeRef folderNodeRef = validator.validateFolderNode(folderNodeId, false); final NodeRef ruleSetNodeRef = validator.validateRuleSetNode(ruleSetId, folderNodeRef); final NodeRef ruleNodeRef = validator.validateRuleNode(ruleId, ruleSetNodeRef); - return Rule.from(ruleService.getRule(ruleNodeRef), validator.isRuleSetNotNullAndShared(ruleSetNodeRef)); + return ruleLoader.loadRule(ruleService.getRule(ruleNodeRef), includes); } @Override - public List createRules(final String folderNodeId, final String ruleSetId, final List rules) + public List createRules(final String folderNodeId, final String ruleSetId, final List rules, final List includes) { final NodeRef folderNodeRef = validator.validateFolderNode(folderNodeId, true); // Don't validate the ruleset node if -default- is passed since we may need to create it. - final NodeRef ruleSetNodeRef = (RuleSet.isNotDefaultId(ruleSetId)) ? validator.validateRuleSetNode(ruleSetId, folderNodeRef) : null; + if (RuleSet.isNotDefaultId(ruleSetId)) + { + validator.validateRuleSetNode(ruleSetId, folderNodeRef); + } return rules.stream() .map(rule -> rule.toServiceModel(nodes)) .map(rule -> ruleService.saveRule(folderNodeRef, rule)) - .map(rule -> Rule.from(rule, validator.isRuleSetNotNullAndShared(ruleSetNodeRef, folderNodeRef))) + .map(rule -> ruleLoader.loadRule(rule, includes)) .collect(Collectors.toList()); } @Override - public Rule updateRuleById(String folderNodeId, String ruleSetId, String ruleId, Rule rule) + public Rule updateRuleById(String folderNodeId, String ruleSetId, String ruleId, Rule rule, List includes) { LOGGER.debug("Updating rule in folder {}, rule set {}, rule {} to {}", folderNodeId, ruleSetId, ruleId, rule); @@ -98,8 +104,7 @@ public class RulesImpl implements Rules NodeRef ruleSetNodeRef = validator.validateRuleSetNode(ruleSetId, folderNodeRef); validator.validateRuleNode(ruleId, ruleSetNodeRef); - boolean shared = validator.isRuleSetNotNullAndShared(ruleSetNodeRef, folderNodeRef); - return Rule.from(ruleService.saveRule(folderNodeRef, rule.toServiceModel(nodes)), shared); + return ruleLoader.loadRule(ruleService.saveRule(folderNodeRef, rule.toServiceModel(nodes)), includes); } @Override @@ -126,4 +131,9 @@ public class RulesImpl implements Rules { this.validator = validator; } + + public void setRuleLoader(RuleLoader ruleLoader) + { + this.ruleLoader = ruleLoader; + } } diff --git a/remote-api/src/main/java/org/alfresco/rest/api/model/rules/Rule.java b/remote-api/src/main/java/org/alfresco/rest/api/model/rules/Rule.java index 31782fad6a..8642c1493a 100644 --- a/remote-api/src/main/java/org/alfresco/rest/api/model/rules/Rule.java +++ b/remote-api/src/main/java/org/alfresco/rest/api/model/rules/Rule.java @@ -46,7 +46,7 @@ public class Rule private boolean enabled; private boolean cascade; private boolean asynchronous; - private boolean shared; + private Boolean isShared; private String errorScript; private List triggers; private CompositeCondition conditions; @@ -58,7 +58,7 @@ public class Rule * @param ruleModel - {@link org.alfresco.service.cmr.rule.Rule} service POJO * @return {@link Rule} REST model */ - public static Rule from(final org.alfresco.service.cmr.rule.Rule ruleModel, final boolean shared) + public static Rule from(final org.alfresco.service.cmr.rule.Rule ruleModel) { if (ruleModel == null) { @@ -70,8 +70,7 @@ public class Rule .description(ruleModel.getDescription()) .enabled(!ruleModel.getRuleDisabled()) .cascade(ruleModel.isAppliedToChildren()) - .asynchronous(ruleModel.getExecuteAsynchronously()) - .shared(shared); + .asynchronous(ruleModel.getExecuteAsynchronously()); if (ruleModel.getNodeRef() != null) { builder.id(ruleModel.getNodeRef().getId()); @@ -185,14 +184,14 @@ public class Rule this.errorScript = errorScript; } - public boolean isShared() + public Boolean isIsShared() { - return shared; + return isShared; } - public void setShared(boolean shared) + public void setIsShared(Boolean shared) { - this.shared = shared; + this.isShared = shared; } public List getTriggers() @@ -233,7 +232,7 @@ public class Rule public String toString() { return "Rule{" + "id='" + id + '\'' + ", name='" + name + '\'' + ", description='" + description + '\'' + ", enabled=" + enabled + ", cascade=" + cascade - + ", asynchronous=" + asynchronous + ", shared=" + shared + ", errorScript='" + errorScript + '\'' + ", triggers=" + triggers + ", conditions=" + conditions + + ", asynchronous=" + asynchronous + ", isShared=" + isShared + ", errorScript='" + errorScript + '\'' + ", triggers=" + triggers + ", conditions=" + conditions + ", actions=" + actions + '}'; } @@ -245,15 +244,23 @@ public class Rule if (o == null || getClass() != o.getClass()) return false; Rule rule = (Rule) o; - return enabled == rule.enabled && cascade == rule.cascade && asynchronous == rule.asynchronous && shared == rule.shared && Objects.equals(id, rule.id) && Objects.equals( - name, rule.name) && Objects.equals(description, rule.description) && Objects.equals(errorScript, rule.errorScript) && Objects.equals(triggers, rule.triggers) - && Objects.equals(conditions, rule.conditions) && Objects.equals(actions, rule.actions); + return enabled == rule.enabled + && cascade == rule.cascade + && asynchronous == rule.asynchronous + && Objects.equals(isShared, rule.isShared) + && Objects.equals(id, rule.id) + && Objects.equals(name, rule.name) + && Objects.equals(description, rule.description) + && Objects.equals(errorScript, rule.errorScript) + && Objects.equals(triggers, rule.triggers) + && Objects.equals(conditions, rule.conditions) + && Objects.equals(actions, rule.actions); } @Override public int hashCode() { - return Objects.hash(id, name, description, enabled, cascade, asynchronous, shared, errorScript, triggers, conditions, actions); + return Objects.hash(id, name, description, enabled, cascade, asynchronous, isShared, errorScript, triggers, conditions, actions); } public static Builder builder() @@ -270,7 +277,7 @@ public class Rule private boolean enabled; private boolean cascade; private boolean asynchronous; - private boolean shared; + private Boolean isShared; private String errorScript; private List triggers; private CompositeCondition conditions; @@ -312,9 +319,9 @@ public class Rule return this; } - public Builder shared(boolean shared) + public Builder isShared(Boolean isShared) { - this.shared = shared; + this.isShared = isShared; return this; } @@ -351,7 +358,7 @@ public class Rule rule.setEnabled(enabled); rule.setCascade(cascade); rule.setAsynchronous(asynchronous); - rule.setShared(shared); + rule.setIsShared(isShared); rule.setErrorScript(errorScript); rule.setTriggers(triggers); rule.setConditions(conditions); diff --git a/remote-api/src/main/java/org/alfresco/rest/api/nodes/NodeRulesRelation.java b/remote-api/src/main/java/org/alfresco/rest/api/nodes/NodeRulesRelation.java index 478d2ec4ea..fba6fee787 100644 --- a/remote-api/src/main/java/org/alfresco/rest/api/nodes/NodeRulesRelation.java +++ b/remote-api/src/main/java/org/alfresco/rest/api/nodes/NodeRulesRelation.java @@ -26,6 +26,9 @@ package org.alfresco.rest.api.nodes; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + import org.alfresco.rest.api.Rules; import org.alfresco.rest.api.model.rules.Rule; import org.alfresco.rest.framework.WebApiDescription; @@ -38,9 +41,6 @@ import org.alfresco.service.Experimental; import org.alfresco.util.PropertyCheck; import org.springframework.beans.factory.InitializingBean; -import javax.servlet.http.HttpServletResponse; -import java.util.List; - /** * Folder node's rules. * @@ -82,7 +82,7 @@ public class NodeRulesRelation implements RelationshipResourceAction.Read, { final String ruleSetId = parameters.getRelationshipId(); - return rules.getRules(folderNodeId, ruleSetId, parameters.getPaging()); + return rules.getRules(folderNodeId, ruleSetId, parameters.getInclude(), parameters.getPaging()); } /** @@ -106,7 +106,7 @@ public class NodeRulesRelation implements RelationshipResourceAction.Read, { final String ruleId = parameters.getRelationship2Id(); - return rules.getRuleById(folderNodeId, ruleSetId, ruleId); + return rules.getRuleById(folderNodeId, ruleSetId, ruleId, parameters.getInclude()); } /** @@ -129,7 +129,7 @@ public class NodeRulesRelation implements RelationshipResourceAction.Read, { final String ruleSetId = parameters.getRelationshipId(); - return rules.createRules(folderNodeId, ruleSetId, ruleList); + return rules.createRules(folderNodeId, ruleSetId, ruleList, parameters.getInclude()); } /** @@ -153,7 +153,7 @@ public class NodeRulesRelation implements RelationshipResourceAction.Read, { String ruleSetId = parameters.getRelationshipId(); String ruleId = parameters.getRelationship2Id(); - return rules.updateRuleById(folderNodeId, ruleSetId, ruleId, rule); + return rules.updateRuleById(folderNodeId, ruleSetId, ruleId, rule, parameters.getInclude()); } /** diff --git a/remote-api/src/main/resources/alfresco/public-rest-context.xml b/remote-api/src/main/resources/alfresco/public-rest-context.xml index 8eabf12edc..3e43e2fc08 100644 --- a/remote-api/src/main/resources/alfresco/public-rest-context.xml +++ b/remote-api/src/main/resources/alfresco/public-rest-context.xml @@ -880,6 +880,11 @@ + + + + + @@ -888,6 +893,7 @@ + diff --git a/remote-api/src/test/java/org/alfresco/rest/api/impl/rules/RuleLoaderTest.java b/remote-api/src/test/java/org/alfresco/rest/api/impl/rules/RuleLoaderTest.java new file mode 100644 index 0000000000..01cbc17a55 --- /dev/null +++ b/remote-api/src/test/java/org/alfresco/rest/api/impl/rules/RuleLoaderTest.java @@ -0,0 +1,121 @@ +/* + * #%L + * Alfresco Remote API + * %% + * Copyright (C) 2005 - 2022 Alfresco Software Limited + * %% + * This file is part of the Alfresco software. + * If the software was purchased under a paid Alfresco license, the terms of + * the paid license agreement will prevail. Otherwise, the software is + * provided under the following open source license terms: + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + * #L% + */ +package org.alfresco.rest.api.impl.rules; + +import static java.util.Collections.emptyList; + +import static org.alfresco.rest.api.impl.rules.RuleLoader.IS_SHARED; +import static org.alfresco.rest.api.model.rules.RuleTrigger.OUTBOUND; +import static org.alfresco.rest.api.model.rules.RuleTrigger.UPDATE; +import static org.alfresco.service.cmr.repository.StoreRef.STORE_REF_WORKSPACE_SPACESSTORE; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; +import static org.mockito.MockitoAnnotations.openMocks; + +import java.util.List; + +import org.alfresco.rest.api.model.rules.Rule; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.rule.RuleService; +import org.junit.Before; +import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; + +/** Unit tests for {@link RuleLoader}. */ +public class RuleLoaderTest +{ + private static final String NODE_ID = "node-id"; + private static final NodeRef NODE_REF = new NodeRef(STORE_REF_WORKSPACE_SPACESSTORE, NODE_ID); + private static final String TITLE = "title"; + private static final String DESCRIPTION = "description"; + private static final boolean ENABLED = true; + private static final boolean CASCADE = true; + private static final boolean EXECUTE_ASYNCHRONOUSLY = false; + private static final List TRIGGERS = List.of("update", "outbound"); + private static final NodeRef RULE_SET_NODE = new NodeRef("rule://set/"); + + @InjectMocks + private RuleLoader ruleLoader; + @Mock + private RuleService ruleServiceMock; + @Mock + private NodeValidator nodeValidatorMock; + private org.alfresco.service.cmr.rule.Rule serviceRule = createServiceRule(); + + @Before + public void setUp() + { + openMocks(this); + } + + @Test + public void testLoadRule() + { + Rule rule = ruleLoader.loadRule(serviceRule, emptyList()); + + Rule expected = Rule.builder().id(NODE_ID) + .name(TITLE) + .description(DESCRIPTION) + .enabled(ENABLED) + .cascade(CASCADE) + .asynchronous(EXECUTE_ASYNCHRONOUSLY) + .triggers(List.of(UPDATE, OUTBOUND)).create(); + assertThat(rule).isEqualTo(expected); + } + + @Test + public void testLoadRule_noExceptionWithNullInclude() + { + ruleLoader.loadRule(serviceRule, null); + } + + @Test + public void testLoadRule_includeIsShared() + { + // Simulate the rule set being shared. + given(ruleServiceMock.getRuleSetNode(NODE_REF)).willReturn(RULE_SET_NODE); + given(nodeValidatorMock.isRuleSetNotNullAndShared(RULE_SET_NODE)).willReturn(true); + + Rule rule = ruleLoader.loadRule(serviceRule, List.of(IS_SHARED)); + + assertThat(rule).extracting("isShared").isEqualTo(true); + } + + private org.alfresco.service.cmr.rule.Rule createServiceRule() + { + org.alfresco.service.cmr.rule.Rule rule = new org.alfresco.service.cmr.rule.Rule(); + rule.setNodeRef(NODE_REF); + rule.setTitle(TITLE); + rule.setDescription(DESCRIPTION); + rule.setRuleDisabled(!ENABLED); + rule.applyToChildren(CASCADE); + rule.setExecuteAsynchronously(EXECUTE_ASYNCHRONOUSLY); + rule.setRuleTypes(TRIGGERS); + return rule; + } + +} diff --git a/remote-api/src/test/java/org/alfresco/rest/api/impl/rules/RulesImplTest.java b/remote-api/src/test/java/org/alfresco/rest/api/impl/rules/RulesImplTest.java index 6d228767df..0af930be76 100644 --- a/remote-api/src/test/java/org/alfresco/rest/api/impl/rules/RulesImplTest.java +++ b/remote-api/src/test/java/org/alfresco/rest/api/impl/rules/RulesImplTest.java @@ -36,16 +36,14 @@ import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.BDDMockito.given; import static org.mockito.BDDMockito.then; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.stream.IntStream; import junit.framework.TestCase; -import org.alfresco.repo.action.ActionImpl; import org.alfresco.rest.api.Nodes; -import org.alfresco.rest.api.model.rules.CompositeCondition; import org.alfresco.rest.api.model.rules.Rule; import org.alfresco.rest.framework.core.exceptions.EntityNotFoundException; import org.alfresco.rest.framework.core.exceptions.InvalidArgumentException; @@ -54,7 +52,6 @@ import org.alfresco.rest.framework.core.exceptions.RelationshipResourceNotFoundE import org.alfresco.rest.framework.resource.parameters.CollectionWithPagingInfo; import org.alfresco.rest.framework.resource.parameters.Paging; import org.alfresco.service.Experimental; -import org.alfresco.service.cmr.action.Action; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.cmr.rule.RuleService; @@ -74,47 +71,51 @@ public class RulesImplTest extends TestCase private static final String FOLDER_NODE_ID = "dummy-folder-node-id"; private static final String RULE_SET_ID = "dummy-rule-set-id"; private static final String RULE_ID = "dummy-rule-id"; - private static final NodeRef folderNodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, FOLDER_NODE_ID); - private static final NodeRef ruleSetNodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, RULE_SET_ID); - private static final NodeRef ruleNodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, RULE_ID); - private static final Paging paging = Paging.DEFAULT; - private static final Action action = new ActionImpl(folderNodeRef, "actionId", "actionDefinitionName"); + private static final NodeRef FOLDER_NODE_REF = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, FOLDER_NODE_ID); + private static final NodeRef RULE_SET_NODE_REF = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, RULE_SET_ID); + private static final NodeRef RULE_NODE_REF = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, RULE_ID); + private static final Paging PAGING = Paging.DEFAULT; + private static final List INCLUDE = emptyList(); @Mock private Nodes nodesMock; - @Mock private NodeValidator nodeValidatorMock; - @Mock private RuleService ruleServiceMock; - + @Mock + private RuleLoader ruleLoaderMock; @InjectMocks private RulesImpl rules; + @Mock + private Rule ruleMock; + private org.alfresco.service.cmr.rule.Rule ruleModel = createRule(RULE_ID); @Before @Override public void setUp() throws Exception { MockitoAnnotations.openMocks(this); - given(nodeValidatorMock.validateFolderNode(any(), anyBoolean())).willReturn(folderNodeRef); - given(nodeValidatorMock.validateRuleSetNode(any(), any())).willReturn(ruleSetNodeRef); - given(nodeValidatorMock.validateRuleNode(any(), any())).willReturn(ruleNodeRef); + given(nodeValidatorMock.validateFolderNode(any(), anyBoolean())).willReturn(FOLDER_NODE_REF); + given(nodeValidatorMock.validateRuleSetNode(any(), any())).willReturn(RULE_SET_NODE_REF); + given(nodeValidatorMock.validateRuleNode(any(), any())).willReturn(RULE_NODE_REF); + + given(ruleServiceMock.getRule(RULE_NODE_REF)).willReturn(ruleModel); + given(ruleServiceMock.getRules(FOLDER_NODE_REF)).willReturn(List.of(ruleModel)); + + given(ruleLoaderMock.loadRule(ruleModel, INCLUDE)).willReturn(ruleMock); } @Test public void testGetRules() { - given(ruleServiceMock.getRules(any())).willReturn(List.of(createRule(RULE_ID))); - // when - final CollectionWithPagingInfo rulesPage = rules.getRules(FOLDER_NODE_ID, RULE_SET_ID, paging); + final CollectionWithPagingInfo rulesPage = rules.getRules(FOLDER_NODE_ID, RULE_SET_ID, INCLUDE, PAGING); then(nodeValidatorMock).should().validateFolderNode(FOLDER_NODE_ID, false); - then(nodeValidatorMock).should().validateRuleSetNode(RULE_SET_ID, folderNodeRef); - then(nodeValidatorMock).should().isRuleSetNotNullAndShared(ruleSetNodeRef); + then(nodeValidatorMock).should().validateRuleSetNode(RULE_SET_ID, FOLDER_NODE_REF); then(nodeValidatorMock).shouldHaveNoMoreInteractions(); - then(ruleServiceMock).should().getRules(folderNodeRef); + then(ruleServiceMock).should().getRules(FOLDER_NODE_REF); then(ruleServiceMock).shouldHaveNoMoreInteractions(); assertThat(rulesPage) .isNotNull() @@ -122,10 +123,7 @@ public class RulesImplTest extends TestCase .isNotNull() .extracting(Collection::size) .isEqualTo(1); - assertThat(rulesPage.getCollection().stream().findFirst().orElse(null)) - .isNotNull() - .extracting(Rule::getId) - .isEqualTo(RULE_ID); + assertThat(rulesPage.getCollection().stream().findFirst().get()).isEqualTo(ruleMock); } @Test @@ -134,9 +132,9 @@ public class RulesImplTest extends TestCase given(ruleServiceMock.getRules(any())).willReturn(emptyList()); // when - final CollectionWithPagingInfo rulesPage = rules.getRules(FOLDER_NODE_ID, RULE_SET_ID, paging); + final CollectionWithPagingInfo rulesPage = rules.getRules(FOLDER_NODE_ID, RULE_SET_ID, INCLUDE, PAGING); - then(ruleServiceMock).should().getRules(folderNodeRef); + then(ruleServiceMock).should().getRules(FOLDER_NODE_REF); then(ruleServiceMock).shouldHaveNoMoreInteractions(); assertThat(rulesPage) .isNotNull() @@ -156,7 +154,7 @@ public class RulesImplTest extends TestCase // when assertThatExceptionOfType(exception.getClass()).isThrownBy( - () -> rules.getRules(FOLDER_NODE_ID, RULE_SET_ID, paging)); + () -> rules.getRules(FOLDER_NODE_ID, RULE_SET_ID, INCLUDE, PAGING)); then(nodeValidatorMock).should().validateFolderNode(FOLDER_NODE_ID, false); then(nodeValidatorMock).shouldHaveNoMoreInteractions(); @@ -170,15 +168,15 @@ public class RulesImplTest extends TestCase for (Exception exception : ruleSetValidationExceptions()) { Mockito.reset(nodeValidatorMock); - given(nodeValidatorMock.validateFolderNode(any(), anyBoolean())).willReturn(folderNodeRef); + given(nodeValidatorMock.validateFolderNode(any(), anyBoolean())).willReturn(FOLDER_NODE_REF); given(nodeValidatorMock.validateRuleSetNode(any(), any())).willThrow(exception); // when assertThatExceptionOfType(exception.getClass()).isThrownBy( - () -> rules.getRules(FOLDER_NODE_ID, RULE_SET_ID, paging)); + () -> rules.getRules(FOLDER_NODE_ID, RULE_SET_ID, INCLUDE, PAGING)); then(nodeValidatorMock).should().validateFolderNode(FOLDER_NODE_ID, false); - then(nodeValidatorMock).should().validateRuleSetNode(RULE_SET_ID, folderNodeRef); + then(nodeValidatorMock).should().validateRuleSetNode(RULE_SET_ID, FOLDER_NODE_REF); then(nodeValidatorMock).shouldHaveNoMoreInteractions(); then(ruleServiceMock).shouldHaveNoInteractions(); } @@ -187,23 +185,17 @@ public class RulesImplTest extends TestCase @Test public void testGetRuleById() { - given(ruleServiceMock.getRule(any())).willReturn(createRule(RULE_ID)); - // when - final Rule rule = rules.getRuleById(FOLDER_NODE_ID, RULE_SET_ID, RULE_ID); + final Rule rule = rules.getRuleById(FOLDER_NODE_ID, RULE_SET_ID, RULE_ID, INCLUDE); then(nodeValidatorMock).should().validateFolderNode(FOLDER_NODE_ID, false); - then(nodeValidatorMock).should().validateRuleSetNode(RULE_SET_ID, folderNodeRef); - then(nodeValidatorMock).should().validateRuleNode(RULE_ID, ruleSetNodeRef); - then(nodeValidatorMock).should().isRuleSetNotNullAndShared(ruleSetNodeRef); + then(nodeValidatorMock).should().validateRuleSetNode(RULE_SET_ID, FOLDER_NODE_REF); + then(nodeValidatorMock).should().validateRuleNode(RULE_ID, RULE_SET_NODE_REF); then(nodeValidatorMock).shouldHaveNoMoreInteractions(); then(nodesMock).shouldHaveNoInteractions(); - then(ruleServiceMock).should().getRule(ruleNodeRef); + then(ruleServiceMock).should().getRule(RULE_NODE_REF); then(ruleServiceMock).shouldHaveNoMoreInteractions(); - assertThat(rule) - .isNotNull() - .extracting(Rule::getId) - .isEqualTo(RULE_ID); + assertThat(rule).isEqualTo(ruleMock); } @Test @@ -216,7 +208,7 @@ public class RulesImplTest extends TestCase // when assertThatExceptionOfType(exception.getClass()).isThrownBy( - () -> rules.getRuleById(FOLDER_NODE_ID, RULE_SET_ID, RULE_ID)); + () -> rules.getRuleById(FOLDER_NODE_ID, RULE_SET_ID, RULE_ID, INCLUDE)); then(nodeValidatorMock).should().validateFolderNode(FOLDER_NODE_ID, false); then(nodeValidatorMock).shouldHaveNoMoreInteractions(); @@ -230,15 +222,15 @@ public class RulesImplTest extends TestCase for (Exception exception : ruleSetValidationExceptions()) { Mockito.reset(nodeValidatorMock); - given(nodeValidatorMock.validateFolderNode(any(), anyBoolean())).willReturn(folderNodeRef); + given(nodeValidatorMock.validateFolderNode(any(), anyBoolean())).willReturn(FOLDER_NODE_REF); given(nodeValidatorMock.validateRuleSetNode(any(), any())).willThrow(exception); // when assertThatExceptionOfType(exception.getClass()).isThrownBy( - () -> rules.getRuleById(FOLDER_NODE_ID, RULE_SET_ID, RULE_ID)); + () -> rules.getRuleById(FOLDER_NODE_ID, RULE_SET_ID, RULE_ID, INCLUDE)); then(nodeValidatorMock).should().validateFolderNode(FOLDER_NODE_ID, false); - then(nodeValidatorMock).should().validateRuleSetNode(RULE_SET_ID, folderNodeRef); + then(nodeValidatorMock).should().validateRuleSetNode(RULE_SET_ID, FOLDER_NODE_REF); then(nodeValidatorMock).shouldHaveNoMoreInteractions(); then(ruleServiceMock).shouldHaveNoInteractions(); } @@ -250,17 +242,17 @@ public class RulesImplTest extends TestCase for (Exception exception : ruleValidationExceptions()) { Mockito.reset(nodeValidatorMock); - given(nodeValidatorMock.validateFolderNode(any(), anyBoolean())).willReturn(folderNodeRef); - given(nodeValidatorMock.validateRuleSetNode(any(), any())).willReturn(ruleSetNodeRef); + given(nodeValidatorMock.validateFolderNode(any(), anyBoolean())).willReturn(FOLDER_NODE_REF); + given(nodeValidatorMock.validateRuleSetNode(any(), any())).willReturn(RULE_SET_NODE_REF); given(nodeValidatorMock.validateRuleNode(any(), any())).willThrow(exception); // when assertThatExceptionOfType(exception.getClass()).isThrownBy( - () -> rules.getRuleById(FOLDER_NODE_ID, RULE_SET_ID, RULE_ID)); + () -> rules.getRuleById(FOLDER_NODE_ID, RULE_SET_ID, RULE_ID, INCLUDE)); then(nodeValidatorMock).should().validateFolderNode(FOLDER_NODE_ID, false); - then(nodeValidatorMock).should().validateRuleSetNode(RULE_SET_ID, folderNodeRef); - then(nodeValidatorMock).should().validateRuleNode(RULE_ID, ruleSetNodeRef); + then(nodeValidatorMock).should().validateRuleSetNode(RULE_SET_ID, FOLDER_NODE_REF); + then(nodeValidatorMock).should().validateRuleNode(RULE_ID, RULE_SET_NODE_REF); then(nodeValidatorMock).shouldHaveNoMoreInteractions(); then(ruleServiceMock).shouldHaveNoInteractions(); } @@ -275,21 +267,18 @@ public class RulesImplTest extends TestCase org.alfresco.service.cmr.rule.Rule serviceRuleBody = mock(org.alfresco.service.cmr.rule.Rule.class); given(ruleBody.toServiceModel(nodesMock)).willReturn(serviceRuleBody); org.alfresco.service.cmr.rule.Rule serviceRule = mock(org.alfresco.service.cmr.rule.Rule.class); - given(ruleServiceMock.saveRule(folderNodeRef, serviceRuleBody)).willReturn(serviceRule); - given(serviceRule.getNodeRef()).willReturn(ruleNodeRef); - given(serviceRule.getAction()).willReturn(action); + given(ruleServiceMock.saveRule(FOLDER_NODE_REF, serviceRuleBody)).willReturn(serviceRule); + given(ruleLoaderMock.loadRule(serviceRule, INCLUDE)).willReturn(ruleMock); // when - List actual = rules.createRules(folderNodeRef.getId(), ruleSetNodeRef.getId(), ruleList); + List actual = rules.createRules(FOLDER_NODE_REF.getId(), RULE_SET_NODE_REF.getId(), ruleList, INCLUDE); then(nodeValidatorMock).should().validateFolderNode(FOLDER_NODE_ID, true); - then(nodeValidatorMock).should().validateRuleSetNode(RULE_SET_ID, folderNodeRef); - then(nodeValidatorMock).should().isRuleSetNotNullAndShared(ruleSetNodeRef, folderNodeRef); + then(nodeValidatorMock).should().validateRuleSetNode(RULE_SET_ID, FOLDER_NODE_REF); then(nodeValidatorMock).shouldHaveNoMoreInteractions(); - then(nodeValidatorMock).should().isRuleSetNotNullAndShared(ruleSetNodeRef, folderNodeRef); - then(ruleServiceMock).should().saveRule(folderNodeRef, ruleBody.toServiceModel(nodesMock)); + then(ruleServiceMock).should().saveRule(FOLDER_NODE_REF, ruleBody.toServiceModel(nodesMock)); then(ruleServiceMock).shouldHaveNoMoreInteractions(); - List expected = List.of(Rule.from(serviceRule, false)); + List expected = List.of(ruleMock); assertThat(actual).isEqualTo(expected); } @@ -302,20 +291,17 @@ public class RulesImplTest extends TestCase org.alfresco.service.cmr.rule.Rule serviceRuleBody = mock(org.alfresco.service.cmr.rule.Rule.class); given(ruleBody.toServiceModel(nodesMock)).willReturn(serviceRuleBody); org.alfresco.service.cmr.rule.Rule serviceRule = mock(org.alfresco.service.cmr.rule.Rule.class); - given(ruleServiceMock.saveRule(folderNodeRef, serviceRuleBody)).willReturn(serviceRule); - given(serviceRule.getNodeRef()).willReturn(ruleNodeRef); - given(serviceRule.getAction()).willReturn(action); + given(ruleServiceMock.saveRule(FOLDER_NODE_REF, serviceRuleBody)).willReturn(serviceRule); + given(ruleLoaderMock.loadRule(serviceRule, INCLUDE)).willReturn(ruleMock); // when - List actual = rules.createRules(folderNodeRef.getId(), DEFAULT_ID, ruleList); + List actual = rules.createRules(FOLDER_NODE_REF.getId(), DEFAULT_ID, ruleList, INCLUDE); then(nodeValidatorMock).should().validateFolderNode(FOLDER_NODE_ID, true); - then(nodeValidatorMock).should().isRuleSetNotNullAndShared(null, folderNodeRef); then(nodeValidatorMock).shouldHaveNoMoreInteractions(); - then(ruleServiceMock).should().saveRule(folderNodeRef, ruleBody.toServiceModel(nodesMock)); + then(ruleServiceMock).should().saveRule(FOLDER_NODE_REF, ruleBody.toServiceModel(nodesMock)); then(ruleServiceMock).shouldHaveNoMoreInteractions(); - List expected = List.of(Rule.from(serviceRule, false)); - assertThat(actual).isEqualTo(expected); + assertThat(actual).isEqualTo(List.of(ruleMock)); } @Test @@ -324,7 +310,7 @@ public class RulesImplTest extends TestCase List ruleList = emptyList(); // when - List actual = rules.createRules(folderNodeRef.getId(), ruleSetNodeRef.getId(), ruleList); + List actual = rules.createRules(FOLDER_NODE_REF.getId(), RULE_SET_NODE_REF.getId(), ruleList, INCLUDE); then(ruleServiceMock).shouldHaveNoInteractions(); assertThat(actual).isEqualTo(emptyList()); @@ -336,30 +322,27 @@ public class RulesImplTest extends TestCase { List ruleBodyList = new ArrayList<>(); List expected = new ArrayList<>(); - for (String ruleId : List.of("A", "B", "C")) - { + IntStream.range(0, 3).forEach(i -> { Rule ruleBody = mock(Rule.class); ruleBodyList.add(ruleBody); org.alfresco.service.cmr.rule.Rule serviceRuleBody = mock(org.alfresco.service.cmr.rule.Rule.class); given(ruleBody.toServiceModel(nodesMock)).willReturn(serviceRuleBody); org.alfresco.service.cmr.rule.Rule serviceRule = mock(org.alfresco.service.cmr.rule.Rule.class); - given(ruleServiceMock.saveRule(folderNodeRef, serviceRuleBody)).willReturn(serviceRule); - NodeRef ruleNodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, ruleId); - given(serviceRule.getNodeRef()).willReturn(ruleNodeRef); - given(serviceRule.getAction()).willReturn(action); - expected.add(Rule.from(serviceRule, false)); - } + given(ruleServiceMock.saveRule(FOLDER_NODE_REF, serviceRuleBody)).willReturn(serviceRule); + Rule ruleMock = mock(Rule.class); + given(ruleLoaderMock.loadRule(serviceRule, INCLUDE)).willReturn(ruleMock); + expected.add(ruleMock); + }); // when - List actual = rules.createRules(folderNodeRef.getId(), ruleSetNodeRef.getId(), ruleBodyList); + List actual = rules.createRules(FOLDER_NODE_REF.getId(), RULE_SET_NODE_REF.getId(), ruleBodyList, INCLUDE); then(nodeValidatorMock).should().validateFolderNode(FOLDER_NODE_ID, true); - then(nodeValidatorMock).should().validateRuleSetNode(RULE_SET_ID, folderNodeRef); - then(nodeValidatorMock).should(times(ruleBodyList.size())).isRuleSetNotNullAndShared(ruleSetNodeRef, folderNodeRef); + then(nodeValidatorMock).should().validateRuleSetNode(RULE_SET_ID, FOLDER_NODE_REF); then(nodeValidatorMock).shouldHaveNoMoreInteractions(); for (Rule ruleBody : ruleBodyList) { - then(ruleServiceMock).should().saveRule(folderNodeRef, ruleBody.toServiceModel(nodesMock)); + then(ruleServiceMock).should().saveRule(FOLDER_NODE_REF, ruleBody.toServiceModel(nodesMock)); } then(ruleServiceMock).shouldHaveNoMoreInteractions(); assertThat(actual).isEqualTo(expected); @@ -375,7 +358,7 @@ public class RulesImplTest extends TestCase // when assertThatExceptionOfType(exception.getClass()).isThrownBy( - () -> rules.createRules(folderNodeRef.getId(), ruleSetNodeRef.getId(), emptyList())); + () -> rules.createRules(FOLDER_NODE_REF.getId(), RULE_SET_NODE_REF.getId(), emptyList(), INCLUDE)); then(nodeValidatorMock).should().validateFolderNode(FOLDER_NODE_ID, true); then(nodeValidatorMock).shouldHaveNoMoreInteractions(); @@ -389,15 +372,15 @@ public class RulesImplTest extends TestCase for (Exception exception : ruleSetValidationExceptions()) { Mockito.reset(nodeValidatorMock); - given(nodeValidatorMock.validateFolderNode(any(), anyBoolean())).willReturn(folderNodeRef); + given(nodeValidatorMock.validateFolderNode(any(), anyBoolean())).willReturn(FOLDER_NODE_REF); given(nodeValidatorMock.validateRuleSetNode(any(), any())).willThrow(exception); // when assertThatExceptionOfType(exception.getClass()).isThrownBy( - () -> rules.createRules(folderNodeRef.getId(), ruleSetNodeRef.getId(), emptyList())); + () -> rules.createRules(FOLDER_NODE_REF.getId(), RULE_SET_NODE_REF.getId(), emptyList(), INCLUDE)); then(nodeValidatorMock).should().validateFolderNode(FOLDER_NODE_ID, true); - then(nodeValidatorMock).should().validateRuleSetNode(RULE_SET_ID, folderNodeRef); + then(nodeValidatorMock).should().validateRuleSetNode(RULE_SET_ID, FOLDER_NODE_REF); then(nodeValidatorMock).shouldHaveNoMoreInteractions(); then(ruleServiceMock).shouldHaveNoInteractions(); } @@ -408,33 +391,22 @@ public class RulesImplTest extends TestCase public void testUpdateRuleById() { Rule ruleBody = mock(Rule.class); - given(nodeValidatorMock.isRuleSetNotNullAndShared(any(), any())).willReturn(true); org.alfresco.service.cmr.rule.Rule serviceRuleBody = mock(org.alfresco.service.cmr.rule.Rule.class); given(ruleBody.toServiceModel(nodesMock)).willReturn(serviceRuleBody); org.alfresco.service.cmr.rule.Rule serviceRule = mock(org.alfresco.service.cmr.rule.Rule.class); - given(ruleServiceMock.saveRule(folderNodeRef, serviceRuleBody)).willReturn(serviceRule); - given(serviceRule.getNodeRef()).willReturn(ruleNodeRef); - given(serviceRule.getAction()).willReturn(action); + given(ruleServiceMock.saveRule(FOLDER_NODE_REF, serviceRuleBody)).willReturn(serviceRule); + given(ruleLoaderMock.loadRule(serviceRule, INCLUDE)).willReturn(ruleMock); // when - Rule updatedRule = rules.updateRuleById(folderNodeRef.getId(), ruleSetNodeRef.getId(), RULE_ID, ruleBody); + Rule updatedRule = rules.updateRuleById(FOLDER_NODE_REF.getId(), RULE_SET_NODE_REF.getId(), RULE_ID, ruleBody, INCLUDE); then(nodeValidatorMock).should().validateFolderNode(FOLDER_NODE_ID, true); - then(nodeValidatorMock).should().validateRuleSetNode(RULE_SET_ID, folderNodeRef); - then(nodeValidatorMock).should().validateRuleNode(RULE_ID, ruleSetNodeRef); - then(nodeValidatorMock).should().isRuleSetNotNullAndShared(ruleSetNodeRef, folderNodeRef); + then(nodeValidatorMock).should().validateRuleSetNode(RULE_SET_ID, FOLDER_NODE_REF); + then(nodeValidatorMock).should().validateRuleNode(RULE_ID, RULE_SET_NODE_REF); then(nodeValidatorMock).shouldHaveNoMoreInteractions(); - then(ruleServiceMock).should().saveRule(folderNodeRef, serviceRuleBody); + then(ruleServiceMock).should().saveRule(FOLDER_NODE_REF, serviceRuleBody); then(ruleServiceMock).shouldHaveNoMoreInteractions(); - - - Rule expected = Rule.builder().id(RULE_ID) - .enabled(true) - .shared(true) - .triggers(emptyList()) - .conditions(CompositeCondition.builder().inverted(false).create()) - .create(); - assertThat(updatedRule).isEqualTo(expected); + assertThat(updatedRule).isEqualTo(ruleMock); } @Test @@ -447,7 +419,7 @@ public class RulesImplTest extends TestCase // when assertThatExceptionOfType(exception.getClass()).isThrownBy( - () -> rules.updateRuleById(folderNodeRef.getId(), ruleSetNodeRef.getId(), RULE_ID, mock(Rule.class))); + () -> rules.updateRuleById(FOLDER_NODE_REF.getId(), RULE_SET_NODE_REF.getId(), RULE_ID, mock(Rule.class), INCLUDE)); then(nodeValidatorMock).should().validateFolderNode(FOLDER_NODE_ID, true); then(nodeValidatorMock).shouldHaveNoMoreInteractions(); @@ -461,15 +433,15 @@ public class RulesImplTest extends TestCase for (Exception exception : ruleSetValidationExceptions()) { Mockito.reset(nodeValidatorMock); - given(nodeValidatorMock.validateFolderNode(any(), anyBoolean())).willReturn(folderNodeRef); + given(nodeValidatorMock.validateFolderNode(any(), anyBoolean())).willReturn(FOLDER_NODE_REF); given(nodeValidatorMock.validateRuleSetNode(any(), any())).willThrow(exception); // when assertThatExceptionOfType(exception.getClass()).isThrownBy( - () -> rules.updateRuleById(folderNodeRef.getId(), ruleSetNodeRef.getId(), RULE_ID, mock(Rule.class))); + () -> rules.updateRuleById(FOLDER_NODE_REF.getId(), RULE_SET_NODE_REF.getId(), RULE_ID, mock(Rule.class), INCLUDE)); then(nodeValidatorMock).should().validateFolderNode(FOLDER_NODE_ID, true); - then(nodeValidatorMock).should().validateRuleSetNode(RULE_SET_ID, folderNodeRef); + then(nodeValidatorMock).should().validateRuleSetNode(RULE_SET_ID, FOLDER_NODE_REF); then(nodeValidatorMock).shouldHaveNoMoreInteractions(); then(ruleServiceMock).shouldHaveNoInteractions(); } @@ -481,17 +453,17 @@ public class RulesImplTest extends TestCase for (Exception exception : ruleValidationExceptions()) { Mockito.reset(nodeValidatorMock); - given(nodeValidatorMock.validateFolderNode(any(), anyBoolean())).willReturn(folderNodeRef); - given(nodeValidatorMock.validateRuleSetNode(any(), any())).willReturn(ruleSetNodeRef); + given(nodeValidatorMock.validateFolderNode(any(), anyBoolean())).willReturn(FOLDER_NODE_REF); + given(nodeValidatorMock.validateRuleSetNode(any(), any())).willReturn(RULE_SET_NODE_REF); given(nodeValidatorMock.validateRuleNode(any(), any())).willThrow(exception); // when assertThatExceptionOfType(exception.getClass()).isThrownBy( - () -> rules.updateRuleById(folderNodeRef.getId(), ruleSetNodeRef.getId(), RULE_ID, mock(Rule.class))); + () -> rules.updateRuleById(FOLDER_NODE_REF.getId(), RULE_SET_NODE_REF.getId(), RULE_ID, mock(Rule.class), INCLUDE)); then(nodeValidatorMock).should().validateFolderNode(FOLDER_NODE_ID, true); - then(nodeValidatorMock).should().validateRuleSetNode(RULE_SET_ID, folderNodeRef); - then(nodeValidatorMock).should().validateRuleNode(RULE_ID, ruleSetNodeRef); + then(nodeValidatorMock).should().validateRuleSetNode(RULE_SET_ID, FOLDER_NODE_REF); + then(nodeValidatorMock).should().validateRuleNode(RULE_ID, RULE_SET_NODE_REF); then(nodeValidatorMock).shouldHaveNoMoreInteractions(); then(ruleServiceMock).shouldHaveNoInteractions(); } @@ -499,19 +471,16 @@ public class RulesImplTest extends TestCase @Test public void testDeleteRuleById() { - org.alfresco.service.cmr.rule.Rule rule = createRule(RULE_ID); - given(ruleServiceMock.getRule(any())).willReturn(rule); - //when rules.deleteRuleById(FOLDER_NODE_ID, RULE_SET_ID, RULE_ID); then(nodeValidatorMock).should().validateFolderNode(FOLDER_NODE_ID, true); - then(nodeValidatorMock).should().validateRuleSetNode(RULE_SET_ID, folderNodeRef); - then(nodeValidatorMock).should().validateRuleNode(RULE_ID, ruleSetNodeRef); + then(nodeValidatorMock).should().validateRuleSetNode(RULE_SET_ID, FOLDER_NODE_REF); + then(nodeValidatorMock).should().validateRuleNode(RULE_ID, RULE_SET_NODE_REF); then(nodeValidatorMock).shouldHaveNoMoreInteractions(); then(nodesMock).shouldHaveNoInteractions(); - then(ruleServiceMock).should().getRule(ruleNodeRef); - then(ruleServiceMock).should().removeRule(folderNodeRef, rule); + then(ruleServiceMock).should().getRule(RULE_NODE_REF); + then(ruleServiceMock).should().removeRule(FOLDER_NODE_REF, ruleModel); then(ruleServiceMock).shouldHaveNoMoreInteractions(); } @@ -539,7 +508,7 @@ public class RulesImplTest extends TestCase for (Exception exception : ruleSetValidationExceptions()) { Mockito.reset(nodeValidatorMock); - given(nodeValidatorMock.validateFolderNode(any(), anyBoolean())).willReturn(folderNodeRef); + given(nodeValidatorMock.validateFolderNode(any(), anyBoolean())).willReturn(FOLDER_NODE_REF); given(nodeValidatorMock.validateRuleSetNode(any(), any())).willThrow(exception); // when @@ -547,7 +516,7 @@ public class RulesImplTest extends TestCase () -> rules.deleteRuleById(FOLDER_NODE_ID, RULE_SET_ID, RULE_ID)); then(nodeValidatorMock).should().validateFolderNode(FOLDER_NODE_ID, true); - then(nodeValidatorMock).should().validateRuleSetNode(RULE_SET_ID, folderNodeRef); + then(nodeValidatorMock).should().validateRuleSetNode(RULE_SET_ID, FOLDER_NODE_REF); then(nodeValidatorMock).shouldHaveNoMoreInteractions(); then(ruleServiceMock).shouldHaveNoInteractions(); } @@ -559,8 +528,8 @@ public class RulesImplTest extends TestCase for (Exception exception : ruleValidationExceptions()) { Mockito.reset(nodeValidatorMock); - given(nodeValidatorMock.validateFolderNode(any(), anyBoolean())).willReturn(folderNodeRef); - given(nodeValidatorMock.validateRuleSetNode(any(), any())).willReturn(ruleSetNodeRef); + given(nodeValidatorMock.validateFolderNode(any(), anyBoolean())).willReturn(FOLDER_NODE_REF); + given(nodeValidatorMock.validateRuleSetNode(any(), any())).willReturn(RULE_SET_NODE_REF); given(nodeValidatorMock.validateRuleNode(any(), any())).willThrow(exception); // when @@ -568,8 +537,8 @@ public class RulesImplTest extends TestCase () -> rules.deleteRuleById(FOLDER_NODE_ID, RULE_SET_ID, RULE_ID)); then(nodeValidatorMock).should().validateFolderNode(FOLDER_NODE_ID, true); - then(nodeValidatorMock).should().validateRuleSetNode(RULE_SET_ID, folderNodeRef); - then(nodeValidatorMock).should().validateRuleNode(RULE_ID, ruleSetNodeRef); + then(nodeValidatorMock).should().validateRuleSetNode(RULE_SET_ID, FOLDER_NODE_REF); + then(nodeValidatorMock).should().validateRuleNode(RULE_ID, RULE_SET_NODE_REF); then(nodeValidatorMock).shouldHaveNoMoreInteractions(); then(ruleServiceMock).shouldHaveNoInteractions(); } @@ -580,7 +549,6 @@ public class RulesImplTest extends TestCase final org.alfresco.service.cmr.rule.Rule rule = new org.alfresco.service.cmr.rule.Rule(); rule.setNodeRef(nodeRef); rule.setRuleType("ruleType"); - rule.setAction(action); return rule; } diff --git a/remote-api/src/test/java/org/alfresco/rest/api/model/rules/RuleTest.java b/remote-api/src/test/java/org/alfresco/rest/api/model/rules/RuleTest.java index a21cfe575f..ed0dd4186f 100644 --- a/remote-api/src/test/java/org/alfresco/rest/api/model/rules/RuleTest.java +++ b/remote-api/src/test/java/org/alfresco/rest/api/model/rules/RuleTest.java @@ -51,7 +51,6 @@ public class RuleTest private static final boolean RULE_ENABLED = true; private static final boolean RULE_CASCADE = true; private static final boolean RULE_ASYNC = true; - private static final boolean RULE_SHARED = true; private static final String ERROR_SCRIPT = "error-script-ref"; @Test @@ -61,7 +60,7 @@ public class RuleTest final Rule expectedRule = createRuleWithDefaultValues(); // when - final Rule actualRule = Rule.from(ruleModel, RULE_SHARED); + final Rule actualRule = Rule.from(ruleModel); assertThat(actualRule).isNotNull().usingRecursiveComparison().isEqualTo(expectedRule); @@ -74,7 +73,7 @@ public class RuleTest final Rule expectedRule = Rule.builder().enabled(true).create(); // when - final Rule actualRule = Rule.from(ruleModel, false); + final Rule actualRule = Rule.from(ruleModel); assertThat(actualRule).isNotNull().usingRecursiveComparison().isEqualTo(expectedRule); @@ -108,7 +107,6 @@ public class RuleTest .enabled(RULE_ENABLED) .cascade(RULE_CASCADE) .asynchronous(RULE_ASYNC) - .shared(RULE_SHARED) .triggers(List.of(RuleTrigger.INBOUND, RuleTrigger.UPDATE)) .errorScript(ERROR_SCRIPT) .conditions(CompositeCondition.from(Collections.emptyList())) diff --git a/remote-api/src/test/java/org/alfresco/rest/api/nodes/NodeRulesRelationTest.java b/remote-api/src/test/java/org/alfresco/rest/api/nodes/NodeRulesRelationTest.java index 6537db85bf..a33373d896 100644 --- a/remote-api/src/test/java/org/alfresco/rest/api/nodes/NodeRulesRelationTest.java +++ b/remote-api/src/test/java/org/alfresco/rest/api/nodes/NodeRulesRelationTest.java @@ -26,6 +26,10 @@ package org.alfresco.rest.api.nodes; +import static org.mockito.BDDMockito.then; + +import java.util.List; + import junit.framework.TestCase; import org.alfresco.rest.api.Rules; import org.alfresco.rest.framework.resource.parameters.Paging; @@ -40,17 +44,15 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.junit.MockitoJUnitRunner; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.BDDMockito.then; - @Experimental @RunWith(MockitoJUnitRunner.class) public class NodeRulesRelationTest extends TestCase { - private static final String FOLDER_NODE_ID = "dummy-node-id"; private static final String RULE_SET_ID = "dummy-rule-set-id"; private static final String RULE_ID = "dummy-rule-id"; + private static final List INCLUDE = List.of("include-field"); + private static final Paging PAGING = Paging.DEFAULT; @Mock private Rules rulesMock; @@ -68,35 +70,34 @@ public class NodeRulesRelationTest extends TestCase @Test public void testReadAll() { - final Paging paging = Paging.DEFAULT; - final Parameters parameters = ParamsExtender.valueOf(paging, FOLDER_NODE_ID, RULE_SET_ID, null); + final Parameters parameters = ParamsExtender.valueOf(PAGING, FOLDER_NODE_ID, RULE_SET_ID, null, INCLUDE); // when nodeRulesRelation.readAll(FOLDER_NODE_ID, parameters); - then(rulesMock).should().getRules(eq(FOLDER_NODE_ID), eq(RULE_SET_ID), eq(paging)); + then(rulesMock).should().getRules(FOLDER_NODE_ID, RULE_SET_ID, INCLUDE, PAGING); then(rulesMock).shouldHaveNoMoreInteractions(); } @Test public void testReadById() { - final Parameters parameters = ParamsExtender.valueOf(null, FOLDER_NODE_ID, RULE_SET_ID, RULE_ID); + final Parameters parameters = ParamsExtender.valueOf(null, FOLDER_NODE_ID, RULE_SET_ID, RULE_ID, INCLUDE); // when nodeRulesRelation.readById(FOLDER_NODE_ID, RULE_SET_ID, parameters); - then(rulesMock).should().getRuleById(eq(FOLDER_NODE_ID), eq(RULE_SET_ID), eq(RULE_ID)); + then(rulesMock).should().getRuleById(FOLDER_NODE_ID, RULE_SET_ID, RULE_ID, INCLUDE); then(rulesMock).shouldHaveNoMoreInteractions(); } @Test public void testDeleteById() { - final Parameters parameters = ParamsExtender.valueOf(null, FOLDER_NODE_ID, RULE_SET_ID, RULE_ID); + final Parameters parameters = ParamsExtender.valueOf(null, FOLDER_NODE_ID, RULE_SET_ID, RULE_ID, INCLUDE); // when nodeRulesRelation.delete(FOLDER_NODE_ID, RULE_SET_ID, parameters); - then(rulesMock).should().deleteRuleById(eq(FOLDER_NODE_ID), eq(RULE_SET_ID), eq(RULE_ID)); + then(rulesMock).should().deleteRuleById(FOLDER_NODE_ID, RULE_SET_ID, RULE_ID); then(rulesMock).shouldHaveNoMoreInteractions(); } } diff --git a/remote-api/src/test/java/org/alfresco/rest/framework/tests/core/ParamsExtender.java b/remote-api/src/test/java/org/alfresco/rest/framework/tests/core/ParamsExtender.java index ce26c504d4..af29e9104f 100755 --- a/remote-api/src/test/java/org/alfresco/rest/framework/tests/core/ParamsExtender.java +++ b/remote-api/src/test/java/org/alfresco/rest/framework/tests/core/ParamsExtender.java @@ -28,6 +28,7 @@ package org.alfresco.rest.framework.tests.core; import static org.mockito.Mockito.mock; import java.io.InputStream; +import java.util.List; import java.util.Map; import org.alfresco.rest.framework.jacksonextensions.BeanPropertiesFilter; @@ -72,4 +73,9 @@ public class ParamsExtender extends Params { return new ParamsExtender(entityId, relationshipId, relationship2Id, null, null, null, new Params.RecognizedParams(null, paging, null, null, null, null, null, null, false)); } + + public static Params valueOf(Paging paging, String entityId, String relationshipId, String relationship2Id, List include) + { + return new ParamsExtender(entityId, relationshipId, relationship2Id, null, null, null, new Params.RecognizedParams(null, paging, null, null, include, null, null, null, false)); + } }