diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/manual/AbstractManualResourceTest.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/manual/AbstractManualResourceTest.java index 277071f653d..7575d5a157c 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/manual/AbstractManualResourceTest.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/manual/AbstractManualResourceTest.java @@ -2320,11 +2320,11 @@ protected void assertUnassignedFuture(ShadowAsserter shadowModelAsserterFutur protected void assertAttribute(PrismObject shadow, QName attrName, T... expectedValues) { - assertAttribute(resource, shadow.asObjectable(), attrName, expectedValues); + assertAttribute(shadow.asObjectable(), attrName, expectedValues); } protected void assertNoAttribute(PrismObject shadow, QName attrName) { - assertNoAttribute(resource, shadow.asObjectable(), attrName); + assertNoAttribute(shadow.asObjectable(), attrName); } protected void assertAttributeFromCache(ShadowAsserter shadowAsserter, QName attrQName, diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/misc/TestMisc.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/misc/TestMisc.java index b2cca887ed3..8111b7cbfb6 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/misc/TestMisc.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/misc/TestMisc.java @@ -387,8 +387,8 @@ public void test502GetAccountJackResourceScripty() throws Exception { displayThen(TEST_NAME); assertSuccess(result); - assertAttribute(getDummyResourceObject(RESOURCE_DUMMY_SCRIPTY_NAME), accountShadow.asObjectable(), - getDummyResourceController(RESOURCE_DUMMY_SCRIPTY_NAME).getAttributeQName(DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_SHIP_NAME), + assertAttribute(accountShadow.asObjectable(), + getDummyResourceController(RESOURCE_DUMMY_SCRIPTY_NAME).getAttributeQName(DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_SHIP_NAME), "Dummy Resource: Scripty"); lastDummyConnectorNumber = ShadowUtil.getAttributeValue(accountShadow, getDummyResourceController(RESOURCE_DUMMY_SCRIPTY_NAME).getAttributeQName(DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_WEALTH_NAME)); @@ -420,7 +420,7 @@ public void test504GetAccountJackResourceScriptyAgain() throws Exception { displayThen(TEST_NAME); assertSuccess(result); - assertAttribute(getDummyResourceObject(RESOURCE_DUMMY_SCRIPTY_NAME), accountShadow.asObjectable(), + assertAttribute(accountShadow.asObjectable(), getDummyResourceController(RESOURCE_DUMMY_SCRIPTY_NAME).getAttributeQName(DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_SHIP_NAME), "Dummy Resource: Scripty"); Integer dummyConnectorNumber = ShadowUtil.getAttributeValue(accountShadow, diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/rbac/TestMetaMeta.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/rbac/TestMetaMeta.java index 8217a0530f3..d54154dc375 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/rbac/TestMetaMeta.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/rbac/TestMetaMeta.java @@ -27,6 +27,7 @@ import java.util.function.Consumer; import java.util.stream.Collectors; +import com.evolveum.midpoint.test.asserter.prism.PrismObjectAsserter; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext.ClassMode; import org.springframework.test.context.ContextConfiguration; @@ -122,8 +123,8 @@ public void test050AddMetaMeta() throws Exception { assertSuccess(result); PrismObject role = getObject(RoleType.class, ROLE_META_META_WORLD_OID); display("Metametarole after", role); - - assertObjectSanity(role); + + new PrismObjectAsserter<>(role).assertSanity(); RoleType roleType = role.asObjectable(); PrismAsserts.assertEqualsPolyString("Wrong "+role+" name", ROLE_META_META_WORLD_NAME, roleType.getName()); @@ -380,8 +381,8 @@ public void test900LegacyAddMetaMeta() throws Exception { assertSuccess(result); PrismObject role = getObject(RoleType.class, ROLE_META_META_LEGACY_OID); display("Metametarole after", role); - - assertObjectSanity(role); + + new PrismObjectAsserter<>(role).assertSanity(); RoleType roleType = role.asObjectable(); PrismAsserts.assertEqualsPolyString("Wrong "+role+" name", ROLE_META_META_LEGACY_NAME, roleType.getName()); @@ -416,8 +417,8 @@ public void test910LegacyAddMetaLegacyOne() throws Exception { assertSuccess(result); PrismObject role = getObject(RoleType.class, ROLE_META_LEGACY_ONE_OID); display("Metarole after", role); - - assertObjectSanity(role); + + new PrismObjectAsserter<>(role).assertSanity(); RoleType roleType = role.asObjectable(); PrismAsserts.assertEqualsPolyString("Wrong "+role+" name", ROLE_META_LEGACY_ONE_NAME, roleType.getName()); @@ -460,7 +461,7 @@ public void test920LegacyCreateGroupOne() throws Exception { PrismObject roleAfter = getObject(RoleType.class, groupOneRoleOid); display("Role after", roleAfter); - assertObjectSanity(roleAfter); + new PrismObjectAsserter<>(roleAfter).assertSanity(); RoleType roleTypeAfter = roleAfter.asObjectable(); PrismAsserts.assertEqualsPolyString("Wrong "+roleAfter+" name", GROUP_ONE_NAME, roleTypeAfter.getName()); @@ -560,7 +561,7 @@ private PrismObject readAndAssertLatinGroupRole(String roleOid, String private PrismObject readAndAssertGroupRole(String roleOid, String metaroleOid, String groupName) throws ObjectNotFoundException, SchemaException, SecurityViolationException, CommunicationException, ConfigurationException, ExpressionEvaluationException, SchemaViolationException, ConflictException, InterruptedException { PrismObject role = getObject(RoleType.class, roleOid); display("Role after", role); - assertObjectSanity(role); + new PrismObjectAsserter<>(role).assertSanity(); RoleType roleType = role.asObjectable(); PrismAsserts.assertEqualsPolyString("Wrong "+role+" name", groupName, roleType.getName()); @@ -583,8 +584,8 @@ private PrismObject readAndAssertGroupRole(String roleOid, String meta private PrismObject assertMetaRole(String metaroleOid, String metaroleName) throws ObjectNotFoundException, SchemaException, SecurityViolationException, CommunicationException, ConfigurationException, ExpressionEvaluationException, SchemaViolationException, ConflictException, InterruptedException { PrismObject role = getObject(RoleType.class, metaroleOid); display("Metarole after", role); - - assertObjectSanity(role); + + new PrismObjectAsserter<>(role).assertSanity(); RoleType roleType = role.asObjectable(); PrismAsserts.assertEqualsPolyString("Wrong "+role+" name", metaroleName, roleType.getName()); diff --git a/model/model-test/src/main/java/com/evolveum/midpoint/model/test/AbstractModelIntegrationTest.java b/model/model-test/src/main/java/com/evolveum/midpoint/model/test/AbstractModelIntegrationTest.java index 1ad42d62c26..cba1eba9433 100644 --- a/model/model-test/src/main/java/com/evolveum/midpoint/model/test/AbstractModelIntegrationTest.java +++ b/model/model-test/src/main/java/com/evolveum/midpoint/model/test/AbstractModelIntegrationTest.java @@ -2370,6 +2370,13 @@ protected void assertInducements(PrismObject rol MidPointAsserts.assertInducements(role, expectedNumber); } + protected void assertInducedRoles(PrismObject role, String... roleOids) { + assertInducements(role, roleOids.length); + for (String roleOid : roleOids) { + assertInducedRole(role, roleOid); + } + } + protected void assertAssignments(PrismObject user, Class expectedType, int expectedNumber) { MidPointAsserts.assertAssignments(user, expectedType, expectedNumber); } diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/AbstractWfTest.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/AbstractWfTest.java index ffb31ba9efa..d038a495b1b 100644 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/AbstractWfTest.java +++ b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/AbstractWfTest.java @@ -44,7 +44,6 @@ import com.evolveum.midpoint.wf.api.WorkflowManager; import com.evolveum.midpoint.wf.impl.access.WorkItemManager; import com.evolveum.midpoint.wf.impl.engine.WorkflowEngine; -import com.evolveum.midpoint.wf.impl.policy.ExpectedWorkItem; import com.evolveum.midpoint.wf.impl.processors.general.GeneralChangeProcessor; import com.evolveum.midpoint.wf.impl.processors.primary.PrimaryChangeProcessor; import com.evolveum.midpoint.wf.impl.util.MiscHelper; @@ -77,6 +76,8 @@ public abstract class AbstractWfTest extends AbstractModelImplementationIntegrat public static final File USER_ADMINISTRATOR_FILE = new File(COMMON_DIR, "user-administrator.xml"); protected static final File USER_JACK_FILE = new File(COMMON_DIR, "user-jack.xml"); + protected static final String USER_JACK_OID = "c0c010c0-d34d-b33f-f00d-111111111111"; + protected static final String USER_JACK_USERNAME = "jack"; protected static final File ROLE_APPROVER_FILE = new File(COMMON_DIR, "041-role-approver.xml"); protected static final File ARCHETYPE_MANUAL_PROVISIONING_CASE_FILE = new File(COMMON_DIR, "023-archetype-manual-provisioning-case.xml"); diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/AbstractWfTestPolicy.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/AbstractWfTestPolicy.java similarity index 55% rename from model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/AbstractWfTestPolicy.java rename to model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/AbstractWfTestPolicy.java index 35d6d28c26b..9329bdfe7f3 100644 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/AbstractWfTestPolicy.java +++ b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/AbstractWfTestPolicy.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2017 Evolveum + * Copyright (c) 2010-2019 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.evolveum.midpoint.wf.impl.policy; +package com.evolveum.midpoint.wf.impl; import com.evolveum.midpoint.model.api.ModelExecuteOptions; import com.evolveum.midpoint.model.api.context.ModelState; @@ -24,7 +24,6 @@ import com.evolveum.midpoint.model.impl.lens.LensContext; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.PrismProperty; -import com.evolveum.midpoint.prism.delta.DeltaFactory; import com.evolveum.midpoint.prism.delta.ObjectDelta; import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.schema.GetOperationOptions; @@ -39,9 +38,6 @@ import com.evolveum.midpoint.task.api.TaskManager; import com.evolveum.midpoint.util.exception.*; import com.evolveum.midpoint.wf.api.WorkflowManager; -import com.evolveum.midpoint.wf.impl.AbstractWfTest; -import com.evolveum.midpoint.wf.impl.WfTestHelper; -import com.evolveum.midpoint.wf.impl.WfTestUtil; import com.evolveum.midpoint.wf.impl.access.WorkItemManager; import com.evolveum.midpoint.wf.impl.engine.WorkflowEngine; import com.evolveum.midpoint.wf.impl.processors.general.GeneralChangeProcessor; @@ -66,7 +62,6 @@ import static com.evolveum.midpoint.xml.ns._public.common.common_3.CaseType.F_APPROVAL_CONTEXT; import static com.evolveum.midpoint.xml.ns._public.common.common_3.ApprovalContextType.F_DELTAS_TO_APPROVE; import static java.util.Collections.singleton; -import static java.util.Collections.singletonList; import static org.testng.AssertJUnit.*; /** @@ -77,89 +72,7 @@ @DirtiesContext(classMode = ClassMode.AFTER_CLASS) public class AbstractWfTestPolicy extends AbstractWfTest { - protected static final File TEST_RESOURCE_DIR = new File("src/test/resources/policy"); - private static final File SYSTEM_CONFIGURATION_FILE = new File(TEST_RESOURCE_DIR, "system-configuration.xml"); - - protected static final File USER_JACK_DEPUTY_FILE = new File(TEST_RESOURCE_DIR, "user-jack-deputy.xml"); // delegation is created only when needed - protected static final File USER_BOB_FILE = new File(TEST_RESOURCE_DIR, "user-bob.xml"); - protected static final File USER_CHUCK_FILE = new File(TEST_RESOURCE_DIR, "user-chuck.xml"); - protected static final File USER_LEAD1_FILE = new File(TEST_RESOURCE_DIR, "user-lead1.xml"); - protected static final File USER_LEAD1_DEPUTY_1_FILE = new File(TEST_RESOURCE_DIR, "user-lead1-deputy1.xml"); - protected static final File USER_LEAD1_DEPUTY_2_FILE = new File(TEST_RESOURCE_DIR, "user-lead1-deputy2.xml"); - protected static final File USER_LEAD2_FILE = new File(TEST_RESOURCE_DIR, "user-lead2.xml"); - protected static final File USER_LEAD3_FILE = new File(TEST_RESOURCE_DIR, "user-lead3.xml"); - protected static final File USER_LEAD10_FILE = new File(TEST_RESOURCE_DIR, "user-lead10.xml"); - protected static final File USER_LEAD15_FILE = new File(TEST_RESOURCE_DIR, "user-lead15.xml"); - protected static final File USER_SECURITY_APPROVER_FILE = new File(TEST_RESOURCE_DIR, "user-security-approver.xml"); - protected static final File USER_SECURITY_APPROVER_DEPUTY_FILE = new File(TEST_RESOURCE_DIR, "user-security-approver-deputy.xml"); - protected static final File USER_SECURITY_APPROVER_DEPUTY_LIMITED_FILE = new File(TEST_RESOURCE_DIR, "user-security-approver-deputy-limited.xml"); - - protected static final File METAROLE_DEFAULT_FILE = new File(TEST_RESOURCE_DIR, "metarole-default.xml"); - protected static final File METAROLE_SECURITY_FILE = new File(TEST_RESOURCE_DIR, "metarole-security.xml"); - // following 2 are not used by default (assigned when necessary) - protected static final File METAROLE_PRUNE_TEST2X_ROLES_FILE = new File(TEST_RESOURCE_DIR, "metarole-prune-test2x-roles.xml"); - protected static final File METAROLE_APPROVE_UNASSIGN_FILE = new File(TEST_RESOURCE_DIR, "metarole-approve-unassign.xml"); - protected static final File ROLE_ROLE1_FILE = new File(TEST_RESOURCE_DIR, "role-role1.xml"); - protected static final File ROLE_ROLE1A_FILE = new File(TEST_RESOURCE_DIR, "role-role1a.xml"); - protected static final File ROLE_ROLE1B_FILE = new File(TEST_RESOURCE_DIR, "role-role1b.xml"); - protected static final File ROLE_ROLE2_FILE = new File(TEST_RESOURCE_DIR, "role-role2.xml"); - protected static final File ROLE_ROLE2A_FILE = new File(TEST_RESOURCE_DIR, "role-role2a.xml"); - protected static final File ROLE_ROLE2B_FILE = new File(TEST_RESOURCE_DIR, "role-role2b.xml"); - protected static final File ROLE_ROLE3_FILE = new File(TEST_RESOURCE_DIR, "role-role3.xml"); - protected static final File ROLE_ROLE3A_FILE = new File(TEST_RESOURCE_DIR, "role-role3a.xml"); - protected static final File ROLE_ROLE3B_FILE = new File(TEST_RESOURCE_DIR, "role-role3b.xml"); - protected static final File ROLE_ROLE4_FILE = new File(TEST_RESOURCE_DIR, "role-role4.xml"); - protected static final File ROLE_ROLE4A_FILE = new File(TEST_RESOURCE_DIR, "role-role4a.xml"); - protected static final File ROLE_ROLE4B_FILE = new File(TEST_RESOURCE_DIR, "role-role4b.xml"); - protected static final File ROLE_ROLE10_FILE = new File(TEST_RESOURCE_DIR, "role-role10.xml"); - protected static final File ROLE_ROLE10A_FILE = new File(TEST_RESOURCE_DIR, "role-role10a.xml"); - protected static final File ROLE_ROLE10B_FILE = new File(TEST_RESOURCE_DIR, "role-role10b.xml"); - protected static final File ROLE_ROLE15_FILE = new File(TEST_RESOURCE_DIR, "role-role15.xml"); - protected static final File ROLE_FOCUS_ASSIGNMENT_MAPPING = new File(TEST_RESOURCE_DIR, "role-focus-assignment-mapping.xml"); - - protected static final File USER_TEMPLATE_ASSIGNING_ROLE_1A = new File(TEST_RESOURCE_DIR, "user-template-assigning-role1a.xml"); - protected static final File USER_TEMPLATE_ASSIGNING_ROLE_1A_AFTER = new File(TEST_RESOURCE_DIR, "user-template-assigning-role1a-after.xml"); - - protected static final String USER_ADMINISTRATOR_OID = SystemObjectsType.USER_ADMINISTRATOR.value(); - - protected String userJackDeputyOid; - protected String userBobOid; - protected String userChuckOid; - protected String userLead1Oid; - protected String userLead1Deputy1Oid; - protected String userLead1Deputy2Oid; - protected String userLead2Oid; - protected String userLead3Oid; - protected String userLead10Oid; // imported later - protected String userLead15Oid; - protected String userSecurityApproverOid; - protected String userSecurityApproverDeputyOid; - protected String userSecurityApproverDeputyLimitedOid; - - protected String metaroleDefaultOid; - protected String metaroleSecurityOid; - protected String metarolePruneTest2xRolesOid; - protected String metaroleApproveUnassign; - protected String roleRole1Oid; - protected String roleRole1aOid; - protected String roleRole1bOid; - protected String roleRole2Oid; - protected String roleRole2aOid; - protected String roleRole2bOid; - protected String roleRole3Oid; - protected String roleRole3aOid; - protected String roleRole3bOid; - protected String roleRole4Oid; - protected String roleRole4aOid; - protected String roleRole4bOid; - protected String roleRole10Oid; - protected String roleRole10aOid; - protected String roleRole10bOid; - protected String roleRole15Oid; - protected String roleFocusAssignmentMapping; - - protected String userTemplateAssigningRole1aOid; - protected String userTemplateAssigningRole1aOidAfter; + private static final File SYSTEM_CONFIGURATION_FILE = new File(COMMON_DIR, "system-configuration.xml"); @Autowired protected Clockwork clockwork; @Autowired protected TaskManager taskManager; @@ -176,234 +89,13 @@ public class AbstractWfTestPolicy extends AbstractWfTest { @Override public void initSystem(Task initTask, OperationResult initResult) throws Exception { super.initSystem(initTask, initResult); - - metaroleDefaultOid = repoAddObjectFromFile(METAROLE_DEFAULT_FILE, initResult).getOid(); - metaroleSecurityOid = repoAddObjectFromFile(METAROLE_SECURITY_FILE, initResult).getOid(); - metarolePruneTest2xRolesOid = repoAddObjectFromFile(METAROLE_PRUNE_TEST2X_ROLES_FILE, initResult).getOid(); - metaroleApproveUnassign = repoAddObjectFromFile(METAROLE_APPROVE_UNASSIGN_FILE, initResult).getOid(); - - userJackDeputyOid = repoAddObjectFromFile(USER_JACK_DEPUTY_FILE, initResult).getOid(); - userBobOid = repoAddObjectFromFile(USER_BOB_FILE, initResult).getOid(); - userChuckOid = repoAddObjectFromFile(USER_CHUCK_FILE, initResult).getOid(); - roleRole1Oid = repoAddObjectFromFile(ROLE_ROLE1_FILE, initResult).getOid(); - roleRole1aOid = repoAddObjectFromFile(ROLE_ROLE1A_FILE, initResult).getOid(); - roleRole1bOid = repoAddObjectFromFile(ROLE_ROLE1B_FILE, initResult).getOid(); - roleRole2Oid = repoAddObjectFromFile(ROLE_ROLE2_FILE, initResult).getOid(); - roleRole2aOid = repoAddObjectFromFile(ROLE_ROLE2A_FILE, initResult).getOid(); - roleRole2bOid = repoAddObjectFromFile(ROLE_ROLE2B_FILE, initResult).getOid(); - roleRole3Oid = repoAddObjectFromFile(ROLE_ROLE3_FILE, initResult).getOid(); - roleRole3aOid = repoAddObjectFromFile(ROLE_ROLE3A_FILE, initResult).getOid(); - roleRole3bOid = repoAddObjectFromFile(ROLE_ROLE3B_FILE, initResult).getOid(); - roleRole4Oid = repoAddObjectFromFile(ROLE_ROLE4_FILE, initResult).getOid(); - roleRole4aOid = repoAddObjectFromFile(ROLE_ROLE4A_FILE, initResult).getOid(); - roleRole4bOid = repoAddObjectFromFile(ROLE_ROLE4B_FILE, initResult).getOid(); - roleRole10Oid = repoAddObjectFromFile(ROLE_ROLE10_FILE, initResult).getOid(); - roleRole10aOid = repoAddObjectFromFile(ROLE_ROLE10A_FILE, initResult).getOid(); - roleRole10bOid = repoAddObjectFromFile(ROLE_ROLE10B_FILE, initResult).getOid(); - roleRole15Oid = repoAddObjectFromFile(ROLE_ROLE15_FILE, initResult).getOid(); - roleFocusAssignmentMapping = repoAddObjectFromFile(ROLE_FOCUS_ASSIGNMENT_MAPPING, initResult).getOid(); - - userLead1Oid = addAndRecomputeUser(USER_LEAD1_FILE, initTask, initResult); - userLead2Oid = addAndRecomputeUser(USER_LEAD2_FILE, initTask, initResult); - userLead3Oid = addAndRecomputeUser(USER_LEAD3_FILE, initTask, initResult); - userLead15Oid = addAndRecomputeUser(USER_LEAD15_FILE, initTask, initResult); - // LEAD10 will be imported later! - userSecurityApproverOid = addAndRecomputeUser(USER_SECURITY_APPROVER_FILE, initTask, initResult); - userSecurityApproverDeputyOid = addAndRecomputeUser(USER_SECURITY_APPROVER_DEPUTY_FILE, initTask, initResult); - userSecurityApproverDeputyLimitedOid = addAndRecomputeUser(USER_SECURITY_APPROVER_DEPUTY_LIMITED_FILE, initTask, initResult); - - userTemplateAssigningRole1aOid = repoAddObjectFromFile(USER_TEMPLATE_ASSIGNING_ROLE_1A, initResult).getOid(); - userTemplateAssigningRole1aOidAfter = repoAddObjectFromFile(USER_TEMPLATE_ASSIGNING_ROLE_1A_AFTER, initResult).getOid(); } protected File getSystemConfigurationFile() { return SYSTEM_CONFIGURATION_FILE; } - protected void importLead10(Task task, OperationResult result) throws Exception { - userLead10Oid = addAndRecomputeUser(USER_LEAD10_FILE, task, result); - } - - protected void importLead1Deputies(Task task, OperationResult result) throws Exception { - userLead1Deputy1Oid = addAndRecomputeUser(USER_LEAD1_DEPUTY_1_FILE, task, result); - userLead1Deputy2Oid = addAndRecomputeUser(USER_LEAD1_DEPUTY_2_FILE, task, result); - } - - public void createObject(final String TEST_NAME, ObjectType object, boolean immediate, boolean approve, String assigneeOid) throws Exception { - ObjectDelta addObjectDelta = DeltaFactory.Object.createAddDelta((PrismObject) object.asPrismObject()); - - executeTest(TEST_NAME, new TestDetails() { - @Override - protected LensContext createModelContext(OperationResult result) throws Exception { - LensContext lensContext = createLensContext((Class) object.getClass()); - addFocusDeltaToContext(lensContext, addObjectDelta); - return lensContext; - } - - @Override - protected void afterFirstClockworkRun(CaseType rootCase, - CaseType case0, List subcases, - List workItems, - Task opTask, OperationResult result) throws Exception { - if (!immediate) { -// ModelContext taskModelContext = temporaryHelper.getModelContext(rootCase, opTask, result); -// ObjectDelta realDelta0 = taskModelContext.getFocusContext().getPrimaryDelta(); -// assertTrue("Non-empty primary focus delta: " + realDelta0.debugDump(), realDelta0.isEmpty()); - assertNoObject(object); - ExpectedTask expectedTask = new ExpectedTask(null, "Adding role \"" + object.getName().getOrig() + "\""); - ExpectedWorkItem expectedWorkItem = new ExpectedWorkItem(assigneeOid, null, expectedTask); - assertWfContextAfterClockworkRun(rootCase, subcases, workItems, result, - null, - Collections.singletonList(expectedTask), - Collections.singletonList(expectedWorkItem)); - } - } - - @Override - protected void afterCase0Finishes(CaseType rootCase, Task opTask, OperationResult result) throws Exception { - assertNoObject(object); - } - - @Override - protected void afterRootCaseFinishes(CaseType rootCase, List subcases, Task opTask, OperationResult result) throws Exception { - if (approve) { - assertObject(object); - } else { - assertNoObject(object); - } - } - - @Override - protected boolean executeImmediately() { - return immediate; - } - - @Override - public List getApprovalSequence() { - return singletonList(new ApprovalInstruction(null, true, userLead1Oid, "creation comment")); - } - }, 1); - } - - public void modifyObject(final String TEST_NAME, ObjectDelta objectDelta, - ObjectDelta expectedDelta0, ObjectDelta expectedDelta1, - boolean immediate, boolean approve, - String assigneeOid, - List expectedTasks, List expectedWorkItems, - Runnable assertDelta0Executed, - Runnable assertDelta1NotExecuted, Runnable assertDelta1Executed) throws Exception { - - executeTest(TEST_NAME, new TestDetails() { - @Override - protected LensContext createModelContext(OperationResult result) throws Exception { - Class clazz = objectDelta.getObjectTypeClass(); - //PrismObject object = getObject(clazz, objectDelta.getOid()); - LensContext lensContext = createLensContext(clazz); - addFocusDeltaToContext(lensContext, objectDelta); - return lensContext; - } - - @Override - protected void afterFirstClockworkRun(CaseType rootCase, - CaseType case0, List subcases, - List workItems, - Task opTask, OperationResult result) throws Exception { - if (!immediate) { -// ModelContext taskModelContext = temporaryHelper.getModelContext(rootCase, opTask, result); -// ObjectDelta realDelta0 = taskModelContext.getFocusContext().getPrimaryDelta(); -// assertDeltasEqual("Wrong delta left as primary focus delta.", expectedDelta0, realDelta0); - assertDelta1NotExecuted.run(); - assertWfContextAfterClockworkRun(rootCase, subcases, workItems, result, - objectDelta.getOid(), expectedTasks, expectedWorkItems); - } - } - - @Override - protected void afterCase0Finishes(CaseType rootCase, Task opTask, OperationResult result) throws Exception { - assertDelta0Executed.run(); - assertDelta1NotExecuted.run(); - } - - @Override - protected void afterRootCaseFinishes(CaseType rootCase, List subcases, - Task opTask, OperationResult result) throws Exception { - assertDelta0Executed.run(); - if (approve) { - assertDelta1Executed.run(); - } else { - assertDelta1NotExecuted.run(); - } - } - - @Override - protected boolean executeImmediately() { - return immediate; - } - - @Override - public List getApprovalSequence() { - return singletonList(new ApprovalInstruction(null, approve, assigneeOid, "modification comment")); - } - }, 1); - } - - public void deleteObject(final String TEST_NAME, Class clazz, String objectOid, - boolean immediate, boolean approve, - String assigneeOid, - List expectedTasks, List expectedWorkItems) throws Exception { - - executeTest(TEST_NAME, new TestDetails() { - @Override - protected LensContext createModelContext(OperationResult result) throws Exception { - LensContext lensContext = createLensContext(clazz); - ObjectDelta deleteDelta = prismContext.deltaFactory().object().createDeleteDelta(clazz, objectOid - ); - addFocusDeltaToContext(lensContext, deleteDelta); - return lensContext; - } - - @Override - protected void afterFirstClockworkRun(CaseType rootCase, - CaseType case0, List subcases, - List workItems, - Task opTask, OperationResult result) throws Exception { - if (!immediate) { -// ModelContext taskModelContext = temporaryHelper.getModelContext(rootCase, opTask, result); -// ObjectDelta realDelta0 = taskModelContext.getFocusContext().getPrimaryDelta(); -// assertTrue("Delta0 is not empty: " + realDelta0.debugDump(), realDelta0.isEmpty()); - assertWfContextAfterClockworkRun(rootCase, subcases, workItems, result, - objectOid, expectedTasks, expectedWorkItems); - } - } - - @Override - protected void afterCase0Finishes(CaseType rootCase, Task opTask, OperationResult result) throws Exception { - assertObjectExists(clazz, objectOid); - } - - @Override - protected void afterRootCaseFinishes(CaseType rootCase, List subcases, - Task opTask, OperationResult result) throws Exception { - if (approve) { - assertObjectDoesntExist(clazz, objectOid); - } else { - assertObjectExists(clazz, objectOid); - } - } - - @Override - protected boolean executeImmediately() { - return immediate; - } - - @Override - protected Boolean decideOnApproval(CaseWorkItemType caseWorkItem) throws Exception { - return approve; - } - }, 1); - } - - protected abstract class TestDetails { + protected abstract static class TestDetails { protected LensContext createModelContext(OperationResult result) throws Exception { return null; } @@ -659,7 +351,7 @@ protected void checkTargetOid(CaseWorkItemType caseWorkItem, String expectedOid) assertEquals("Unexpected target OID", expectedOid, realOid); } - protected abstract class TestDetails2 { + protected abstract static class TestDetails2 { protected PrismObject getFocus(OperationResult result) throws Exception { return null; } protected ObjectDelta getFocusDelta() throws Exception { return null; } protected int getNumberOfDeltasToApprove() { return 0; } diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/ApprovalInstruction.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/ApprovalInstruction.java similarity index 96% rename from model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/ApprovalInstruction.java rename to model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/ApprovalInstruction.java index 6fe19534d81..d7facc8fa10 100644 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/ApprovalInstruction.java +++ b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/ApprovalInstruction.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2017 Evolveum + * Copyright (c) 2010-2019 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.evolveum.midpoint.wf.impl.policy; +package com.evolveum.midpoint.wf.impl; import com.evolveum.midpoint.xml.ns._public.common.common_3.CaseWorkItemType; diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/ExpectedTask.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/ExpectedTask.java similarity index 93% rename from model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/ExpectedTask.java rename to model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/ExpectedTask.java index 04ca993ff2a..03e46ab3f50 100644 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/ExpectedTask.java +++ b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/ExpectedTask.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2017 Evolveum + * Copyright (c) 2010-2019 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.evolveum.midpoint.wf.impl.policy; +package com.evolveum.midpoint.wf.impl; import java.util.ArrayList; import java.util.List; diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/ExpectedWorkItem.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/ExpectedWorkItem.java similarity index 95% rename from model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/ExpectedWorkItem.java rename to model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/ExpectedWorkItem.java index f6b32cfdba2..0fa20f67311 100644 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/ExpectedWorkItem.java +++ b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/ExpectedWorkItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2017 Evolveum + * Copyright (c) 2010-2019 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.evolveum.midpoint.wf.impl.policy; +package com.evolveum.midpoint.wf.impl; import com.evolveum.midpoint.schema.util.CaseWorkItemUtil; import com.evolveum.midpoint.schema.util.ApprovalContextUtil; diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/assignments/AbstractTestAssignmentApproval.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/assignments/AbstractTestAssignmentApproval.java similarity index 77% rename from model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/assignments/AbstractTestAssignmentApproval.java rename to model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/assignments/AbstractTestAssignmentApproval.java index de5e6a8c8ff..2d7c99b2822 100644 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/assignments/AbstractTestAssignmentApproval.java +++ b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/assignments/AbstractTestAssignmentApproval.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.evolveum.midpoint.wf.impl.policy.assignments; +package com.evolveum.midpoint.wf.impl.assignments; import com.evolveum.midpoint.model.api.context.ModelState; import com.evolveum.midpoint.model.api.util.DeputyUtils; @@ -29,12 +29,11 @@ import com.evolveum.midpoint.schema.util.ObjectTypeUtil; import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.test.util.TestUtil; -import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; -import com.evolveum.midpoint.wf.impl.policy.AbstractWfTestPolicy; -import com.evolveum.midpoint.wf.impl.policy.ExpectedTask; -import com.evolveum.midpoint.wf.impl.policy.ExpectedWorkItem; +import com.evolveum.midpoint.wf.impl.AbstractWfTestPolicy; +import com.evolveum.midpoint.wf.impl.ExpectedTask; +import com.evolveum.midpoint.wf.impl.ExpectedWorkItem; import com.evolveum.midpoint.wf.impl.WorkflowResult; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import org.springframework.test.annotation.DirtiesContext; @@ -43,6 +42,7 @@ import org.testng.annotations.Test; import javax.xml.namespace.QName; +import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -65,10 +65,80 @@ public abstract class AbstractTestAssignmentApproval extends AbstractWfTestPolic protected static final Trace LOGGER = TraceManager.getTrace(AbstractTestAssignmentApproval.class); - protected abstract String getRoleOid(int number); + static final File TEST_RESOURCE_DIR = new File("src/test/resources/assignments"); + + private static final File METAROLE_DEFAULT_FILE = new File(TEST_RESOURCE_DIR, "metarole-default.xml"); + + private static final File ROLE_ROLE1_FILE = new File(TEST_RESOURCE_DIR, "role-role1.xml"); + private static final File ROLE_ROLE1B_FILE = new File(TEST_RESOURCE_DIR, "role-role1b.xml"); + private static final File ROLE_ROLE2_FILE = new File(TEST_RESOURCE_DIR, "role-role2.xml"); + private static final File ROLE_ROLE2B_FILE = new File(TEST_RESOURCE_DIR, "role-role2b.xml"); + private static final File ROLE_ROLE3_FILE = new File(TEST_RESOURCE_DIR, "role-role3.xml"); + private static final File ROLE_ROLE3B_FILE = new File(TEST_RESOURCE_DIR, "role-role3b.xml"); + private static final File ROLE_ROLE4_FILE = new File(TEST_RESOURCE_DIR, "role-role4.xml"); + private static final File ROLE_ROLE4B_FILE = new File(TEST_RESOURCE_DIR, "role-role4b.xml"); + private static final File ROLE_ROLE10_FILE = new File(TEST_RESOURCE_DIR, "role-role10.xml"); + private static final File ROLE_ROLE10B_FILE = new File(TEST_RESOURCE_DIR, "role-role10b.xml"); + private static final File ROLE_ROLE15_FILE = new File(TEST_RESOURCE_DIR, "role-role15.xml"); + + private static final File USER_JACK_DEPUTY_FILE = new File(TEST_RESOURCE_DIR, "user-jack-deputy.xml"); // delegation is created only when needed + private static final File USER_LEAD1_FILE = new File(TEST_RESOURCE_DIR, "user-lead1.xml"); + private static final File USER_LEAD1_DEPUTY_1_FILE = new File(TEST_RESOURCE_DIR, "user-lead1-deputy1.xml"); + private static final File USER_LEAD1_DEPUTY_2_FILE = new File(TEST_RESOURCE_DIR, "user-lead1-deputy2.xml"); + private static final File USER_LEAD2_FILE = new File(TEST_RESOURCE_DIR, "user-lead2.xml"); + private static final File USER_LEAD3_FILE = new File(TEST_RESOURCE_DIR, "user-lead3.xml"); + private static final File USER_LEAD10_FILE = new File(TEST_RESOURCE_DIR, "user-lead10.xml"); + private static final File USER_LEAD15_FILE = new File(TEST_RESOURCE_DIR, "user-lead15.xml"); + + String roleRole1Oid; + String roleRole1bOid; + String roleRole2Oid; + String roleRole2bOid; + String roleRole3Oid; + String roleRole3bOid; + String roleRole4Oid; + String roleRole4bOid; + String roleRole10Oid; + String roleRole10bOid; + String roleRole15Oid; + + private String userJackDeputyOid; + private String userLead1Oid; + private String userLead1Deputy1Oid; + private String userLead1Deputy2Oid; + private String userLead2Oid; + private String userLead3Oid; + + protected abstract String getRoleOid(int number); protected abstract String getRoleName(int number); - /** + @Override + public void initSystem(Task initTask, OperationResult initResult) throws Exception { + super.initSystem(initTask, initResult); + + repoAddObjectFromFile(METAROLE_DEFAULT_FILE, initResult); + + roleRole1Oid = repoAddObjectFromFile(ROLE_ROLE1_FILE, initResult).getOid(); + roleRole1bOid = repoAddObjectFromFile(ROLE_ROLE1B_FILE, initResult).getOid(); + roleRole2Oid = repoAddObjectFromFile(ROLE_ROLE2_FILE, initResult).getOid(); + roleRole2bOid = repoAddObjectFromFile(ROLE_ROLE2B_FILE, initResult).getOid(); + roleRole3Oid = repoAddObjectFromFile(ROLE_ROLE3_FILE, initResult).getOid(); + roleRole3bOid = repoAddObjectFromFile(ROLE_ROLE3B_FILE, initResult).getOid(); + roleRole4Oid = repoAddObjectFromFile(ROLE_ROLE4_FILE, initResult).getOid(); + roleRole4bOid = repoAddObjectFromFile(ROLE_ROLE4B_FILE, initResult).getOid(); + roleRole10Oid = repoAddObjectFromFile(ROLE_ROLE10_FILE, initResult).getOid(); + roleRole10bOid = repoAddObjectFromFile(ROLE_ROLE10B_FILE, initResult).getOid(); + roleRole15Oid = repoAddObjectFromFile(ROLE_ROLE15_FILE, initResult).getOid(); + + userJackDeputyOid = repoAddObjectFromFile(USER_JACK_DEPUTY_FILE, initResult).getOid(); + userLead1Oid = addAndRecomputeUser(USER_LEAD1_FILE, initTask, initResult); + userLead2Oid = addAndRecomputeUser(USER_LEAD2_FILE, initTask, initResult); + userLead3Oid = addAndRecomputeUser(USER_LEAD3_FILE, initTask, initResult); + addAndRecomputeUser(USER_LEAD15_FILE, initTask, initResult); + // LEAD10 will be imported later! + } + + /** * The simplest case: addition of an assignment of single security-sensitive role (Role1). * Although it induces Role10 membership, it is not a problem, as Role10 approver (Lead10) is not imported yet. * (Even if it was, Role10 assignment would not be approved, see test030.) @@ -293,12 +363,12 @@ private void executeAssignRole1ToJack(String TEST_NAME, boolean immediate, boole String realApproverOid = approverOid != null ? approverOid : userLead1Oid; executeTest2(TEST_NAME, new TestDetails2() { @Override - protected PrismObject getFocus(OperationResult result) throws Exception { + protected PrismObject getFocus(OperationResult result) { return jack.clone(); } @Override - protected ObjectDelta getFocusDelta() throws SchemaException { + protected ObjectDelta getFocusDelta() { return addRole1Delta.clone(); } @@ -335,8 +405,8 @@ protected List getExpectedTasks() { @Override protected List getExpectedWorkItems() { - ExpectedTask etask = getExpectedTasks().get(0); - return Collections.singletonList(new ExpectedWorkItem(userLead1Oid, getRoleOid(1), etask)); + ExpectedTask expTask = getExpectedTasks().get(0); + return Collections.singletonList(new ExpectedWorkItem(userLead1Oid, getRoleOid(1), expTask)); } @Override @@ -364,7 +434,7 @@ protected Boolean decideOnApproval(CaseWorkItemType caseWorkItem) throws Excepti }, 1, immediate); } - protected List getPotentialAssignees(PrismObject user) { + private List getPotentialAssignees(PrismObject user) { List rv = new ArrayList<>(); rv.add(ObjectTypeUtil.createObjectRef(user, prismContext).asReferenceValue()); for (PrismReferenceValue delegatorReference : DeputyUtils.getDelegatorReferences(user.asObjectable(), relationRegistry)) { @@ -373,7 +443,7 @@ protected List getPotentialAssignees(PrismObject return rv; } - protected void assertActiveWorkItems(String approverOid, int expectedCount) throws Exception { + private void assertActiveWorkItems(String approverOid, int expectedCount) throws Exception { if (approverOid == null && expectedCount == 0) { return; } @@ -388,27 +458,22 @@ protected void assertActiveWorkItems(String approverOid, int expectedCount) thro private void executeAssignRoles123ToJack(String TEST_NAME, boolean immediate, boolean approve1, boolean approve2, boolean approve3) throws Exception { PrismObject jack = getUser(userJackOid); - @SuppressWarnings("unchecked") ObjectDelta addRole1Delta = prismContext .deltaFor(UserType.class) .item(UserType.F_ASSIGNMENT).add(createAssignmentTo(getRoleOid(1), ObjectTypes.ROLE, prismContext)) .asObjectDelta(userJackOid); - @SuppressWarnings("unchecked") ObjectDelta addRole2Delta = prismContext .deltaFor(UserType.class) .item(UserType.F_ASSIGNMENT).add(createAssignmentTo(getRoleOid(2), ObjectTypes.ROLE, prismContext)) .asObjectDelta(userJackOid); - @SuppressWarnings("unchecked") ObjectDelta addRole3Delta = prismContext .deltaFor(UserType.class) .item(UserType.F_ASSIGNMENT).add(createAssignmentTo(getRoleOid(3), ObjectTypes.ROLE, prismContext)) .asObjectDelta(userJackOid); - @SuppressWarnings("unchecked") ObjectDelta addRole4Delta = prismContext .deltaFor(UserType.class) .item(UserType.F_ASSIGNMENT).add(createAssignmentTo(getRoleOid(4), ObjectTypes.ROLE, prismContext)) .asObjectDelta(userJackOid); - @SuppressWarnings("unchecked") ObjectDelta changeDescriptionDelta = prismContext .deltaFor(UserType.class) .item(UserType.F_DESCRIPTION).replace(TEST_NAME) @@ -419,12 +484,12 @@ private void executeAssignRoles123ToJack(String TEST_NAME, boolean immediate, bo String originalDescription = getUser(userJackOid).asObjectable().getDescription(); executeTest2(TEST_NAME, new TestDetails2() { @Override - protected PrismObject getFocus(OperationResult result) throws Exception { + protected PrismObject getFocus(OperationResult result) { return jack.clone(); } @Override - protected ObjectDelta getFocusDelta() throws SchemaException { + protected ObjectDelta getFocusDelta() { return primaryDelta.clone(); } @@ -463,11 +528,11 @@ protected List getExpectedTasks() { @Override protected List getExpectedWorkItems() { - List etasks = getExpectedTasks(); + List expTasks = getExpectedTasks(); return Arrays.asList( - new ExpectedWorkItem(userLead1Oid, getRoleOid(1), etasks.get(0)), - new ExpectedWorkItem(userLead2Oid, getRoleOid(2), etasks.get(1)), - new ExpectedWorkItem(userLead3Oid, getRoleOid(3), etasks.get(2)) + new ExpectedWorkItem(userLead1Oid, getRoleOid(1), expTasks.get(0)), + new ExpectedWorkItem(userLead2Oid, getRoleOid(2), expTasks.get(1)), + new ExpectedWorkItem(userLead3Oid, getRoleOid(3), expTasks.get(2)) ); } @@ -530,4 +595,12 @@ public void zzzMarkAsNotInitialized() { unsetSystemInitialized(); } + private void importLead10(Task task, OperationResult result) throws Exception { + addAndRecomputeUser(USER_LEAD10_FILE, task, result); + } + + private void importLead1Deputies(Task task, OperationResult result) throws Exception { + userLead1Deputy1Oid = addAndRecomputeUser(USER_LEAD1_DEPUTY_1_FILE, task, result); + userLead1Deputy2Oid = addAndRecomputeUser(USER_LEAD1_DEPUTY_2_FILE, task, result); + } } diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/assignments/global/TestAssignmentApprovalGlobal.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/assignments/TestAssignmentApprovalGlobal.java similarity index 93% rename from model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/assignments/global/TestAssignmentApprovalGlobal.java rename to model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/assignments/TestAssignmentApprovalGlobal.java index 904172be089..2c53035aae7 100644 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/assignments/global/TestAssignmentApprovalGlobal.java +++ b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/assignments/TestAssignmentApprovalGlobal.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2017 Evolveum + * Copyright (c) 2010-2019 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,13 +14,12 @@ * limitations under the License. */ -package com.evolveum.midpoint.wf.impl.policy.assignments.global; +package com.evolveum.midpoint.wf.impl.assignments; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.test.util.TestUtil; import com.evolveum.midpoint.util.exception.PolicyViolationException; -import com.evolveum.midpoint.wf.impl.policy.assignments.AbstractTestAssignmentApproval; import com.evolveum.midpoint.xml.ns._public.common.common_3.CaseWorkItemType; import java.io.File; diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/assignments/metarole/TestAssignmentApprovalMetaroleExplicit.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/assignments/TestAssignmentApprovalMetaroleExplicit.java similarity index 88% rename from model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/assignments/metarole/TestAssignmentApprovalMetaroleExplicit.java rename to model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/assignments/TestAssignmentApprovalMetaroleExplicit.java index e1e861b78f3..4326db5f442 100644 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/assignments/metarole/TestAssignmentApprovalMetaroleExplicit.java +++ b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/assignments/TestAssignmentApprovalMetaroleExplicit.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2017 Evolveum + * Copyright (c) 2010-2019 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,7 @@ * limitations under the License. */ -package com.evolveum.midpoint.wf.impl.policy.assignments.metarole; - -import com.evolveum.midpoint.wf.impl.policy.assignments.AbstractTestAssignmentApproval; +package com.evolveum.midpoint.wf.impl.assignments; /** * Tests assigning of roles 1..3 with explicitly assigned metaroles (with policy rules). diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/assignments/plain/TestAssignmentApprovalPlainImplicit.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/assignments/TestAssignmentApprovalPlainImplicit.java similarity index 88% rename from model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/assignments/plain/TestAssignmentApprovalPlainImplicit.java rename to model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/assignments/TestAssignmentApprovalPlainImplicit.java index 33e4a2f05a8..249ce2c3a0a 100644 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/assignments/plain/TestAssignmentApprovalPlainImplicit.java +++ b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/assignments/TestAssignmentApprovalPlainImplicit.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2017 Evolveum + * Copyright (c) 2010-2019 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,7 @@ * limitations under the License. */ -package com.evolveum.midpoint.wf.impl.policy.assignments.plain; - -import com.evolveum.midpoint.wf.impl.policy.assignments.AbstractTestAssignmentApproval; +package com.evolveum.midpoint.wf.impl.assignments; /** * Tests assigning of roles 1..3 with implicitly defined approvers (i.e. via org:approver assignment). diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/assignments/metarole/TestAssignmentsWithDifferentMetaroles.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/assignments/TestAssignmentsAdvanced.java similarity index 88% rename from model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/assignments/metarole/TestAssignmentsWithDifferentMetaroles.java rename to model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/assignments/TestAssignmentsAdvanced.java index ff30e8964c3..3ef30c2d5e6 100644 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/assignments/metarole/TestAssignmentsWithDifferentMetaroles.java +++ b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/assignments/TestAssignmentsAdvanced.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2018 Evolveum + * Copyright (c) 2010-2019 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.evolveum.midpoint.wf.impl.policy.assignments.metarole; +package com.evolveum.midpoint.wf.impl.assignments; import com.evolveum.midpoint.model.api.ModelExecuteOptions; import com.evolveum.midpoint.model.api.context.ModelContext; @@ -30,13 +30,12 @@ import com.evolveum.midpoint.test.util.TestUtil; import com.evolveum.midpoint.util.DebugUtil; import com.evolveum.midpoint.util.exception.PolicyViolationException; -import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; -import com.evolveum.midpoint.wf.impl.policy.AbstractWfTestPolicy; -import com.evolveum.midpoint.wf.impl.policy.ApprovalInstruction; -import com.evolveum.midpoint.wf.impl.policy.ExpectedTask; -import com.evolveum.midpoint.wf.impl.policy.ExpectedWorkItem; +import com.evolveum.midpoint.wf.impl.AbstractWfTestPolicy; +import com.evolveum.midpoint.wf.impl.ApprovalInstruction; +import com.evolveum.midpoint.wf.impl.ExpectedTask; +import com.evolveum.midpoint.wf.impl.ExpectedWorkItem; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext.ClassMode; @@ -66,48 +65,62 @@ */ @ContextConfiguration(locations = {"classpath:ctx-workflow-test-main.xml"}) @DirtiesContext(classMode = ClassMode.AFTER_CLASS) -public class TestAssignmentsWithDifferentMetaroles extends AbstractWfTestPolicy { - - protected static final Trace LOGGER = TraceManager.getTrace(TestAssignmentsWithDifferentMetaroles.class); - - protected static final File TEST_ASSIGNMENTS_RESOURCE_DIR = new File("src/test/resources/policy/assignments"); - - protected static final File ROLE_ROLE21_FILE = new File(TEST_ASSIGNMENTS_RESOURCE_DIR, "role-role21-standard.xml"); - protected static final File ROLE_ROLE22_FILE = new File(TEST_ASSIGNMENTS_RESOURCE_DIR, "role-role22-special.xml"); - protected static final File ROLE_ROLE23_FILE = new File(TEST_ASSIGNMENTS_RESOURCE_DIR, "role-role23-special-and-security.xml"); - protected static final File ROLE_ROLE24_FILE = new File(TEST_ASSIGNMENTS_RESOURCE_DIR, "role-role24-approval-and-enforce.xml"); - protected static final File ROLE_ROLE25_FILE = new File(TEST_ASSIGNMENTS_RESOURCE_DIR, "role-role25-very-complex-approval.xml"); - protected static final File ROLE_ROLE26_FILE = new File(TEST_ASSIGNMENTS_RESOURCE_DIR, "role-role26-no-approvers.xml"); - protected static final File ROLE_ROLE27_FILE = new File(TEST_ASSIGNMENTS_RESOURCE_DIR, "role-role27-modifications-and.xml"); - protected static final File ROLE_ROLE28_FILE = new File(TEST_ASSIGNMENTS_RESOURCE_DIR, "role-role28-modifications-or.xml"); - protected static final File ROLE_ROLE29_FILE = new File(TEST_ASSIGNMENTS_RESOURCE_DIR, "role-role29-modifications-no-items.xml"); - protected static final File ORG_LEADS2122_FILE = new File(TEST_ASSIGNMENTS_RESOURCE_DIR, "org-leads2122.xml"); - - protected static final File USER_LEAD21_FILE = new File(TEST_ASSIGNMENTS_RESOURCE_DIR, "user-lead21.xml"); - protected static final File USER_LEAD22_FILE = new File(TEST_ASSIGNMENTS_RESOURCE_DIR, "user-lead22.xml"); - protected static final File USER_LEAD23_FILE = new File(TEST_ASSIGNMENTS_RESOURCE_DIR, "user-lead23.xml"); - protected static final File USER_LEAD24_FILE = new File(TEST_ASSIGNMENTS_RESOURCE_DIR, "user-lead24.xml"); - - protected String roleRole21Oid; - protected String roleRole22Oid; - protected String roleRole23Oid; - protected String roleRole24Oid; - protected String roleRole25Oid; - protected String roleRole26Oid; - protected String roleRole27Oid; - protected String roleRole28Oid; - protected String roleRole29Oid; - protected String orgLeads2122Oid; - - protected String userLead21Oid; - protected String userLead22Oid; - protected String userLead23Oid; - protected String userLead24Oid; +public class TestAssignmentsAdvanced extends AbstractWfTestPolicy { + + protected static final Trace LOGGER = TraceManager.getTrace(TestAssignmentsAdvanced.class); + + private static final File TEST_RESOURCE_DIR = new File("src/test/resources/assignments-advanced"); + + private static final File METAROLE_DEFAULT_FILE = new File(TEST_RESOURCE_DIR, "metarole-default.xml"); + private static final File METAROLE_SECURITY_FILE = new File(TEST_RESOURCE_DIR, "metarole-security.xml"); + + private static final File ROLE_ROLE21_FILE = new File(TEST_RESOURCE_DIR, "role-role21-standard.xml"); + private static final File ROLE_ROLE22_FILE = new File(TEST_RESOURCE_DIR, "role-role22-special.xml"); + private static final File ROLE_ROLE23_FILE = new File(TEST_RESOURCE_DIR, "role-role23-special-and-security.xml"); + private static final File ROLE_ROLE24_FILE = new File(TEST_RESOURCE_DIR, "role-role24-approval-and-enforce.xml"); + private static final File ROLE_ROLE25_FILE = new File(TEST_RESOURCE_DIR, "role-role25-very-complex-approval.xml"); + private static final File ROLE_ROLE26_FILE = new File(TEST_RESOURCE_DIR, "role-role26-no-approvers.xml"); + private static final File ROLE_ROLE27_FILE = new File(TEST_RESOURCE_DIR, "role-role27-modifications-and.xml"); + private static final File ROLE_ROLE28_FILE = new File(TEST_RESOURCE_DIR, "role-role28-modifications-or.xml"); + private static final File ROLE_ROLE29_FILE = new File(TEST_RESOURCE_DIR, "role-role29-modifications-no-items.xml"); + private static final File ORG_LEADS2122_FILE = new File(TEST_RESOURCE_DIR, "org-leads2122.xml"); + + private static final File USER_LEAD21_FILE = new File(TEST_RESOURCE_DIR, "user-lead21.xml"); + private static final File USER_LEAD22_FILE = new File(TEST_RESOURCE_DIR, "user-lead22.xml"); + private static final File USER_LEAD23_FILE = new File(TEST_RESOURCE_DIR, "user-lead23.xml"); + private static final File USER_LEAD24_FILE = new File(TEST_RESOURCE_DIR, "user-lead24.xml"); + + private static final File USER_SECURITY_APPROVER_FILE = new File(TEST_RESOURCE_DIR, "user-security-approver.xml"); + private static final File USER_SECURITY_APPROVER_DEPUTY_FILE = new File(TEST_RESOURCE_DIR, "user-security-approver-deputy.xml"); + private static final File USER_SECURITY_APPROVER_DEPUTY_LIMITED_FILE = new File(TEST_RESOURCE_DIR, "user-security-approver-deputy-limited.xml"); + + private String userSecurityApproverOid; + private String userSecurityApproverDeputyOid; + private String userSecurityApproverDeputyLimitedOid; + + private String roleRole21Oid; + private String roleRole22Oid; + private String roleRole23Oid; + private String roleRole24Oid; + private String roleRole25Oid; + private String roleRole26Oid; + private String roleRole27Oid; + private String roleRole28Oid; + private String roleRole29Oid; + private String orgLeads2122Oid; + + private String userLead21Oid; + private String userLead22Oid; + private String userLead23Oid; + private String userLead24Oid; @Override public void initSystem(Task initTask, OperationResult initResult) throws Exception { super.initSystem(initTask, initResult); + repoAddObjectFromFile(METAROLE_DEFAULT_FILE, initResult); + repoAddObjectFromFile(METAROLE_SECURITY_FILE, initResult); + roleRole21Oid = repoAddObjectFromFile(ROLE_ROLE21_FILE, initResult).getOid(); roleRole22Oid = repoAddObjectFromFile(ROLE_ROLE22_FILE, initResult).getOid(); roleRole23Oid = repoAddObjectFromFile(ROLE_ROLE23_FILE, initResult).getOid(); @@ -124,6 +137,10 @@ public void initSystem(Task initTask, OperationResult initResult) throws Excepti userLead23Oid = addAndRecomputeUser(USER_LEAD23_FILE, initTask, initResult); userLead24Oid = addAndRecomputeUser(USER_LEAD24_FILE, initTask, initResult); + userSecurityApproverOid = addAndRecomputeUser(USER_SECURITY_APPROVER_FILE, initTask, initResult); + userSecurityApproverDeputyOid = addAndRecomputeUser(USER_SECURITY_APPROVER_DEPUTY_FILE, initTask, initResult); + userSecurityApproverDeputyLimitedOid = addAndRecomputeUser(USER_SECURITY_APPROVER_DEPUTY_LIMITED_FILE, initTask, initResult); + DebugUtil.setPrettyPrintBeansAs(PrismContext.LANG_JSON); } @@ -387,8 +404,6 @@ public void test610ModifyAssignmentOfRole29() throws Exception { final String TEST_NAME = "test610ModifyAssignmentOfRole29"; TestUtil.displayTestTitle(this, TEST_NAME); login(userAdministrator); - Task task = createTask(TEST_NAME); - OperationResult result = task.getResult(); // WHEN displayWhen(TEST_NAME); @@ -406,7 +421,7 @@ public void test610ModifyAssignmentOfRole29() throws Exception { // +THEN executeTest2(TEST_NAME, new TestDetails2() { @Override - protected PrismObject getFocus(OperationResult result) throws Exception { + protected PrismObject getFocus(OperationResult result) { return jackBefore; } @@ -467,7 +482,7 @@ protected void assertDeltaExecuted(int number, boolean yes, Task opTask, Operati } @Override - protected Boolean decideOnApproval(CaseWorkItemType caseWorkItem) throws Exception { + protected Boolean decideOnApproval(CaseWorkItemType caseWorkItem) { return null; } @@ -478,7 +493,7 @@ public List getApprovalSequence() { @Override protected void afterFirstClockworkRun(CaseType rootCase, List subcases, List workItems, - OperationResult result) throws Exception { + OperationResult result) { // todo } @@ -507,8 +522,6 @@ public void test620ModifyAssignmentOfRole29Immediate() throws Exception { final String TEST_NAME = "test620ModifyAssignmentOfRole29Immediate"; TestUtil.displayTestTitle(this, TEST_NAME); login(userAdministrator); - Task task = createTask(TEST_NAME); - OperationResult result = task.getResult(); // WHEN displayWhen(TEST_NAME); @@ -526,7 +539,7 @@ public void test620ModifyAssignmentOfRole29Immediate() throws Exception { // +THEN executeTest2(TEST_NAME, new TestDetails2() { @Override - protected PrismObject getFocus(OperationResult result) throws Exception { + protected PrismObject getFocus(OperationResult result) { return jackBefore; } @@ -588,7 +601,7 @@ protected void assertDeltaExecuted(int number, boolean yes, Task opTask, Operati } @Override - protected Boolean decideOnApproval(CaseWorkItemType caseWorkItem) throws Exception { + protected Boolean decideOnApproval(CaseWorkItemType caseWorkItem) { return null; } @@ -599,7 +612,7 @@ public List getApprovalSequence() { @Override protected void afterFirstClockworkRun(CaseType rootCase, List subcases, List workItems, - OperationResult result) throws Exception { + OperationResult result) { // todo } @@ -638,8 +651,6 @@ public void test700AssignRole28() throws Exception { final String TEST_NAME = "test700AssignRole28"; TestUtil.displayTestTitle(this, TEST_NAME); login(userAdministrator); - Task task = createTask(TEST_NAME); - OperationResult result = task.getResult(); // WHEN/THEN ObjectDelta deltaToApprove = prismContext.deltaFor(UserType.class) @@ -656,7 +667,7 @@ public void test700AssignRole28() throws Exception { executeTest2(TEST_NAME, new TestDetails2() { @Override - protected PrismObject getFocus(OperationResult result) throws Exception { + protected PrismObject getFocus(OperationResult result) { return jackBefore; } @@ -720,7 +731,7 @@ protected void assertDeltaExecuted(int number, boolean yes, Task opTask, Operati } @Override - protected Boolean decideOnApproval(CaseWorkItemType caseWorkItem) throws Exception { + protected Boolean decideOnApproval(CaseWorkItemType caseWorkItem) { return null; } @@ -731,7 +742,7 @@ public List getApprovalSequence() { @Override protected void afterFirstClockworkRun(CaseType rootCase, List subcases, List workItems, - OperationResult result) throws Exception { + OperationResult result) { // todo } @@ -750,8 +761,6 @@ public void test710ModifyAssignmentOfRole28() throws Exception { final String TEST_NAME = "test710ModifyAssignmentOfRole28"; TestUtil.displayTestTitle(this, TEST_NAME); login(userAdministrator); - Task task = createTask(TEST_NAME); - OperationResult result = task.getResult(); // WHEN displayWhen(TEST_NAME); @@ -771,7 +780,7 @@ public void test710ModifyAssignmentOfRole28() throws Exception { // +THEN executeTest2(TEST_NAME, new TestDetails2() { @Override - protected PrismObject getFocus(OperationResult result) throws Exception { + protected PrismObject getFocus(OperationResult result) { return jackBefore; } @@ -832,7 +841,7 @@ protected void assertDeltaExecuted(int number, boolean yes, Task opTask, Operati } @Override - protected Boolean decideOnApproval(CaseWorkItemType caseWorkItem) throws Exception { + protected Boolean decideOnApproval(CaseWorkItemType caseWorkItem) { return null; } @@ -843,7 +852,7 @@ public List getApprovalSequence() { @Override protected void afterFirstClockworkRun(CaseType rootCase, List subcases, List workItems, - OperationResult result) throws Exception { + OperationResult result) { // todo } @@ -862,8 +871,6 @@ public void test720UnassignRole28() throws Exception { final String TEST_NAME = "test720UnassignRole28"; TestUtil.displayTestTitle(this, TEST_NAME); login(userAdministrator); - Task task = createTask(TEST_NAME); - OperationResult result = task.getResult(); // WHEN displayWhen(TEST_NAME); @@ -881,7 +888,7 @@ public void test720UnassignRole28() throws Exception { // +THEN executeTest2(TEST_NAME, new TestDetails2() { @Override - protected PrismObject getFocus(OperationResult result) throws Exception { + protected PrismObject getFocus(OperationResult result) { return jackBefore; } @@ -945,7 +952,7 @@ protected void assertDeltaExecuted(int number, boolean yes, Task opTask, Operati } @Override - protected Boolean decideOnApproval(CaseWorkItemType caseWorkItem) throws Exception { + protected Boolean decideOnApproval(CaseWorkItemType caseWorkItem) { return true; } @@ -956,7 +963,7 @@ public List getApprovalSequence() { @Override protected void afterFirstClockworkRun(CaseType rootCase, List subcases, List workItems, - OperationResult result) throws Exception { + OperationResult result) { // todo } @@ -1043,22 +1050,18 @@ private void executeAssignRoles123ToJack(String TEST_NAME, boolean immediate, boolean approve1, boolean approve2, boolean approve3a, boolean approve3b, boolean securityDeputy) throws Exception { Task task = createTask("executeAssignRoles123ToJack"); PrismObject jack = getUser(userJackOid); - @SuppressWarnings("unchecked") ObjectDelta addRole1Delta = prismContext .deltaFor(UserType.class) .item(UserType.F_ASSIGNMENT).add(createAssignmentTo(roleRole21Oid, ObjectTypes.ROLE, prismContext)) .asObjectDelta(userJackOid); - @SuppressWarnings("unchecked") ObjectDelta addRole2Delta = prismContext .deltaFor(UserType.class) .item(UserType.F_ASSIGNMENT).add(createAssignmentTo(roleRole22Oid, ObjectTypes.ROLE, prismContext)) .asObjectDelta(userJackOid); - @SuppressWarnings("unchecked") ObjectDelta addRole3Delta = prismContext .deltaFor(UserType.class) .item(UserType.F_ASSIGNMENT).add(createAssignmentTo(roleRole23Oid, ObjectTypes.ROLE, prismContext)) .asObjectDelta(userJackOid); - @SuppressWarnings("unchecked") ObjectDelta changeDescriptionDelta = prismContext .deltaFor(UserType.class) .item(UserType.F_DESCRIPTION).replace(TEST_NAME) @@ -1069,12 +1072,12 @@ private void executeAssignRoles123ToJack(String TEST_NAME, boolean immediate, String originalDescription = getUser(userJackOid).asObjectable().getDescription(); executeTest2(TEST_NAME, new TestDetails2() { @Override - protected PrismObject getFocus(OperationResult result) throws Exception { + protected PrismObject getFocus(OperationResult result) { return jack.clone(); } @Override - protected ObjectDelta getFocusDelta() throws SchemaException { + protected ObjectDelta getFocusDelta() { return primaryDelta.clone(); } @@ -1151,7 +1154,7 @@ protected void assertDeltaExecuted(int number, boolean yes, Task opTask, Operati } @Override - protected Boolean decideOnApproval(CaseWorkItemType caseWorkItem) throws Exception { + protected Boolean decideOnApproval(CaseWorkItemType caseWorkItem) { return null; // ignore this way of approving } @@ -1194,7 +1197,6 @@ private void previewAssignRolesToJack(String TEST_NAME, boolean immediate, boole if (also24) { assignmentsToAdd.add(createAssignmentTo(roleRole24Oid, ObjectTypes.ROLE, prismContext)); } - @SuppressWarnings("unchecked") ObjectDelta primaryDelta = prismContext .deltaFor(UserType.class) .item(UserType.F_ASSIGNMENT).addRealValues(assignmentsToAdd) @@ -1226,27 +1228,27 @@ private void previewAssignRolesToJack(String TEST_NAME, boolean immediate, boole final String l1 = userLead21Oid, l2 = userLead22Oid, l3 = userLead23Oid, l4 = userLead24Oid; assertApprovalInfo(approvalInfo, roleRole21Oid, - new ExpectedStagePreview(1, set(l1), set(l1))); + new ExpectedStagePreview(1, set(l1), set(l1))); assertApprovalInfo(approvalInfo, roleRole22Oid, - new ExpectedStagePreview(1, set(l2), set(l2))); + new ExpectedStagePreview(1, set(l2), set(l2))); assertApprovalInfo(approvalInfo, roleRole23Oid, - new ExpectedStagePreview(1, set(l3), set(l3)), - new ExpectedStagePreview(2, set(userSecurityApproverOid), set(userSecurityApproverOid))); + new ExpectedStagePreview(1, set(l3), set(l3)), + new ExpectedStagePreview(2, set(userSecurityApproverOid), set(userSecurityApproverOid))); if (also24) { assertApprovalInfo(approvalInfo, roleRole24Oid, - new ExpectedStagePreview(1, set(l4), set(l4))); + new ExpectedStagePreview(1, set(l4), set(l4))); } assertApprovalInfo(approvalInfo, roleRole25Oid, - new ExpectedStagePreview(1, set(l1, l2, l3, l4), set(l1, l2, l3, l4)), - new ExpectedStagePreview(2, set(), set(l3)), - new ExpectedStagePreview(3, set(orgLeads2122Oid), set(orgLeads2122Oid)), - new ExpectedStagePreview(4, set(orgLeads2122Oid), set(l1, l2)), - new ExpectedStagePreview(5, set(l1, l2, l3, l4), set(), APPROVE, AUTO_COMPLETION_CONDITION), - new ExpectedStagePreview(6, set(l1, l2, l3, l4), set(), APPROVE, AUTO_COMPLETION_CONDITION), - new ExpectedStagePreview(7, set(l1, l2, l3, l4), set(), SKIP, AUTO_COMPLETION_CONDITION), - new ExpectedStagePreview(8, set(l1, l2, l3, l4), set(), REJECT, AUTO_COMPLETION_CONDITION), - new ExpectedStagePreview(9, set(l1, l2, l3, l4), set(l1, l2, l3, l4), true), - new ExpectedStagePreview(10, set(), set(), REJECT, NO_ASSIGNEES_FOUND)); + new ExpectedStagePreview(1, set(l1, l2, l3, l4), set(l1, l2, l3, l4)), + new ExpectedStagePreview(2, set(), set(l3)), + new ExpectedStagePreview(3, set(orgLeads2122Oid), set(orgLeads2122Oid)), + new ExpectedStagePreview(4, set(orgLeads2122Oid), set(l1, l2)), + new ExpectedStagePreview(5, set(l1, l2, l3, l4), set(), APPROVE, AUTO_COMPLETION_CONDITION), + new ExpectedStagePreview(6, set(l1, l2, l3, l4), set(), APPROVE, AUTO_COMPLETION_CONDITION), + new ExpectedStagePreview(7, set(l1, l2, l3, l4), set(), SKIP, AUTO_COMPLETION_CONDITION), + new ExpectedStagePreview(8, set(l1, l2, l3, l4), set(), REJECT, AUTO_COMPLETION_CONDITION), + new ExpectedStagePreview(9, set(l1, l2, l3, l4), set(l1, l2, l3, l4), true), + new ExpectedStagePreview(10, set(), set(), REJECT, NO_ASSIGNEES_FOUND)); } @@ -1291,7 +1293,8 @@ private void assertApprovalInfo(List inf if (expectedStagePreview.hasError) { assertNotNull("Error should be present at "+ pos, stagePreview.getExecutionPreview().getErrorMessage()); } else { - assertEquals("Error message differs at " + pos, null, stagePreview.getExecutionPreview().getErrorMessage()); + //noinspection SimplifiedTestNGAssertion + assertEquals("Error message differs at " + pos, null, stagePreview.getExecutionPreview().getErrorMessage()); } } } @@ -1300,7 +1303,8 @@ private Set getOids(List refs) { return new HashSet<>(ObjectTypeUtil.objectReferenceListToOids(refs)); } - private void executeUnassignRoles123ToJack(String TEST_NAME, boolean immediate, boolean approve, boolean byId, boolean has1and2) throws Exception { + @SuppressWarnings("SameParameterValue") + private void executeUnassignRoles123ToJack(String TEST_NAME, boolean immediate, boolean approve, boolean byId, boolean has1and2) throws Exception { PrismObject jack = getUser(userJackOid); AssignmentType a1 = has1and2 ? findAssignmentByTargetRequired(jack, roleRole21Oid) : null; AssignmentType a2 = has1and2 ? findAssignmentByTargetRequired(jack, roleRole22Oid) : null; @@ -1308,22 +1312,18 @@ private void executeUnassignRoles123ToJack(String TEST_NAME, boolean immediate, AssignmentType del1 = toDelete(a1, byId); AssignmentType del2 = toDelete(a2, byId); AssignmentType del3 = toDelete(a3, byId); - @SuppressWarnings("unchecked") ObjectDelta deleteRole1Delta = has1and2 ? prismContext .deltaFor(UserType.class) .item(UserType.F_ASSIGNMENT).delete(del1) .asObjectDelta(userJackOid) : null; - @SuppressWarnings("unchecked") ObjectDelta deleteRole2Delta = has1and2 ? prismContext .deltaFor(UserType.class) .item(UserType.F_ASSIGNMENT).delete(del2) .asObjectDelta(userJackOid) : null; - @SuppressWarnings("unchecked") ObjectDelta deleteRole3Delta = prismContext .deltaFor(UserType.class) .item(UserType.F_ASSIGNMENT).delete(del3) .asObjectDelta(userJackOid); - @SuppressWarnings("unchecked") ObjectDelta changeDescriptionDelta = prismContext .deltaFor(UserType.class) .item(UserType.F_DESCRIPTION).replace(TEST_NAME) @@ -1335,12 +1335,12 @@ private void executeUnassignRoles123ToJack(String TEST_NAME, boolean immediate, String originalDescription = getUser(userJackOid).asObjectable().getDescription(); executeTest2(TEST_NAME, new TestDetails2() { @Override - protected PrismObject getFocus(OperationResult result) throws Exception { + protected PrismObject getFocus(OperationResult result) { return jack.clone(); } @Override - protected ObjectDelta getFocusDelta() throws SchemaException { + protected ObjectDelta getFocusDelta() { return primaryDelta.clone(); } @@ -1351,12 +1351,12 @@ protected int getNumberOfDeltasToApprove() { @Override protected List getApprovals() { - return Arrays.asList(approve); + return singletonList(approve); } @Override protected List> getExpectedDeltasToApprove() { - return Arrays.asList(deleteRole3Delta.clone()); + return singletonList(deleteRole3Delta.clone()); } @Override @@ -1371,17 +1371,17 @@ protected String getObjectOid() { @Override protected List getExpectedTasks() { - return Arrays.asList( - new ExpectedTask(roleRole23Oid, "Unassigning role \"Role23\" from user \"jack\"")); + return singletonList( + new ExpectedTask(roleRole23Oid, "Unassigning role \"Role23\" from user \"jack\"")); } // after first step @Override protected List getExpectedWorkItems() { List tasks = getExpectedTasks(); - return Arrays.asList( - new ExpectedWorkItem(userSecurityApproverOid, roleRole23Oid, tasks.get(0)) - ); + return singletonList( + new ExpectedWorkItem(userSecurityApproverOid, roleRole23Oid, tasks.get(0)) + ); } @Override @@ -1418,7 +1418,7 @@ protected void assertDeltaExecuted(int number, boolean yes, Task opTask, Operati } @Override - protected Boolean decideOnApproval(CaseWorkItemType caseWorkItem) throws Exception { + protected Boolean decideOnApproval(CaseWorkItemType caseWorkItem) { return null; // ignore this way of approving } @@ -1453,27 +1453,27 @@ public void zzzMarkAsNotInitialized() { unsetSystemInitialized(); } - private class ExpectedStagePreview { - private int number; + private static class ExpectedStagePreview { + @SuppressWarnings({ "FieldCanBeLocal", "unused" }) private int number; private final Set definitionApproverOids; private final Set expectedApproverOids; private final ApprovalLevelOutcomeType outcome; private final AutomatedCompletionReasonType reason; private final boolean hasError; - ExpectedStagePreview(int number, Set definitionApproverOids, Set expectedApproverOids) { + private ExpectedStagePreview(int number, Set definitionApproverOids, Set expectedApproverOids) { this(number, definitionApproverOids, expectedApproverOids, null, null, false); } - ExpectedStagePreview(int number, Set definitionApproverOids, Set expectedApproverOids, - ApprovalLevelOutcomeType outcome, AutomatedCompletionReasonType reason) { + private ExpectedStagePreview(int number, Set definitionApproverOids, Set expectedApproverOids, + ApprovalLevelOutcomeType outcome, AutomatedCompletionReasonType reason) { this(number, definitionApproverOids, expectedApproverOids, outcome, reason, false); } - ExpectedStagePreview(int number, Set definitionApproverOids, Set expectedApproverOids, - boolean hasError) { + private ExpectedStagePreview(int number, Set definitionApproverOids, Set expectedApproverOids, + boolean hasError) { this(number, definitionApproverOids, expectedApproverOids, null, null, hasError); } - ExpectedStagePreview(int number, Set definitionApproverOids, Set expectedApproverOids, - ApprovalLevelOutcomeType outcome, AutomatedCompletionReasonType reason, boolean hasError) { + private ExpectedStagePreview(int number, Set definitionApproverOids, Set expectedApproverOids, + ApprovalLevelOutcomeType outcome, AutomatedCompletionReasonType reason, boolean hasError) { this.number = number; this.definitionApproverOids = definitionApproverOids; this.expectedApproverOids = expectedApproverOids; diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/legacy/TestAddAssociationLegacy.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/association/TestAddAssociation.java similarity index 51% rename from model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/legacy/TestAddAssociationLegacy.java rename to model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/association/TestAddAssociation.java index 01ed5558344..8d9e7ebf49d 100644 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/legacy/TestAddAssociationLegacy.java +++ b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/association/TestAddAssociation.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2017 Evolveum + * Copyright (c) 2010-2019 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,70 +14,138 @@ * limitations under the License. */ -package com.evolveum.midpoint.wf.impl.legacy; +package com.evolveum.midpoint.wf.impl.association; import com.evolveum.midpoint.model.api.context.ModelContext; import com.evolveum.midpoint.model.api.context.ModelState; import com.evolveum.midpoint.model.api.hooks.HookOperationMode; +import com.evolveum.midpoint.model.impl.lens.Clockwork; import com.evolveum.midpoint.model.impl.lens.LensContext; import com.evolveum.midpoint.model.impl.lens.LensProjectionContext; +import com.evolveum.midpoint.prism.PrismContext; +import com.evolveum.midpoint.prism.PrismProperty; import com.evolveum.midpoint.prism.delta.ObjectDelta; +import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.prism.util.PrismTestUtil; import com.evolveum.midpoint.schema.DeltaConvertor; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.schema.util.ObjectTypeUtil; +import com.evolveum.midpoint.schema.util.WorkItemId; import com.evolveum.midpoint.task.api.Task; +import com.evolveum.midpoint.task.api.TaskManager; import com.evolveum.midpoint.test.IntegrationTestTools; import com.evolveum.midpoint.test.util.TestUtil; +import com.evolveum.midpoint.util.DebugUtil; +import com.evolveum.midpoint.util.MiscUtil; import com.evolveum.midpoint.util.QNameUtil; +import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; +import com.evolveum.midpoint.wf.api.WorkflowManager; +import com.evolveum.midpoint.wf.impl.AbstractWfTest; +import com.evolveum.midpoint.wf.impl.WfTestHelper; import com.evolveum.midpoint.wf.impl.WorkflowResult; +import com.evolveum.midpoint.wf.impl.engine.WorkflowEngine; +import com.evolveum.midpoint.wf.impl.processors.general.GeneralChangeProcessor; +import com.evolveum.midpoint.wf.impl.processors.primary.PcpGeneralHelper; +import com.evolveum.midpoint.wf.impl.processors.primary.PrimaryChangeProcessor; +import com.evolveum.midpoint.wf.impl.util.MiscHelper; +import com.evolveum.midpoint.wf.util.ApprovalUtils; import com.evolveum.midpoint.xml.ns._public.common.api_types_3.ObjectModificationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext.ClassMode; import org.springframework.test.context.ContextConfiguration; import org.testng.AssertJUnit; import org.testng.annotations.Test; -import javax.xml.bind.JAXBException; import javax.xml.namespace.QName; import java.io.File; import java.util.List; +import static com.evolveum.midpoint.xml.ns._public.common.common_3.ApprovalContextType.F_DELTAS_TO_APPROVE; +import static com.evolveum.midpoint.xml.ns._public.common.common_3.CaseType.F_APPROVAL_CONTEXT; import static org.testng.AssertJUnit.assertEquals; -import static org.testng.AssertJUnit.assertTrue; +import static org.testng.AssertJUnit.assertNotNull; /** * @author mederly */ @ContextConfiguration(locations = {"classpath:ctx-workflow-test-main.xml"}) @DirtiesContext(classMode = ClassMode.AFTER_CLASS) -public class TestAddAssociationLegacy extends AbstractWfTestLegacy { +public class TestAddAssociation extends AbstractWfTest { - protected static final Trace LOGGER = TraceManager.getTrace(TestAddAssociationLegacy.class); + protected static final Trace LOGGER = TraceManager.getTrace(TestAddAssociation.class); - private static final File REQ_SHADOW_MODIFY_ADD_ENTITLEMENT_TESTERS = new File(TEST_RESOURCE_DIR, - "shadow-modify-add-entitlement-testers.xml"); - private static final File REQ_SHADOW_MODIFY_ADD_ENTITLEMENT_GUESTS = new File(TEST_RESOURCE_DIR, - "shadow-modify-add-entitlement-guests.xml"); + private static final File TEST_RESOURCE_DIR = new File("src/test/resources/association"); - public TestAddAssociationLegacy() throws JAXBException { - super(); - } + private static final String DONT_CHECK = "dont-check"; + + @Autowired protected Clockwork clockwork; + @Autowired protected TaskManager taskManager; + @Autowired protected WorkflowManager workflowManager; + @Autowired protected WorkflowEngine workflowEngine; + @Autowired protected MiscHelper miscHelper; + @Autowired protected PrimaryChangeProcessor primaryChangeProcessor; + @Autowired protected GeneralChangeProcessor generalChangeProcessor; + @Autowired protected WfTestHelper testHelper; + @Autowired protected PcpGeneralHelper pcpGeneralHelper; + + public static final File SYSTEM_CONFIGURATION_FILE = new File(TEST_RESOURCE_DIR, "system-configuration.xml"); + + public static final File RESOURCE_DUMMY_FILE = new File(TEST_RESOURCE_DIR, "resource-dummy.xml"); + public static final String RESOURCE_DUMMY_OID = "10000000-0000-0000-0000-000000000004"; + + private static final File ACCOUNT_SHADOW_JACK_DUMMY_FILE = new File(TEST_RESOURCE_DIR, "shadow-jack-dummy.xml"); + + private static final File USER_DUMMY_BOSS_FILE = new File(TEST_RESOURCE_DIR, "user-dummy-boss.xml"); + + private static final String SHADOW_TESTERS_OID = "20000000-0000-0000-3333-000000000002"; + private static final File SHADOW_TESTERS_FILE = new File(TEST_RESOURCE_DIR, "shadow-testers-dummy.xml"); + private static final String TESTERS_NAME = "testers"; + + private static final String SHADOW_GUESTS_OID = "20000000-0000-0000-3333-000000000072"; + private static final File SHADOW_GUESTS_FILE = new File(TEST_RESOURCE_DIR, "shadow-guests-dummy.xml"); + private static final String GUESTS_NAME = "guests"; + + private static final File USER_ELISABETH_FILE = new File(TEST_RESOURCE_DIR, "user-elisabeth.xml"); + private static final String USER_ELISABETH_OID = "c0c010c0-d34d-b33f-f00d-111111112222"; + + private static final File SHADOW_ELISABETH_DUMMY_FILE = new File(TEST_RESOURCE_DIR, "shadow-elisabeth-dummy.xml"); + + private static final File REQ_ADD_ENTITLEMENT_TESTERS = new File(TEST_RESOURCE_DIR, "req-add-entitlement-testers.xml"); + private static final File REQ_ADD_ENTITLEMENT_GUESTS = new File(TEST_RESOURCE_DIR, "req-add-entitlement-guests.xml"); private String jackAccountShadowOid; private String elisabethAccountShadowOid; @Override public void initSystem(Task initTask, OperationResult initResult) throws Exception { + DebugUtil.setPrettyPrintBeansAs(PrismContext.LANG_YAML); + super.initSystem(initTask, initResult); + importObjectFromFile(USER_DUMMY_BOSS_FILE, initResult); + + initDummyResourcePirate(null, RESOURCE_DUMMY_FILE, RESOURCE_DUMMY_OID, initTask, initResult); + + importObjectFromFile(SHADOW_TESTERS_FILE, initResult); + importObjectFromFile(SHADOW_GUESTS_FILE, initResult); + + getDummyResourceController().addGroup(TESTERS_NAME); + getDummyResourceController().addGroup(GUESTS_NAME); + + systemObjectCache.invalidateCaches(); modifyUserAddAccount(USER_JACK_OID, ACCOUNT_SHADOW_JACK_DUMMY_FILE, initTask, initResult); importObjectFromFile(USER_ELISABETH_FILE, initResult); - modifyUserAddAccount(USER_ELISABETH_OID, ACCOUNT_SHADOW_ELISABETH_DUMMY_FILE, initTask, initResult); + modifyUserAddAccount(USER_ELISABETH_OID, SHADOW_ELISABETH_DUMMY_FILE, initTask, initResult); + } + + @Override + protected File getSystemConfigurationFile() { + return SYSTEM_CONFIGURATION_FILE; } /** @@ -118,9 +186,10 @@ public LensContext createModelContext(Task task, OperationResult result) throws LensProjectionContext accountContext = fillContextWithAccount(context, jackAccountShadowOid, task, result); - ObjectModificationType modElement = PrismTestUtil.parseAtomicValue(REQ_SHADOW_MODIFY_ADD_ENTITLEMENT_TESTERS, ObjectModificationType.COMPLEX_TYPE); + ObjectModificationType modElement = PrismTestUtil.parseAtomicValue(REQ_ADD_ENTITLEMENT_TESTERS, ObjectModificationType.COMPLEX_TYPE); ObjectDelta shadowDelta = DeltaConvertor.createObjectDelta(modElement, ShadowType.class, prismContext); shadowDelta.setOid(jackAccountShadowOid); + //noinspection unchecked accountContext.setPrimaryDelta(shadowDelta); return context; } @@ -147,14 +216,14 @@ void assertsRootCaseFinishes(CaseType aCase, List subcases, Task opTas OperationResult result) throws Exception { ShadowType account = getObject(ShadowType.class, jackAccountShadowOid).asObjectable(); IntegrationTestTools.display("jack dummy account", account); - assertHasAssociation(account, new QName("group"), GROUP_TESTERS_OID); + assertHasAssociation(account, new QName("group"), SHADOW_TESTERS_OID); - checkAuditRecords(createResultMap(GROUP_TESTERS_OID, WorkflowResult.APPROVED)); + checkAuditRecords(createResultMap(SHADOW_TESTERS_OID, WorkflowResult.APPROVED)); } @Override boolean decideOnApproval(CaseType subcase, - ApprovalContextType wfContext) throws Exception { + ApprovalContextType wfContext) { return true; } }); @@ -198,9 +267,10 @@ public LensContext createModelContext(Task task, OperationResult result) throws LensProjectionContext accountContext = fillContextWithAccount(context, elisabethAccountShadowOid, task, result); - ObjectModificationType modElement = PrismTestUtil.parseAtomicValue(REQ_SHADOW_MODIFY_ADD_ENTITLEMENT_TESTERS, ObjectModificationType.COMPLEX_TYPE); + ObjectModificationType modElement = PrismTestUtil.parseAtomicValue(REQ_ADD_ENTITLEMENT_TESTERS, ObjectModificationType.COMPLEX_TYPE); ObjectDelta shadowDelta = DeltaConvertor.createObjectDelta(modElement, ShadowType.class, prismContext); shadowDelta.setOid(elisabethAccountShadowOid); + //noinspection unchecked accountContext.setPrimaryDelta(shadowDelta); return context; } @@ -229,12 +299,12 @@ void assertsRootCaseFinishes(CaseType aCase, List subcases, Task opTas IntegrationTestTools.display("elisabeth dummy account", account); assertEquals("Unexpected associations present", 0, account.getAssociation().size()); - checkAuditRecords(createResultMap(GROUP_TESTERS_OID, WorkflowResult.REJECTED)); + checkAuditRecords(createResultMap(SHADOW_TESTERS_OID, WorkflowResult.REJECTED)); } @Override boolean decideOnApproval(CaseType subcase, - ApprovalContextType wfContext) throws Exception { + ApprovalContextType wfContext) { return false; } }); @@ -261,13 +331,14 @@ public void test100AddJackToGuests() throws Exception { ShadowType accountBefore = getObject(ShadowType.class, jackAccountShadowOid).asObjectable(); assertEquals("Wrong # of jack's account associations", 1, accountBefore.getAssociation().size()); - assertHasAssociation(accountBefore, new QName("group"), GROUP_TESTERS_OID); + assertHasAssociation(accountBefore, new QName("group"), SHADOW_TESTERS_OID); LensProjectionContext accountContext = fillContextWithAccount(context, jackAccountShadowOid, modelTask, result); - ObjectModificationType modElement = PrismTestUtil.parseAtomicValue(REQ_SHADOW_MODIFY_ADD_ENTITLEMENT_GUESTS, ObjectModificationType.COMPLEX_TYPE); + ObjectModificationType modElement = PrismTestUtil.parseAtomicValue(REQ_ADD_ENTITLEMENT_GUESTS, ObjectModificationType.COMPLEX_TYPE); ObjectDelta shadowDelta = DeltaConvertor.createObjectDelta(modElement, ShadowType.class, prismContext); shadowDelta.setOid(jackAccountShadowOid); + //noinspection unchecked accountContext.setPrimaryDelta(shadowDelta); HookOperationMode mode = clockwork.run(context, modelTask, result); @@ -277,8 +348,8 @@ public void test100AddJackToGuests() throws Exception { ShadowType accountAfter = getObject(ShadowType.class, jackAccountShadowOid).asObjectable(); assertEquals("Wrong # of jack's account associations", 2, accountAfter.getAssociation().size()); - assertHasAssociation(accountAfter, new QName("group"), GROUP_TESTERS_OID); - assertHasAssociation(accountAfter, new QName("group"), GROUP_GUESTS_OID); + assertHasAssociation(accountAfter, new QName("group"), SHADOW_TESTERS_OID); + assertHasAssociation(accountAfter, new QName("group"), SHADOW_GUESTS_OID); } @@ -297,4 +368,135 @@ public void zzzMarkAsNotInitialized() { display("Setting class as not initialized"); unsetSystemInitialized(); } + + abstract static class TestDetails { + abstract int subcasesCount(); + abstract boolean immediate(); + abstract boolean checkObjectOnSubtasks(); + boolean approvedAutomatically() { return false; } + LensContext createModelContext(Task task, OperationResult result) throws Exception { return null; } + void assertsAfterClockworkRun(CaseType rootCase, CaseType case0, + List subcases, Task opTask, OperationResult result) throws Exception { } + void assertsAfterImmediateExecutionFinished(CaseType task, OperationResult result) throws Exception { } + void assertsRootCaseFinishes(CaseType aCase, List subcases, Task opTask, + OperationResult result) throws Exception { } + boolean decideOnApproval(CaseType subcase, ApprovalContextType wfContext) throws Exception { return true; } + String getObjectOid(CaseType task, OperationResult result) throws SchemaException { return null; }; + boolean removeAssignmentsBeforeTest() { return true; } + } + + private void executeTest(String testName, String focusOid, TestDetails testDetails) throws Exception { + + // GIVEN + prepareNotifications(); + dummyAuditService.clear(); + OperationResult result = new OperationResult("execution"); + + Task task = taskManager.createTaskInstance(TestAddAssociation.class.getName() + "."+testName); + task.setOwner(userAdministrator); + + if (focusOid != null && testDetails.removeAssignmentsBeforeTest()) { + removeAllAssignments(focusOid, result); + } + + //noinspection unchecked + LensContext context = (LensContext) testDetails.createModelContext(task, result); + display("Input context", context); + assertFocusModificationSanity(context); + + // WHEN + + HookOperationMode mode = clockwork.run(context, task, result); + + // THEN + + assertEquals("Unexpected state of the context", ModelState.PRIMARY, context.getState()); + assertEquals("Wrong mode after clockwork.run in " + context.getState(), HookOperationMode.BACKGROUND, mode); + CaseType rootCase = testHelper.getRootCase(result); + + if (!testDetails.approvedAutomatically()) { + List subcases = miscHelper.getSubcases(rootCase, result); + assertEquals("Incorrect number of subcases", testDetails.subcasesCount(), subcases.size()); + + CaseType case0 = WfTestHelper.findAndRemoveCase0(subcases); + testDetails.assertsAfterClockworkRun(rootCase, case0, subcases, task, result); + if (testDetails.immediate()) { + CaseType rootCaseAfter = testHelper.waitForCaseClose(case0, 20000); + testDetails.assertsAfterImmediateExecutionFinished(rootCaseAfter, result); + } + + for (int i = 0; i < subcases.size(); i++) { + CaseType subcase = subcases.get(i); + //noinspection unchecked + PrismProperty deltas = subcase.asPrismContainerValue().findProperty( + ItemPath.create(F_APPROVAL_CONTEXT, F_DELTAS_TO_APPROVE)); + assertNotNull("There are no modifications in subcase #" + i + ": " + subcase, deltas); + assertEquals("Incorrect number of modifications in subcase #" + i + ": " + subcase, 1, deltas.getRealValues().size()); + // todo check correctness of the modification? + + // now check the workflow state + + // WfProcessInstanceType processInstance = workflowServiceImpl.getProcessInstanceById(pid, false, true, result); + // assertNotNull("Process instance information cannot be retrieved", processInstance); + // assertEquals("Incorrect number of work items", 1, processInstance.getWorkItems().size()); + + //String taskId = processInstance.getWorkItems().get(0).getWorkItemId(); + //WorkItemDetailed workItemDetailed = wfDataAccessor.getWorkItemDetailsById(taskId, result); + + List workItems = getWorkItemsForCase(subcase.getOid(), null, result); + CaseWorkItemType workItem = MiscUtil.extractSingleton(workItems); + assertNotNull("work item not found", workItem); + + ApprovalContextType wfContext = subcase.getApprovalContext(); + LOGGER.trace("wfContext = {}", wfContext); + + boolean approve = testDetails.decideOnApproval(subcase, wfContext); + workflowManager.completeWorkItem(WorkItemId.of(workItem), + new AbstractWorkItemOutputType(prismContext) + .outcome(ApprovalUtils.toUri(approve)), + null, task, result); + login(userAdministrator); + } + } + + CaseType rootCaseAfter = testHelper.waitForCaseClose(rootCase, 60000); + + List subcases = miscHelper.getSubcases(rootCaseAfter, result); + WfTestHelper.findAndRemoveCase0(subcases); + //TestUtil.assertSuccess(rootCase.getResult()); + testDetails.assertsRootCaseFinishes(rootCaseAfter, subcases, task, result); + + if (focusOid == null) { + focusOid = testDetails.getObjectOid(rootCaseAfter, result); + } + assertNotNull("object oid is null after operation", focusOid); + if (!focusOid.equals(DONT_CHECK)) { + assertObjectInTaskTree(rootCaseAfter, focusOid, testDetails.checkObjectOnSubtasks(), result); + } + + if (!testDetails.approvedAutomatically()) { + // ZZZ temporarily disabled + // checkDummyTransportMessages("simpleWorkflowNotifier-Processes", workflowSubtaskCount * 2); + // checkDummyTransportMessages("simpleWorkflowNotifier-WorkItems", workflowSubtaskCount * 2); + } + notificationManager.setDisabled(true); + + // Check audit + display("Audit", dummyAuditService); + + display("Output context", context); + } + + private void assertObjectInTaskTree(CaseType rootCase, String oid, boolean checkObjectOnSubtasks, OperationResult result) throws SchemaException { + assertObjectInTask(rootCase, oid); + if (checkObjectOnSubtasks) { + for (CaseType subcase: miscHelper.getSubcases(rootCase, result)) { + assertObjectInTask(subcase, oid); + } + } + } + + private void assertObjectInTask(CaseType aCase, String oid) { + assertEquals("Missing or wrong object OID in case " + aCase, oid, aCase.getObjectRef() != null ? aCase.getObjectRef().getOid() : null); + } } diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/general/ApprovingDummyResourceChangesScenarioBean.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/general/ApprovingDummyResourceChangesScenarioBean.java deleted file mode 100644 index 237b227966e..00000000000 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/general/ApprovingDummyResourceChangesScenarioBean.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2010-2014 Evolveum - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.evolveum.midpoint.wf.impl.general; - -import com.evolveum.midpoint.prism.PrismContext; -import com.evolveum.midpoint.util.logging.Trace; -import com.evolveum.midpoint.util.logging.TraceManager; -import com.evolveum.midpoint.wf.impl.processors.general.scenarios.BaseGcpScenarioBean; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -/** - * This scenario bean simply puts "dummyResourceDelta" process variable into externalized state. - * - * @author mederly - */ -@Component -public class ApprovingDummyResourceChangesScenarioBean extends BaseGcpScenarioBean { - - private static final Trace LOGGER = TraceManager.getTrace(ApprovingDummyResourceChangesScenarioBean.class); - -// public static final QName DUMMY_RESOURCE_DELTA_QNAME = new QName(SchemaConstants.NS_WFCF, "dummyResourceDelta"); - - @Autowired - private PrismContext prismContext; - -// @Override -// public ProcessSpecificState externalizeInstanceState(Map variables) throws SchemaException { -// PrismContainerDefinition extDefinition = prismContext.getSchemaRegistry().findContainerDefinitionByType(ProcessSpecificState.COMPLEX_TYPE); -// PrismContainer extStateContainer = extDefinition.instantiate(); -// ProcessSpecificState extState = extStateContainer.createNewValue().asContainerable(); -// -// PrismPropertyDefinition deltaDefinition = new PrismPropertyDefinitionImpl( -// DUMMY_RESOURCE_DELTA_QNAME, -// new QName(SchemaConstantsGenerated.NS_TYPES, "ObjectDeltaType"), -// prismContext); -// -// JaxbValueContainer deltaInProcess = (JaxbValueContainer) variables.get("dummyResourceDelta"); -// if (deltaInProcess != null) { -// deltaInProcess.setPrismContext(prismContext); -// PrismProperty deltaProperty = extStateContainer.getValue().findOrCreateItem(prismContext.path(DUMMY_RESOURCE_DELTA_QNAME), PrismProperty.class, deltaDefinition); -// deltaProperty.setRealValue(deltaInProcess.getValue()); -// LOGGER.info("deltaProperty = {}", deltaProperty.debugDump()); -// } else { -// LOGGER.warn("No dummyResourceDelta variable in process instance"); -// } -// return extState; -// } -} diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/general/TestGeneralChangeProcessor.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/general/TestGeneralChangeProcessor.java deleted file mode 100644 index ab064f0d9b0..00000000000 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/general/TestGeneralChangeProcessor.java +++ /dev/null @@ -1,412 +0,0 @@ -/* - * Copyright (c) 2010-2017 Evolveum - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.evolveum.midpoint.wf.impl.general; - -import com.evolveum.midpoint.model.api.context.ModelContext; -import com.evolveum.midpoint.model.api.context.ModelState; -import com.evolveum.midpoint.model.api.hooks.HookOperationMode; -import com.evolveum.midpoint.model.impl.AbstractInternalModelIntegrationTest; -import com.evolveum.midpoint.model.impl.lens.Clockwork; -import com.evolveum.midpoint.model.impl.lens.LensContext; -import com.evolveum.midpoint.prism.PrismContext; -import com.evolveum.midpoint.prism.PrismObject; -import com.evolveum.midpoint.prism.path.ItemPath; -import com.evolveum.midpoint.schema.result.OperationResult; -import com.evolveum.midpoint.task.api.Task; -import com.evolveum.midpoint.task.api.TaskManager; -import com.evolveum.midpoint.test.util.TestUtil; -import com.evolveum.midpoint.util.exception.ObjectNotFoundException; -import com.evolveum.midpoint.util.exception.SchemaException; -import com.evolveum.midpoint.util.logging.Trace; -import com.evolveum.midpoint.util.logging.TraceManager; -import com.evolveum.midpoint.wf.impl.WfTestHelper; -import com.evolveum.midpoint.wf.impl.legacy.AbstractWfTestLegacy; -import com.evolveum.midpoint.wf.impl.util.MiscHelper; -import com.evolveum.midpoint.wf.impl.processors.general.GeneralChangeProcessor; -import com.evolveum.midpoint.wf.impl.processors.primary.PrimaryChangeProcessor; -import com.evolveum.midpoint.xml.ns._public.common.common_3.*; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.annotation.DirtiesContext.ClassMode; -import org.springframework.test.context.ContextConfiguration; -import org.testng.annotations.Test; - -import javax.xml.bind.JAXBException; -import java.io.File; -import java.util.List; - -import static org.testng.AssertJUnit.*; - -/** - * @author semancik - * - */ -@ContextConfiguration(locations = {"classpath:ctx-workflow-test-main.xml"}) -@DirtiesContext(classMode = ClassMode.AFTER_CLASS) -//@DependsOn("workflowServiceImpl") -public class TestGeneralChangeProcessor extends AbstractInternalModelIntegrationTest { - - protected static final Trace LOGGER = TraceManager.getTrace(TestGeneralChangeProcessor.class); - - private static final String TEST_RESOURCE_DIR_NAME = "src/test/resources"; - private static final File REQ_USER_JACK_MODIFY_ADD_ASSIGNMENT_ROLE1 = new File(TEST_RESOURCE_DIR_NAME, - "legacy/user-jack-modify-add-assignment-role1.xml"); - private static final String REQ_USER_JACK_MODIFY_ADD_ASSIGNMENT_ROLE2_CHANGE_GN = TEST_RESOURCE_DIR_NAME + "/legacy/user-jack-modify-add-assignment-role2-change-gn.xml"; - private static final String REQ_USER_JACK_MODIFY_ADD_ASSIGNMENT_ROLE3_CHANGE_GN2 = TEST_RESOURCE_DIR_NAME + "/legacy/user-jack-modify-add-assignment-role3-change-gn2.xml"; - private static final String REQ_USER_JACK_MODIFY_ADD_ASSIGNMENT_ROLES2_3_4 = TEST_RESOURCE_DIR_NAME + "/legacy/user-jack-modify-add-assignment-roles2-3-4.xml"; - private static final String REQ_USER_JACK_MODIFY_ACTIVATION_DISABLE = TEST_RESOURCE_DIR_NAME + "/legacy/user-jack-modify-activation-disable.xml"; - private static final String REQ_USER_JACK_MODIFY_ACTIVATION_ENABLE = TEST_RESOURCE_DIR_NAME + "/legacy/user-jack-modify-activation-enable.xml"; - private static final String REQ_USER_JACK_MODIFY_CHANGE_PASSWORD = TEST_RESOURCE_DIR_NAME + "/legacy/user-jack-modify-change-password.xml"; - private static final String REQ_USER_JACK_MODIFY_CHANGE_PASSWORD_2 = TEST_RESOURCE_DIR_NAME + "/legacy/user-jack-modify-change-password-2.xml"; - - private static final String DONT_CHECK = "dont-check"; - - @Autowired private Clockwork clockwork; - @Autowired private TaskManager taskManager; - @Autowired private MiscHelper miscHelper; - @Autowired private PrimaryChangeProcessor primaryChangeProcessor; - @Autowired private GeneralChangeProcessor generalChangeProcessor; - @Autowired private PrismContext prismContext; - @Autowired private WfTestHelper testHelper; - - public TestGeneralChangeProcessor() throws JAXBException { - super(); - } - - @Override - public void initSystem(Task initTask, OperationResult initResult) - throws Exception { - super.initSystem(initTask, initResult); - importObjectFromFile(AbstractWfTestLegacy.USERS_AND_ROLES_FILE, initResult); - modifyObjectReplaceProperty(SystemConfigurationType.class, SystemObjectsType.SYSTEM_CONFIGURATION.value(), - ItemPath.create(SystemConfigurationType.F_WORKFLOW_CONFIGURATION, - WfConfigurationType.F_PRIMARY_CHANGE_PROCESSOR, - PrimaryChangeProcessorConfigurationType.F_ENABLED), - initTask, initResult, - false); - modifyObjectReplaceProperty(SystemConfigurationType.class, SystemObjectsType.SYSTEM_CONFIGURATION.value(), - ItemPath.create(SystemConfigurationType.F_WORKFLOW_CONFIGURATION, - WfConfigurationType.F_GENERAL_CHANGE_PROCESSOR, - GeneralChangeProcessorConfigurationType.F_ENABLED), - initTask, initResult, - true); - } - - @Test - public void test010AddRole1() throws Exception { - TestUtil.displayTestTitle(this, "test010UserModifyAddRole"); - executeTest("test010UserModifyAddRole", USER_JACK_OID, 1, false, true, new ContextCreator() { - @Override - public LensContext createModelContext(OperationResult result) throws Exception { - LensContext context = createUserLensContext(); - fillContextWithUser(context, USER_JACK_OID, result); - addFocusModificationToContext(context, REQ_USER_JACK_MODIFY_ADD_ASSIGNMENT_ROLE1); - return context; - } - - @Override - void assertsAfterClockworkRun(ModelContext context, Task task, OperationResult result) throws Exception { - assertEquals("Unexpected state of the context", ModelState.PRIMARY, context.getState()); - } - - @Override - void completeWorkItem(CaseWorkItemType workItem, String taskId, OperationResult result) throws Exception { -// WorkItemContents contents = (WorkItemContents) workItem.getContents(); -// PrismObject qFormObject = contents.getQuestionForm().asPrismObject(); -// LOGGER.trace("workItemContents = " + qFormObject.debugDump()); -// -// // change role1 -> role2 -// final int N = 6; -// StringBuilder ctx = new StringBuilder(); -// -// for (int ctxIndex = 0; ctxIndex < N; ctxIndex++) { -// QName contextQName = new QName(SchemaConstants.NS_WFCF, "modelContextToBeEdited" + ctxIndex); -// PrismProperty contextProperty = qFormObject.findProperty(contextQName); -// assertNotNull(contextQName + " not found among workItem specific properties", contextProperty); -// ctx.append(contextProperty.getRealValue()); -// } -// -// String newCtx = ctx.toString().replaceAll("00000001-d34d-b33f-f00d-000000000001", "00000001-d34d-b33f-f00d-000000000002"); -// for (int ctxIndex = 0; ctxIndex < N; ctxIndex++) { -// QName contextQName = new QName(SchemaConstants.NS_WFCF, "modelContextToBeEdited" + ctxIndex); -// PrismProperty contextProperty = qFormObject.findProperty(contextQName); -// contextProperty.replace(new PrismPropertyValue<>(JaxbValueContainer.getChunk(newCtx, ctxIndex))); -// } -// -// login(getUser(USER_ADMINISTRATOR_OID)); -//// workflowServiceImpl.completeWorkItem(taskId, qFormObject, "approve", result); - } - - @Override - void assertsRootTaskFinishes(CaseType aCase, Task task, OperationResult result) throws Exception { - assertAssignedRole(USER_JACK_OID, AbstractWfTestLegacy.ROLE_R2_OID, task, result); - checkDummyTransportMessages("simpleUserNotifier", 1); - //checkWorkItemAuditRecords(createResultMap(AbstractWfTestLegacy.ROLE_R1_OID, WorkflowResult.APPROVED)); - //checkUserApprovers(USER_JACK_OID, Arrays.asList(AbstractWfTestLegacy.R1BOSS_OID), result); - } - }); - } - - @Test - public void test020AddAccountRejected() throws Exception { - TestUtil.displayTestTitle(this, "test020AddAccountRejected"); - - enableDisableScenarios(false, true); - - executeTest("test020AddAccountRejected", USER_JACK_OID, 1, false, true, new ContextCreator() { - @Override - public LensContext createModelContext(OperationResult result) throws Exception { - LensContext context = createUserLensContext(); - fillContextWithUser(context, USER_JACK_OID, result); - addModificationToContextAddAccountFromFile(context, ACCOUNT_SHADOW_JACK_DUMMY_FILE); - return context; - } - - @Override - void assertsAfterClockworkRun(ModelContext context, Task task, OperationResult result) throws Exception { - assertEquals("Unexpected state of the context", ModelState.SECONDARY, context.getState()); - } - - @Override - void completeWorkItem(CaseWorkItemType workItem, String taskId, OperationResult result) throws Exception { -// -// PrismObject workItemContents = workItem.getContents().asPrismObject(); -// display("workItemContents", workItemContents); -// -// PrismObject questionFormPrism = workItemContents.asObjectable().getQuestionForm().asPrismObject(); -// -// WfProcessInstanceType instance = null; //workflowServiceImpl.getProcessInstanceById(workItem.getProcessInstanceId(), false, true, result); -// PrismProperty dummyResourceDelta = null; // TODO ((ProcessInstanceState) instance.getState()).getProcessSpecificState().asPrismContainerValue().findProperty(ApprovingDummyResourceChangesScenarioBean.DUMMY_RESOURCE_DELTA_QNAME); -// ObjectDeltaType deltaType = dummyResourceDelta.getRealValue(); -// display("dummyResourceDelta", DeltaConvertor.createObjectDelta(deltaType, prismContext)); -// -// PrismPropertyDefinition ppd = new PrismPropertyDefinitionImpl(new QName(SchemaConstants.NS_WFCF, "[Button]rejectAll"), -// DOMUtil.XSD_BOOLEAN, prismContext); -// PrismProperty rejectAll = ppd.instantiate(); -// rejectAll.setRealValue(Boolean.TRUE); -// questionFormPrism.addReplaceExisting(rejectAll); -// -// login(getUser(USER_ADMINISTRATOR_OID)); -//// workflowServiceImpl.completeWorkItem(taskId, questionFormPrism, "rejectAll", result); - } - - @Override - void assertsRootTaskFinishes(CaseType aCase, Task task, OperationResult result) throws Exception { - PrismObject jack = getUser(USER_JACK_OID); -// assertAssignedRole(USER_JACK_OID, AbstractWfTestLegacy.ROLE_R2_OID, task, result); - assertNoLinkedAccount(jack); - //checkDummyTransportMessages("simpleUserNotifier", 1); - //checkWorkItemAuditRecords(createResultMap(AbstractWfTestLegacy.ROLE_R1_OID, WorkflowResult.APPROVED)); - //checkUserApprovers(USER_JACK_OID, Arrays.asList(AbstractWfTestLegacy.R1BOSS_OID), result); - } - - - }); - } - - protected void enableDisableScenarios(boolean... values) throws ObjectNotFoundException, SchemaException, com.evolveum.midpoint.util.exception.ExpressionEvaluationException, com.evolveum.midpoint.util.exception.CommunicationException, com.evolveum.midpoint.util.exception.ConfigurationException, com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException, com.evolveum.midpoint.util.exception.PolicyViolationException, com.evolveum.midpoint.util.exception.SecurityViolationException { - OperationResult result = new OperationResult("execution"); - Task task = taskManager.createTaskInstance("execution"); - GeneralChangeProcessorConfigurationType gcpConfig = getSystemConfiguration().getWorkflowConfiguration().getGeneralChangeProcessor(); - for (int i = 0; i < values.length; i++) { - gcpConfig.getScenario().get(i).setEnabled(values[i]); - } - modifyObjectReplaceProperty(SystemConfigurationType.class, SystemObjectsType.SYSTEM_CONFIGURATION.value(), - ItemPath.create(SystemConfigurationType.F_WORKFLOW_CONFIGURATION, - WfConfigurationType.F_GENERAL_CHANGE_PROCESSOR, - GeneralChangeProcessorConfigurationType.F_ENABLED), - task, result, - gcpConfig); - } - -// @Test(enabled = false) -// public void test028CurrentRepo() throws Exception { -// TestUtil.displayTestTile(this, "test029NewRepo"); -// -// //old repo -// PrismDomProcessor domProcessor = prismContext.getPrismDomProcessor(); -// //"extension" value -// String xml = IOUtils.toString(new FileInputStream("./src/test/resources/model-context.xml"), "utf-8"); -// Element root = DOMUtil.parseDocument(xml).getDocumentElement(); -// -// QName name = new QName("http://midpoint.evolveum.com/xml/ns/public/model/model-context-3", "modelContext"); -// -// PrismObjectDefinition oDef = prismContext.getSchemaRegistry().findObjectDefinitionByCompileTimeClass(TaskType.class); -// PrismContainerDefinition def = oDef.findContainerDefinition(prismContext.path(ObjectType.F_EXTENSION, name)); -// Item parsedItem = domProcessor.parseItem(DOMUtil.listChildElements(root), name, def); -// LOGGER.debug("Parser:\n{}", parsedItem.debugDump()); -// } - -// @Test(enabled = false) -// public void test029NewRepo() throws Exception { -// TestUtil.displayTestTile(this, "test029NewRepo"); -// -// PrismDomProcessor domProcessor = prismContext.getPrismDomProcessor(); -// String xml = IOUtils.toString(new FileInputStream("./src/test/resources/task.xml"), "utf-8"); -// PrismObject o = domProcessor.parseObject(xml); -// LOGGER.info("Parsed:\n{}", o.debugDump()); -// } - - @Test - public void test030AddAccountApproved() throws Exception { - TestUtil.displayTestTitle(this, "test030AddAccountApproved"); - - enableDisableScenarios(false, true); - - executeTest("test030AddAccountApproved", USER_JACK_OID, 1, false, true, new ContextCreator() { - @Override - public LensContext createModelContext(OperationResult result) throws Exception { - LensContext context = createUserLensContext(); - fillContextWithUser(context, USER_JACK_OID, result); - addModificationToContextAddAccountFromFile(context, ACCOUNT_SHADOW_JACK_DUMMY_FILE); - return context; - } - - @Override - void assertsAfterClockworkRun(ModelContext context, Task task, OperationResult result) throws Exception { - assertEquals("Unexpected state of the context", ModelState.SECONDARY, context.getState()); - } - - @Override - void completeWorkItem(CaseWorkItemType workItem, String taskId, OperationResult result) throws Exception { -// -// PrismObject workItemContents = workItem.getContents().asPrismObject(); -// display("workItemContents", workItemContents); -// -// PrismObject questionFormPrism = workItemContents.asObjectable().getQuestionForm().asPrismObject(); -// -// WfProcessInstanceType instance = null; //workflowServiceImpl.getProcessInstanceById(workItem.getProcessInstanceId(), false, true, result); -// PrismProperty dummyResourceDelta = null; // TODO ((ProcessInstanceState) instance.getState()).getProcessSpecificState().asPrismContainerValue().findProperty(ApprovingDummyResourceChangesScenarioBean.DUMMY_RESOURCE_DELTA_QNAME); -// ObjectDeltaType deltaType = dummyResourceDelta.getRealValue(); -// display("dummyResourceDelta", DeltaConvertor.createObjectDelta(deltaType, prismContext)); -// -// PrismPropertyDefinition ppd = new PrismPropertyDefinitionImpl(new QName(SchemaConstants.NS_WFCF, "[Button]approve"), -// DOMUtil.XSD_BOOLEAN, prismContext); -// PrismProperty approve = ppd.instantiate(); -// approve.setRealValue(Boolean.TRUE); -// questionFormPrism.addReplaceExisting(approve); -// -// login(getUser(USER_ADMINISTRATOR_OID)); -//// workflowServiceImpl.completeWorkItem(taskId, questionFormPrism, "approve", result); - } - - @Override - void assertsRootTaskFinishes(CaseType aCase, Task task, OperationResult result) throws Exception { - PrismObject jack = getUser(USER_JACK_OID); -// assertAssignedRole(USER_JACK_OID, AbstractWfTestLegacy.ROLE_R2_OID, task, result); - assertAccount(jack, RESOURCE_DUMMY_OID); - //checkDummyTransportMessages("simpleUserNotifier", 1); - //checkWorkItemAuditRecords(createResultMap(AbstractWfTestLegacy.ROLE_R1_OID, WorkflowResult.APPROVED)); - //checkUserApprovers(USER_JACK_OID, Arrays.asList(AbstractWfTestLegacy.R1BOSS_OID), result); - } - - - }); - } - - - @Test - public void test000LoadContext() throws Exception { - final String TEST_NAME = "test000LoadContext"; - TestUtil.displayTestTitle(this, TEST_NAME); - - Task task = createTask(TEST_NAME); - OperationResult result = task.getResult(); - - LensContextType lensContextType = prismContext.parserFor(new File("src/test/resources/model-contexts/context-dummy-resource.xml")).xml().parseRealValue(LensContextType.class); - display("LensContextType", lensContextType); - LensContext lensContext = LensContext.fromLensContextType(lensContextType, prismContext, provisioningService, task, result); - display("LensContext", lensContext); - } - - - private abstract class ContextCreator { - LensContext createModelContext(OperationResult result) throws Exception { return null; } - void assertsAfterClockworkRun(ModelContext context, Task task, OperationResult result) throws Exception { } - void assertsAfterImmediateExecutionFinished(Task task, OperationResult result) throws Exception { } - void assertsRootTaskFinishes(CaseType aCase, Task task, OperationResult result) throws Exception { } - String getObjectOid(Task task, OperationResult result) throws SchemaException { return null; }; - - abstract void completeWorkItem(CaseWorkItemType workItem, String taskId, OperationResult result) throws Exception; - } - - private void executeTest(String testName, String oid, int subcasesCount, boolean immediate, boolean checkObjectOnSubtasks, ContextCreator contextCreator) throws Exception { - - int workflowSubtaskCount = immediate ? subcasesCount-1 : subcasesCount; - - // GIVEN - prepareNotifications(); - dummyAuditService.clear(); - - OperationResult result = new OperationResult("execution"); - - Task task = taskManager.createTaskInstance(TestGeneralChangeProcessor.class.getName() + "."+testName); - display("Model task after creation", task); - - LensContext context = (LensContext) contextCreator.createModelContext(result); - task.setOwner(repositoryService.getObject(UserType.class, USER_ADMINISTRATOR_OID, null, result)); - - display("Input context", context); - assertFocusModificationSanity(context); - - // WHEN - - HookOperationMode mode = clockwork.run(context, task, result); - - // THEN - - contextCreator.assertsAfterClockworkRun(context, task, result); - assertEquals("Wrong mode after clockwork.run in " + context.getState(), HookOperationMode.BACKGROUND, mode); - task.refresh(result); - display("Model task after clockwork runs", task); - - CaseType rootCase = testHelper.getRootCase(result); - display("Workflow root case created by clockwork run", rootCase); - - ModelContext taskModelContext = immediate ? null : miscHelper.getModelContext(rootCase, task, result); - assertNotNull("Model context is not present in root task", taskModelContext); - - List subcases = miscHelper.getSubcases(rootCase, result); - assertEquals("Incorrect number of subcases", subcasesCount, subcases.size()); - - for (int subcaseIndex = 0; subcaseIndex < subcases.size(); subcaseIndex++) { - CaseType subcase = subcases.get(subcaseIndex); - - // now check the workflow state - -/* - WfProcessInstanceType processInstance = null; //workflowServiceImpl.getProcessInstanceById(pid, false, true, result); - assertNotNull("Process instance information cannot be retrieved", processInstance); - assertEquals("Incorrect number of work items", 1, processInstance.getWorkItems().size()); - - String taskId = processInstance.getWorkItems().get(0).getWorkItemId(); - //WorkItemNewType workItem = workflowServiceImpl.getWorkItemDetailsById(taskId, result); - WorkItemNewType workItem = null; // TODO - - org.activiti.engine.task.Task t = activitiEngine.getTaskService().createTaskQuery().taskId(taskId).singleResult(); - assertNotNull("activiti task not found", t); - - String executionId = t.getExecutionId(); - LOGGER.trace("Task id = " + taskId + ", execution id = " + executionId); - - contextCreator.completeWorkItem(workItem, taskId, result); -*/ - } - - CaseType rootCaseAfter = testHelper.waitForCaseClose(rootCase, 60000); - contextCreator.assertsRootTaskFinishes(rootCaseAfter, task, result); - } -} diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/legacy/AbstractWfTestLegacy.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/legacy/AbstractWfTestLegacy.java deleted file mode 100644 index de4fee21a24..00000000000 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/legacy/AbstractWfTestLegacy.java +++ /dev/null @@ -1,402 +0,0 @@ -/* - * Copyright (c) 2010-2019 Evolveum - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.evolveum.midpoint.wf.impl.legacy; - -import com.evolveum.midpoint.model.api.ModelExecuteOptions; -import com.evolveum.midpoint.model.api.context.ModelState; -import com.evolveum.midpoint.model.api.hooks.HookOperationMode; -import com.evolveum.midpoint.model.impl.AbstractInternalModelIntegrationTest; -import com.evolveum.midpoint.model.impl.lens.Clockwork; -import com.evolveum.midpoint.model.impl.lens.LensContext; -import com.evolveum.midpoint.model.impl.util.ModelImplUtils; -import com.evolveum.midpoint.prism.PrismContext; -import com.evolveum.midpoint.prism.PrismObject; -import com.evolveum.midpoint.prism.PrismProperty; -import com.evolveum.midpoint.prism.delta.ObjectDelta; -import com.evolveum.midpoint.prism.path.ItemPath; -import com.evolveum.midpoint.prism.query.ObjectQuery; -import com.evolveum.midpoint.prism.util.PrismTestUtil; -import com.evolveum.midpoint.schema.DeltaConvertor; -import com.evolveum.midpoint.schema.result.OperationResult; -import com.evolveum.midpoint.schema.util.WorkItemId; -import com.evolveum.midpoint.task.api.Task; -import com.evolveum.midpoint.task.api.TaskManager; -import com.evolveum.midpoint.util.DebugUtil; -import com.evolveum.midpoint.util.MiscUtil; -import com.evolveum.midpoint.util.exception.*; -import com.evolveum.midpoint.wf.api.WorkflowManager; -import com.evolveum.midpoint.wf.impl.WfTestHelper; -import com.evolveum.midpoint.wf.impl.WfTestUtil; -import com.evolveum.midpoint.wf.impl.engine.WorkflowEngine; -import com.evolveum.midpoint.wf.impl.WorkflowResult; -import com.evolveum.midpoint.wf.impl.util.MiscHelper; -import com.evolveum.midpoint.wf.impl.processors.general.GeneralChangeProcessor; -import com.evolveum.midpoint.wf.impl.processors.primary.PcpGeneralHelper; -import com.evolveum.midpoint.wf.impl.processors.primary.PrimaryChangeProcessor; -import com.evolveum.midpoint.wf.util.ApprovalUtils; -import com.evolveum.midpoint.xml.ns._public.common.api_types_3.ObjectModificationType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.*; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.annotation.DirtiesContext.ClassMode; -import org.springframework.test.context.ContextConfiguration; - -import javax.xml.bind.JAXBException; -import java.io.File; -import java.io.IOException; -import java.util.*; - -import static com.evolveum.midpoint.xml.ns._public.common.common_3.CaseType.F_APPROVAL_CONTEXT; -import static com.evolveum.midpoint.xml.ns._public.common.common_3.ApprovalContextType.F_DELTAS_TO_APPROVE; -import static org.testng.AssertJUnit.*; - -/** - * @author semancik - * - */ -@ContextConfiguration(locations = {"classpath:ctx-workflow-test-main.xml"}) -@DirtiesContext(classMode = ClassMode.AFTER_CLASS) -public class AbstractWfTestLegacy extends AbstractInternalModelIntegrationTest { - - static final File TEST_RESOURCE_DIR = new File("src/test/resources/legacy"); - static final String DONT_CHECK = "dont-check"; - - @Autowired protected Clockwork clockwork; - @Autowired protected TaskManager taskManager; - @Autowired protected WorkflowManager workflowManager; - @Autowired protected WorkflowEngine workflowEngine; - @Autowired protected MiscHelper miscHelper; - @Autowired protected PrimaryChangeProcessor primaryChangeProcessor; - @Autowired protected GeneralChangeProcessor generalChangeProcessor; - @Autowired protected WfTestHelper testHelper; - @Autowired protected PcpGeneralHelper pcpGeneralHelper; - - public static final File USERS_AND_ROLES_FILE = new File(TEST_RESOURCE_DIR, "users-and-roles.xml"); - - public static final String ROLE_R1_OID = "00000001-d34d-b33f-f00d-000000000001"; - public static final String ROLE_R2_OID = "00000001-d34d-b33f-f00d-000000000002"; - public static final String ROLE_R3_OID = "00000001-d34d-b33f-f00d-000000000003"; - public static final String ROLE_R4_OID = "00000001-d34d-b33f-f00d-000000000004"; - public static final File USER_BILL_FILE = new File(TEST_RESOURCE_DIR, "user-bill.xml"); - public static final String USER_BILL_OID = "c0c010c0-d34d-b33f-f00d-11111111111a"; - public static final String ROLE_R10_OID = "00000001-d34d-b33f-f00d-000000000010"; - public static final String ROLE_R10_SKIP_OID = "00000001-d34d-b33f-f00d-000000000S10"; - - public static final File ROLE_R11_FILE = new File(TEST_RESOURCE_DIR, "role11.xml"); - public static final String ROLE_R11_OID = "00000001-d34d-b33f-f00d-000000000011"; - public static final File ROLE_R12_FILE = new File(TEST_RESOURCE_DIR, "role12.xml"); - public static final String ROLE_R12_OID = "00000001-d34d-b33f-f00d-000000000012"; - public static final File ROLE_R13_FILE = new File(TEST_RESOURCE_DIR, "role13.xml"); - public static final String ROLE_R13_OID = "00000001-d34d-b33f-f00d-000000000013"; - - public static final String R1BOSS_OID = "00000000-d34d-b33f-f00d-111111111111"; - public static final String R2BOSS_OID = "00000000-d34d-b33f-f00d-111111111112"; - public static final String R3BOSS_OID = "00000000-d34d-b33f-f00d-111111111113"; - public static final String DUMMYBOSS_OID = "00000000-d34d-b33f-f00d-111111111333"; - - public static final String GROUP_TESTERS_OID = "20000000-0000-0000-3333-000000000002"; - public static final File GROUP_TESTERS_FILE = new File(TEST_RESOURCE_DIR, "group-testers-dummy.xml"); - public static final String GROUP_TESTERS_NAME = "testers"; - - public static final String GROUP_GUESTS_OID = "20000000-0000-0000-3333-000000000072"; - public static final File GROUP_GUESTS_FILE = new File(TEST_RESOURCE_DIR, "/group-guests-dummy.xml"); - public static final String GROUP_GUESTS_NAME = "guests"; - - public static final File USER_ELISABETH_FILE = new File(TEST_RESOURCE_DIR, "user-elisabeth.xml"); - public static final String USER_ELISABETH_OID = "c0c010c0-d34d-b33f-f00d-111111112222"; - - public static final File ACCOUNT_SHADOW_ELISABETH_DUMMY_FILE = new File(TEST_RESOURCE_DIR, "account-shadow-elisabeth-dummy.xml"); - - public AbstractWfTestLegacy() { - super(); - } - - @Override - public void initSystem(Task initTask, OperationResult initResult) throws Exception { - - DebugUtil.setPrettyPrintBeansAs(PrismContext.LANG_YAML); - - super.initSystem(initTask, initResult); - importObjectFromFile(USERS_AND_ROLES_FILE, initResult); - importObjectFromFile(ROLE_R11_FILE, initResult); - importObjectFromFile(ROLE_R12_FILE, initResult); - importObjectFromFile(ROLE_R13_FILE, initResult); - - // add dummyboss as approver for Dummy Resource - ResourceBusinessConfigurationType businessConfigurationType = new ResourceBusinessConfigurationType(prismContext); - ObjectReferenceType dummyApproverRef = new ObjectReferenceType(); - dummyApproverRef.setType(UserType.COMPLEX_TYPE); - dummyApproverRef.setOid(DUMMYBOSS_OID); - businessConfigurationType.getApproverRef().add(dummyApproverRef); - ObjectDelta objectDelta = prismContext.deltaFactory().object() - .createModificationAddContainer(ResourceType.class, RESOURCE_DUMMY_OID, ResourceType.F_BUSINESS, - businessConfigurationType); - repositoryService.modifyObject(ResourceType.class, RESOURCE_DUMMY_OID, objectDelta.getModifications(), initResult); - - // check Role2 approver OID (it is filled-in using search filter) - List> roles = findRoleInRepoUnchecked("Role2", initResult); - assertEquals("Wrong number of Role2 objects found in repo", 1, roles.size()); - RoleType role2 = roles.get(0).asObjectable(); - -// could be done also like this -// RoleType role2 = repositoryService.getObject(RoleType.class, ROLE_R2_OID, null, initResult).asObjectable(); - - ObjectReferenceType approver = role2.getApprovalSchema().getStage().get(0).getApproverRef().get(0); - assertEquals("Wrong OID of Role2's approver", R2BOSS_OID, approver.getOid()); - - importObjectFromFile(GROUP_TESTERS_FILE, initResult); - importObjectFromFile(GROUP_GUESTS_FILE, initResult); - - getDummyResourceController().addGroup(GROUP_TESTERS_NAME); - getDummyResourceController().addGroup(GROUP_GUESTS_NAME); - - systemObjectCache.invalidateCaches(); - } - - protected Map createResultMap(String oid, WorkflowResult result) { - Map retval = new HashMap<>(); - retval.put(oid, result); - return retval; - } - - protected Map createResultMap(String oid, WorkflowResult approved, String oid2, WorkflowResult approved2) { - Map retval = new HashMap<>(); - retval.put(oid, approved); - retval.put(oid2, approved2); - return retval; - } - - protected Map createResultMap(String oid, WorkflowResult approved, String oid2, WorkflowResult approved2, String oid3, WorkflowResult approved3) { - Map retval = new HashMap<>(); - retval.put(oid, approved); - retval.put(oid2, approved2); - retval.put(oid3, approved3); - return retval; - } - - protected void checkAuditRecords(Map expectedResults) { - checkWorkItemAuditRecords(expectedResults); - checkWfProcessAuditRecords(expectedResults); - } - - void checkWorkItemAuditRecords(Map expectedResults) { - WfTestUtil.checkWorkItemAuditRecords(expectedResults, dummyAuditService); - } - - protected void checkWfProcessAuditRecords(Map expectedResults) { - WfTestUtil.checkWfProcessAuditRecords(expectedResults, dummyAuditService); - } - - protected void removeAllAssignments(String oid, OperationResult result) throws Exception { - PrismObject user = repositoryService.getObject(UserType.class, oid, null, result); - for (AssignmentType at : user.asObjectable().getAssignment()) { - ObjectDelta delta = prismContext.deltaFactory().object() - .createModificationDeleteContainer(UserType.class, oid, UserType.F_ASSIGNMENT, - at.asPrismContainerValue().clone()); - repositoryService.modifyObject(UserType.class, oid, delta.getModifications(), result); - LOGGER.info("Removed assignment " + at + " from " + user); - } - } - - protected abstract class TestDetails { - abstract int subcasesCount(); - abstract boolean immediate(); - abstract boolean checkObjectOnSubtasks(); - boolean approvedAutomatically() { return false; } - LensContext createModelContext(Task task, OperationResult result) throws Exception { return null; } - void assertsAfterClockworkRun(CaseType rootCase, CaseType case0, - List subcases, Task opTask, OperationResult result) throws Exception { } - void assertsAfterImmediateExecutionFinished(CaseType task, OperationResult result) throws Exception { } - void assertsRootCaseFinishes(CaseType aCase, List subcases, Task opTask, - OperationResult result) throws Exception { } - boolean decideOnApproval(CaseType subcase, ApprovalContextType wfContext) throws Exception { return true; } - String getObjectOid(CaseType task, OperationResult result) throws SchemaException { return null; }; - boolean removeAssignmentsBeforeTest() { return true; } - } - - protected boolean decideOnRoleApproval(CaseType subcase, - ApprovalContextType wfContext) throws ConfigurationException, ObjectNotFoundException, SchemaException, CommunicationException, SecurityViolationException, ExpressionEvaluationException { - ObjectReferenceType targetRef = subcase.getTargetRef(); - assertNotNull("targetRef not found", targetRef); - String roleOid = targetRef.getOid(); - assertNotNull("requested role OID not found", roleOid); - - if (ROLE_R1_OID.equals(roleOid)) { - login(getUser(R1BOSS_OID)); - return true; - } else if (ROLE_R2_OID.equals(roleOid)) { - login(getUser(R2BOSS_OID)); - return false; - } else if (ROLE_R3_OID.equals(roleOid)) { - login(getUser(R3BOSS_OID)); - return true; - } else { - throw new AssertionError("Unknown role OID in assignment to be approved: " + roleOid); - } - } - - void executeTest(String testName, String focusOid, TestDetails testDetails) throws Exception { - - // GIVEN - prepareNotifications(); - dummyAuditService.clear(); - OperationResult result = new OperationResult("execution"); - - Task task = taskManager.createTaskInstance(AbstractWfTestLegacy.class.getName() + "."+testName); - task.setOwner(userAdministrator); - - if (focusOid != null && testDetails.removeAssignmentsBeforeTest()) { - removeAllAssignments(focusOid, result); - } - - LensContext context = (LensContext) testDetails.createModelContext(task, result); - display("Input context", context); - assertFocusModificationSanity(context); - - // WHEN - - HookOperationMode mode = clockwork.run(context, task, result); - - // THEN - - assertEquals("Unexpected state of the context", ModelState.PRIMARY, context.getState()); - assertEquals("Wrong mode after clockwork.run in " + context.getState(), HookOperationMode.BACKGROUND, mode); - CaseType rootCase = testHelper.getRootCase(result); - - if (!testDetails.approvedAutomatically()) { - List subcases = miscHelper.getSubcases(rootCase, result); - assertEquals("Incorrect number of subcases", testDetails.subcasesCount(), subcases.size()); - - CaseType case0 = WfTestHelper.findAndRemoveCase0(subcases); - testDetails.assertsAfterClockworkRun(rootCase, case0, subcases, task, result); - if (testDetails.immediate()) { - CaseType rootCaseAfter = testHelper.waitForCaseClose(case0, 20000); - testDetails.assertsAfterImmediateExecutionFinished(rootCaseAfter, result); - } - - for (int i = 0; i < subcases.size(); i++) { - CaseType subcase = subcases.get(i); - //noinspection unchecked - PrismProperty deltas = subcase.asPrismContainerValue().findProperty( - ItemPath.create(F_APPROVAL_CONTEXT, F_DELTAS_TO_APPROVE)); - assertNotNull("There are no modifications in subcase #" + i + ": " + subcase, deltas); - assertEquals("Incorrect number of modifications in subcase #" + i + ": " + subcase, 1, deltas.getRealValues().size()); - // todo check correctness of the modification? - - // now check the workflow state - -// WfProcessInstanceType processInstance = workflowServiceImpl.getProcessInstanceById(pid, false, true, result); -// assertNotNull("Process instance information cannot be retrieved", processInstance); -// assertEquals("Incorrect number of work items", 1, processInstance.getWorkItems().size()); - - //String taskId = processInstance.getWorkItems().get(0).getWorkItemId(); - //WorkItemDetailed workItemDetailed = wfDataAccessor.getWorkItemDetailsById(taskId, result); - - List workItems = getWorkItemsForCase(subcase.getOid(), null, result); - CaseWorkItemType workItem = MiscUtil.extractSingleton(workItems); - assertNotNull("work item not found", workItem); - - ApprovalContextType wfContext = subcase.getApprovalContext(); - LOGGER.trace("wfContext = {}", wfContext); - - boolean approve = testDetails.decideOnApproval(subcase, wfContext); - workflowManager.completeWorkItem(WorkItemId.of(workItem), - new AbstractWorkItemOutputType(prismContext) - .outcome(ApprovalUtils.toUri(approve)), - null, task, result); - login(userAdministrator); - } - } - - CaseType rootCaseAfter = testHelper.waitForCaseClose(rootCase, 60000); - - List subcases = miscHelper.getSubcases(rootCaseAfter, result); - WfTestHelper.findAndRemoveCase0(subcases); - //TestUtil.assertSuccess(rootCase.getResult()); - testDetails.assertsRootCaseFinishes(rootCaseAfter, subcases, task, result); - - if (focusOid == null) { - focusOid = testDetails.getObjectOid(rootCaseAfter, result); - } - assertNotNull("object oid is null after operation", focusOid); - if (!focusOid.equals(DONT_CHECK)) { - assertObjectInTaskTree(rootCaseAfter, focusOid, testDetails.checkObjectOnSubtasks(), result); - } - - if (!testDetails.approvedAutomatically()) { - // ZZZ temporarily disabled -// checkDummyTransportMessages("simpleWorkflowNotifier-Processes", workflowSubtaskCount * 2); -// checkDummyTransportMessages("simpleWorkflowNotifier-WorkItems", workflowSubtaskCount * 2); - } - notificationManager.setDisabled(true); - - // Check audit - display("Audit", dummyAuditService); - - display("Output context", context); - } - - protected void assertObjectInTaskTree(CaseType rootCase, String oid, boolean checkObjectOnSubtasks, OperationResult result) throws SchemaException { - assertObjectInTask(rootCase, oid); - if (checkObjectOnSubtasks) { - for (CaseType subcase: miscHelper.getSubcases(rootCase, result)) { - assertObjectInTask(subcase, oid); - } - } - } - - protected void assertObjectInTask(CaseType aCase, String oid) { - assertEquals("Missing or wrong object OID in case " + aCase, oid, aCase.getObjectRef() != null ? aCase.getObjectRef().getOid() : null); - } - - protected void deleteUserFromModel(String name) throws SchemaException, ObjectNotFoundException, CommunicationException, ObjectAlreadyExistsException, PolicyViolationException, SecurityViolationException, ConfigurationException, ExpressionEvaluationException { - - OperationResult result = new OperationResult("dummy"); - Task t = taskManager.createTaskInstance(); - t.setOwner(repositoryService.getObject(UserType.class, USER_ADMINISTRATOR_OID, null, result)); - - if (!findUserInRepoUnchecked(name, result).isEmpty()) { - - PrismObject user = findUserInRepo(name, result); - - Collection> deltas = new ArrayList<>(); - deltas.add(prismContext.deltaFactory().object().createDeleteDelta(UserType.class, user.getOid())); - modelService.executeChanges(deltas, new ModelExecuteOptions(), t, result); - - LOGGER.info("User " + name + " was deleted"); - } else { - LOGGER.info("User {} was not found", name); - } - } - - ObjectDelta encryptAndAddFocusModificationToContext( - LensContext context, File file) - throws JAXBException, SchemaException, IOException { - ObjectModificationType modElement = PrismTestUtil.parseAtomicValue( - file, ObjectModificationType.COMPLEX_TYPE); - ObjectDelta focusDelta = DeltaConvertor.createObjectDelta( - modElement, context.getFocusClass(), prismContext); - ModelImplUtils.encrypt((Collection) Arrays.asList(focusDelta), protector, null, new OperationResult("dummy")); - return addFocusDeltaToContext(context, focusDelta); - } - - protected ObjectQuery getOpenItemsQuery() { - return prismContext.queryFor(CaseWorkItemType.class) - .item(CaseWorkItemType.F_CLOSE_TIMESTAMP).isNull() - .build(); - } -} diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/legacy/TestCreateModifyUserLegacy.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/legacy/TestCreateModifyUserLegacy.java deleted file mode 100644 index 1403dcb1f40..00000000000 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/legacy/TestCreateModifyUserLegacy.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright (c) 2010-2017 Evolveum - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.evolveum.midpoint.wf.impl.legacy; - -import com.evolveum.midpoint.model.impl.lens.LensContext; -import com.evolveum.midpoint.prism.delta.DeltaFactory; -import com.evolveum.midpoint.prism.delta.ObjectDelta; -import com.evolveum.midpoint.prism.util.PrismTestUtil; -import com.evolveum.midpoint.schema.result.OperationResult; -import com.evolveum.midpoint.task.api.Task; -import com.evolveum.midpoint.test.util.TestUtil; -import com.evolveum.midpoint.util.logging.Trace; -import com.evolveum.midpoint.util.logging.TraceManager; -import com.evolveum.midpoint.wf.impl.WorkflowResult; -import com.evolveum.midpoint.xml.ns._public.common.common_3.CaseType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ApprovalContextType; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.annotation.DirtiesContext.ClassMode; -import org.springframework.test.context.ContextConfiguration; -import org.testng.annotations.Test; - -import javax.xml.bind.JAXBException; -import java.io.File; -import java.util.Arrays; -import java.util.List; - -/** - * @author mederly - */ -@ContextConfiguration(locations = {"classpath:ctx-workflow-test-main.xml"}) -@DirtiesContext(classMode = ClassMode.AFTER_CLASS) -public class TestCreateModifyUserLegacy extends AbstractWfTestLegacy { - - protected static final Trace LOGGER = TraceManager.getTrace(TestCreateModifyUserLegacy.class); - - private static final File REQ_USER_ELISABETH_MODIFY_ADD_ASSIGNMENT_ROLE1 = new File(TEST_RESOURCE_DIR, - "user-elisabeth-modify-add-assignment-role1.xml"); - - public TestCreateModifyUserLegacy() throws JAXBException { - super(); - } - - /** - * Create user elisabeth (with sensitive role) - */ - @Test(enabled = true) - public void test010CreateElisabeth() throws Exception { - TestUtil.displayTestTitle(this, "test010CreateElisabeth"); - executeTest("test010CreateElisabeth", USER_ELISABETH_OID, new TestDetails() { - @Override int subcasesCount() { return 2; } - @Override boolean immediate() { return false; } - @Override boolean checkObjectOnSubtasks() { return true; } - @Override boolean removeAssignmentsBeforeTest() { return false; } - - @Override - public LensContext createModelContext(Task task, OperationResult result) throws Exception { - LensContext context = createUserLensContext(); - addFocusDeltaToContext(context, (ObjectDelta) DeltaFactory.Object.createAddDelta(PrismTestUtil.parseObject(USER_ELISABETH_FILE))); - return context; - } - - @Override - public void assertsAfterClockworkRun(CaseType rootCase, - CaseType case0, List subcases, - Task opTask, OperationResult result) throws Exception { -// ModelContext taskModelContext = temporaryHelper.getModelContext(rootCase, opTask, result); -// assertEquals("There are modifications left in primary focus delta", 0, taskModelContext.getFocusContext().getPrimaryDelta().getModifications().size()); - //assertNoObject(UserType.class, USER_ELISABETH_OID, task, result); - } - - @Override - void assertsRootCaseFinishes(CaseType aCase, List subcases, Task opTask, - OperationResult result) throws Exception { - assertAssignedRole(USER_ELISABETH_OID, ROLE_R1_OID, opTask, result); - checkDummyTransportMessages("simpleUserNotifier", 1); - checkAuditRecords(createResultMap(ROLE_R1_OID, WorkflowResult.APPROVED)); - checkUserApproversForCreate(USER_ELISABETH_OID, Arrays.asList(R1BOSS_OID), result); - } - - @Override - boolean decideOnApproval(CaseType subcase, - ApprovalContextType wfContext) throws Exception { - return decideOnRoleApproval(subcase, wfContext); - } - }); - } - - /** - * Add another assignment to user elisabeth (with sensitive role) - */ - @Test - public void test020ModifyElisabethAssignRole1() throws Exception { - TestUtil.displayTestTitle(this, "test020ModifyElisabethAssignRole1"); - executeTest("test020ModifyElisabethAssignRole1", USER_ELISABETH_OID, new TestDetails() { - @Override int subcasesCount() { return 1; } - @Override boolean immediate() { return false; } - @Override boolean checkObjectOnSubtasks() { return true; } - @Override boolean removeAssignmentsBeforeTest() { return false; } - - @Override - public LensContext createModelContext(Task task, OperationResult result) throws Exception { - LensContext context = createUserLensContext(); - fillContextWithUser(context, USER_ELISABETH_OID, result); - addFocusModificationToContext(context, REQ_USER_ELISABETH_MODIFY_ADD_ASSIGNMENT_ROLE1); - return context; - } - - @Override - public void assertsAfterClockworkRun(CaseType rootCase, - CaseType case0, List subcases, - Task opTask, OperationResult result) throws Exception { -// ModelContext taskModelContext = temporaryHelper.getModelContext(rootCase, opTask, result); -// assertEquals("There are modifications left in primary focus delta", 0, taskModelContext.getFocusContext().getPrimaryDelta().getModifications().size()); - //assertNotAssignedRole(USER_ELISABETH_OID, ROLE_R3_OID, task, result); - } - - @Override - void assertsRootCaseFinishes(CaseType aCase, List subcases, Task opTask, - OperationResult result) throws Exception { - assertAssignedRole(USER_ELISABETH_OID, ROLE_R1_OID, opTask, result); - checkDummyTransportMessages("simpleUserNotifier", 1); - checkAuditRecords(createResultMap(ROLE_R1_OID, WorkflowResult.APPROVED)); - checkUserApprovers(USER_ELISABETH_OID, Arrays.asList(R1BOSS_OID), result); - checkUserApproversForCreate(USER_ELISABETH_OID, Arrays.asList(R1BOSS_OID), result); // this one should remain from test010 - } - - @Override - boolean decideOnApproval(CaseType subcase, - ApprovalContextType wfContext) throws Exception { - return decideOnRoleApproval(subcase, wfContext); - } - }); - } - - @Test - public void zzzMarkAsNotInitialized() { - display("Setting class as not initialized"); - unsetSystemInitialized(); - } -} diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/legacy/TestCreateOrgLegacy.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/legacy/TestCreateOrgLegacy.java deleted file mode 100644 index 6c58de0df89..00000000000 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/legacy/TestCreateOrgLegacy.java +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Copyright (c) 2010-2017 Evolveum - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.evolveum.midpoint.wf.impl.legacy; - -import com.evolveum.midpoint.model.impl.lens.LensContext; -import com.evolveum.midpoint.prism.delta.DeltaFactory; -import com.evolveum.midpoint.prism.delta.ObjectDelta; -import com.evolveum.midpoint.prism.util.PrismTestUtil; -import com.evolveum.midpoint.schema.result.OperationResult; -import com.evolveum.midpoint.task.api.Task; -import com.evolveum.midpoint.test.util.TestUtil; -import com.evolveum.midpoint.util.logging.Trace; -import com.evolveum.midpoint.util.logging.TraceManager; -import com.evolveum.midpoint.wf.impl.WorkflowResult; -import com.evolveum.midpoint.xml.ns._public.common.common_3.CaseType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.OrgType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ApprovalContextType; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.annotation.DirtiesContext.ClassMode; -import org.springframework.test.context.ContextConfiguration; -import org.testng.annotations.Test; - -import javax.xml.bind.JAXBException; -import java.io.File; -import java.util.Arrays; -import java.util.List; - -/** - * @author mederly - */ -@ContextConfiguration(locations = {"classpath:ctx-workflow-test-main.xml"}) -@DirtiesContext(classMode = ClassMode.AFTER_CLASS) -public class TestCreateOrgLegacy extends AbstractWfTestLegacy { - - protected static final Trace LOGGER = TraceManager.getTrace(TestCreateOrgLegacy.class); - - private static final File TEST1_FILE = new File(TEST_RESOURCE_DIR, "org-test1.xml"); - private static final String ORG_TEST1_OID = "00000000-1345-3213-4321-432435432034"; - - public TestCreateOrgLegacy() throws JAXBException { - super(); - } - - /** - * Create org test1 - rejected - */ - @Test(enabled = false) // this is not enabled by default - public void test010CreateTest1Rejected() throws Exception { - TestUtil.displayTestTitle(this, "test010CreateTest1Rejected"); - executeTest("test010CreateTest1Rejected", ORG_TEST1_OID, new TestDetails() { - @Override - int subcasesCount() { - return 1; - } - - @Override - boolean immediate() { - return false; - } - - @Override - boolean checkObjectOnSubtasks() { - return true; - } - - @Override - boolean removeAssignmentsBeforeTest() { - return false; - } - - @Override - public LensContext createModelContext(Task task, OperationResult result) throws Exception { - LensContext context = createLensContext(OrgType.class); - addFocusDeltaToContext(context, (ObjectDelta) DeltaFactory.Object.createAddDelta(PrismTestUtil.parseObject(TEST1_FILE))); - return context; - } - - @Override - public void assertsAfterClockworkRun(CaseType rootCase, - CaseType case0, List subcases, - Task opTask, OperationResult result) throws Exception { -// ModelContext taskModelContext = temporaryHelper.getModelContext(rootCase, opTask, result); -// assertTrue("Primary focus delta is not empty", taskModelContext.getFocusContext().getPrimaryDelta().isEmpty()); - assertNoObject(OrgType.class, ORG_TEST1_OID, opTask, result); - } - - @Override - void assertsRootCaseFinishes(CaseType aCase, List subcases, Task opTask, - OperationResult result) throws Exception { - checkDummyTransportMessages("simpleUserNotifier", 1); - checkAuditRecords(createResultMap(ROLE_R1_OID, WorkflowResult.APPROVED)); - assertNoObject(OrgType.class, ORG_TEST1_OID, opTask, result); - } - - @Override - boolean decideOnApproval(CaseType subcase, - ApprovalContextType wfContext) throws Exception { - return false; - } - }); - } - - /** - * Create org test1 - this time approved - */ - @Test(enabled = false) // this is not enabled by default - public void test020CreateTest1Approved() throws Exception { - TestUtil.displayTestTitle(this, "test020CreateTest1Approved"); - executeTest("test020CreateTest1Approved", ORG_TEST1_OID, new TestDetails() { - @Override int subcasesCount() { return 1; } - @Override boolean immediate() { return false; } - @Override boolean checkObjectOnSubtasks() { return true; } - @Override boolean removeAssignmentsBeforeTest() { return false; } - - @Override - public LensContext createModelContext(Task task, OperationResult result) throws Exception { - LensContext context = createLensContext(OrgType.class); - addFocusDeltaToContext(context, (ObjectDelta) DeltaFactory.Object.createAddDelta(PrismTestUtil.parseObject(TEST1_FILE))); - return context; - } - - @Override - public void assertsAfterClockworkRun(CaseType rootCase, - CaseType case0, List subcases, - Task opTask, OperationResult result) throws Exception { -// ModelContext taskModelContext = temporaryHelper.getModelContext(rootCase, opTask, result); -// assertTrue("Primary focus delta is not empty", taskModelContext.getFocusContext().getPrimaryDelta().isEmpty()); - assertNoObject(OrgType.class, ORG_TEST1_OID, opTask, result); - } - - @Override - void assertsRootCaseFinishes(CaseType aCase, List subcases, Task opTask, - OperationResult result) throws Exception { - checkDummyTransportMessages("simpleUserNotifier", 1); - checkAuditRecords(createResultMap(ROLE_R1_OID, WorkflowResult.APPROVED)); - checkApproversForCreate(OrgType.class, ORG_TEST1_OID, Arrays.asList(USER_ADMINISTRATOR_OID), result); - } - - @Override - boolean decideOnApproval(CaseType subcase, - ApprovalContextType wfContext) throws Exception { - return true; - } - }); - } - - @Test - public void zzzMarkAsNotInitialized() { - display("Setting class as not initialized"); - unsetSystemInitialized(); - } -} diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/legacy/TestUserChangeApprovalLegacy.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/legacy/TestUserChangeApprovalLegacy.java deleted file mode 100644 index bb30d5ed73c..00000000000 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/legacy/TestUserChangeApprovalLegacy.java +++ /dev/null @@ -1,1320 +0,0 @@ -/* - * Copyright (c) 2010-2017 Evolveum - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.evolveum.midpoint.wf.impl.legacy; - -import com.evolveum.midpoint.model.api.ModelExecuteOptions; -import com.evolveum.midpoint.model.impl.lens.LensContext; -import com.evolveum.midpoint.prism.*; -import com.evolveum.midpoint.prism.delta.*; -import com.evolveum.midpoint.prism.path.ItemPath; -import com.evolveum.midpoint.prism.polystring.PolyString; -import com.evolveum.midpoint.prism.xml.XmlTypeConverter; -import com.evolveum.midpoint.prism.xnode.PrimitiveXNode; -import com.evolveum.midpoint.schema.GetOperationOptions; -import com.evolveum.midpoint.schema.SelectorOptions; -import com.evolveum.midpoint.schema.constants.ObjectTypes; -import com.evolveum.midpoint.schema.constants.SchemaConstants; -import com.evolveum.midpoint.schema.result.OperationResult; -import com.evolveum.midpoint.schema.util.*; -import com.evolveum.midpoint.task.api.Task; -import com.evolveum.midpoint.test.DummyResourceContoller; -import com.evolveum.midpoint.test.util.TestUtil; -import com.evolveum.midpoint.util.exception.*; -import com.evolveum.midpoint.util.logging.Trace; -import com.evolveum.midpoint.util.logging.TraceManager; -import com.evolveum.midpoint.wf.impl.WfTestUtil; -import com.evolveum.midpoint.wf.impl.WorkflowResult; -import com.evolveum.midpoint.xml.ns._public.common.common_3.*; -import com.evolveum.prism.xml.ns._public.types_3.ItemPathType; -import com.evolveum.prism.xml.ns._public.types_3.ProtectedStringType; -import com.evolveum.prism.xml.ns._public.types_3.RawType; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.annotation.DirtiesContext.ClassMode; -import org.springframework.test.context.ContextConfiguration; -import org.testng.annotations.Test; - -import javax.xml.bind.JAXBElement; -import javax.xml.bind.JAXBException; -import javax.xml.datatype.XMLGregorianCalendar; -import javax.xml.namespace.QName; -import java.io.File; -import java.util.*; - -import static com.evolveum.midpoint.prism.PrismConstants.T_PARENT; -import static com.evolveum.midpoint.schema.GetOperationOptions.createRetrieve; -import static com.evolveum.midpoint.xml.ns._public.common.common_3.CaseType.*; -import static com.evolveum.midpoint.xml.ns._public.common.common_3.CaseWorkItemType.*; -import static java.util.Collections.singletonList; -import static org.testng.AssertJUnit.*; - -/** - * @author mederly - */ -@ContextConfiguration(locations = {"classpath:ctx-workflow-test-main.xml"}) -@DirtiesContext(classMode = ClassMode.AFTER_CLASS) -public class TestUserChangeApprovalLegacy extends AbstractWfTestLegacy { - - protected static final Trace LOGGER = TraceManager.getTrace(TestUserChangeApprovalLegacy.class); - - private static final File REQ_USER_JACK_MODIFY_ADD_ASSIGNMENT_ROLE1 = new File(TEST_RESOURCE_DIR, - "user-jack-modify-add-assignment-role1.xml"); - private static final File REQ_USER_JACK_MODIFY_ADD_ASSIGNMENT_ROLE2_CHANGE_GN = new File(TEST_RESOURCE_DIR, - "user-jack-modify-add-assignment-role2-change-gn.xml"); - private static final File REQ_USER_JACK_MODIFY_ADD_ASSIGNMENT_ROLE3_CHANGE_GN2 = new File(TEST_RESOURCE_DIR, - "user-jack-modify-add-assignment-role3-change-gn2.xml"); - private static final File REQ_USER_JACK_MODIFY_ADD_ASSIGNMENT_ROLES2_3_4 = new File(TEST_RESOURCE_DIR, - "user-jack-modify-add-assignment-roles2-3-4.xml"); - private static final File REQ_USER_JACK_MODIFY_ACTIVATION_DISABLE = new File(TEST_RESOURCE_DIR, - "user-jack-modify-activation-disable.xml"); - private static final File REQ_USER_JACK_MODIFY_ACTIVATION_ENABLE = new File(TEST_RESOURCE_DIR, - "user-jack-modify-activation-enable.xml"); - private static final File REQ_USER_JACK_MODIFY_CHANGE_PASSWORD = new File(TEST_RESOURCE_DIR, - "user-jack-modify-change-password.xml"); - private static final File REQ_USER_JACK_MODIFY_CHANGE_PASSWORD_2 = new File(TEST_RESOURCE_DIR, - "user-jack-modify-change-password-2.xml"); - private static final File REQ_USER_JACK_MODIFY_ADD_ASSIGNMENT_ROLE10 = new File(TEST_RESOURCE_DIR, - "user-jack-modify-add-assignment-role10.xml"); - private static final File REQ_USER_JACK_MODIFY_ADD_ASSIGNMENT_DUMMY = new File(TEST_RESOURCE_DIR, - "user-jack-modify-add-assignment-dummy.xml"); - - public TestUserChangeApprovalLegacy() throws JAXBException { - super(); - } - - /** - * The simplest case: user modification with one security-sensitive role. - */ - @Test - public void test010UserModifyAddRole() throws Exception { - TestUtil.displayTestTitle(this, "test010UserModifyAddRole"); - login(userAdministrator); - executeTest("test010UserModifyAddRole", USER_JACK_OID, new TestDetails() { - @Override - int subcasesCount() { - return 1; - } - - @Override - boolean immediate() { - return false; - } - - @Override - boolean checkObjectOnSubtasks() { - return true; - } - - @Override - public LensContext createModelContext(Task task, OperationResult result) throws Exception { - LensContext context = createUserLensContext(); - fillContextWithUser(context, USER_JACK_OID, result); - addFocusModificationToContext(context, REQ_USER_JACK_MODIFY_ADD_ASSIGNMENT_ROLE1); - return context; - } - - @Override - public void assertsAfterClockworkRun(CaseType rootCase, - CaseType case0, List subtasks, - Task opTask, OperationResult result) throws Exception { -// ModelContext taskModelContext = temporaryHelper.getModelContext(rootCase, opTask, result); -// assertTrue("There are modifications left in primary focus delta", ObjectDelta.isEmpty(taskModelContext.getFocusContext().getPrimaryDelta())); - assertNotAssignedRole(USER_JACK_OID, ROLE_R1_OID, opTask, result); - assertWfContextAfterClockworkRun(rootCase, subtasks, result, "Assigning role \"Role1\" to user \"jack\""); - } - - @Override - void assertsRootCaseFinishes(CaseType aCase, List subcases, Task opTask, OperationResult result) throws Exception { - assertAssignedRole(USER_JACK_OID, ROLE_R1_OID, opTask, result); - checkDummyTransportMessages("simpleUserNotifier", 1); - checkAuditRecords(createResultMap(ROLE_R1_OID, WorkflowResult.APPROVED)); - checkUserApprovers(USER_JACK_OID, singletonList(R1BOSS_OID), result); - assertWfContextAfterRootTaskFinishes(aCase, subcases, result, "Assigning role \"Role1\" to user \"jack\""); - } - - @Override - boolean decideOnApproval(CaseType subcase, - ApprovalContextType wfContext) throws Exception { - return decideOnRoleApproval(subcase, wfContext); - } - }); - displayAllNotifications(); - checkDummyTransportMessages("simpleWorkflowNotifier-Processes", 2); // start + end - } - - protected void assertWfContextAfterClockworkRun(CaseType rootCase, List subcases, OperationResult result, String... processNames) throws Exception { - - Task opTask = taskManager.createTaskInstance(); - display("rootCase", rootCase); - assertHasArchetypes(rootCase.asPrismObject(), SystemObjectsType.ARCHETYPE_OPERATION_REQUEST.value()); - - assertEquals("Wrong # of wf subcases w.r.t processNames (" + Arrays.asList(processNames) + ")", processNames.length, subcases.size()); - int i = 0; - for (CaseType subcase : subcases) { - display("Subtask #"+(i+1)+": ", subcase); - checkCase(subcase, subcase.toString(), processNames[i++]); - WfTestUtil.assertRef("requester ref", subcase.getRequestorRef(), USER_ADMINISTRATOR_OID, false, false); - assertHasArchetypes(subcase.asPrismObject(), SystemObjectsType.ARCHETYPE_APPROVAL_CASE.value()); - } - - final Collection> options1 = schemaHelper.getOperationOptionsBuilder() - .item(T_PARENT, F_OBJECT_REF).resolve() - .item(T_PARENT, F_TARGET_REF).resolve() - .item(F_ASSIGNEE_REF).resolve() - .item(F_ORIGINAL_ASSIGNEE_REF).resolve() - .item(T_PARENT, F_REQUESTOR_REF).resolve() - .build(); - List workItems = modelService.searchContainers(CaseWorkItemType.class, getOpenItemsQuery(), options1, opTask, result); - assertEquals("Wrong # of work items", processNames.length, workItems.size()); - i = 0; - for (CaseWorkItemType workItem : workItems) { - display("Work item #"+(i+1)+": ", workItem); - display("Case", CaseWorkItemUtil.getCase(workItem)); - WfTestUtil.assertRef("object reference", ApprovalContextUtil.getObjectRef(workItem), USER_JACK_OID, true, true); - WfTestUtil.assertRef("target reference", ApprovalContextUtil.getTargetRef(workItem), ROLE_R1_OID, true, true); - WfTestUtil.assertRef("assignee reference", workItem.getOriginalAssigneeRef(), R1BOSS_OID, false, true); // name is not known - //WfTestUtil.assertRef("task reference", workItem.getTaskRef(), null, false, true); - final CaseType subcase = CaseWorkItemUtil.getCaseRequired(workItem); - checkCase(subcase, "case in workItem", processNames[i++]); - WfTestUtil.assertRef("requester ref", subcase.getRequestorRef(), USER_ADMINISTRATOR_OID, false, true); - } - } - - private void checkCase(CaseType subcase, String context, String processName) { - ApprovalContextType wfc = subcase.getApprovalContext(); - assertNotNull("Missing workflow context in subcase: " + context, wfc); - assertEquals("Wrong process ID name in subtask: " + context, processName, subcase.getName().getOrig()); - assertNotNull("Missing process start time in subtask: " + context, CaseTypeUtil.getStartTimestamp(subcase)); - assertNull("Unexpected process end time in subtask: " + context, subcase.getCloseTimestamp()); - assertEquals("Wrong outcome", null, subcase.getOutcome()); - //assertEquals("Wrong state", null, wfc.getState()); - } - - protected void assertWfContextAfterRootTaskFinishes(CaseType rootCase, List subcases, OperationResult result, String... processNames) throws Exception { - - assertEquals("Wrong # of wf subcases w.r.t processNames (" + Arrays.asList(processNames) + ")", processNames.length, subcases.size()); - int i = 0; - for (CaseType subcase : subcases) { - display("Subtask #"+(i+1)+": ", subcase); - ApprovalContextType wfc = subcase.getApprovalContext(); - assertNotNull("Missing workflow context in wf subcase: " + subcase, wfc); - assertEquals("Wrong process ID name in subcase: " + subcase, processNames[i++], subcase.getName().getOrig()); - assertNotNull("Missing process start time in subcase: " + subcase, CaseTypeUtil.getStartTimestamp(subcase)); - assertNotNull("Missing process end time in subcase: " + subcase, subcase.getCloseTimestamp()); - assertEquals("Wrong outcome", SchemaConstants.MODEL_APPROVAL_OUTCOME_APPROVE, subcase.getOutcome()); - } - } - - /** - * User modification with one security-sensitive role and other (unrelated) change - e.g. change of the given name. - * Aggregated execution. - */ - - @Test(enabled = true) - public void test011UserModifyAddRoleChangeGivenName() throws Exception { - TestUtil.displayTestTitle(this, "test011UserModifyAddRoleChangeGivenName"); - login(userAdministrator); - - executeTest("test011UserModifyAddRoleChangeGivenName", USER_JACK_OID, new TestDetails() { - @Override int subcasesCount() { return 2; } - @Override boolean immediate() { return false; } - @Override boolean checkObjectOnSubtasks() { return true; } - - @Override - public LensContext createModelContext(Task task, OperationResult result) throws Exception { - LensContext context = createUserLensContext(); - fillContextWithUser(context, USER_JACK_OID, result); - addFocusModificationToContext(context, REQ_USER_JACK_MODIFY_ADD_ASSIGNMENT_ROLE2_CHANGE_GN); - return context; - } - - @Override - public void assertsAfterClockworkRun(CaseType rootCase, CaseType case0, List subcases, - Task opTask, OperationResult result) throws Exception { - Collection> modifications = pcpGeneralHelper.retrieveResultingDeltas(case0) - .getFocusChange().getModifications(); - assertEquals("There is wrong number of modifications left in primary focus delta", 1, - modifications.size()); - ItemDelta givenNameDelta = modifications.iterator().next(); - - assertNotNull("givenName delta is incorrect (not a replace delta)", givenNameDelta.isReplace()); - assertEquals("givenName delta is incorrect (wrong value)", "JACK", ((PrismPropertyValue) givenNameDelta.getValuesToReplace().iterator().next()).getValue().getOrig()); - - PrismObject jack = repositoryService.getObject(UserType.class, USER_JACK_OID, null, result); - assertNotAssignedRole(jack, ROLE_R2_OID); - assertEquals("Wrong given name before change", "Jack", jack.asObjectable().getGivenName().getOrig()); - } - - @Override - void assertsRootCaseFinishes(CaseType aCase, List subcases, Task opTask, - OperationResult result) throws Exception { - PrismObject jack = repositoryService.getObject(UserType.class, USER_JACK_OID, null, result); - assertNotAssignedRole(jack, ROLE_R2_OID); - assertEquals("Wrong given name after change", "JACK", jack.asObjectable().getGivenName().getOrig()); - - checkDummyTransportMessages("simpleUserNotifier", 1); - checkAuditRecords(createResultMap(ROLE_R2_OID, WorkflowResult.REJECTED)); - checkUserApprovers(USER_JACK_OID, new ArrayList<>(), result); - } - - @Override - boolean decideOnApproval(CaseType subcase, - ApprovalContextType wfContext) throws Exception { - return decideOnRoleApproval(subcase, wfContext); - } - - }); - } - - @Test(enabled = true) - public void test012UserModifyAddRoleChangeGivenNameImmediate() throws Exception { - TestUtil.displayTestTitle(this, "test012UserModifyAddRoleChangeGivenNameImmediate"); - login(userAdministrator); - executeTest("test012UserModifyAddRoleChangeGivenNameImmediate", USER_JACK_OID, new TestDetails() { - @Override int subcasesCount() { return 2; } - @Override boolean immediate() { return true; } - @Override boolean checkObjectOnSubtasks() { return true; } - - @Override - public LensContext createModelContext(Task task, OperationResult result) throws Exception { - LensContext context = createUserLensContext(); - fillContextWithUser(context, USER_JACK_OID, result); - addFocusModificationToContext(context, REQ_USER_JACK_MODIFY_ADD_ASSIGNMENT_ROLE3_CHANGE_GN2); - context.setOptions(ModelExecuteOptions.createExecuteImmediatelyAfterApproval()); - return context; - } - - @Override - public void assertsAfterClockworkRun(CaseType rootCase, - CaseType case0, List subcases, - Task opTask, OperationResult result) throws Exception { - } - - @Override - void assertsAfterImmediateExecutionFinished(CaseType task, OperationResult result) throws Exception { - PrismObject jack = repositoryService.getObject(UserType.class, USER_JACK_OID, null, result); - assertNotAssignedRole(jack, ROLE_R3_OID); - assertEquals("Wrong given name after immediate execution", "J-A-C-K", jack.asObjectable().getGivenName().getOrig()); - } - - @Override - void assertsRootCaseFinishes(CaseType aCase, List subcases, Task opTask, - OperationResult result) throws Exception { - PrismObject jack = repositoryService.getObject(UserType.class, USER_JACK_OID, null, result); - assertAssignedRole(jack, ROLE_R3_OID); - - checkDummyTransportMessages("simpleUserNotifier", 2); - checkAuditRecords(createResultMap(ROLE_R3_OID, WorkflowResult.APPROVED)); - checkUserApprovers(USER_JACK_OID, Arrays.asList(R3BOSS_OID), result); // given name is changed before role is added, so the approver should be recorded - } - - @Override - boolean decideOnApproval(CaseType subcase, - ApprovalContextType wfContext) throws Exception { - return decideOnRoleApproval(subcase, wfContext); - } - - }); - } - - - @Test(enabled = true) - public void test020UserModifyAddThreeRoles() throws Exception { - TestUtil.displayTestTitle(this, "test020UserModifyAddThreeRoles"); - login(userAdministrator); - executeTest("test020UserModifyAddThreeRoles", USER_JACK_OID, new TestDetails() { - @Override int subcasesCount() { return 3; } - @Override boolean immediate() { return false; } - @Override boolean checkObjectOnSubtasks() { return true; } - - @Override - public LensContext createModelContext(Task task, OperationResult result) throws Exception { - LensContext context = createUserLensContext(); - fillContextWithUser(context, USER_JACK_OID, result); - addFocusModificationToContext(context, REQ_USER_JACK_MODIFY_ADD_ASSIGNMENT_ROLES2_3_4); - addFocusModificationToContext(context, REQ_USER_JACK_MODIFY_ACTIVATION_DISABLE); - return context; - } - - @Override - public void assertsAfterClockworkRun(CaseType rootCase, - CaseType case0, List subcases, - Task opTask, OperationResult result) throws Exception { - Collection> modifications = pcpGeneralHelper.retrieveResultingDeltas(case0) - .getFocusChange().getModifications(); - assertEquals("There is wrong number of modifications left in case0", 2, modifications.size()); - Iterator it = modifications.iterator(); - ItemDelta addRoleDelta = null, activationChange = null; - while (it.hasNext()) { - ItemDelta mod = it.next(); - if (mod.isAdd()) { - addRoleDelta = mod; - } else if (mod.isReplace()) { - activationChange = mod; - } - } - assertNotNull("role add delta was not found", addRoleDelta); - assertEquals("role add delta contains wrong number of values", 1, addRoleDelta.getValuesToAdd().size()); - assertNotNull("activation change delta was not found", activationChange); - } - - @Override - void assertsRootCaseFinishes(CaseType aCase, List subcases, Task opTask, - OperationResult result) throws Exception { - PrismObject jack = getUserFromRepo(USER_JACK_OID, result); - assertNotAssignedRole(jack, ROLE_R1_OID); - assertNotAssignedRole(jack, ROLE_R2_OID); - assertAssignedRole(jack, ROLE_R3_OID); - assertAssignedRole(jack, ROLE_R4_OID); - assertEquals("activation has not been changed", ActivationStatusType.DISABLED, jack.asObjectable().getActivation().getAdministrativeStatus()); - - checkDummyTransportMessages("simpleUserNotifier", 1); - checkAuditRecords(createResultMap(ROLE_R2_OID, WorkflowResult.REJECTED, ROLE_R3_OID, WorkflowResult.APPROVED)); - checkUserApprovers(USER_JACK_OID, Arrays.asList(R3BOSS_OID), result); - } - - @Override - boolean decideOnApproval(CaseType subcase, - ApprovalContextType wfContext) throws Exception { - return decideOnRoleApproval(subcase, wfContext); - } - - }); - } - - @Test(enabled = true) - public void test021UserModifyAddThreeRolesImmediate() throws Exception { - TestUtil.displayTestTitle(this, "test021UserModifyAddThreeRolesImmediate"); - login(userAdministrator); - executeTest("test021UserModifyAddThreeRolesImmediate", USER_JACK_OID, new TestDetails() { - @Override int subcasesCount() { return 3; } - @Override boolean immediate() { return true; } - @Override boolean checkObjectOnSubtasks() { return true; } - - @Override - public LensContext createModelContext(Task task, OperationResult result) throws Exception { - LensContext context = createUserLensContext(); - fillContextWithUser(context, USER_JACK_OID, result); - addFocusModificationToContext(context, REQ_USER_JACK_MODIFY_ADD_ASSIGNMENT_ROLES2_3_4); - addFocusModificationToContext(context, REQ_USER_JACK_MODIFY_ACTIVATION_ENABLE); - context.setOptions(ModelExecuteOptions.createExecuteImmediatelyAfterApproval()); - return context; - } - - @Override - public void assertsAfterClockworkRun(CaseType rootCase, - CaseType case0, List subcases, - Task opTask, OperationResult result) throws Exception { - } - - @Override - void assertsAfterImmediateExecutionFinished(CaseType task, OperationResult result) throws Exception { - PrismObject jack = repositoryService.getObject(UserType.class, USER_JACK_OID, null, result); - assertNotAssignedRole(jack, ROLE_R1_OID); - assertNotAssignedRole(jack, ROLE_R2_OID); - assertNotAssignedRole(jack, ROLE_R3_OID); - assertAssignedRole(jack, ROLE_R4_OID); - assertEquals("activation has not been changed", ActivationStatusType.ENABLED, jack.asObjectable().getActivation().getAdministrativeStatus()); - checkUserApprovers(USER_JACK_OID, new ArrayList<>(), result); - } - - @Override - void assertsRootCaseFinishes(CaseType aCase, List subcases, Task opTask, - OperationResult result) throws Exception { - PrismObject jack = getUserFromRepo(USER_JACK_OID, result); - assertNotAssignedRole(jack, ROLE_R1_OID); - assertNotAssignedRole(jack, ROLE_R2_OID); - assertAssignedRole(jack, ROLE_R3_OID); - assertAssignedRole(jack, ROLE_R4_OID); - assertEquals("activation has not been changed", ActivationStatusType.ENABLED, jack.asObjectable().getActivation().getAdministrativeStatus()); - - checkDummyTransportMessages("simpleUserNotifier", 2); - checkAuditRecords(createResultMap(ROLE_R2_OID, WorkflowResult.REJECTED, ROLE_R3_OID, WorkflowResult.APPROVED)); - checkUserApprovers(USER_JACK_OID, Arrays.asList(R3BOSS_OID), result); - } - - @Override - boolean decideOnApproval(CaseType subcase, - ApprovalContextType wfContext) throws Exception { - return decideOnRoleApproval(subcase, wfContext); - } - - }); - } - - @Test(enabled = true) - public void test030UserAdd() throws Exception { - TestUtil.displayTestTitle(this, "test030UserAdd"); - login(userAdministrator); - executeTest("test030UserAdd", null, new TestDetails() { - @Override int subcasesCount() { return 3; } - @Override boolean immediate() { return false; } - @Override boolean checkObjectOnSubtasks() { return false; } - - @Override - public LensContext createModelContext(Task task, OperationResult result) throws Exception { - LensContext context = createUserLensContext(); - PrismObject bill = prismContext.parseObject(USER_BILL_FILE); - fillContextWithAddUserDelta(context, bill); - return context; - } - - @Override - public void assertsAfterClockworkRun(CaseType rootCase, - CaseType case0, List subcases, - Task opTask, OperationResult result) throws Exception { - //noinspection unchecked - PrismObject objectToAdd = (PrismObject) pcpGeneralHelper.retrieveResultingDeltas(case0) - .getFocusChange().getObjectToAdd(); - assertNotNull("There is no object to add left in primary focus delta", objectToAdd); - assertFalse("There is assignment of R1 in reduced primary focus delta", assignmentExists(objectToAdd.asObjectable().getAssignment(), ROLE_R1_OID)); - assertFalse("There is assignment of R2 in reduced primary focus delta", assignmentExists(objectToAdd.asObjectable().getAssignment(), ROLE_R2_OID)); - assertFalse("There is assignment of R3 in reduced primary focus delta", assignmentExists(objectToAdd.asObjectable().getAssignment(), ROLE_R3_OID)); - assertTrue("There is no assignment of R4 in reduced primary focus delta", assignmentExists(objectToAdd.asObjectable().getAssignment(), ROLE_R4_OID)); - } - - @Override - void assertsRootCaseFinishes(CaseType aCase, List subcases, Task opTask, - OperationResult result) throws Exception { - PrismObject bill = findUserInRepo("bill", result); - assertAssignedRole(bill, ROLE_R1_OID); - assertNotAssignedRole(bill, ROLE_R2_OID); - assertNotAssignedRole(bill, ROLE_R3_OID); - assertAssignedRole(bill, ROLE_R4_OID); - //assertEquals("Wrong number of assignments for bill", 4, bill.asObjectable().getAssignmentNew().size()); - - checkDummyTransportMessages("simpleUserNotifier", 1); - checkAuditRecords(createResultMap(ROLE_R1_OID, WorkflowResult.APPROVED, ROLE_R2_OID, WorkflowResult.REJECTED)); - checkUserApproversForCreate(bill.getOid(), Arrays.asList(R1BOSS_OID), result); - } - - @Override - boolean decideOnApproval(CaseType subcase, - ApprovalContextType wfContext) throws Exception { - return decideOnRoleApproval(subcase, wfContext); - } - - @Override - String getObjectOid(CaseType task, OperationResult result) throws SchemaException { - //return findUserInRepo("bill", result).getOid(); - return DONT_CHECK; // don't check in this case - } - }); - } - - @Test(enabled = true) - public void test031UserAddImmediate() throws Exception { - TestUtil.displayTestTitle(this, "test031UserAddImmediate"); - login(userAdministrator); - - deleteUserFromModel("bill"); - - executeTest("test031UserAddImmediate", null, new TestDetails() { - @Override int subcasesCount() { return 3; } - @Override boolean immediate() { return true; } - @Override boolean checkObjectOnSubtasks() { return true; } - - @Override - public LensContext createModelContext(Task task, OperationResult result) throws Exception { - LensContext context = createUserLensContext(); - PrismObject bill = prismContext.parseObject(USER_BILL_FILE); - fillContextWithAddUserDelta(context, bill); - context.setOptions(ModelExecuteOptions.createExecuteImmediatelyAfterApproval()); - return context; - } - - @Override - public void assertsAfterClockworkRun(CaseType rootCase, - CaseType case0, List subcases, - Task opTask, OperationResult result) throws Exception { - } - - @Override - void assertsAfterImmediateExecutionFinished(CaseType task, OperationResult result) throws Exception { - PrismObject bill = findUserInRepo("bill", result); - assertNotAssignedRole(bill, ROLE_R1_OID); - assertNotAssignedRole(bill, ROLE_R2_OID); - assertNotAssignedRole(bill, ROLE_R3_OID); - assertAssignedRole(bill, ROLE_R4_OID); - //assertEquals("Wrong number of assignments for bill", 3, bill.asObjectable().getAssignmentNew().size()); - checkUserApproversForCreate(USER_JACK_OID, new ArrayList<>(), result); - } - - @Override - void assertsRootCaseFinishes(CaseType aCase, List subcases, Task opTask, - OperationResult result) throws Exception { - PrismObject bill = findUserInRepo("bill", result); - assertAssignedRole(bill, ROLE_R1_OID); - assertNotAssignedRole(bill, ROLE_R2_OID); - assertNotAssignedRole(bill, ROLE_R3_OID); - assertAssignedRole(bill, ROLE_R4_OID); - //assertEquals("Wrong number of assignments for bill", 4, bill.asObjectable().getAssignmentNew().size()); - - checkDummyTransportMessages("simpleUserNotifier", 2); - checkAuditRecords(createResultMap(ROLE_R1_OID, WorkflowResult.APPROVED, ROLE_R2_OID, WorkflowResult.REJECTED)); - checkUserApprovers(bill.getOid(), Arrays.asList(R1BOSS_OID), result); - } - - @Override - boolean decideOnApproval(CaseType subcase, - ApprovalContextType wfContext) throws Exception { - return decideOnRoleApproval(subcase, wfContext); - } - - @Override - String getObjectOid(CaseType task, OperationResult result) throws SchemaException { - return findUserInRepo("bill", result).getOid(); - } - }); - } - - @Test(enabled = false) // password change aspect is not available any more - public void test040UserModifyPasswordChangeBlocked() throws Exception { - TestUtil.displayTestTitle(this, "test040UserModifyPasswordChangeBlocked"); - login(userAdministrator); - - PrismObject jack = getUser(USER_JACK_OID); - final ProtectedStringType originalPasswordValue = jack.asObjectable().getCredentials().getPassword().getValue(); - LOGGER.trace("password before test = " + originalPasswordValue); - - executeTest("test040UserModifyPasswordChangeBlocked", USER_JACK_OID, new TestDetails() { - @Override int subcasesCount() { return 1; } - @Override boolean immediate() { return false; } - @Override boolean checkObjectOnSubtasks() { return true; } - - @Override - public LensContext createModelContext(Task task, OperationResult result) throws Exception { - LensContext context = createUserLensContext(); - fillContextWithUser(context, USER_JACK_OID, result); - encryptAndAddFocusModificationToContext(context, REQ_USER_JACK_MODIFY_CHANGE_PASSWORD); - //context.setOptions(ModelExecuteOptions.createNoCrypt()); - return context; - } - - @Override - public void assertsAfterClockworkRun(CaseType rootCase, - CaseType case0, List subcases, - Task opTask, OperationResult result) throws Exception { -// ModelContext taskModelContext = temporaryHelper.getModelContext(rootCase, opTask, result); -// assertEquals("There are modifications left in primary focus delta", 0, taskModelContext.getFocusContext().getPrimaryDelta().getModifications().size()); - } - - @Override - void assertsRootCaseFinishes(CaseType aCase, List subcases, Task opTask, - OperationResult result) throws Exception { - PrismObject jack = getUser(USER_JACK_OID); - ProtectedStringType afterTestPasswordValue = jack.asObjectable().getCredentials().getPassword().getValue(); - LOGGER.trace("password after test = " + afterTestPasswordValue); - - //assertNotNull("password was not set", afterTestPasswordValue.getEncryptedData()); - assertTrue("password was changed", originalPasswordValue.getEncryptedDataType().equals(afterTestPasswordValue.getEncryptedDataType())); - - checkDummyTransportMessages("simpleUserNotifier", 0); - // we don't check for modifyApproverRef because in this test the value was not changed (no change was executed) - } - - @Override - boolean decideOnApproval(CaseType subcase, - ApprovalContextType wfContext) throws Exception { - login(getUser(USER_ADMINISTRATOR_OID)); - return false; - } - }); - } - - @Test(enabled = false) // password change aspect is not available any more - public void test041UserModifyPasswordChange() throws Exception { - TestUtil.displayTestTitle(this, "test041UserModifyPasswordChange"); - login(userAdministrator); - PrismObject jack = getUser(USER_JACK_OID); - final ProtectedStringType originalPasswordValue = jack.asObjectable().getCredentials().getPassword().getValue(); - LOGGER.trace("password before test = " + originalPasswordValue); - - executeTest("test041UserModifyPasswordChange", USER_JACK_OID, new TestDetails() { - @Override int subcasesCount() { return 1; } - @Override boolean immediate() { return false; } - @Override boolean checkObjectOnSubtasks() { return true; } - - @Override - public LensContext createModelContext(Task task, OperationResult result) throws Exception { - LensContext context = createUserLensContext(); - fillContextWithUser(context, USER_JACK_OID, result); - encryptAndAddFocusModificationToContext(context, REQ_USER_JACK_MODIFY_CHANGE_PASSWORD); - //context.setOptions(ModelExecuteOptions.createNoCrypt()); - return context; - } - - @Override - public void assertsAfterClockworkRun(CaseType rootCase, - CaseType case0, List subcases, - Task opTask, OperationResult result) throws Exception { -// ModelContext taskModelContext = temporaryHelper.getModelContext(rootCase, opTask, result); -// assertEquals("There are modifications left in primary focus delta", 0, taskModelContext.getFocusContext().getPrimaryDelta().getModifications().size()); - } - - @Override - void assertsRootCaseFinishes(CaseType aCase, List subcases, Task opTask, - OperationResult result) throws Exception { - PrismObject jack = getUser(USER_JACK_OID); - ProtectedStringType afterTestPasswordValue = jack.asObjectable().getCredentials().getPassword().getValue(); - LOGGER.trace("password after test = " + afterTestPasswordValue); - - //assertNotNull("password was not set", afterTestPasswordValue.getEncryptedData()); - assertFalse("password was not changed", originalPasswordValue.getEncryptedDataType().equals(afterTestPasswordValue.getEncryptedDataType())); - - checkDummyTransportMessages("simpleUserNotifier", 1); - } - - @Override - boolean decideOnApproval(CaseType subcase, - ApprovalContextType wfContext) throws Exception { - login(getUser(USER_ADMINISTRATOR_OID)); - return true; - } - }); - } - - @Test(enabled = false) // password change aspect is not available any more - public void test050UserModifyAddRoleAndPasswordChange() throws Exception { - TestUtil.displayTestTitle(this, "test050UserModifyAddRoleAndPasswordChange"); - login(userAdministrator); - PrismObject jack = getUser(USER_JACK_OID); - final ProtectedStringType originalPasswordValue = jack.asObjectable().getCredentials().getPassword().getValue(); - LOGGER.trace("password before test = " + originalPasswordValue); - - executeTest("test050UserModifyAddRoleAndPasswordChange", USER_JACK_OID, new TestDetails() { - @Override int subcasesCount() { return 2; } - @Override boolean immediate() { return false; } - @Override boolean checkObjectOnSubtasks() { return true; } - - @Override - public LensContext createModelContext(Task task, OperationResult result) throws Exception { - LensContext context = createUserLensContext(); - fillContextWithUser(context, USER_JACK_OID, result); - encryptAndAddFocusModificationToContext(context, REQ_USER_JACK_MODIFY_CHANGE_PASSWORD_2); - addFocusModificationToContext(context, REQ_USER_JACK_MODIFY_ADD_ASSIGNMENT_ROLE1); - //context.setOptions(ModelExecuteOptions.createNoCrypt()); - return context; - } - - @Override - public void assertsAfterClockworkRun(CaseType rootCase, - CaseType case0, List subcases, - Task opTask, OperationResult result) throws Exception { -// ModelContext taskModelContext = temporaryHelper.getModelContext(rootCase, opTask, result); -// assertEquals("There are modifications left in primary focus delta", 0, taskModelContext.getFocusContext().getPrimaryDelta().getModifications().size()); - } - - @Override - void assertsRootCaseFinishes(CaseType aCase, List subcases, Task opTask, - OperationResult result) throws Exception { - PrismObject jack = getUser(USER_JACK_OID); - ProtectedStringType afterTestPasswordValue = jack.asObjectable().getCredentials().getPassword().getValue(); - LOGGER.trace("password after test = " + afterTestPasswordValue); - - // todo why is password value not set? - //assertNotNull("password was not set", afterTestPasswordValue.getEncryptedData()); - //assertFalse("password was not changed", originalPasswordValue.getEncryptedData().equals(afterTestPasswordValue.getEncryptedData())); - assertAssignedRole(jack, ROLE_R1_OID); - - checkDummyTransportMessages("simpleUserNotifier", 1); - } - - @Override - boolean decideOnApproval(CaseType subcase, - ApprovalContextType wfContext) throws Exception { - ObjectReferenceType targetRef = subcase.getTargetRef(); - if (targetRef != null && RoleType.COMPLEX_TYPE.equals(targetRef.getType())) { - return decideOnRoleApproval(subcase, wfContext); - } else { - login(getUser(USER_ADMINISTRATOR_OID)); - return true; - } - } - - }); - } - - @Test(enabled = true) - public void test060UserModifyAddRoleAutoApproval() throws Exception { - TestUtil.displayTestTitle(this, "test060UserModifyAddRoleAutoApproval"); - login(userAdministrator); - executeTest("test060UserModifyAddRoleAutoApproval", USER_JACK_OID, new TestDetails() { - @Override int subcasesCount() { return 1; } - @Override boolean immediate() { return false; } - @Override boolean checkObjectOnSubtasks() { return true; } - - @Override boolean approvedAutomatically() { return true; } - - @Override - public LensContext createModelContext(Task task, OperationResult result) throws Exception { - LensContext context = createUserLensContext(); - fillContextWithUser(context, USER_JACK_OID, result); - addFocusModificationToContext(context, REQ_USER_JACK_MODIFY_ADD_ASSIGNMENT_ROLE10); - return context; - } - - @Override - public void assertsAfterClockworkRun(CaseType rootCase, - CaseType case0, List subcases, - Task opTask, OperationResult result) throws Exception { - // todo perhaps the role should be assigned even at this point? - } - - @Override - void assertsRootCaseFinishes(CaseType aCase, List subcases, Task opTask, - OperationResult result) throws Exception { - PrismObject jack = repositoryService.getObject(UserType.class, USER_JACK_OID, null, result); - assertAssignedRole(jack, ROLE_R10_OID); - - checkDummyTransportMessages("simpleUserNotifier", 1); - } - - @Override - boolean decideOnApproval(CaseType subcase, - ApprovalContextType wfContext) throws Exception { - throw new AssertionError("Decision should not be acquired in this scenario."); - } - - }); - displayAllNotifications(); - checkDummyTransportMessages("simpleWorkflowNotifier-Processes", 2); // start + end - } - - @Test(enabled = true) - public void test061UserModifyAddRoleAutoSkip() throws Exception { - final String TEST_NAME = "test061UserModifyAddRoleAutoSkip"; - TestUtil.displayTestTitle(this, TEST_NAME); - login(userAdministrator); - Task task = taskManager.createTaskInstance(TestUserChangeApprovalLegacy.class.getName() + "."+TEST_NAME); - task.setOwner(userAdministrator); - OperationResult result = task.getResult(); - - // WHEN - assignRole(USER_JACK_OID, ROLE_R10_SKIP_OID, task, result); - - // THEN - PrismObject jack = repositoryService.getObject(UserType.class, USER_JACK_OID, null, result); - assertAssignedRole(jack, ROLE_R10_OID, task, result); - - result.computeStatusIfUnknown(); - assertSuccess(result); - } - - @Test - public void test062UserModifyAddRoleAutoApprovalFirstDecides() throws Exception { - TestUtil.displayTestTitle(this, "test062UserModifyAddRoleAutoApprovalFirstDecides"); - login(userAdministrator); - executeTest("test062UserModifyAddRoleAutoApprovalFirstDecides", USER_JACK_OID, new TestDetails() { - @Override int subcasesCount() { return 1; } - @Override boolean immediate() { return false; } - @Override boolean checkObjectOnSubtasks() { return true; } - - @Override boolean approvedAutomatically() { return true; } - - @Override - public LensContext createModelContext(Task task, OperationResult result) throws Exception { - LensContext context = createUserLensContext(); - fillContextWithUser(context, USER_JACK_OID, result); - addFocusDeltaToContext(context, - (ObjectDelta) prismContext.deltaFor(UserType.class) - .item(UserType.F_ASSIGNMENT).add( - ObjectTypeUtil.createAssignmentTo(ROLE_R11_OID, ObjectTypes.ROLE, prismContext).asPrismContainerValue()) - .asObjectDelta(USER_JACK_OID)); - return context; - } - - @Override - public void assertsAfterClockworkRun(CaseType rootCase, - CaseType case0, List subcases, - Task opTask, OperationResult result) throws Exception { - // todo perhaps the role should be assigned even at this point? - } - - @Override - void assertsRootCaseFinishes(CaseType aCase, List subcases, Task opTask, - OperationResult result) throws Exception { - PrismObject jack = repositoryService.getObject(UserType.class, USER_JACK_OID, null, result); - assertAssignedRole(jack, ROLE_R11_OID); - - checkDummyTransportMessages("simpleUserNotifier", 1); - } - - @Override - boolean decideOnApproval(CaseType subcase, - ApprovalContextType wfContext) throws Exception { - throw new AssertionError("Decision should not be acquired in this scenario."); - } - - }); - displayAllNotifications(); - checkDummyTransportMessages("simpleWorkflowNotifier-Processes", 2); // start + end - } - - @Test - public void test064UserModifyAddRoleNoApproversAllMustAgree() throws Exception { - TestUtil.displayTestTitle(this, "test064UserModifyAddRoleNoApproversAllMustAgree"); - login(userAdministrator); - executeTest("test064UserModifyAddRoleNoApproversAllMustAgree", USER_JACK_OID, new TestDetails() { - @Override int subcasesCount() { return 1; } - @Override boolean immediate() { return false; } - @Override boolean checkObjectOnSubtasks() { return true; } - - @Override boolean approvedAutomatically() { return true; } - - @Override - public LensContext createModelContext(Task task, OperationResult result) throws Exception { - LensContext context = createUserLensContext(); - fillContextWithUser(context, USER_JACK_OID, result); - addFocusDeltaToContext(context, - (ObjectDelta) prismContext.deltaFor(UserType.class) - .item(UserType.F_ASSIGNMENT).add( - ObjectTypeUtil.createAssignmentTo(ROLE_R12_OID, ObjectTypes.ROLE, prismContext).asPrismContainerValue()) - .asObjectDelta(USER_JACK_OID)); - return context; - } - - @Override - public void assertsAfterClockworkRun(CaseType rootCase, - CaseType case0, List subcases, - Task opTask, OperationResult result) throws Exception { - // todo perhaps the role should be assigned even at this point? - } - - @Override - void assertsRootCaseFinishes(CaseType aCase, List subcases, Task opTask, - OperationResult result) throws Exception { - PrismObject jack = repositoryService.getObject(UserType.class, USER_JACK_OID, null, result); - assertAssignedRole(jack, ROLE_R12_OID); - - checkDummyTransportMessages("simpleUserNotifier", 1); - } - - @Override - boolean decideOnApproval(CaseType subcase, - ApprovalContextType wfContext) throws Exception { - throw new AssertionError("Decision should not be acquired in this scenario."); - } - - }); - } - - @Test - public void test065UserModifyAddRoleNoApproversFirstDecides() throws Exception { - TestUtil.displayTestTitle(this, "test065UserModifyAddRoleNoApproversFirstDecides"); - login(userAdministrator); - executeTest("test065UserModifyAddRoleNoApproversFirstDecides", USER_JACK_OID, new TestDetails() { - @Override int subcasesCount() { return 1; } - @Override boolean immediate() { return false; } - @Override boolean checkObjectOnSubtasks() { return true; } - - @Override boolean approvedAutomatically() { return true; } - - @Override - public LensContext createModelContext(Task task, OperationResult result) throws Exception { - LensContext context = createUserLensContext(); - fillContextWithUser(context, USER_JACK_OID, result); - addFocusDeltaToContext(context, - (ObjectDelta) prismContext.deltaFor(UserType.class) - .item(UserType.F_ASSIGNMENT).add( - ObjectTypeUtil.createAssignmentTo(ROLE_R13_OID, ObjectTypes.ROLE, prismContext).asPrismContainerValue()) - .asObjectDelta(USER_JACK_OID)); - return context; - } - - @Override - public void assertsAfterClockworkRun(CaseType rootCase, - CaseType case0, List subcases, - Task opTask, OperationResult result) throws Exception { - // todo perhaps the role should be assigned even at this point? - } - - @Override - void assertsRootCaseFinishes(CaseType aCase, List subcases, Task opTask, - OperationResult result) throws Exception { - PrismObject jack = repositoryService.getObject(UserType.class, USER_JACK_OID, null, result); - assertAssignedRole(jack, ROLE_R13_OID); - - checkDummyTransportMessages("simpleUserNotifier", 1); - } - - @Override - boolean decideOnApproval(CaseType subcase, - ApprovalContextType wfContext) throws Exception { - throw new AssertionError("Decision should not be acquired in this scenario."); - } - - }); - } - - - @Test(enabled = false) // assignment modification approval is not enabled by default - public void test070UserModifyAssignment() throws Exception { - TestUtil.displayTestTitle(this, "test070UserModifyAssignment"); - login(userAdministrator); - removeAllAssignments(USER_JACK_OID, new OperationResult("dummy")); - assignRoleRaw(USER_JACK_OID, ROLE_R1_OID); - - final XMLGregorianCalendar validFrom = XmlTypeConverter.createXMLGregorianCalendar(2015, 2, 25, 10, 0, 0); - final XMLGregorianCalendar validTo = XmlTypeConverter.createXMLGregorianCalendar(2015, 3, 25, 10, 0, 0); - - executeTest("test070UserModifyAssignment", USER_JACK_OID, new TestDetails() { - @Override - int subcasesCount() { - return 1; - } - - @Override - boolean immediate() { - return false; - } - - @Override - boolean checkObjectOnSubtasks() { - return true; - } - - @Override - boolean removeAssignmentsBeforeTest() { - return false; - } - - @Override - public LensContext createModelContext(Task task, OperationResult result) throws Exception { - LensContext context = createUserLensContext(); - fillContextWithUser(context, USER_JACK_OID, result); - UserType jack = context.getFocusContext().getObjectOld().asObjectable(); - modifyAssignmentValidity(context, jack, validFrom, validTo); - return context; - } - - @Override - public void assertsAfterClockworkRun(CaseType rootCase, - CaseType case0, List subcases, - Task opTask, OperationResult result) throws Exception { -// ModelContext taskModelContext = temporaryHelper.getModelContext(rootCase, opTask, result); -// assertEquals("There are modifications left in primary focus delta", 0, taskModelContext.getFocusContext().getPrimaryDelta().getModifications().size()); - UserType jack = getUser(USER_JACK_OID).asObjectable(); - checkNoAssignmentValidity(jack); - } - - @Override - void assertsRootCaseFinishes(CaseType aCase, List subcases, Task opTask, - OperationResult result) throws Exception { - UserType jack = getUser(USER_JACK_OID).asObjectable(); - checkAssignmentValidity(jack, validFrom, validTo); - - // TODO - //checkDummyTransportMessages("simpleUserNotifier", 1); - } - - @Override - boolean decideOnApproval(CaseType subcase, - ApprovalContextType wfContext) throws Exception { - login(getUser(R1BOSS_OID)); - return true; - } - - }); - } - - private void checkAssignmentValidity(UserType jack, XMLGregorianCalendar validFrom, XMLGregorianCalendar validTo) { - assertEquals("jack's assignments", 1, jack.getAssignment().size()); - AssignmentType assignmentType = jack.getAssignment().get(0); - assertEquals("wrong validFrom", validFrom, assignmentType.getActivation().getValidFrom()); - assertEquals("wrong validTo", validTo, assignmentType.getActivation().getValidTo()); - } - - protected void checkNoAssignmentValidity(UserType jack) { - assertEquals("jack's assignments", 1, jack.getAssignment().size()); - AssignmentType assignmentType = jack.getAssignment().get(0); - if (assignmentType.getActivation() != null) { - assertNull("validFrom already set", assignmentType.getActivation().getValidFrom()); - assertNull("validTo already set", assignmentType.getActivation().getValidTo()); - } - } - - protected void modifyAssignmentValidity(LensContext context, UserType jack, XMLGregorianCalendar validFrom, XMLGregorianCalendar validTo) throws SchemaException { - assertEquals("jack's assignments", 1, jack.getAssignment().size()); - PrismContainerDefinition activationDef = - prismContext.getSchemaRegistry() - .findObjectDefinitionByCompileTimeClass(UserType.class) - .findContainerDefinition(ItemPath.create(UserType.F_ASSIGNMENT, AssignmentType.F_ACTIVATION)); - assertNotNull("no activationDef", activationDef); - - Long assignmentId = jack.getAssignment().get(0).getId(); - PrismPropertyDefinition validFromDef = activationDef.findPropertyDefinition(ActivationType.F_VALID_FROM); - PropertyDelta validFromDelta = prismContext.deltaFactory().property().create( - ItemPath.create(UserType.F_ASSIGNMENT, assignmentId, AssignmentType.F_ACTIVATION, ActivationType.F_VALID_FROM), - validFromDef); - validFromDelta.setRealValuesToReplace(validFrom); - PrismPropertyDefinition validToDef = activationDef.findPropertyDefinition(ActivationType.F_VALID_TO); - PropertyDelta validToDelta = prismContext.deltaFactory().property().create( - ItemPath.create(UserType.F_ASSIGNMENT, assignmentId, AssignmentType.F_ACTIVATION, ActivationType.F_VALID_TO), - validToDef); - validToDelta.setRealValuesToReplace(validTo); - - ObjectDelta userDelta = prismContext.deltaFactory().object().create(UserType.class, ChangeType.MODIFY); - userDelta.setOid(USER_JACK_OID); - userDelta.addModification(validFromDelta); - userDelta.addModification(validToDelta); - addFocusDeltaToContext(context, userDelta); - } - - private void assignRoleRaw(String userOid, String roleOid) throws SchemaException, CommunicationException, ObjectAlreadyExistsException, ExpressionEvaluationException, PolicyViolationException, SecurityViolationException, ConfigurationException, ObjectNotFoundException { - ObjectDelta userDelta = createAssignmentUserDelta(userOid, roleOid, RoleType.COMPLEX_TYPE, null, null, null, true); - Collection> deltas = MiscSchemaUtil.createCollection(userDelta); - repositoryService.modifyObject(UserType.class, - userOid, userDelta.getModifications(), new OperationResult("dummy")); - } - - /** - * User modification: adding single security-sensitive resource assignment. - */ - @Test(enabled = false) // this is not enabled by default - public void test080UserModifyAddResource() throws Exception { - TestUtil.displayTestTitle(this, "test080UserModifyAddResource"); - login(userAdministrator); - executeTest("test080UserModifyAddResource", USER_JACK_OID, new TestDetails() { - @Override int subcasesCount() { return 1; } - @Override boolean immediate() { return false; } - @Override boolean checkObjectOnSubtasks() { return true; } - - @Override - public LensContext createModelContext(Task task, OperationResult result) throws Exception { - LensContext context = createUserLensContext(); - fillContextWithUser(context, USER_JACK_OID, result); - addFocusModificationToContext(context, REQ_USER_JACK_MODIFY_ADD_ASSIGNMENT_DUMMY); - return context; - } - - @Override - public void assertsAfterClockworkRun(CaseType rootCase, CaseType case0, List subcases, - Task opTask, OperationResult result) throws Exception { -// ModelContext taskModelContext = temporaryHelper.getModelContext(rootCase, opTask, result); -// assertEquals("There are modifications left in primary focus delta", 0, taskModelContext.getFocusContext().getPrimaryDelta().getModifications().size()); - assertNotAssignedResource(USER_JACK_OID, RESOURCE_DUMMY_OID, opTask, result); - } - - @Override - void assertsRootCaseFinishes(CaseType aCase, List subcases, Task opTask, - OperationResult result) throws Exception { - assertAssignedResource(UserType.class, USER_JACK_OID, RESOURCE_DUMMY_OID, opTask, result); - checkDummyTransportMessages("simpleUserNotifier", 1); - checkAuditRecords(createResultMap(ROLE_R1_OID, WorkflowResult.APPROVED)); - checkUserApprovers(USER_JACK_OID, Arrays.asList(DUMMYBOSS_OID), result); - } - - @Override - boolean decideOnApproval(CaseType subcase, - ApprovalContextType wfContext) throws Exception { - login(getUser(DUMMYBOSS_OID)); - return true; - } - }); - } - - /** - * User modification: modifying validity of single security-sensitive resource assignment. - */ - @Test(enabled = false) // this is not enabled by default - public void test090UserModifyModifyResourceAssignmentValidity() throws Exception { - TestUtil.displayTestTitle(this, "test090UserModifyModifyResourceAssignmentValidity"); - login(userAdministrator); - - final XMLGregorianCalendar validFrom = XmlTypeConverter.createXMLGregorianCalendar(2015, 2, 25, 10, 0, 0); - final XMLGregorianCalendar validTo = XmlTypeConverter.createXMLGregorianCalendar(2015, 3, 25, 10, 0, 0); - - executeTest("test090UserModifyModifyResourceAssignmentValidity", USER_JACK_OID, new TestDetails() { - @Override int subcasesCount() { return 1; } - @Override boolean immediate() { return false; } - @Override boolean checkObjectOnSubtasks() { return true; } - @Override boolean removeAssignmentsBeforeTest() { return false; } - - @Override - public LensContext createModelContext(Task task, OperationResult result) throws Exception { - LensContext context = createUserLensContext(); - fillContextWithUser(context, USER_JACK_OID, result); - UserType jack = context.getFocusContext().getObjectOld().asObjectable(); - modifyAssignmentValidity(context, jack, validFrom, validTo); - return context; - } - - @Override - public void assertsAfterClockworkRun(CaseType rootCase, - CaseType case0, List subcases, - Task opTask, OperationResult result) throws Exception { -// ModelContext taskModelContext = temporaryHelper.getModelContext(rootCase, opTask, result); -// assertEquals("There are modifications left in primary focus delta", 0, taskModelContext.getFocusContext().getPrimaryDelta().getModifications().size()); - UserType jack = getUser(USER_JACK_OID).asObjectable(); - checkNoAssignmentValidity(jack); - } - - @Override - void assertsRootCaseFinishes(CaseType aCase, List subcases, Task opTask, - OperationResult result) throws Exception { - assertAssignedResource(UserType.class, USER_JACK_OID, RESOURCE_DUMMY_OID, opTask, result); - UserType jack = getUser(USER_JACK_OID).asObjectable(); - checkAssignmentValidity(jack, validFrom, validTo); - checkDummyTransportMessages("simpleUserNotifier", 1); - checkAuditRecords(createResultMap(ROLE_R1_OID, WorkflowResult.APPROVED)); - checkUserApprovers(USER_JACK_OID, Arrays.asList(DUMMYBOSS_OID), result); - } - - @Override - boolean decideOnApproval(CaseType subcase, - ApprovalContextType wfContext) throws Exception { - login(getUser(DUMMYBOSS_OID)); - return true; - } - }); - } - - /** - * User modification: modifying attribute of single security-sensitive resource assignment. - * - * User primary delta: - * ObjectDelta(UserType:377205db-33d1-47e5-bf96-bbe2a7d1222e,MODIFY): - * assignment/[1]/construction/attribute - * ADD: ResourceAttributeDefinitionType(ref=ItemPathType{itemPath=lastname}...) - * DELETE: ResourceAttributeDefinitionType(ref=ItemPathType{itemPath=lastname}...) - * - */ - @Test(enabled = false) // this is not enabled by default - public void test095UserModifyModifyResourceAssignmentConstruction() throws Exception { - final String TEST_NAME = "test095UserModifyModifyResourceAssignmentConstruction"; - TestUtil.displayTestTitle(this, TEST_NAME); - login(userAdministrator); - - executeTest(TEST_NAME, USER_JACK_OID, new TestDetails() { - @Override int subcasesCount() { return 1; } - @Override boolean immediate() { return false; } - @Override boolean checkObjectOnSubtasks() { return true; } - @Override boolean removeAssignmentsBeforeTest() { return false; } - - @Override - public LensContext createModelContext(Task task, OperationResult result) throws Exception { - LensContext context = createUserLensContext(); - fillContextWithUser(context, USER_JACK_OID, result); - UserType jack = context.getFocusContext().getObjectOld().asObjectable(); - modifyAssignmentConstruction(context, jack, - DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_DRINK_NAME, "water", true); - return context; - } - - @Override - public void assertsAfterClockworkRun(CaseType rootCase, - CaseType case0, List subcases, - Task opTask, OperationResult result) throws Exception { -// ModelContext taskModelContext = temporaryHelper.getModelContext(rootCase, opTask, result); -// assertEquals("There are modifications left in primary focus delta", 0, taskModelContext.getFocusContext().getPrimaryDelta().getModifications().size()); - UserType jack = getUser(USER_JACK_OID).asObjectable(); - checkNoAssignmentConstruction(jack, "drink"); - } - - @Override - void assertsRootCaseFinishes(CaseType aCase, List subcases, Task opTask, - OperationResult result) throws Exception { - assertAssignedResource(UserType.class, USER_JACK_OID, RESOURCE_DUMMY_OID, opTask, result); - UserType jack = getUser(USER_JACK_OID).asObjectable(); - checkAssignmentConstruction(jack, "drink", "water"); - checkDummyTransportMessages("simpleUserNotifier", 1); - checkAuditRecords(createResultMap(ROLE_R1_OID, WorkflowResult.APPROVED)); - checkUserApprovers(USER_JACK_OID, Arrays.asList(DUMMYBOSS_OID), result); - } - - @Override - boolean decideOnApproval(CaseType subcase, - ApprovalContextType wfContext) throws Exception { - login(getUser(DUMMYBOSS_OID)); - return true; - } - }); - } - - protected void modifyAssignmentConstruction(LensContext context, UserType jack, - String attributeName, String value, boolean add) throws SchemaException { - assertEquals("jack's assignments", 1, jack.getAssignment().size()); - PrismContainerDefinition attributeDef = - prismContext.getSchemaRegistry() - .findObjectDefinitionByCompileTimeClass(UserType.class) - .findContainerDefinition(ItemPath.create(UserType.F_ASSIGNMENT, - AssignmentType.F_CONSTRUCTION, - ConstructionType.F_ATTRIBUTE)); - assertNotNull("no attributeDef", attributeDef); - - Long assignmentId = jack.getAssignment().get(0).getId(); - ContainerDelta attributeDelta = prismContext.deltaFactory().container().create( - ItemPath.create(UserType.F_ASSIGNMENT, assignmentId, AssignmentType.F_CONSTRUCTION, ConstructionType.F_ATTRIBUTE), - attributeDef); - ResourceAttributeDefinitionType attributeDefinitionType = new ResourceAttributeDefinitionType(); - if (add) { - attributeDelta.addValueToAdd(attributeDefinitionType.asPrismContainerValue()); - } else { - attributeDelta.addValueToDelete(attributeDefinitionType.asPrismContainerValue()); - } - attributeDefinitionType.setRef(new ItemPathType(ItemPath.create(new QName(RESOURCE_DUMMY_NAMESPACE, attributeName)))); - MappingType outbound = new MappingType(); - outbound.setStrength(MappingStrengthType.STRONG); // to see changes on the resource - ExpressionType expression = new ExpressionType(); - expression.getExpressionEvaluator().add(new ObjectFactory().createValue(value)); - outbound.setExpression(expression); - attributeDefinitionType.setOutbound(outbound); - - - ObjectDelta userDelta = prismContext.deltaFactory().object().create(UserType.class, ChangeType.MODIFY); - userDelta.setOid(USER_JACK_OID); - userDelta.addModification(attributeDelta); - addFocusDeltaToContext(context, userDelta); - } - - private void checkAssignmentConstruction(UserType jack, String attributeName, String value) throws SchemaException { - assertEquals("jack's assignments", 1, jack.getAssignment().size()); - AssignmentType assignmentType = jack.getAssignment().get(0); - ConstructionType constructionType = assignmentType.getConstruction(); - assertNotNull("construction is null", constructionType); - boolean found = false; - for (ResourceAttributeDefinitionType attributeDefinitionType : constructionType.getAttribute()) { - if (attributeDefinitionType.getRef().equivalent(new ItemPathType(ItemPath.create(new QName(attributeName))))) { - ExpressionType expressionType = attributeDefinitionType.getOutbound().getExpression(); - assertNotNull("no expression", expressionType); - assertEquals("wrong # of expression evaluators", 1, expressionType.getExpressionEvaluator().size()); - JAXBElement element = expressionType.getExpressionEvaluator().get(0); - PrimitiveXNode valueXNode = (PrimitiveXNode) (((RawType) element.getValue()).serializeToXNode()); - assertEquals("wrong outbound value", value, valueXNode.getStringValue()); - found = true; - } - } - assertTrue("attribute " + attributeName + " mapping not found", found); - } - - private void checkNoAssignmentConstruction(UserType jack, String attributeName) { - assertEquals("jack's assignments", 1, jack.getAssignment().size()); - AssignmentType assignmentType = jack.getAssignment().get(0); - ConstructionType constructionType = assignmentType.getConstruction(); - assertNotNull("construction is null", constructionType); - for (ResourceAttributeDefinitionType attributeDefinitionType : constructionType.getAttribute()) { - if (attributeDefinitionType.getRef().equivalent(new ItemPathType(ItemPath.create(new QName(attributeName))))) { - fail("Construction attribute " + attributeName + " present, although it shouldn't"); - } - } - } - - @Test - public void zzzMarkAsNotInitialized() { - display("Setting class as not initialized"); - unsetSystemInitialized(); - } -} diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/objects/AbstractTestObjectLifecycleApproval.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/objects/AbstractTestObjectLifecycleApproval.java new file mode 100644 index 00000000000..a558cceb2ee --- /dev/null +++ b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/objects/AbstractTestObjectLifecycleApproval.java @@ -0,0 +1,368 @@ +/* + * Copyright (c) 2010-2018 Evolveum + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.evolveum.midpoint.wf.impl.objects; + +import com.evolveum.midpoint.model.impl.lens.LensContext; +import com.evolveum.midpoint.prism.PrismObject; +import com.evolveum.midpoint.prism.PrismReferenceValue; +import com.evolveum.midpoint.prism.delta.DeltaFactory; +import com.evolveum.midpoint.prism.delta.ObjectDelta; +import com.evolveum.midpoint.schema.constants.ObjectTypes; +import com.evolveum.midpoint.schema.constants.SchemaConstants; +import com.evolveum.midpoint.schema.result.OperationResult; +import com.evolveum.midpoint.schema.util.ObjectTypeUtil; +import com.evolveum.midpoint.task.api.Task; +import com.evolveum.midpoint.test.util.TestUtil; +import com.evolveum.midpoint.util.logging.Trace; +import com.evolveum.midpoint.util.logging.TraceManager; +import com.evolveum.midpoint.wf.impl.AbstractWfTestPolicy; +import com.evolveum.midpoint.wf.impl.ApprovalInstruction; +import com.evolveum.midpoint.wf.impl.ExpectedTask; +import com.evolveum.midpoint.wf.impl.ExpectedWorkItem; +import com.evolveum.midpoint.xml.ns._public.common.common_3.*; +import com.evolveum.prism.xml.ns._public.types_3.PolyStringType; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.annotation.DirtiesContext.ClassMode; +import org.springframework.test.context.ContextConfiguration; +import org.testng.annotations.Test; + +import java.io.File; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; + +import static com.evolveum.midpoint.prism.util.PrismTestUtil.getPrismContext; +import static java.util.Collections.singleton; +import static java.util.Collections.singletonList; +import static org.testng.AssertJUnit.assertEquals; +import static org.testng.AssertJUnit.assertNull; + +/** + * Testing approvals of role lifecycle: create/modify/delete role. + * + * Subclasses provide specializations regarding ways how rules and/or approvers are attached to roles. + * + * @author mederly + */ +@ContextConfiguration(locations = {"classpath:ctx-workflow-test-main.xml"}) +@DirtiesContext(classMode = ClassMode.AFTER_CLASS) +public abstract class AbstractTestObjectLifecycleApproval extends AbstractWfTestPolicy { + + protected static final Trace LOGGER = TraceManager.getTrace(AbstractTestObjectLifecycleApproval.class); + + static final File TEST_RESOURCE_DIR = new File("src/test/resources/objects"); + + private static final File USER_PIRATE_OWNER_FILE = new File(TEST_RESOURCE_DIR, "user-pirate-owner.xml"); + private static final String USER_PIRATE_OWNER_OID = "00000001-d34d-b33f-f00d-POWNER000001"; + + private static final File USER_JUDGE_OWNER_FILE = new File(TEST_RESOURCE_DIR, "user-judge-owner.xml"); + static final String USER_JUDGE_OWNER_OID = "00000001-d34d-b33f-f00d-JOWNER000001"; + + private static final File USER_JUPITER_FILE = new File(TEST_RESOURCE_DIR, "user-jupiter.xml"); + static final String USER_JUPITER_OID = "9ab1cabd-2455-490e-9844-79dfa3efa849"; + + private static final File USER_PETER_FILE = new File(TEST_RESOURCE_DIR, "user-peter.xml"); + static final String USER_PETER_OID = "f96a5e37-dbe4-4882-b536-7c15c74d1dbc"; + + private static final File USER_BOB_FILE = new File(TEST_RESOURCE_DIR, "user-bob.xml"); + static final String USER_BOB_OID = "44d37c0a-8ec6-4540-b8f1-f022fd5a19ef"; + + private String rolePirateOid; + + @Override + public void initSystem(Task initTask, OperationResult initResult) throws Exception { + super.initSystem(initTask, initResult); + + // actually not sure why recomputing these + addAndRecomputeUser(USER_PIRATE_OWNER_FILE, initTask, initResult); + addAndRecomputeUser(USER_JUDGE_OWNER_FILE, initTask, initResult); + + repoAddObjectFromFile(USER_JUPITER_FILE, initResult); + repoAddObjectFromFile(USER_PETER_FILE, initResult); + repoAddObjectFromFile(USER_BOB_FILE, initResult); + } + + protected boolean approveObjectAdd() { + return false; + } + + @Test + public void test010CreateRolePirate() throws Exception { + final String TEST_NAME = "test010CreateRolePirate"; + TestUtil.displayTestTitle(this, TEST_NAME); + login(userAdministrator); + + Task task = createTask(TEST_NAME); + OperationResult result = task.getResult(); + + RoleType pirate = new RoleType(prismContext); + pirate.setName(PolyStringType.fromOrig("pirate")); + + if (approveObjectAdd()) { + createObject(TEST_NAME, pirate, false, true, USER_JUPITER_OID); + rolePirateOid = searchObjectByName(RoleType.class, "pirate").getOid(); + } else { + repoAddObject(pirate.asPrismObject(), result); + rolePirateOid = pirate.getOid(); + } + + PrismReferenceValue pirateOwner = getPrismContext().itemFactory().createReferenceValue(rolePirateOid, RoleType.COMPLEX_TYPE); + pirateOwner.setRelation(SchemaConstants.ORG_OWNER); + executeChanges(prismContext.deltaFor(UserType.class) + .item(UserType.F_ASSIGNMENT).add(ObjectTypeUtil.createAssignmentTo(pirateOwner, prismContext)) + .asObjectDelta(USER_PIRATE_OWNER_OID), + null, task, result); + PrismObject pirateAfter = getRole(rolePirateOid); + display("Pirate role", pirateAfter); + display("Pirate owner", getUser(USER_PIRATE_OWNER_OID)); + + if (approveObjectAdd()) { + MetadataType metadata = pirateAfter.asObjectable().getMetadata(); + assertEquals("Wrong create approver ref", + singleton(ObjectTypeUtil.createObjectRef(USER_JUPITER_OID, ObjectTypes.USER).relation(SchemaConstants.ORG_DEFAULT)), + new HashSet<>(metadata.getCreateApproverRef())); + assertEquals("Wrong create approval comments", + singleton("jupiter :: creation comment"), + new HashSet<>(metadata.getCreateApprovalComment())); + } + } + + @Test + public void test100ModifyRolePirateDescription() throws Exception { + final String TEST_NAME = "test100ModifyRolePirateDescription"; + TestUtil.displayTestTitle(this, TEST_NAME); + login(userAdministrator); + + ObjectDelta descriptionDelta = prismContext.deltaFor(RoleType.class) + .item(RoleType.F_DESCRIPTION).replace("Bloody pirate") + .asObjectDelta(rolePirateOid); + ObjectDelta delta0 = prismContext.deltaFactory().object() + .createModifyDelta(rolePirateOid, Collections.emptyList(), RoleType.class); + //noinspection UnnecessaryLocalVariable + ObjectDelta delta1 = descriptionDelta; + ExpectedTask expectedTask = new ExpectedTask(null, "Modifying role \"pirate\""); + ExpectedWorkItem expectedWorkItem = new ExpectedWorkItem(USER_PIRATE_OWNER_OID, null, expectedTask); + modifyObject(TEST_NAME, descriptionDelta, delta0, delta1, false, true, USER_PIRATE_OWNER_OID, + Collections.singletonList(expectedTask), Collections.singletonList(expectedWorkItem), + () -> {}, + () -> assertNull("Description is modified", getRoleSimple(rolePirateOid).getDescription()), + () -> assertEquals("Description was NOT modified", "Bloody pirate", getRoleSimple(rolePirateOid).getDescription())); + + PrismObject roleAfter = getRole(rolePirateOid); + display("pirate after", roleAfter); + MetadataType metadata = roleAfter.asObjectable().getMetadata(); + assertEquals("Wrong modify approver ref", + singleton(ObjectTypeUtil.createObjectRef(USER_PIRATE_OWNER_OID, ObjectTypes.USER).relation(SchemaConstants.ORG_DEFAULT)), + new HashSet<>(metadata.getModifyApproverRef())); + assertEquals("Wrong modify approval comments", + singleton("pirate-owner :: modification comment"), + new HashSet<>(metadata.getModifyApprovalComment())); + } + + @Test + public void test200DeleteRolePirate() throws Exception { + final String TEST_NAME = "test200DeleteRolePirate"; + TestUtil.displayTestTitle(this, TEST_NAME); + login(userAdministrator); + + ExpectedTask expectedTask = new ExpectedTask(null, "Deleting role \"pirate\""); + ExpectedWorkItem expectedWorkItem = new ExpectedWorkItem(USER_PIRATE_OWNER_OID, null, expectedTask); + deleteObject(TEST_NAME, RoleType.class, rolePirateOid, false, true, USER_PIRATE_OWNER_OID, + Collections.singletonList(expectedTask), Collections.singletonList(expectedWorkItem)); + } + + @Test + public void zzzMarkAsNotInitialized() { + display("Setting class as not initialized"); + unsetSystemInitialized(); + } + + private void createObject(final String TEST_NAME, ObjectType object, boolean immediate, boolean approve, String assigneeOid) throws Exception { + //noinspection unchecked + ObjectDelta addObjectDelta = DeltaFactory.Object.createAddDelta((PrismObject) object.asPrismObject()); + + executeTest(TEST_NAME, new TestDetails() { + @Override + protected LensContext createModelContext(OperationResult result) throws Exception { + //noinspection unchecked + LensContext lensContext = createLensContext((Class) object.getClass()); + addFocusDeltaToContext(lensContext, addObjectDelta); + return lensContext; + } + + @Override + protected void afterFirstClockworkRun(CaseType rootCase, + CaseType case0, List subcases, + List workItems, + Task opTask, OperationResult result) throws Exception { + if (!immediate) { + // ModelContext taskModelContext = temporaryHelper.getModelContext(rootCase, opTask, result); + // ObjectDelta realDelta0 = taskModelContext.getFocusContext().getPrimaryDelta(); + // assertTrue("Non-empty primary focus delta: " + realDelta0.debugDump(), realDelta0.isEmpty()); + assertNoObject(object); + ExpectedTask expectedTask = new ExpectedTask(null, "Adding role \"" + object.getName().getOrig() + "\""); + ExpectedWorkItem expectedWorkItem = new ExpectedWorkItem(assigneeOid, null, expectedTask); + assertWfContextAfterClockworkRun(rootCase, subcases, workItems, result, + null, + Collections.singletonList(expectedTask), + Collections.singletonList(expectedWorkItem)); + } + } + + @Override + protected void afterCase0Finishes(CaseType rootCase, Task opTask, OperationResult result) throws Exception { + assertNoObject(object); + } + + @Override + protected void afterRootCaseFinishes(CaseType rootCase, List subcases, Task opTask, OperationResult result) throws Exception { + if (approve) { + assertObject(object); + } else { + assertNoObject(object); + } + } + + @Override + protected boolean executeImmediately() { + return immediate; + } + + @Override + public List getApprovalSequence() { + return singletonList(new ApprovalInstruction(null, true, USER_JUPITER_OID, "creation comment")); + } + }, 1); + } + + public void modifyObject(final String TEST_NAME, ObjectDelta objectDelta, + ObjectDelta expectedDelta0, ObjectDelta expectedDelta1, + boolean immediate, boolean approve, + String assigneeOid, + List expectedTasks, List expectedWorkItems, + Runnable assertDelta0Executed, + Runnable assertDelta1NotExecuted, Runnable assertDelta1Executed) throws Exception { + + executeTest(TEST_NAME, new TestDetails() { + @Override + protected LensContext createModelContext(OperationResult result) throws Exception { + Class clazz = objectDelta.getObjectTypeClass(); + //PrismObject object = getObject(clazz, objectDelta.getOid()); + LensContext lensContext = createLensContext(clazz); + addFocusDeltaToContext(lensContext, objectDelta); + return lensContext; + } + + @Override + protected void afterFirstClockworkRun(CaseType rootCase, + CaseType case0, List subcases, + List workItems, + Task opTask, OperationResult result) throws Exception { + if (!immediate) { + // ModelContext taskModelContext = temporaryHelper.getModelContext(rootCase, opTask, result); + // ObjectDelta realDelta0 = taskModelContext.getFocusContext().getPrimaryDelta(); + // assertDeltasEqual("Wrong delta left as primary focus delta.", expectedDelta0, realDelta0); + assertDelta1NotExecuted.run(); + assertWfContextAfterClockworkRun(rootCase, subcases, workItems, result, + objectDelta.getOid(), expectedTasks, expectedWorkItems); + } + } + + @Override + protected void afterCase0Finishes(CaseType rootCase, Task opTask, OperationResult result) throws Exception { + assertDelta0Executed.run(); + assertDelta1NotExecuted.run(); + } + + @Override + protected void afterRootCaseFinishes(CaseType rootCase, List subcases, + Task opTask, OperationResult result) throws Exception { + assertDelta0Executed.run(); + if (approve) { + assertDelta1Executed.run(); + } else { + assertDelta1NotExecuted.run(); + } + } + + @Override + protected boolean executeImmediately() { + return immediate; + } + + @Override + public List getApprovalSequence() { + return singletonList(new ApprovalInstruction(null, approve, assigneeOid, "modification comment")); + } + }, 1); + } + + public void deleteObject(final String TEST_NAME, Class clazz, String objectOid, + boolean immediate, boolean approve, + String assigneeOid, + List expectedTasks, List expectedWorkItems) throws Exception { + + executeTest(TEST_NAME, new TestDetails() { + @Override + protected LensContext createModelContext(OperationResult result) throws Exception { + LensContext lensContext = createLensContext(clazz); + ObjectDelta deleteDelta = prismContext.deltaFactory().object().createDeleteDelta(clazz, objectOid + ); + addFocusDeltaToContext(lensContext, deleteDelta); + return lensContext; + } + + @Override + protected void afterFirstClockworkRun(CaseType rootCase, + CaseType case0, List subcases, + List workItems, + Task opTask, OperationResult result) throws Exception { + if (!immediate) { + // ModelContext taskModelContext = temporaryHelper.getModelContext(rootCase, opTask, result); + // ObjectDelta realDelta0 = taskModelContext.getFocusContext().getPrimaryDelta(); + // assertTrue("Delta0 is not empty: " + realDelta0.debugDump(), realDelta0.isEmpty()); + assertWfContextAfterClockworkRun(rootCase, subcases, workItems, result, + objectOid, expectedTasks, expectedWorkItems); + } + } + + @Override + protected void afterCase0Finishes(CaseType rootCase, Task opTask, OperationResult result) throws Exception { + assertObjectExists(clazz, objectOid); + } + + @Override + protected void afterRootCaseFinishes(CaseType rootCase, List subcases, + Task opTask, OperationResult result) throws Exception { + if (approve) { + assertObjectDoesntExist(clazz, objectOid); + } else { + assertObjectExists(clazz, objectOid); + } + } + + @Override + protected boolean executeImmediately() { + return immediate; + } + + @Override + protected Boolean decideOnApproval(CaseWorkItemType caseWorkItem) throws Exception { + return approve; + } + }, 1); + } +} diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/object/TestObjectConstraints.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/objects/TestObjectLifecycleAdvanced.java similarity index 91% rename from model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/object/TestObjectConstraints.java rename to model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/objects/TestObjectLifecycleAdvanced.java index a8acb71c95f..311c89756c8 100644 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/object/TestObjectConstraints.java +++ b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/objects/TestObjectLifecycleAdvanced.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2018 Evolveum + * Copyright (c) 2010-2019 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.evolveum.midpoint.wf.impl.policy.object; +package com.evolveum.midpoint.wf.impl.objects; import com.evolveum.midpoint.model.api.context.EvaluatedPolicyRule; import com.evolveum.midpoint.model.impl.lens.LensContext; @@ -27,14 +27,15 @@ import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.schema.util.ObjectTypeUtil; import com.evolveum.midpoint.task.api.Task; +import com.evolveum.midpoint.test.asserter.prism.PrismObjectAsserter; import com.evolveum.midpoint.test.util.TestUtil; import com.evolveum.midpoint.util.DebugUtil; import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; -import com.evolveum.midpoint.wf.impl.policy.AbstractWfTestPolicy; -import com.evolveum.midpoint.wf.impl.policy.ExpectedTask; -import com.evolveum.midpoint.wf.impl.policy.ExpectedWorkItem; +import com.evolveum.midpoint.wf.impl.AbstractWfTestPolicy; +import com.evolveum.midpoint.wf.impl.ExpectedTask; +import com.evolveum.midpoint.wf.impl.ExpectedWorkItem; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext.ClassMode; @@ -47,7 +48,6 @@ import static com.evolveum.midpoint.prism.util.PrismTestUtil.getPrismContext; import static org.testng.AssertJUnit.assertEquals; -import static org.testng.AssertJUnit.assertTrue; /** * Testing approvals of various triggered object-level constraints. @@ -57,13 +57,13 @@ */ @ContextConfiguration(locations = {"classpath:ctx-workflow-test-main.xml"}) @DirtiesContext(classMode = ClassMode.AFTER_CLASS) -public class TestObjectConstraints extends AbstractWfTestPolicy { +public class TestObjectLifecycleAdvanced extends AbstractWfTestPolicy { - protected static final Trace LOGGER = TraceManager.getTrace(TestObjectConstraints.class); + protected static final Trace LOGGER = TraceManager.getTrace(TestObjectLifecycleAdvanced.class); - protected static final File TEST_OBJECT_RESOURCE_DIR = new File("src/test/resources/policy/object"); + private static final File TEST_OBJECT_RESOURCE_DIR = new File("src/test/resources/objects-advanced"); - protected static final File METAROLE_CONSTRAINTS_FILE = new File(TEST_OBJECT_RESOURCE_DIR, "metarole-constraints.xml"); + private static final File METAROLE_CONSTRAINTS_FILE = new File(TEST_OBJECT_RESOURCE_DIR, "metarole-constraints.xml"); protected static final File ROLE_EMPLOYEE_FILE = new File(TEST_OBJECT_RESOURCE_DIR, "role-employee.xml"); protected static final File USER_EMPLOYEE_OWNER_FILE = new File(TEST_OBJECT_RESOURCE_DIR, "user-employee-owner.xml"); protected static final File SYSTEM_CONFIGURATION_FILE = new File(TEST_OBJECT_RESOURCE_DIR, "system-configuration.xml"); @@ -148,8 +148,8 @@ protected void afterCase0Finishes(CaseType rootCase, Task opTask, @Override protected void afterRootCaseFinishes(CaseType rootCase, List subcases, - Task opTask, OperationResult result) throws Exception { - assertObjectSanity(employee); + Task opTask, OperationResult result) { + new PrismObjectAsserter<>(employee).assertSanity(); } @Override @@ -185,7 +185,7 @@ public void test020ActivateIncompleteRole() throws Exception { Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); - @SuppressWarnings({"unchecked", "raw"}) + @SuppressWarnings({ "raw"}) ObjectDelta activateRoleDelta = prismContext.deltaFor(RoleType.class) .item(RoleType.F_LIFECYCLE_STATE).replace(SchemaConstants.LIFECYCLE_ACTIVE) .asObjectDelta(roleEmployeeOid); @@ -199,6 +199,7 @@ public void test020ActivateIncompleteRole() throws Exception { System.out.println("Got expected exception: " + e.getMessage()); } + //noinspection unchecked LensContext context = (LensContext) recordingListener.getModelContext(); System.out.println(context.dumpFocusPolicyRules(0)); EvaluatedPolicyRule incompleteActivationRule = context.getFocusContext().getPolicyRules().stream() @@ -220,7 +221,7 @@ public void test030ActivateIncompleteRoleAgain() throws Exception { Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); - @SuppressWarnings({"unchecked", "raw"}) + @SuppressWarnings({ "raw"}) ObjectDelta activateRoleDelta = prismContext.deltaFor(RoleType.class) .item(RoleType.F_LIFECYCLE_STATE).replace(SchemaConstants.LIFECYCLE_ACTIVE) .item(RoleType.F_DESCRIPTION).replace("hi") @@ -235,6 +236,7 @@ public void test030ActivateIncompleteRoleAgain() throws Exception { System.out.println("Got expected exception: " + e.getMessage()); } + //noinspection unchecked LensContext context = (LensContext) recordingListener.getModelContext(); System.out.println(context.dumpFocusPolicyRules(0)); EvaluatedPolicyRule incompleteActivationRule = context.getFocusContext().getPolicyRules().stream() @@ -268,7 +270,7 @@ public void test045ActivateCompleteRole() throws Exception { Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); - @SuppressWarnings({"unchecked", "raw"}) + @SuppressWarnings({ "raw"}) ObjectDelta activateRoleDelta = prismContext.deltaFor(RoleType.class) .item(RoleType.F_LIFECYCLE_STATE).replace(SchemaConstants.LIFECYCLE_ACTIVE) .item(RoleType.F_DESCRIPTION).replace("hi") @@ -287,10 +289,7 @@ protected void afterFirstClockworkRun(CaseType rootCase, CaseType case0, List subcases, List workItems, Task opTask, OperationResult result) throws Exception { -// ModelContext taskModelContext = temporaryHelper.getModelContext(rootCase, opTask, result); -// ObjectDelta realDelta0 = taskModelContext.getFocusContext().getPrimaryDelta(); -// assertTrue("Non-empty primary focus delta: " + realDelta0.debugDump(), realDelta0.isEmpty()); - ExpectedTask expectedTask = new ExpectedTask(null, "Modifying role \"employee\""); + ExpectedTask expectedTask = new ExpectedTask(null, "Matching state: after operation (\"active lifecycleState\")"); ExpectedWorkItem expectedWorkItem = new ExpectedWorkItem(userEmployeeOwnerOid, null, expectedTask); assertWfContextAfterClockworkRun(rootCase, subcases, workItems, result, null, @@ -311,13 +310,13 @@ protected void afterFirstClockworkRun(CaseType rootCase, } @Override - protected void afterCase0Finishes(CaseType rootCase, Task opTask, OperationResult result) throws Exception { + protected void afterCase0Finishes(CaseType rootCase, Task opTask, OperationResult result) { //assertNoObject(employee); } @Override protected void afterRootCaseFinishes(CaseType rootCase, List subcases, - Task opTask, OperationResult result) throws Exception { + Task opTask, OperationResult result) { //assertObject(employee); } diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/lifecycle/global/TestLifecycleGlobal.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/objects/TestObjectLifecycleApprovalGlobal.java similarity index 77% rename from model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/lifecycle/global/TestLifecycleGlobal.java rename to model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/objects/TestObjectLifecycleApprovalGlobal.java index fe605553839..02fe926847b 100644 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/lifecycle/global/TestLifecycleGlobal.java +++ b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/objects/TestObjectLifecycleApprovalGlobal.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.evolveum.midpoint.wf.impl.policy.lifecycle.global; +package com.evolveum.midpoint.wf.impl.objects; import com.evolveum.midpoint.model.api.ModelExecuteOptions; import com.evolveum.midpoint.model.impl.lens.LensContext; @@ -23,19 +23,16 @@ import com.evolveum.midpoint.prism.PrismReferenceValue; import com.evolveum.midpoint.prism.delta.DeltaFactory; import com.evolveum.midpoint.prism.delta.ObjectDelta; -import com.evolveum.midpoint.prism.util.PrismAsserts; +import com.evolveum.midpoint.schema.constants.ObjectTypes; import com.evolveum.midpoint.schema.constants.SchemaConstants; import com.evolveum.midpoint.schema.result.OperationResult; -import com.evolveum.midpoint.schema.util.ObjectTypeUtil; import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.test.util.TestUtil; import com.evolveum.midpoint.util.DebugUtil; import com.evolveum.midpoint.util.exception.SchemaException; -import com.evolveum.midpoint.util.xml.DomAwareEqualsStrategy; -import com.evolveum.midpoint.wf.impl.policy.ApprovalInstruction; -import com.evolveum.midpoint.wf.impl.policy.ExpectedTask; -import com.evolveum.midpoint.wf.impl.policy.ExpectedWorkItem; -import com.evolveum.midpoint.wf.impl.policy.lifecycle.AbstractTestLifecycle; +import com.evolveum.midpoint.wf.impl.ApprovalInstruction; +import com.evolveum.midpoint.wf.impl.ExpectedTask; +import com.evolveum.midpoint.wf.impl.ExpectedWorkItem; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import org.testng.annotations.Test; @@ -46,8 +43,8 @@ import static com.evolveum.midpoint.prism.util.CloneUtil.cloneCollectionMembers; import static com.evolveum.midpoint.prism.util.PrismTestUtil.getPrismContext; +import static com.evolveum.midpoint.schema.util.ObjectTypeUtil.createAssignmentTo; import static org.testng.AssertJUnit.assertEquals; -import static org.testng.AssertJUnit.assertFalse; /** * Tests role lifecycle with global policy rules. @@ -56,9 +53,9 @@ * * @author mederly */ -public class TestLifecycleGlobal extends AbstractTestLifecycle { +public class TestObjectLifecycleApprovalGlobal extends AbstractTestObjectLifecycleApproval { - private static final File GLOBAL_POLICY_RULES_FILE = new File(TEST_LIFECYCLE_RESOURCE_DIR, "global-policy-rules.xml"); + private static final File GLOBAL_POLICY_RULES_FILE = new File(TEST_RESOURCE_DIR, "global-policy-rules.xml"); @Override protected boolean approveObjectAdd() { @@ -147,11 +144,11 @@ public List getApprovalSequence() { null)); // this is step 3 in riskLevel part instructions.add(new ApprovalInstruction( - new ExpectedWorkItem(userLead2Oid, null, new ExpectedTask(null, "Setting riskLevel")), true, USER_ADMINISTRATOR_OID, + new ExpectedWorkItem(USER_PETER_OID, null, new ExpectedTask(null, "Setting riskLevel")), true, USER_ADMINISTRATOR_OID, null)); // this is step 2 in main part instructions.add(new ApprovalInstruction( - new ExpectedWorkItem(userLead1Oid, null, new ExpectedTask(null, "Adding role \"judge\"")), true, USER_ADMINISTRATOR_OID, + new ExpectedWorkItem(USER_JUPITER_OID, null, new ExpectedTask(null, "Adding role \"judge\"")), true, USER_ADMINISTRATOR_OID, null)); // this is step 3 in main part instructions.add(new ApprovalInstruction( @@ -169,19 +166,19 @@ public List getApprovalSequence() { PrismReferenceValue judgeOwner = getPrismContext().itemFactory().createReferenceValue(roleJudgeOid, RoleType.COMPLEX_TYPE); judgeOwner.setRelation(SchemaConstants.ORG_OWNER); executeChanges(prismContext.deltaFor(UserType.class) - .item(UserType.F_ASSIGNMENT).add(ObjectTypeUtil.createAssignmentTo(judgeAfter, SchemaConstants.ORG_OWNER)) - .asObjectDeltaCast(userJudgeOwnerOid), + .item(UserType.F_ASSIGNMENT).add(createAssignmentTo(judgeAfter, SchemaConstants.ORG_OWNER)) + .asObjectDeltaCast(USER_JUDGE_OWNER_OID), null, task, result); display("Judge role", judgeAfter); - display("Judge owner", getUser(userJudgeOwnerOid)); + display("Judge owner", getUser(USER_JUDGE_OWNER_OID)); assertEquals("Wrong risk level", "high", judgeAfter.asObjectable().getRiskLevel()); } @Test - public void test510AddApproversToJudge() throws Exception { - final String TEST_NAME = "test510AddApproversToJudge"; + public void test510AddInducementsToJudge() throws Exception { + final String TEST_NAME = "test510AddInducementsToJudge"; TestUtil.displayTestTitle(this, TEST_NAME); login(userAdministrator); @@ -189,9 +186,9 @@ public void test510AddApproversToJudge() throws Exception { //OperationResult result = task.getResult(); ObjectDelta judgeDelta = prismContext.deltaFor(RoleType.class) - .item(RoleType.F_APPROVER_REF) - .add(new ObjectReferenceType().oid("oid1").type(RoleType.COMPLEX_TYPE), - new ObjectReferenceType().oid("oid2").type(RoleType.COMPLEX_TYPE)) + .item(RoleType.F_INDUCEMENT) + .add(createAssignmentTo("oid1", ObjectTypes.ROLE, prismContext), + createAssignmentTo("oid2", ObjectTypes.ROLE, prismContext)) .item(RoleType.F_DESCRIPTION) .replace("hi") .asObjectDeltaCast(roleJudgeOid); @@ -239,25 +236,25 @@ public boolean strictlySequentialApprovals() { @Override public List getApprovalSequence() { List instructions = new ArrayList<>(); - // this is step 1 in 1st approverRef part + // this is step 1 in 1st inducement part instructions.add(new ApprovalInstruction( - new ExpectedWorkItem(USER_ADMINISTRATOR_OID, null, new ExpectedTask(null, "Changing approverRef")), true, USER_ADMINISTRATOR_OID, + new ExpectedWorkItem(USER_ADMINISTRATOR_OID, null, new ExpectedTask(null, "Changing inducement")), true, USER_ADMINISTRATOR_OID, null)); - // this is step 2 in 1st approverRef part + // this is step 2 in 1st inducement part instructions.add(new ApprovalInstruction( - new ExpectedWorkItem(userLead3Oid, null, new ExpectedTask(null, "Changing approverRef")), true, USER_ADMINISTRATOR_OID, + new ExpectedWorkItem(USER_BOB_OID, null, new ExpectedTask(null, "Changing inducement")), true, USER_ADMINISTRATOR_OID, null)); - // this is step 1 in 2nd approverRef part + // this is step 1 in 2nd inducement part instructions.add(new ApprovalInstruction( - new ExpectedWorkItem(USER_ADMINISTRATOR_OID, null, new ExpectedTask(null, "Changing approverRef")), true, USER_ADMINISTRATOR_OID, + new ExpectedWorkItem(USER_ADMINISTRATOR_OID, null, new ExpectedTask(null, "Changing inducement")), true, USER_ADMINISTRATOR_OID, null)); - // this is step 2 in 2nd approverRef part + // this is step 2 in 2nd inducement part instructions.add(new ApprovalInstruction( - new ExpectedWorkItem(userLead3Oid, null, new ExpectedTask(null, "Changing approverRef")), true, USER_ADMINISTRATOR_OID, + new ExpectedWorkItem(USER_BOB_OID, null, new ExpectedTask(null, "Changing inducement")), true, USER_ADMINISTRATOR_OID, null)); // this is step 1 in main part (owner) instructions.add(new ApprovalInstruction( - new ExpectedWorkItem(userJudgeOwnerOid, null, new ExpectedTask(null, "Modifying role \"judge\"")), true, USER_ADMINISTRATOR_OID, + new ExpectedWorkItem(USER_JUDGE_OWNER_OID, null, new ExpectedTask(null, "Modifying role \"judge\"")), true, USER_ADMINISTRATOR_OID, null)); // this is step 2 in main part instructions.add(new ApprovalInstruction( @@ -275,7 +272,7 @@ public List getApprovalSequence() { assertEquals("Wrong risk level", "high", judgeAfter.asObjectable().getRiskLevel()); assertEquals("Wrong description", "hi", judgeAfter.asObjectable().getDescription()); - PrismAsserts.assertReferenceValues(judgeAfter.findReference(RoleType.F_APPROVER_REF), "oid1", "oid2"); + assertInducedRoles(judgeAfter, "oid1", "oid2"); } // MID-4372 @@ -288,7 +285,7 @@ public void test520DeleteRoleJudge() throws Exception { //Task task = createTask(TEST_NAME); //OperationResult result = task.getResult(); - deleteObject(UserType.class, userJudgeOwnerOid); + deleteObject(UserType.class, USER_JUDGE_OWNER_OID); ObjectDelta deleteDelta = prismContext.deltaFactory().object().createDeleteDelta(RoleType.class, roleJudgeOid ); @@ -358,9 +355,8 @@ public void test600CreateRoleCaptain() throws Exception { .name("captain") .description("something") .riskLevel("high") - .approverRef(new ObjectReferenceType().oid("oid1").type(UserType.COMPLEX_TYPE)) - .approverRef(new ObjectReferenceType().oid("oid2").type(UserType.COMPLEX_TYPE)); - + .inducement(createAssignmentTo("oid1", ObjectTypes.ROLE, prismContext)) + .inducement(createAssignmentTo("oid2", ObjectTypes.ROLE, prismContext)); ObjectDelta addObjectDelta = DeltaFactory.Object.createAddDelta(captain.asPrismObject()); executeTest(TEST_NAME, new TestDetails() { @@ -412,27 +408,27 @@ public List getApprovalSequence() { null)); // this is step 3 in riskLevel part instructions.add(new ApprovalInstruction( - new ExpectedWorkItem(userLead2Oid, null, new ExpectedTask(null, "Setting riskLevel")), true, USER_ADMINISTRATOR_OID, + new ExpectedWorkItem(USER_PETER_OID, null, new ExpectedTask(null, "Setting riskLevel")), true, USER_ADMINISTRATOR_OID, null)); - // this is step 1 in approverRef part + // this is step 1 in inducement part instructions.add(new ApprovalInstruction( - new ExpectedWorkItem(USER_ADMINISTRATOR_OID, null, new ExpectedTask(null, "Changing approverRef")), true, USER_ADMINISTRATOR_OID, + new ExpectedWorkItem(USER_ADMINISTRATOR_OID, null, new ExpectedTask(null, "Changing inducement")), true, USER_ADMINISTRATOR_OID, null)); - // this is step 2 in approverRef part + // this is step 2 in inducement part instructions.add(new ApprovalInstruction( - new ExpectedWorkItem(userLead3Oid, null, new ExpectedTask(null, "Changing approverRef")), true, USER_ADMINISTRATOR_OID, + new ExpectedWorkItem(USER_BOB_OID, null, new ExpectedTask(null, "Changing inducement")), true, USER_ADMINISTRATOR_OID, null)); - // this is step 1 in approverRef part (2nd) + // this is step 1 in inducement part (2nd) instructions.add(new ApprovalInstruction( - new ExpectedWorkItem(USER_ADMINISTRATOR_OID, null, new ExpectedTask(null, "Changing approverRef")), true, USER_ADMINISTRATOR_OID, + new ExpectedWorkItem(USER_ADMINISTRATOR_OID, null, new ExpectedTask(null, "Changing inducement")), true, USER_ADMINISTRATOR_OID, null)); - // this is step 2 in approverRef part (2nd) + // this is step 2 in inducement part (2nd) instructions.add(new ApprovalInstruction( - new ExpectedWorkItem(userLead3Oid, null, new ExpectedTask(null, "Changing approverRef")), true, USER_ADMINISTRATOR_OID, + new ExpectedWorkItem(USER_BOB_OID, null, new ExpectedTask(null, "Changing inducement")), true, USER_ADMINISTRATOR_OID, null)); // this is step 2 in main part (first step is owner that is skipped) instructions.add(new ApprovalInstruction( - new ExpectedWorkItem(userLead1Oid, null, new ExpectedTask(null, "Adding role \"captain\"")), true, USER_ADMINISTRATOR_OID, + new ExpectedWorkItem(USER_JUPITER_OID, null, new ExpectedTask(null, "Adding role \"captain\"")), true, USER_ADMINISTRATOR_OID, null)); // this is step 3 in main part instructions.add(new ApprovalInstruction( @@ -449,12 +445,12 @@ public List getApprovalSequence() { display("Captain role", captainAfter); assertEquals("Wrong risk level", "high", captainAfter.asObjectable().getRiskLevel()); - PrismAsserts.assertReferenceValues(captainAfter.findReference(RoleType.F_APPROVER_REF), "oid1", "oid2"); + assertInducedRoles(captainAfter, "oid1", "oid2"); } @Test - public void test610DeleteApproversFromCaptain() throws Exception { - final String TEST_NAME = "test610DeleteApproversFromCaptain"; + public void test610DeleteInducementsFromCaptain() throws Exception { + final String TEST_NAME = "test610DeleteInducementsFromCaptain"; TestUtil.displayTestTitle(this, TEST_NAME); login(userAdministrator); @@ -464,8 +460,8 @@ public void test610DeleteApproversFromCaptain() throws Exception { PrismObject captainBefore = getRole(roleCaptainOid); ObjectDelta captainDelta = prismContext.deltaFor(RoleType.class) - .item(RoleType.F_APPROVER_REF) - .delete(cloneCollectionMembers(captainBefore.findReference(RoleType.F_APPROVER_REF).getValues())) + .item(RoleType.F_INDUCEMENT) + .delete(cloneCollectionMembers(captainBefore.findContainer(RoleType.F_INDUCEMENT).getValues())) .asObjectDeltaCast(roleCaptainOid); executeTest(TEST_NAME, new TestDetails() { @@ -512,21 +508,21 @@ public boolean strictlySequentialApprovals() { @Override public List getApprovalSequence() { List instructions = new ArrayList<>(); - // this is step 1 in approverRef part + // this is step 1 in inducement part instructions.add(new ApprovalInstruction( - new ExpectedWorkItem(USER_ADMINISTRATOR_OID, null, new ExpectedTask(null, "Changing approverRef")), true, USER_ADMINISTRATOR_OID, + new ExpectedWorkItem(USER_ADMINISTRATOR_OID, null, new ExpectedTask(null, "Changing inducement")), true, USER_ADMINISTRATOR_OID, null)); - // this is step 2 in approverRef part + // this is step 2 in inducement part instructions.add(new ApprovalInstruction( - new ExpectedWorkItem(userLead3Oid, null, new ExpectedTask(null, "Changing approverRef")), true, USER_ADMINISTRATOR_OID, + new ExpectedWorkItem(USER_BOB_OID, null, new ExpectedTask(null, "Changing inducement")), true, USER_ADMINISTRATOR_OID, null)); - // this is step 1 in approverRef part (2nd) + // this is step 1 in inducement part (2nd) instructions.add(new ApprovalInstruction( - new ExpectedWorkItem(USER_ADMINISTRATOR_OID, null, new ExpectedTask(null, "Changing approverRef")), true, USER_ADMINISTRATOR_OID, + new ExpectedWorkItem(USER_ADMINISTRATOR_OID, null, new ExpectedTask(null, "Changing inducement")), true, USER_ADMINISTRATOR_OID, null)); - // this is step 2 in approverRef part (2nd) + // this is step 2 in inducement part (2nd) instructions.add(new ApprovalInstruction( - new ExpectedWorkItem(userLead3Oid, null, new ExpectedTask(null, "Changing approverRef")), true, USER_ADMINISTRATOR_OID, + new ExpectedWorkItem(USER_BOB_OID, null, new ExpectedTask(null, "Changing inducement")), true, USER_ADMINISTRATOR_OID, null)); return instructions; } @@ -539,7 +535,7 @@ public List getApprovalSequence() { display("Captain role", captainAfter); assertEquals("Wrong risk level", "high", captainAfter.asObjectable().getRiskLevel()); - PrismAsserts.assertReferenceValues(captainAfter.findOrCreateReference(RoleType.F_APPROVER_REF)); + assertInducements(captainAfter, 0); } @Test @@ -555,8 +551,8 @@ public void test700CreateRoleThief() throws Exception { .name("thief") .description("something") .riskLevel("high") - .approverRef(new ObjectReferenceType().oid("oid1").type(UserType.COMPLEX_TYPE)) - .approverRef(new ObjectReferenceType().oid("oid2").type(UserType.COMPLEX_TYPE)); + .inducement(createAssignmentTo("oid1", ObjectTypes.ROLE, prismContext)) + .inducement(createAssignmentTo("oid2", ObjectTypes.ROLE, prismContext)); ObjectDelta addObjectDelta = DeltaFactory.Object.createAddDelta(thief.asPrismObject()); @@ -608,27 +604,27 @@ public List getApprovalSequence() { null)); // this is step 3 in riskLevel part instructions.add(new ApprovalInstruction( - new ExpectedWorkItem(userLead2Oid, null, new ExpectedTask(null, "Setting riskLevel")), true, USER_ADMINISTRATOR_OID, + new ExpectedWorkItem(USER_PETER_OID, null, new ExpectedTask(null, "Setting riskLevel")), true, USER_ADMINISTRATOR_OID, null)); - // this is step 1 in approverRef part + // this is step 1 in inducement part instructions.add(new ApprovalInstruction( - new ExpectedWorkItem(USER_ADMINISTRATOR_OID, null, new ExpectedTask(null, "Changing approverRef")), true, USER_ADMINISTRATOR_OID, + new ExpectedWorkItem(USER_ADMINISTRATOR_OID, null, new ExpectedTask(null, "Changing inducement")), true, USER_ADMINISTRATOR_OID, null)); - // this is step 2 in approverRef part + // this is step 2 in inducement part instructions.add(new ApprovalInstruction( - new ExpectedWorkItem(userLead3Oid, null, new ExpectedTask(null, "Changing approverRef")), true, USER_ADMINISTRATOR_OID, + new ExpectedWorkItem(USER_BOB_OID, null, new ExpectedTask(null, "Changing inducement")), true, USER_ADMINISTRATOR_OID, null)); - // this is step 1 in approverRef part (2nd) + // this is step 1 in inducement part (2nd) instructions.add(new ApprovalInstruction( - new ExpectedWorkItem(USER_ADMINISTRATOR_OID, null, new ExpectedTask(null, "Changing approverRef")), true, USER_ADMINISTRATOR_OID, + new ExpectedWorkItem(USER_ADMINISTRATOR_OID, null, new ExpectedTask(null, "Changing inducement")), true, USER_ADMINISTRATOR_OID, null)); - // this is step 2 in approverRef part (2nd) + // this is step 2 in inducement part (2nd) instructions.add(new ApprovalInstruction( - new ExpectedWorkItem(userLead3Oid, null, new ExpectedTask(null, "Changing approverRef")), true, USER_ADMINISTRATOR_OID, + new ExpectedWorkItem(USER_BOB_OID, null, new ExpectedTask(null, "Changing inducement")), true, USER_ADMINISTRATOR_OID, null)); // this is step 2 in main part (first step is owner that is skipped) instructions.add(new ApprovalInstruction( - new ExpectedWorkItem(userLead1Oid, null, new ExpectedTask(null, "Adding role \"thief\"")), true, USER_ADMINISTRATOR_OID, + new ExpectedWorkItem(USER_JUPITER_OID, null, new ExpectedTask(null, "Adding role \"thief\"")), true, USER_ADMINISTRATOR_OID, null)); // this is step 3 in main part instructions.add(new ApprovalInstruction( @@ -645,12 +641,12 @@ public List getApprovalSequence() { display("Thief role", thiefAfter); assertEquals("Wrong risk level", "high", thiefAfter.asObjectable().getRiskLevel()); - PrismAsserts.assertReferenceValues(thiefAfter.findReference(RoleType.F_APPROVER_REF), "oid1", "oid2"); + assertInducedRoles(thiefAfter, "oid1", "oid2"); } @Test - public void test710DeleteApproversFromThief() throws Exception { - final String TEST_NAME = "test710DeleteApproversFromThief"; + public void test710DeleteInducementsFromThief() throws Exception { + final String TEST_NAME = "test710DeleteInducementsFromThief"; TestUtil.displayTestTitle(this, TEST_NAME); login(userAdministrator); @@ -660,8 +656,8 @@ public void test710DeleteApproversFromThief() throws Exception { PrismObject thiefBefore = getRole(roleThiefOid); ObjectDelta captainDelta = prismContext.deltaFor(RoleType.class) - .item(RoleType.F_APPROVER_REF) - .delete(cloneCollectionMembers(thiefBefore.findReference(RoleType.F_APPROVER_REF).getValues())) + .item(RoleType.F_INDUCEMENT) + .delete(cloneCollectionMembers(thiefBefore.findContainer(RoleType.F_INDUCEMENT).getValues())) .asObjectDeltaCast(roleThiefOid); executeTest(TEST_NAME, new TestDetails() { @@ -707,21 +703,21 @@ public boolean strictlySequentialApprovals() { @Override public List getApprovalSequence() { List instructions = new ArrayList<>(); - // this is step 1 in approverRef part + // this is step 1 in inducement part instructions.add(new ApprovalInstruction( - new ExpectedWorkItem(USER_ADMINISTRATOR_OID, null, new ExpectedTask(null, "Changing approverRef")), true, USER_ADMINISTRATOR_OID, + new ExpectedWorkItem(USER_ADMINISTRATOR_OID, null, new ExpectedTask(null, "Changing inducement")), true, USER_ADMINISTRATOR_OID, null)); - // this is step 2 in approverRef part + // this is step 2 in inducement part instructions.add(new ApprovalInstruction( - new ExpectedWorkItem(userLead3Oid, null, new ExpectedTask(null, "Changing approverRef")), true, USER_ADMINISTRATOR_OID, + new ExpectedWorkItem(USER_BOB_OID, null, new ExpectedTask(null, "Changing inducement")), true, USER_ADMINISTRATOR_OID, null)); - // this is step 1 in approverRef part (2nd) + // this is step 1 in inducement part (2nd) instructions.add(new ApprovalInstruction( - new ExpectedWorkItem(USER_ADMINISTRATOR_OID, null, new ExpectedTask(null, "Changing approverRef")), true, USER_ADMINISTRATOR_OID, + new ExpectedWorkItem(USER_ADMINISTRATOR_OID, null, new ExpectedTask(null, "Changing inducement")), true, USER_ADMINISTRATOR_OID, null)); - // this is step 2 in approverRef part (2nd) + // this is step 2 in inducement part (2nd) instructions.add(new ApprovalInstruction( - new ExpectedWorkItem(userLead3Oid, null, new ExpectedTask(null, "Changing approverRef")), true, USER_ADMINISTRATOR_OID, + new ExpectedWorkItem(USER_BOB_OID, null, new ExpectedTask(null, "Changing inducement")), true, USER_ADMINISTRATOR_OID, null)); return instructions; } @@ -734,7 +730,7 @@ public List getApprovalSequence() { display("Thief role", thiefAfter); assertEquals("Wrong risk level", "high", thiefAfter.asObjectable().getRiskLevel()); - PrismAsserts.assertReferenceValues(thiefAfter.findOrCreateReference(RoleType.F_APPROVER_REF)); + assertInducements(thiefAfter, 0); } // TODO test that contains task0 that adds an object (i.e. rule for 'add' is not applied) diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/lifecycle/plain/TestLifecyclePlain.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/objects/TestObjectLifecycleApprovalPlain.java similarity index 71% rename from model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/lifecycle/plain/TestLifecyclePlain.java rename to model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/objects/TestObjectLifecycleApprovalPlain.java index 2f4e697f3a0..8387f47695f 100644 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/lifecycle/plain/TestLifecyclePlain.java +++ b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/objects/TestObjectLifecycleApprovalPlain.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2017 Evolveum + * Copyright (c) 2010-2019 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,12 +14,10 @@ * limitations under the License. */ -package com.evolveum.midpoint.wf.impl.policy.lifecycle.plain; - -import com.evolveum.midpoint.wf.impl.policy.lifecycle.AbstractTestLifecycle; +package com.evolveum.midpoint.wf.impl.objects; /** * @author mederly */ -public class TestLifecyclePlain extends AbstractTestLifecycle { +public class TestObjectLifecycleApprovalPlain extends AbstractTestObjectLifecycleApproval { } diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/manual/ManualResourceTest.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/other/ManualResourceTest.java similarity index 61% rename from model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/manual/ManualResourceTest.java rename to model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/other/ManualResourceTest.java index 49a4cefd090..4f71c09ff96 100644 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/manual/ManualResourceTest.java +++ b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/other/ManualResourceTest.java @@ -14,10 +14,9 @@ * limitations under the License. */ -package com.evolveum.midpoint.wf.impl.manual; +package com.evolveum.midpoint.wf.impl.other; import com.evolveum.midpoint.prism.PrismObject; -import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.schema.constants.MidPointConstants; import com.evolveum.midpoint.schema.constants.SchemaConstants; import com.evolveum.midpoint.schema.internals.InternalsConfig; @@ -32,11 +31,7 @@ import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.wf.impl.AbstractWfTest; -import com.evolveum.midpoint.wf.util.ApprovalUtils; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; -import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.AbstractWriteCapabilityType; -import com.evolveum.prism.xml.ns._public.types_3.ItemDeltaType; -import com.evolveum.prism.xml.ns._public.types_3.ObjectDeltaType; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext.ClassMode; import org.springframework.test.context.ContextConfiguration; @@ -66,79 +61,41 @@ @Listeners({ com.evolveum.midpoint.tools.testng.AlphabeticalMethodInterceptor.class }) public class ManualResourceTest extends AbstractWfTest { - protected static final File TEST_DIR = new File("src/test/resources/manual/"); + private static final File TEST_DIR = new File("src/test/resources/manual/"); + @SuppressWarnings("unused") private static final Trace LOGGER = TraceManager.getTrace(ManualResourceTest.class); private static final File SYSTEM_CONFIGURATION_FILE = new File(TEST_DIR, "system-configuration.xml"); - public static final QName RESOURCE_ACCOUNT_OBJECTCLASS = new QName(MidPointConstants.NS_RI, "AccountObjectClass"); + private static final File RESOURCE_MANUAL_FILE = new File(TEST_DIR, "resource-manual.xml"); + private static final String RESOURCE_MANUAL_OID = "ffb52158-63dc-4f5b-b998-fb6bfcfc546e"; - protected static final File RESOURCE_MANUAL_FILE = new File(TEST_DIR, "resource-manual.xml"); - protected static final String RESOURCE_MANUAL_OID = "ffb52158-63dc-4f5b-b998-fb6bfcfc546e"; + private static final File ROLE_ONE_MANUAL_FILE = new File(TEST_DIR, "role-one-manual.xml"); + private static final String ROLE_ONE_MANUAL_OID = "0379f623-a3e9-405a-ba52-b1f7ecd2d46f"; - protected static final File ROLE_ONE_MANUAL_FILE = new File(TEST_DIR, "role-one-manual.xml"); - protected static final String ROLE_ONE_MANUAL_OID = "0379f623-a3e9-405a-ba52-b1f7ecd2d46f"; + private static final String USER_WILL_NAME = "will"; + private static final String USER_WILL_GIVEN_NAME = "Will"; + private static final String USER_WILL_FAMILY_NAME = "Turner"; + private static final String USER_WILL_FULL_NAME = "Will Turner"; + private static final String USER_WILL_PASSWORD_OLD = "3lizab3th"; - protected static final String USER_WILL_NAME = "will"; - protected static final String USER_WILL_GIVEN_NAME = "Will"; - protected static final String USER_WILL_FAMILY_NAME = "Turner"; - protected static final String USER_WILL_FULL_NAME = "Will Turner"; - protected static final String USER_WILL_FULL_NAME_PIRATE = "Pirate Will Turner"; - protected static final String ACCOUNT_WILL_DESCRIPTION_MANUAL = "manual"; - protected static final String USER_WILL_PASSWORD_OLD = "3lizab3th"; - protected static final String USER_WILL_PASSWORD_NEW = "ELIZAbeth"; + private static final String ATTR_USERNAME = "username"; + private static final QName ATTR_USERNAME_QNAME = new QName(MidPointConstants.NS_RI, ATTR_USERNAME); - protected static final String ACCOUNT_JACK_DESCRIPTION_MANUAL = "Manuel"; - protected static final String USER_JACK_PASSWORD_OLD = "deadM3NtellN0tales"; + private static final String ATTR_FULLNAME = "fullname"; + private static final QName ATTR_FULLNAME_QNAME = new QName(MidPointConstants.NS_RI, ATTR_FULLNAME); - protected static final String ATTR_USERNAME = "username"; - protected static final QName ATTR_USERNAME_QNAME = new QName(MidPointConstants.NS_RI, ATTR_USERNAME); + private static final String ATTR_DESCRIPTION = "description"; + private static final QName ATTR_DESCRIPTION_QNAME = new QName(MidPointConstants.NS_RI, ATTR_DESCRIPTION); - protected static final String ATTR_FULLNAME = "fullname"; - protected static final QName ATTR_FULLNAME_QNAME = new QName(MidPointConstants.NS_RI, ATTR_FULLNAME); + private String userWillOid; + private String accountWillOid; - protected static final String ATTR_INTERESTS = "interests"; - protected static final QName ATTR_INTERESTS_QNAME = new QName(MidPointConstants.NS_RI, ATTR_INTERESTS); + private XMLGregorianCalendar accountWillCompletionTimestampStart; + private XMLGregorianCalendar accountWillCompletionTimestampEnd; - protected static final String ATTR_DESCRIPTION = "description"; - protected static final QName ATTR_DESCRIPTION_QNAME = new QName(MidPointConstants.NS_RI, ATTR_DESCRIPTION); - - protected PrismObject resource; - protected ResourceType resourceType; - - protected String userWillOid; - protected String accountWillOid; - - protected XMLGregorianCalendar accountWillRequestTimestampStart; - protected XMLGregorianCalendar accountWillRequestTimestampEnd; - - protected XMLGregorianCalendar accountWillCompletionTimestampStart; - protected XMLGregorianCalendar accountWillCompletionTimestampEnd; - - protected XMLGregorianCalendar accountWillSecondReqestTimestampStart; - protected XMLGregorianCalendar accountWillSecondReqestTimestampEnd; - - protected XMLGregorianCalendar accountWillSecondCompletionTimestampStart; - protected XMLGregorianCalendar accountWillSecondCompletionTimestampEnd; - - protected String willLastCaseOid; - protected String willSecondLastCaseOid; - - protected String accountJackOid; - protected String accountDrakeOid; - - protected XMLGregorianCalendar accountJackReqestTimestampStart; - protected XMLGregorianCalendar accountJackReqestTimestampEnd; - - protected XMLGregorianCalendar accountJackCompletionTimestampStart; - protected XMLGregorianCalendar accountJackCompletionTimestampEnd; - - protected String jackLastCaseOid; - - private String lastResourceVersion; - - protected String phoenixLastCaseOid; + private String willLastCaseOid; @Override public void initSystem(Task initTask, OperationResult initResult) throws Exception { @@ -210,7 +167,6 @@ public void test012TestConnection() throws Exception { // GIVEN Task task = createTask(TEST_NAME); - OperationResult result = task.getResult(); // WHEN displayWhen(TEST_NAME); @@ -247,7 +203,7 @@ public void test100AssignWillRoleOne() throws Exception { display("User after", userAfter); accountWillOid = getSingleLinkOid(userAfter); - assertAccountWillAfterAssign(TEST_NAME, USER_WILL_FULL_NAME, PendingOperationExecutionStatusType.EXECUTION_PENDING); + assertAccountWillAfterAssign(USER_WILL_FULL_NAME); display("dummy audit", dummyAuditService); display("dummy transport", dummyTransport); @@ -303,20 +259,18 @@ public void test110CloseCaseAndRecomputeWill() throws Exception { accountWillCompletionTimestampEnd = clock.currentTimeXMLGregorianCalendar(); - assertWillAfterCreateCaseClosed(TEST_NAME); + assertWillAfterCreateCaseClosed(); display("dummy audit", dummyAuditService); display("dummy transport", dummyTransport); } - protected void assertAccountWillAfterAssign(final String TEST_NAME, String expectedFullName, - PendingOperationExecutionStatusType propagationExecutionStage) throws Exception { + private void assertAccountWillAfterAssign(String expectedFullName) throws Exception { ShadowAsserter shadowRepoAsserter = assertRepoShadow(accountWillOid) .assertConception() .pendingOperations() .singleOperation() .assertId() - .assertRequestTimestamp(accountWillRequestTimestampStart, accountWillRequestTimestampEnd) .assertExecutionStatus(PendingOperationExecutionStatusType.EXECUTING) .delta() .display() @@ -340,7 +294,6 @@ protected void assertAccountWillAfterAssign(final String TEST_NAME, String expec .assertNoPassword() .pendingOperations() .singleOperation() - .assertRequestTimestamp(accountWillRequestTimestampStart, accountWillRequestTimestampEnd) .assertExecutionStatus(PendingOperationExecutionStatusType.EXECUTING) .end() .end(); @@ -348,12 +301,11 @@ protected void assertAccountWillAfterAssign(final String TEST_NAME, String expec assertShadowActivationAdministrativeStatusFromCache(shadowModelAsserter.getObject(), ActivationStatusType.ENABLED); assertWillCase(SchemaConstants.CASE_STATE_OPEN, - shadowModelAsserter.pendingOperations().singleOperation().getOperation(), - propagationExecutionStage); + shadowModelAsserter.pendingOperations().singleOperation().getOperation() + ); } - protected void assertWillCase(String expectedCaseState, PendingOperationType pendingOperation, - PendingOperationExecutionStatusType propagationExecutionStage) throws ObjectNotFoundException, SchemaException { + private void assertWillCase(String expectedCaseState, PendingOperationType pendingOperation) throws ObjectNotFoundException, SchemaException { String pendingOperationRef = pendingOperation.getAsynchronousOperationReference(); // Case number should be in willLastCaseOid. It will get there from operation result. assertNotNull("No async reference in pending operation", willLastCaseOid); @@ -361,14 +313,10 @@ protected void assertWillCase(String expectedCaseState, PendingOperationType pen assertEquals("Wrong case ID in pending operation", willLastCaseOid, pendingOperationRef); } - protected void assertWillAfterCreateCaseClosed(final String TEST_NAME) throws Exception { - Task task = createTask(TEST_NAME); - OperationResult result = task.getResult(); - + private void assertWillAfterCreateCaseClosed() throws Exception { ShadowAsserter shadowRepoAsserter = assertRepoShadow(accountWillOid) .pendingOperations() .singleOperation() - .assertRequestTimestamp(accountWillRequestTimestampStart, accountWillRequestTimestampEnd) .assertExecutionStatus(PendingOperationExecutionStatusType.COMPLETED) .assertResultStatus(OperationResultStatusType.SUCCESS) .assertCompletionTimestamp(accountWillCompletionTimestampStart, accountWillCompletionTimestampEnd) @@ -397,105 +345,60 @@ protected void assertWillAfterCreateCaseClosed(final String TEST_NAME) throws Ex .end() .pendingOperations() .singleOperation() - .assertRequestTimestamp(accountWillRequestTimestampStart, accountWillRequestTimestampEnd) .assertExecutionStatus(PendingOperationExecutionStatusType.COMPLETED) .assertResultStatus(OperationResultStatusType.SUCCESS) .assertCompletionTimestamp(accountWillCompletionTimestampStart, accountWillCompletionTimestampEnd) .end() .end(); - assertAttributeFromBackingStore(shadowModelAsserter, ATTR_DESCRIPTION_QNAME, ACCOUNT_WILL_DESCRIPTION_MANUAL); + assertAttributeFromBackingStore(shadowModelAsserter, ATTR_DESCRIPTION_QNAME); assertShadowPassword(shadowModelAsserter); assertCase(willLastCaseOid, SchemaConstants.CASE_STATE_CLOSED); } - protected void assertWillUnassignedFuture(ShadowAsserter shadowModelAsserterFuture, boolean assertPassword) { - shadowModelAsserterFuture - .assertName(USER_WILL_NAME); - assertUnassignedFuture(shadowModelAsserterFuture, assertPassword); - } - - protected void assertUnassignedFuture(ShadowAsserter shadowModelAsserterFuture, boolean assertPassword) { - shadowModelAsserterFuture - .assertDead(); - if (assertPassword) { - assertShadowPassword(shadowModelAsserterFuture); - } - } - - - protected void assertAttribute(PrismObject shadow, QName attrName, T... expectedValues) { - assertAttribute(resource, shadow.asObjectable(), attrName, expectedValues); + private void assertAttribute(PrismObject shadow, QName attrName, T... expectedValues) { + assertAttribute(shadow.asObjectable(), attrName, expectedValues); } - protected void assertNoAttribute(PrismObject shadow, QName attrName) { - assertNoAttribute(resource, shadow.asObjectable(), attrName); + private void assertNoAttribute(PrismObject shadow, QName attrName) { + assertNoAttribute(shadow.asObjectable(), attrName); } - protected void assertAttributeFromCache(ShadowAsserter shadowAsserter, QName attrQName, - Object... attrVals) { + private void assertAttributeFromCache(ShadowAsserter shadowAsserter, QName attrQName, Object... attrVals) { assertAttributeFromCache(shadowAsserter.getObject(), attrQName, attrVals); } - protected void assertAttributeFromCache(PrismObject shadow, QName attrQName, - Object... attrVals) { + private void assertAttributeFromCache(PrismObject shadow, QName attrQName, Object... attrVals) { assertAttribute(shadow, attrQName, attrVals); } - protected void assertAttributeFromBackingStore(ShadowAsserter shadowAsserter, QName attrQName, - String... attrVals) { - assertAttributeFromBackingStore(shadowAsserter.getObject(), attrQName, attrVals); + private void assertAttributeFromBackingStore(ShadowAsserter shadowAsserter, QName attrQName) { + assertAttributeFromBackingStore(shadowAsserter.getObject(), attrQName); } - protected void assertAttributeFromBackingStore(PrismObject shadow, QName attrQName, - String... attrVals) { + private void assertAttributeFromBackingStore(PrismObject shadow, QName attrQName) { assertNoAttribute(shadow, attrQName); } - protected void assertShadowActivationAdministrativeStatusFromCache(ShadowAsserter shadowAsserter, ActivationStatusType expectedStatus) { + private void assertShadowActivationAdministrativeStatusFromCache(ShadowAsserter shadowAsserter, ActivationStatusType expectedStatus) { assertShadowActivationAdministrativeStatusFromCache(shadowAsserter.getObject(), expectedStatus); } - protected void assertShadowActivationAdministrativeStatusFromCache(PrismObject shadow, ActivationStatusType expectedStatus) { + private void assertShadowActivationAdministrativeStatusFromCache(PrismObject shadow, ActivationStatusType expectedStatus) { assertShadowActivationAdministrativeStatus(shadow, expectedStatus); } - protected void assertShadowActivationAdministrativeStatus(PrismObject shadow, ActivationStatusType expectedStatus) { + private void assertShadowActivationAdministrativeStatus(PrismObject shadow, ActivationStatusType expectedStatus) { assertActivationAdministrativeStatus(shadow, expectedStatus); } - protected void assertShadowPassword(ShadowAsserter shadowAsserter) { + private void assertShadowPassword(ShadowAsserter shadowAsserter) { assertShadowPassword(shadowAsserter.getObject()); } - protected void assertShadowPassword(PrismObject shadow) { + private void assertShadowPassword(PrismObject shadow) { // pure manual resource should never "read" password assertNoShadowPassword(shadow); } - private void assertManual(AbstractWriteCapabilityType cap) { - assertEquals("Manual flag not set in capability "+cap, Boolean.TRUE, cap.isManual()); - } - protected void assertCase(String oid, String expectedState, PendingOperationExecutionStatusType executionStage) throws ObjectNotFoundException, SchemaException { - assertCase(oid, expectedState); - } - - protected void assertHasModification(ObjectDeltaType deltaType, ItemPath itemPath) { - for (ItemDeltaType itemDelta: deltaType.getItemDelta()) { - if (itemPath.equivalent(itemDelta.getPath().getItemPath())) { - return; - } - } - fail("No modification for "+itemPath+" in delta"); - } - - protected PendingOperationType assertSinglePendingOperation(PrismObject shadow, - XMLGregorianCalendar requestStart, XMLGregorianCalendar requestEnd, PendingOperationExecutionStatusType executionStage) { - assertPendingOperationDeltas(shadow, 1); - return assertPendingOperation(shadow, shadow.asObjectable().getPendingOperation().get(0), - requestStart, requestEnd, - PendingOperationExecutionStatusType.EXECUTING, OperationResultStatusType.IN_PROGRESS, - null, null); - } - } diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/other/TestDelegation.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/other/TestDelegation.java similarity index 68% rename from model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/other/TestDelegation.java rename to model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/other/TestDelegation.java index 297012b6509..3fe00d88e7e 100644 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/other/TestDelegation.java +++ b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/other/TestDelegation.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2017 Evolveum + * Copyright (c) 2010-2019 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.evolveum.midpoint.wf.impl.policy.other; +package com.evolveum.midpoint.wf.impl.other; import com.evolveum.midpoint.model.api.WorkflowService; import com.evolveum.midpoint.prism.PrismContext; @@ -28,22 +28,20 @@ import com.evolveum.midpoint.test.util.TestUtil; import com.evolveum.midpoint.util.DebugUtil; import com.evolveum.midpoint.util.exception.SecurityViolationException; -import com.evolveum.midpoint.wf.impl.policy.AbstractWfTestPolicy; +import com.evolveum.midpoint.wf.impl.AbstractWfTestPolicy; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.testng.annotations.Test; -import java.util.Arrays; +import java.io.File; import java.util.Collections; -import java.util.HashSet; import java.util.List; -import java.util.stream.Collectors; import static com.evolveum.midpoint.xml.ns._public.common.common_3.WorkItemDelegationMethodType.ADD_ASSIGNEES; import static com.evolveum.midpoint.xml.ns._public.common.common_3.WorkItemDelegationMethodType.REPLACE_ASSIGNEES; -import static org.testng.AssertJUnit.*; +import static org.testng.AssertJUnit.assertEquals; /** * @author mederly @@ -52,6 +50,20 @@ @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS) public class TestDelegation extends AbstractWfTestPolicy { + private static final File TEST_RESOURCE_DIR = new File("src/test/resources/delegation"); + + private static final File ROLE_PRINCE_FILE = new File(TEST_RESOURCE_DIR, "role-prince.xml"); + private static final String ROLE_PRINCE_OID = "9252328b-b0b4-458f-9397-31b67291d566"; + + private static final File USER_LONGSHANKS_FILE = new File(TEST_RESOURCE_DIR, "user-longshanks.xml"); + private static final String USER_LONGSHANKS_OID = "ad6f2526-4b59-4e57-9bb4-4584d34babc0"; + + private static final File USER_GIRTH_FILE = new File(TEST_RESOURCE_DIR, "user-girth.xml"); + private static final String USER_GIRTH_OID = "11d242f4-a49f-4168-9ebc-60c4825b43c7"; + + private static final File USER_KEEN_FILE = new File(TEST_RESOURCE_DIR, "user-keen.xml"); + private static final String USER_KEEN_OID = "96cdc455-b433-405a-8877-140306cd570b"; + @Override protected PrismObject getDefaultActor() { return userAdministrator; @@ -59,7 +71,6 @@ protected PrismObject getDefaultActor() { @Autowired private WorkflowService workflowService; - private PrismObject userLead1, userLead3; private WorkItemId workItemId; private String caseOid; @@ -67,6 +78,11 @@ protected PrismObject getDefaultActor() { public void initSystem(Task initTask, OperationResult initResult) throws Exception { super.initSystem(initTask, initResult); + repoAddObjectFromFile(ROLE_PRINCE_FILE, initResult); + addAndRecompute(USER_LONGSHANKS_FILE, initTask, initResult); + addAndRecompute(USER_GIRTH_FILE, initTask, initResult); + addAndRecompute(USER_KEEN_FILE, initTask, initResult); + DebugUtil.setPrettyPrintBeansAs(PrismContext.LANG_YAML); } @@ -76,14 +92,11 @@ public void test100CreateTask() throws Exception { TestUtil.displayTestTitle(this, TEST_NAME); login(userAdministrator); - userLead1 = getUser(userLead1Oid); - userLead3 = getUser(userLead3Oid); - Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); - assignRole(userJackOid, roleRole1aOid, task, result); // should start approval process - assertNotAssignedRole(userJackOid, roleRole1aOid, task, result); + assignRole(userJackOid, ROLE_PRINCE_OID, task, result); // should start approval process + assertNotAssignedRole(userJackOid, ROLE_PRINCE_OID, task, result); CaseWorkItemType workItem = getWorkItem(task, result); workItemId = WorkItemId.of(workItem); @@ -92,39 +105,39 @@ public void test100CreateTask() throws Exception { display("work item", workItem); display("case", getObjectViaRepo(CaseType.class, caseOid)); - PrismAsserts.assertReferenceValues(ref(workItem.getAssigneeRef()), userLead1Oid); + PrismAsserts.assertReferenceValues(ref(workItem.getAssigneeRef()), USER_LONGSHANKS_OID); } @Test - public void test110DelegateToUser2Unauthorized() throws Exception { - final String TEST_NAME = "test110DelegateToUser2Unauthorized"; + public void test110DelegateToGirthUnauthorized() throws Exception { + final String TEST_NAME = "test110DelegateToGirthUnauthorized"; TestUtil.displayTestTitle(this, TEST_NAME); - login(userLead3); + login(getUserFromRepo(USER_KEEN_OID)); Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); try { - workflowService.delegateWorkItem(workItemId, Collections.singletonList(ort(userLead2Oid)), ADD_ASSIGNEES, task, result); + workflowService.delegateWorkItem(workItemId, Collections.singletonList(ort(USER_GIRTH_OID)), ADD_ASSIGNEES, task, result); fail("delegate succeeded even if it shouldn't"); } catch (SecurityViolationException e) { // ok } CaseWorkItemType workItem = getWorkItem(task, result); - PrismAsserts.assertReferenceValues(ref(workItem.getAssigneeRef()), userLead1Oid); + PrismAsserts.assertReferenceValues(ref(workItem.getAssigneeRef()), USER_LONGSHANKS_OID); } @Test - public void test120DelegateToUser2() throws Exception { - final String TEST_NAME = "test120DelegateToUser2"; + public void test120DelegateToGirth() throws Exception { + final String TEST_NAME = "test120DelegateToGirth"; TestUtil.displayTestTitle(this, TEST_NAME); - login(userLead1); + login(getUserFromRepo(USER_LONGSHANKS_OID)); Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); - workflowService.delegateWorkItem(workItemId, Collections.singletonList(ort(userLead2Oid)), ADD_ASSIGNEES, task, result); + workflowService.delegateWorkItem(workItemId, Collections.singletonList(ort(USER_GIRTH_OID)), ADD_ASSIGNEES, task, result); result.computeStatus(); assertSuccess(result); @@ -135,36 +148,24 @@ public void test120DelegateToUser2() throws Exception { PrismObject aCase = getObjectViaRepo(CaseType.class, caseOid); display("task", aCase); - PrismAsserts.assertReferenceValues(ref(workItem.getAssigneeRef()), userLead1Oid, userLead2Oid); - assertRefEquals("Wrong originalAssigneeRef", ort(userLead1Oid), workItem.getOriginalAssigneeRef()); - - CaseWorkItemType workItem1 = workItemManager.getWorkItem(WorkItemId.of(workItem), result); - System.out.println("Work item: " + workItem1); - List assigneeOids = getAssigneeOids(workItem1); - assertEquals("Wrong midpoint-assignee values", new HashSet<>(Arrays.asList(userLead1Oid, userLead2Oid)), - new HashSet<>(assigneeOids)); + PrismAsserts.assertReferenceValues(ref(workItem.getAssigneeRef()), USER_LONGSHANKS_OID, USER_GIRTH_OID); + assertRefEquals("Wrong originalAssigneeRef", ort(USER_LONGSHANKS_OID), workItem.getOriginalAssigneeRef()); List events = ApprovalContextUtil.getWorkItemEvents(aCase.asObjectable(), workItemId.id, WorkItemDelegationEventType.class); assertEquals("Wrong # of delegation events", 1, events.size()); // TODO check content } - private List getAssigneeOids(CaseWorkItemType workItem) { - return workItem.getAssigneeRef().stream() - .map(ObjectReferenceType::getOid) - .collect(Collectors.toList()); - } - @Test - public void test130DelegateToUser3ByReplace() throws Exception { - final String TEST_NAME = "test130DelegateToUser3ByReplace"; + public void test130DelegateToKeenByReplace() throws Exception { + final String TEST_NAME = "test130DelegateToKeenByReplace"; TestUtil.displayTestTitle(this, TEST_NAME); - login(userLead1); + login(getUserFromRepo(USER_LONGSHANKS_OID)); Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); - workflowService.delegateWorkItem(workItemId, Collections.singletonList(ort(userLead3Oid)), REPLACE_ASSIGNEES, task, result); + workflowService.delegateWorkItem(workItemId, Collections.singletonList(ort(USER_KEEN_OID)), REPLACE_ASSIGNEES, task, result); result.computeStatus(); assertSuccess(result); @@ -175,13 +176,8 @@ public void test130DelegateToUser3ByReplace() throws Exception { PrismObject aCase = getObjectViaRepo(CaseType.class, caseOid); display("task", aCase); - PrismAsserts.assertReferenceValues(ref(workItem.getAssigneeRef()), userLead3Oid); - assertRefEquals("Wrong originalAssigneeRef", ort(userLead1Oid), workItem.getOriginalAssigneeRef()); - - CaseWorkItemType fullWorkItem = workItemManager.getWorkItem(WorkItemId.of(workItem), result); - System.out.println("Full work item: " + fullWorkItem); - List assigneeOids = getAssigneeOids(fullWorkItem); - assertEquals("Wrong assignees", Collections.singleton(userLead3Oid), new HashSet<>(assigneeOids)); + PrismAsserts.assertReferenceValues(ref(workItem.getAssigneeRef()), USER_KEEN_OID); + assertRefEquals("Wrong originalAssigneeRef", ort(USER_LONGSHANKS_OID), workItem.getOriginalAssigneeRef()); List events = ApprovalContextUtil.getWorkItemEvents(aCase.asObjectable(), workItemId.id, WorkItemDelegationEventType.class); assertEquals("Wrong # of delegation events", 2, events.size()); @@ -192,7 +188,7 @@ public void test130DelegateToUser3ByReplace() throws Exception { public void test140DelegateToNoneByReplace() throws Exception { final String TEST_NAME = "test140DelegateToNoneByReplace"; TestUtil.displayTestTitle(this, TEST_NAME); - login(userLead3); + login(getUserFromRepo(USER_KEEN_OID)); Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); @@ -209,11 +205,7 @@ public void test140DelegateToNoneByReplace() throws Exception { display("task", aCase); assertEquals("Wrong assigneeRef count", 0, workItem.getAssigneeRef().size()); - assertRefEquals("Wrong originalAssigneeRef", ort(userLead1Oid), workItem.getOriginalAssigneeRef()); - - CaseWorkItemType fullWorkItem = workItemManager.getWorkItem(WorkItemId.of(workItem), result); - System.out.println("Full work item: " + fullWorkItem); - assertEquals("Wrong # of assignees", 0, getAssigneeOids(fullWorkItem).size()); + assertRefEquals("Wrong originalAssigneeRef", ort(USER_LONGSHANKS_OID), workItem.getOriginalAssigneeRef()); List events = ApprovalContextUtil.getWorkItemEvents(aCase.asObjectable(), workItemId.id, WorkItemDelegationEventType.class); assertEquals("Wrong # of delegation events", 3, events.size()); diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/other/TestEscalation.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/other/TestEscalation.java similarity index 89% rename from model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/other/TestEscalation.java rename to model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/other/TestEscalation.java index 59afcd83cf2..7634724fcaf 100644 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/other/TestEscalation.java +++ b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/other/TestEscalation.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2017 Evolveum + * Copyright (c) 2010-2019 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.evolveum.midpoint.wf.impl.policy.other; +package com.evolveum.midpoint.wf.impl.other; import com.evolveum.midpoint.audit.api.AuditEventRecord; import com.evolveum.midpoint.audit.api.AuditEventType; @@ -31,7 +31,7 @@ import com.evolveum.midpoint.test.util.TestUtil; import com.evolveum.midpoint.util.DebugUtil; import com.evolveum.midpoint.wf.api.WorkflowConstants; -import com.evolveum.midpoint.wf.impl.policy.AbstractWfTestPolicy; +import com.evolveum.midpoint.wf.impl.AbstractWfTestPolicy; import com.evolveum.midpoint.wf.util.ApprovalUtils; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import org.springframework.test.annotation.DirtiesContext; @@ -52,7 +52,6 @@ */ @ContextConfiguration(locations = {"classpath:ctx-workflow-test-main.xml"}) @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS) -@SuppressWarnings("FieldCanBeLocal") public class TestEscalation extends AbstractWfTestPolicy { @Override @@ -63,13 +62,21 @@ protected PrismObject getDefaultActor() { private static final File TASK_TRIGGER_SCANNER_FILE = new File(COMMON_DIR, "task-trigger-scanner.xml"); protected static final String TASK_TRIGGER_SCANNER_OID = "00000000-0000-0000-0000-000000000007"; - private static final File TEST_ESCALATION_RESOURCE_DIR = new File("src/test/resources/policy/escalation"); + private static final File TEST_ESCALATION_RESOURCE_DIR = new File("src/test/resources/escalation"); private static final File METAROLE_ESCALATED_FILE = new File(TEST_ESCALATION_RESOURCE_DIR, "metarole-escalated.xml"); + private static final File ROLE_E1_FILE = new File(TEST_ESCALATION_RESOURCE_DIR, "role-e1.xml"); + private static final String ROLE_E1_OID = "7b959192-8c0c-4499-a51e-266b3b4dd8c4"; + private static final File ROLE_E2_FILE = new File(TEST_ESCALATION_RESOURCE_DIR, "role-e2.xml"); + private static final String ROLE_E2_OID = "bb38a7fc-8610-49b0-a76d-7b01cb8a6de1"; + + private static final File USER_BOB_FILE = new File(TEST_ESCALATION_RESOURCE_DIR, "user-bob.xml"); + private static final String USER_BOB_OID = "6f007608-415b-49e3-b388-0217d535fc7d"; + + private static final File USER_BOBEK_FILE = new File(TEST_ESCALATION_RESOURCE_DIR, "user-bobek.xml"); + private static final String USER_BOBEK_OID = "53b49582-de4b-4306-a135-41f46e64cbcc"; - private String roleE1Oid; - private String roleE2Oid; private String approvalCaseOid; @Override @@ -79,15 +86,13 @@ public void initSystem(Task initTask, OperationResult initResult) throws Excepti DebugUtil.setPrettyPrintBeansAs(PrismContext.LANG_YAML); repoAddObjectFromFile(METAROLE_ESCALATED_FILE, initResult).getOid(); - roleE1Oid = repoAddObjectFromFile(ROLE_E1_FILE, initResult).getOid(); - roleE2Oid = repoAddObjectFromFile(ROLE_E2_FILE, initResult).getOid(); + repoAddObjectFromFile(ROLE_E1_FILE, initResult); + repoAddObjectFromFile(ROLE_E2_FILE, initResult); - importObjectFromFile(TASK_TRIGGER_SCANNER_FILE); - - getUser(userLead1Oid); - getUser(userLead2Oid); + addAndRecompute(USER_BOB_FILE, initTask, initResult); + addAndRecompute(USER_BOBEK_FILE, initTask, initResult); - importLead1Deputies(initTask, initResult); + importObjectFromFile(TASK_TRIGGER_SCANNER_FILE); } @Test @@ -99,8 +104,8 @@ public void test100CreateE1ApprovalCase() throws Exception { Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); - assignRole(userJackOid, roleE1Oid, task, result); // should start approval process - assertNotAssignedRole(userJackOid, roleE1Oid, task, result); + assignRole(userJackOid, ROLE_E1_OID, task, result); // should start approval process + assertNotAssignedRole(userJackOid, ROLE_E1_OID, task, result); CaseWorkItemType workItem = getWorkItem(task, result); WorkItemId.of(workItem); @@ -116,8 +121,8 @@ public void test100CreateE1ApprovalCase() throws Exception { // D-0 days: approve (i.e. 14 days after creation) assertEquals("Wrong # of triggers", 3, aCase.getTrigger().size()); - PrismAsserts.assertReferenceValues(ref(workItem.getAssigneeRef()), userLead1Oid); - PrismAsserts.assertReferenceValue(ref(workItem.getOriginalAssigneeRef()), userLead1Oid); + PrismAsserts.assertReferenceValues(ref(workItem.getAssigneeRef()), USER_BOB_OID); + PrismAsserts.assertReferenceValue(ref(workItem.getOriginalAssigneeRef()), USER_BOB_OID); } @Test @@ -140,8 +145,8 @@ public void test110NotifyAfter5Days() throws Exception { display("case", aCase); assertEquals("Wrong # of triggers", 2, aCase.getTrigger().size()); - PrismAsserts.assertReferenceValues(ref(workItem.getAssigneeRef()), userLead1Oid); - PrismAsserts.assertReferenceValue(ref(workItem.getOriginalAssigneeRef()), userLead1Oid); + PrismAsserts.assertReferenceValues(ref(workItem.getAssigneeRef()), USER_BOB_OID); + PrismAsserts.assertReferenceValue(ref(workItem.getOriginalAssigneeRef()), USER_BOB_OID); } @Test @@ -163,8 +168,8 @@ public void test120EscalateAfter12Days() throws Exception { display("case", aCase); assertEquals("Wrong # of triggers", 1, aCase.getTrigger().size()); - PrismAsserts.assertReferenceValues(ref(workItem.getAssigneeRef()), userLead1Oid, userLead2Oid); - PrismAsserts.assertReferenceValue(ref(workItem.getOriginalAssigneeRef()), userLead1Oid); + PrismAsserts.assertReferenceValues(ref(workItem.getAssigneeRef()), USER_BOB_OID, USER_BOBEK_OID); + PrismAsserts.assertReferenceValue(ref(workItem.getOriginalAssigneeRef()), USER_BOB_OID); assertEquals("Wrong escalation level number", 1, ApprovalContextUtil.getEscalationLevelNumber(workItem)); } @@ -189,7 +194,7 @@ public void test130CompleteAfter14Days() throws Exception { display("rootTask", rootCase); waitForCaseClose(rootCase, 60000); - assertAssignedRole(userJackOid, roleE1Oid, task, result); + assertAssignedRole(userJackOid, ROLE_E1_OID, task, result); } @Test @@ -205,10 +210,10 @@ public void test200CreateE2ApprovalCase() throws Exception { resetTriggerTask(TASK_TRIGGER_SCANNER_OID, TASK_TRIGGER_SCANNER_FILE, result); // WHEN - assignRole(userJackOid, roleE2Oid, task, result); // should start approval process + assignRole(userJackOid, ROLE_E2_OID, task, result); // should start approval process // THEN - assertNotAssignedRole(userJackOid, roleE2Oid, task, result); + assertNotAssignedRole(userJackOid, ROLE_E2_OID, task, result); List workItems = getWorkItems(task, result); displayWorkItems("Work items", workItems); diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/other/TestEvents.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/other/TestEvents.java similarity index 93% rename from model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/other/TestEvents.java rename to model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/other/TestEvents.java index 6cf51abce42..71ea2cf9e42 100644 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/other/TestEvents.java +++ b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/other/TestEvents.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2017 Evolveum + * Copyright (c) 2010-2019 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.evolveum.midpoint.wf.impl.policy.other; +package com.evolveum.midpoint.wf.impl.other; import com.evolveum.midpoint.prism.PrismContext; import com.evolveum.midpoint.prism.PrismObject; @@ -24,7 +24,7 @@ import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.test.util.TestUtil; import com.evolveum.midpoint.util.DebugUtil; -import com.evolveum.midpoint.wf.impl.policy.AbstractWfTestPolicy; +import com.evolveum.midpoint.wf.impl.AbstractWfTestPolicy; import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; import com.evolveum.midpoint.xml.ns._public.common.common_3.CaseWorkItemType; import org.springframework.test.annotation.DirtiesContext; @@ -47,7 +47,7 @@ protected PrismObject getDefaultActor() { return userAdministrator; } - protected static final File TEST_EVENTS_RESOURCE_DIR = new File("src/test/resources/policy/events"); + protected static final File TEST_EVENTS_RESOURCE_DIR = new File("src/test/resources/events"); protected static final File ROLE_NO_APPROVERS_FILE = new File(TEST_EVENTS_RESOURCE_DIR, "role-no-approvers.xml"); protected String roleNoApproversOid; diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/other/TestMiscellaneous.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/other/TestMiscellaneous.java similarity index 66% rename from model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/other/TestMiscellaneous.java rename to model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/other/TestMiscellaneous.java index d5df51b3518..dbbe36ce117 100644 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/other/TestMiscellaneous.java +++ b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/other/TestMiscellaneous.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2018 Evolveum + * Copyright (c) 2010-2019 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.evolveum.midpoint.wf.impl.policy.other; +package com.evolveum.midpoint.wf.impl.other; import com.evolveum.midpoint.audit.api.AuditEventRecord; import com.evolveum.midpoint.audit.api.AuditEventType; @@ -22,19 +22,19 @@ import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.delta.ObjectDelta; import com.evolveum.midpoint.schema.constants.ObjectTypes; -import com.evolveum.midpoint.schema.constants.SchemaConstants; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.schema.util.*; import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.test.util.TestUtil; import com.evolveum.midpoint.wf.api.WorkflowConstants; -import com.evolveum.midpoint.wf.impl.policy.AbstractWfTestPolicy; +import com.evolveum.midpoint.wf.impl.AbstractWfTestPolicy; import com.evolveum.midpoint.wf.util.ApprovalUtils; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.testng.annotations.Test; +import java.io.File; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -49,11 +49,65 @@ @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS) public class TestMiscellaneous extends AbstractWfTestPolicy { + private static final File TEST_RESOURCE_DIR = new File("src/test/resources/miscellaneous"); + + private static final File ROLE_SAILOR_FILE = new File(TEST_RESOURCE_DIR, "role-sailor.xml"); + private static final String ROLE_SAILOR_OID = "3ccc0a00-6a3b-4ae0-94a3-d45fc457f63f"; + + private static final File ROLE_CAPTAIN_FILE = new File(TEST_RESOURCE_DIR, "role-captain.xml"); + private static final String ROLE_CAPTAIN_OID = "15a99cf1-5886-44d4-8aaf-7e1f46ccec36"; + + private static final File USER_SCOTT_FILE = new File(TEST_RESOURCE_DIR, "user-scott.xml"); + private static final String USER_SCOTT_OID = "929c49ed-0100-4068-b8e4-137bd8ebd6b2"; + + private static final File METAROLE_PRIZE_FILE = new File(TEST_RESOURCE_DIR, "metarole-prize.xml"); + + private static final File METAROLE_APPROVE_UNASSIGN_FILE = new File(TEST_RESOURCE_DIR, "metarole-approve-unassign.xml"); + + private static final File ROLE_GOLD_FILE = new File(TEST_RESOURCE_DIR, "role-gold.xml"); + private static final String ROLE_GOLD_OID = "0b3ad53e-7c1d-41d0-a447-ce94cd25c46a"; + + private static final File ROLE_SILVER_FILE = new File(TEST_RESOURCE_DIR, "role-silver.xml"); + private static final String ROLE_SILVER_OID = "ee5206f8-930a-4c85-bfee-c16e4462df23"; + + private static final File ROLE_BRONZE_FILE = new File(TEST_RESOURCE_DIR, "role-bronze.xml"); + //private static final String ROLE_BRONZE_OID = "f16f4dd7-2830-4d0a-b6ed-9fbf253dbaf3"; + + private static final File TEMPLATE_ASSIGNING_CAPTAIN_FILE = new File(TEST_RESOURCE_DIR, "template-assigning-captain.xml"); + private static final String TEMPLATE_ASSIGNING_CAPTAIN_OID = "18ac3da2-f2fa-496a-8e54-789a090ff492"; + + private static final File TEMPLATE_ASSIGNING_CAPTAIN_AFTER_FILE = new File(TEST_RESOURCE_DIR, "template-assigning-captain-after.xml"); + private static final String TEMPLATE_ASSIGNING_CAPTAIN_AFTER_OID = "ace5d8f0-f54b-4f1b-92c0-8fa104a8fe84"; + + private static final File ROLE_ASSIGNING_CAPTAIN_FILE = new File(TEST_RESOURCE_DIR, "role-assigning-captain.xml"); + private static final String ROLE_ASSIGNING_CAPTAIN_OID = "4bdd7ccc-8c52-41ff-a975-0313ec788507"; + + @Override protected PrismObject getDefaultActor() { return userAdministrator; } + @Override + public void initSystem(Task initTask, OperationResult initResult) throws Exception { + super.initSystem(initTask, initResult); + + repoAddObjectFromFile(ROLE_SAILOR_FILE, initResult); + repoAddObjectFromFile(ROLE_CAPTAIN_FILE, initResult); + + repoAddObjectFromFile(METAROLE_PRIZE_FILE, initResult); + repoAddObjectFromFile(METAROLE_APPROVE_UNASSIGN_FILE, initResult); + repoAddObjectFromFile(ROLE_GOLD_FILE, initResult); + repoAddObjectFromFile(ROLE_SILVER_FILE, initResult); + repoAddObjectFromFile(ROLE_BRONZE_FILE, initResult); + + addAndRecompute(USER_SCOTT_FILE, initTask, initResult); + + repoAddObjectFromFile(TEMPLATE_ASSIGNING_CAPTAIN_FILE, initResult); + repoAddObjectFromFile(TEMPLATE_ASSIGNING_CAPTAIN_AFTER_FILE, initResult); + repoAddObjectFromFile(ROLE_ASSIGNING_CAPTAIN_FILE, initResult); + } + @Test public void test100RequesterComment() throws Exception { final String TEST_NAME = "test100RequesterComment"; @@ -71,11 +125,11 @@ public void test100RequesterComment() throws Exception { final String REQUESTER_COMMENT = "req.comment"; businessContext.setComment(REQUESTER_COMMENT); - ObjectDelta userDelta = createAssignmentUserDelta(userJackOid, roleRole2Oid, RoleType.COMPLEX_TYPE, null, null, null, true); + ObjectDelta userDelta = createAssignmentUserDelta(userJackOid, ROLE_SAILOR_OID, RoleType.COMPLEX_TYPE, null, null, null, true); Collection> deltas = MiscSchemaUtil.createCollection(userDelta); modelService.executeChanges(deltas, ModelExecuteOptions.createRequestBusinessContext(businessContext), task, result); - assertNotAssignedRole(userJackOid, roleRole2Oid, task, result); + assertNotAssignedRole(userJackOid, ROLE_SAILOR_OID, task, result); CaseWorkItemType workItem = getWorkItem(task, result); display("Work item", workItem); @@ -99,7 +153,7 @@ public void test100RequesterComment() throws Exception { display("Event 2", event2); assertNotNull("Original assignee is null", event2.getOriginalAssigneeRef()); - assertEquals("Wrong original assignee OID", userLead2Oid, event2.getOriginalAssigneeRef().getOid()); + assertEquals("Wrong original assignee OID", USER_SCOTT_OID, event2.getOriginalAssigneeRef().getOid()); display("audit", dummyAuditService); List records = dummyAuditService.getRecordsOfType(AuditEventType.WORKFLOW_PROCESS_INSTANCE); @@ -113,7 +167,7 @@ public void test100RequesterComment() throws Exception { CaseType parentCase = getCase(aCase.getParentRef().getOid()); waitForCaseClose(parentCase); - AssignmentType assignment = assertAssignedRole(userJackOid, roleRole2Oid, task, result); + AssignmentType assignment = assertAssignedRole(userJackOid, ROLE_SAILOR_OID, task, result); display("assignment after creation", assignment); MetadataType metadata = assignment.getMetadata(); assertNotNull("Null request timestamp in metadata", metadata.getRequestTimestamp()); @@ -138,13 +192,13 @@ public void test105RequesterCommentImmediate() throws Exception { final String REQUESTER_COMMENT = "req.comment"; businessContext.setComment(REQUESTER_COMMENT); - ObjectDelta userDelta = createAssignmentUserDelta(userJackOid, roleRole3Oid, RoleType.COMPLEX_TYPE, null, null, null, true); + ObjectDelta userDelta = createAssignmentUserDelta(userJackOid, ROLE_CAPTAIN_OID, RoleType.COMPLEX_TYPE, null, null, null, true); Collection> deltas = MiscSchemaUtil.createCollection(userDelta); ModelExecuteOptions options = ModelExecuteOptions.createRequestBusinessContext(businessContext); options.setExecuteImmediatelyAfterApproval(true); modelService.executeChanges(deltas, options, task, result); - assertNotAssignedRole(userJackOid, roleRole3Oid, task, result); + assertNotAssignedRole(userJackOid, ROLE_CAPTAIN_OID, task, result); CaseWorkItemType workItem = getWorkItem(task, result); display("Work item", workItem); @@ -168,7 +222,7 @@ public void test105RequesterCommentImmediate() throws Exception { display("Event 2", event2); assertNotNull("Original assignee is null", event2.getOriginalAssigneeRef()); - assertEquals("Wrong original assignee OID", userLead3Oid, event2.getOriginalAssigneeRef().getOid()); + assertEquals("Wrong original assignee OID", USER_SCOTT_OID, event2.getOriginalAssigneeRef().getOid()); display("audit", dummyAuditService); List records = dummyAuditService.getRecordsOfType(AuditEventType.WORKFLOW_PROCESS_INSTANCE); @@ -182,7 +236,7 @@ public void test105RequesterCommentImmediate() throws Exception { CaseType parentCase = getCase(aCase.getParentRef().getOid()); waitForCaseClose(parentCase); - AssignmentType assignment = assertAssignedRole(userJackOid, roleRole3Oid, task, result); + AssignmentType assignment = assertAssignedRole(userJackOid, ROLE_CAPTAIN_OID, task, result); display("assignment after creation", assignment); MetadataType metadata = assignment.getMetadata(); assertNotNull("Null request timestamp in metadata", metadata.getRequestTimestamp()); @@ -201,25 +255,22 @@ public void test110RequestPrunedRole() throws Exception { // GIVEN - assignRole(RoleType.class, roleRole2Oid, metarolePruneTest2xRolesOid, task, result); - assignRole(RoleType.class, roleRole2aOid, metarolePruneTest2xRolesOid, task, result); - assignRole(RoleType.class, roleRole2bOid, metarolePruneTest2xRolesOid, task, result); - - assignRole(RoleType.class, roleRole2Oid, metaroleApproveUnassign, task, result); - - //display("lead2", getUser(userLead2Oid)); + ModelExecuteOptions options = ModelExecuteOptions + .createPartialProcessing(new PartialProcessingOptionsType().approvals(PartialProcessingTypeType.SKIP)); + assignRole(userJackOid, ROLE_GOLD_OID, options, task, result); + assertAssignedRole(getUser(userJackOid), ROLE_GOLD_OID); // WHEN - assignRole(userJackOid, roleRole2aOid, task, result); + assignRole(userJackOid, ROLE_SILVER_OID, task, result); // THEN result.computeStatus(); TestUtil.assertInProgress("Operation NOT in progress", result); - assertNotAssignedRole(userJackOid, roleRole2aOid, task, result); + assertNotAssignedRole(userJackOid, ROLE_SILVER_OID, task, result); - // complete the work item related to assigning role-2a + // complete the work item related to assigning role silver CaseWorkItemType workItem = getWorkItem(task, result); display("Work item", workItem); workflowManager.completeWorkItem(WorkItemId.of(workItem), @@ -230,7 +281,7 @@ public void test110RequestPrunedRole() throws Exception { CaseType rootCase = getCase(aCase.getParentRef().getOid()); waitForCaseClose(rootCase); - assertNotAssignedRole(userJackOid, roleRole2Oid, task, result); // should be pruned without approval + assertNotAssignedRole(userJackOid, ROLE_GOLD_OID, task, result); // should be pruned without approval } @Test @@ -243,8 +294,9 @@ public void test200GetRoleByTemplate() throws Exception { OperationResult result = task.getResult(); // GIVEN - setDefaultUserTemplate(userTemplateAssigningRole1aOid); + setDefaultUserTemplate(TEMPLATE_ASSIGNING_CAPTAIN_OID); unassignAllRoles(userJackOid); + assertNotAssignedRole(userJackOid, ROLE_CAPTAIN_OID, task, result); // WHEN // some innocent change @@ -254,7 +306,7 @@ public void test200GetRoleByTemplate() throws Exception { result.computeStatus(); TestUtil.assertSuccess(result); - assertAssignedRole(userJackOid, roleRole1aOid, task, result); + assertAssignedRole(userJackOid, ROLE_CAPTAIN_OID, task, result); } @Test @@ -267,19 +319,20 @@ public void test210GetRoleByTemplateAfterAssignments() throws Exception { OperationResult result = task.getResult(); // GIVEN - setDefaultUserTemplate(userTemplateAssigningRole1aOidAfter); + setDefaultUserTemplate(TEMPLATE_ASSIGNING_CAPTAIN_AFTER_OID); unassignAllRoles(userJackOid); + assertNotAssignedRole(userJackOid, ROLE_CAPTAIN_OID, task, result); // WHEN // some innocent change modifyUserChangePassword(userJackOid, "PaSsWoRd123", task, result); - // here the role1a appears in evaluatedAssignmentsTriple only in secondary phase; so no approvals are triggered + // here the captain role appears in evaluatedAssignmentsTriple only in secondary phase; so no approvals are triggered // THEN result.computeStatus(); TestUtil.assertSuccess(result); - assertAssignedRole(userJackOid, roleRole1aOid, task, result); + assertAssignedRole(userJackOid, ROLE_CAPTAIN_OID, task, result); } @Test @@ -294,15 +347,16 @@ public void test220GetRoleByFocusMappings() throws Exception { // GIVEN setDefaultUserTemplate(null); unassignAllRoles(userJackOid); + assertNotAssignedRole(userJackOid, ROLE_CAPTAIN_OID, task, result); // WHEN - assignRole(userJackOid, roleFocusAssignmentMapping, task, result); + assignRole(userJackOid, ROLE_ASSIGNING_CAPTAIN_OID, task, result); // THEN result.computeStatus(); TestUtil.assertSuccess(result); - assertAssignedRole(userJackOid, roleRole1aOid, task, result); + assertAssignedRole(userJackOid, ROLE_CAPTAIN_OID, task, result); } @Test @@ -317,13 +371,13 @@ public void test250SkippingApprovals() throws Exception { // GIVEN setDefaultUserTemplate(null); unassignAllRoles(userJackOid); + assertNotAssignedRole(userJackOid, ROLE_CAPTAIN_OID, task, result); // WHEN - @SuppressWarnings({"raw", "unchecked"}) ObjectDelta delta = prismContext.deltaFor(UserType.class) .item(UserType.F_ASSIGNMENT) - .add(ObjectTypeUtil.createAssignmentTo(roleRole1aOid, ObjectTypes.ROLE, prismContext)) + .add(ObjectTypeUtil.createAssignmentTo(ROLE_CAPTAIN_OID, ObjectTypes.ROLE, prismContext)) .asObjectDelta(userJackOid); ModelExecuteOptions options = ModelExecuteOptions.createPartialProcessing( new PartialProcessingOptionsType().approvals(PartialProcessingTypeType.SKIP)); @@ -333,7 +387,6 @@ public void test250SkippingApprovals() throws Exception { result.computeStatus(); TestUtil.assertSuccess(result); - assertAssignedRole(userJackOid, roleRole1aOid, task, result); + assertAssignedRole(userJackOid, ROLE_CAPTAIN_OID, task, result); } - } diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/other/TestParallelApprovals.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/other/TestParallelApprovals.java similarity index 94% rename from model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/other/TestParallelApprovals.java rename to model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/other/TestParallelApprovals.java index d758e279ee7..9d3d2b8e282 100644 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/other/TestParallelApprovals.java +++ b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/other/TestParallelApprovals.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2017 Evolveum + * Copyright (c) 2010-2019 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.evolveum.midpoint.wf.impl.policy.other; +package com.evolveum.midpoint.wf.impl.other; import com.evolveum.midpoint.prism.PrismContext; import com.evolveum.midpoint.prism.PrismObject; @@ -36,9 +36,9 @@ import com.evolveum.midpoint.util.exception.ObjectNotFoundException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SystemException; +import com.evolveum.midpoint.wf.impl.AbstractWfTestPolicy; import com.evolveum.midpoint.wf.impl.WfTestHelper; import com.evolveum.midpoint.wf.impl.execution.CaseOperationExecutionTaskHandler; -import com.evolveum.midpoint.wf.impl.policy.AbstractWfTestPolicy; import com.evolveum.midpoint.wf.util.ApprovalUtils; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import org.springframework.beans.factory.annotation.Autowired; @@ -67,13 +67,23 @@ public class TestParallelApprovals extends AbstractWfTestPolicy { @Autowired private WfTestHelper testHelper; + protected static final File TEST_RESOURCE_DIR = new File("src/test/resources/parallel"); + private static final File ROLE_ROLE50A_FILE = new File(TEST_RESOURCE_DIR, "role-role50a-slow.xml"); private static final File ROLE_ROLE51A_FILE = new File(TEST_RESOURCE_DIR, "role-role51a-slow.xml"); private static final File ROLE_ROLE52A_FILE = new File(TEST_RESOURCE_DIR, "role-role52a-slow.xml"); private static final File ROLE_ROLE53A_FILE = new File(TEST_RESOURCE_DIR, "role-role53a-slow.xml"); + private static final File USER_BOB_FILE = new File(TEST_RESOURCE_DIR, "user-bob.xml"); + private static final File USER_CHUCK_FILE = new File(TEST_RESOURCE_DIR, "user-chuck.xml"); + + protected String userBobOid; + protected String userChuckOid; + private String roleRole50aOid, roleRole51aOid, roleRole52aOid, roleRole53aOid; + public static boolean doSleep = false; + @Override protected PrismObject getDefaultActor() { return userAdministrator; @@ -83,11 +93,19 @@ protected PrismObject getDefaultActor() { public void initSystem(Task initTask, OperationResult initResult) throws Exception { super.initSystem(initTask, initResult); + userBobOid = repoAddObjectFromFile(USER_BOB_FILE, initResult).getOid(); + userChuckOid = repoAddObjectFromFile(USER_CHUCK_FILE, initResult).getOid(); + roleRole50aOid = repoAddObjectFromFile(ROLE_ROLE50A_FILE, initResult).getOid(); roleRole51aOid = repoAddObjectFromFile(ROLE_ROLE51A_FILE, initResult).getOid(); roleRole52aOid = repoAddObjectFromFile(ROLE_ROLE52A_FILE, initResult).getOid(); roleRole53aOid = repoAddObjectFromFile(ROLE_ROLE53A_FILE, initResult).getOid(); + assignRole(USER_ADMINISTRATOR_OID, roleRole51aOid, SchemaConstants.ORG_APPROVER, initTask, initResult); + assignRole(USER_ADMINISTRATOR_OID, roleRole52aOid, SchemaConstants.ORG_APPROVER, initTask, initResult); + assignRole(USER_ADMINISTRATOR_OID, roleRole53aOid, SchemaConstants.ORG_APPROVER, initTask, initResult); + + doSleep = true; DebugUtil.setPrettyPrintBeansAs(PrismContext.LANG_YAML); } diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/sod/AbstractTestSoD.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/other/TestSoD.java similarity index 96% rename from model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/sod/AbstractTestSoD.java rename to model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/other/TestSoD.java index 319f751109a..fa8cd283db0 100644 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/sod/AbstractTestSoD.java +++ b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/other/TestSoD.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2018 Evolveum + * Copyright (c) 2010-2019 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.evolveum.midpoint.wf.impl.policy.sod; +package com.evolveum.midpoint.wf.impl.other; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.delta.ObjectDelta; @@ -25,9 +25,9 @@ import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; -import com.evolveum.midpoint.wf.impl.policy.AbstractWfTestPolicy; -import com.evolveum.midpoint.wf.impl.policy.ExpectedTask; -import com.evolveum.midpoint.wf.impl.policy.ExpectedWorkItem; +import com.evolveum.midpoint.wf.impl.AbstractWfTestPolicy; +import com.evolveum.midpoint.wf.impl.ExpectedTask; +import com.evolveum.midpoint.wf.impl.ExpectedWorkItem; import com.evolveum.midpoint.xml.ns._public.common.common_3.CaseWorkItemType; import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; import org.springframework.test.annotation.DirtiesContext; @@ -51,11 +51,11 @@ */ @ContextConfiguration(locations = {"classpath:ctx-workflow-test-main.xml"}) @DirtiesContext(classMode = ClassMode.AFTER_CLASS) -public class AbstractTestSoD extends AbstractWfTestPolicy { +public class TestSoD extends AbstractWfTestPolicy { - protected static final Trace LOGGER = TraceManager.getTrace(AbstractTestSoD.class); + protected static final Trace LOGGER = TraceManager.getTrace(TestSoD.class); - protected static final File TEST_SOD_RESOURCE_DIR = new File("src/test/resources/policy/sod"); + protected static final File TEST_SOD_RESOURCE_DIR = new File("src/test/resources/sod"); protected static final File METAROLE_CRIMINAL_EXCLUSION_FILE = new File(TEST_SOD_RESOURCE_DIR, "metarole-criminal-exclusion.xml"); protected static final File ROLE_JUDGE_FILE = new File(TEST_SOD_RESOURCE_DIR, "role-judge.xml"); @@ -119,12 +119,10 @@ public void test020AssignRolePirate() throws Exception { PrismObject jack = getUser(userJackOid); String originalDescription = jack.asObjectable().getDescription(); - @SuppressWarnings("unchecked") ObjectDelta addPirateDelta = prismContext .deltaFor(UserType.class) .item(UserType.F_ASSIGNMENT).add(createAssignmentTo(rolePirateOid, ObjectTypes.ROLE, prismContext)) .asObjectDelta(userJackOid); - @SuppressWarnings("unchecked") ObjectDelta changeDescriptionDelta = prismContext .deltaFor(UserType.class) .item(UserType.F_DESCRIPTION).replace("Pirate Judge") diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/assignments/plain/TestAssignmentApprovalPlainExplicit.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/assignments/plain/TestAssignmentApprovalPlainExplicit.java deleted file mode 100644 index 342d8815fc6..00000000000 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/assignments/plain/TestAssignmentApprovalPlainExplicit.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2010-2018 Evolveum - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.evolveum.midpoint.wf.impl.policy.assignments.plain; - -import com.evolveum.midpoint.schema.result.OperationResult; -import com.evolveum.midpoint.task.api.Task; -import com.evolveum.midpoint.wf.impl.policy.assignments.AbstractTestAssignmentApproval; -import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType; - -/** - * Tests assigning of roles 1..3 with explicitly defined approvers (i.e. via approverRef item). - * As for policy rules, the default ones are used. - * - * @author mederly - */ -@SuppressWarnings("Duplicates") -public class TestAssignmentApprovalPlainExplicit extends AbstractTestAssignmentApproval { - - @Override - protected String getRoleOid(int number) { - switch (number) { - case 1: return roleRole1aOid; - case 2: return roleRole2aOid; - case 3: return roleRole3aOid; - case 4: return roleRole4aOid; - case 10: return roleRole10aOid; - default: throw new IllegalArgumentException("Wrong role number: " + number); - } - } - - @Override - protected String getRoleName(int number) { - switch (number) { - case 1: return "Role1a"; - case 2: return "Role2a"; - case 3: return "Role3a"; - case 4: return "Role4a"; - case 10: return "Role10a"; - default: throw new IllegalArgumentException("Wrong role number: " + number); - } - } - - @Override - protected void importLead10(Task task, OperationResult result) throws Exception { - super.importLead10(task, result); - executeChangesAssertSuccess(prismContext.deltaFor(RoleType.class) - .item(RoleType.F_APPROVER_REF) - .add(prv(userLead10Oid)) - .asObjectDelta(getRoleOid(10)), null, task, result); - } -} diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/lifecycle/AbstractTestLifecycle.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/lifecycle/AbstractTestLifecycle.java deleted file mode 100644 index 793f56717c4..00000000000 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/lifecycle/AbstractTestLifecycle.java +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Copyright (c) 2010-2018 Evolveum - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.evolveum.midpoint.wf.impl.policy.lifecycle; - -import com.evolveum.midpoint.prism.PrismObject; -import com.evolveum.midpoint.prism.PrismReferenceValue; -import com.evolveum.midpoint.prism.delta.ObjectDelta; -import com.evolveum.midpoint.schema.constants.ObjectTypes; -import com.evolveum.midpoint.schema.constants.SchemaConstants; -import com.evolveum.midpoint.schema.result.OperationResult; -import com.evolveum.midpoint.schema.util.ObjectTypeUtil; -import com.evolveum.midpoint.task.api.Task; -import com.evolveum.midpoint.test.util.TestUtil; -import com.evolveum.midpoint.util.logging.Trace; -import com.evolveum.midpoint.util.logging.TraceManager; -import com.evolveum.midpoint.wf.impl.policy.AbstractWfTestPolicy; -import com.evolveum.midpoint.wf.impl.policy.ExpectedTask; -import com.evolveum.midpoint.wf.impl.policy.ExpectedWorkItem; -import com.evolveum.midpoint.xml.ns._public.common.common_3.MetadataType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; -import com.evolveum.prism.xml.ns._public.types_3.PolyStringType; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.annotation.DirtiesContext.ClassMode; -import org.springframework.test.context.ContextConfiguration; -import org.testng.annotations.Test; - -import java.io.File; -import java.util.Collections; -import java.util.HashSet; - -import static com.evolveum.midpoint.prism.util.PrismTestUtil.getPrismContext; -import static java.util.Collections.singleton; -import static org.testng.AssertJUnit.assertEquals; -import static org.testng.AssertJUnit.assertNull; - -/** - * Testing approvals of role lifecycle: create/modify/delete role. - * - * Subclasses provide specializations regarding ways how rules and/or approvers are attached to roles. - * - * @author mederly - */ -@ContextConfiguration(locations = {"classpath:ctx-workflow-test-main.xml"}) -@DirtiesContext(classMode = ClassMode.AFTER_CLASS) -public abstract class AbstractTestLifecycle extends AbstractWfTestPolicy { - - protected static final Trace LOGGER = TraceManager.getTrace(AbstractTestLifecycle.class); - - protected static final File TEST_LIFECYCLE_RESOURCE_DIR = new File("src/test/resources/policy/lifecycle"); - - protected static final File USER_PIRATE_OWNER_FILE = new File(TEST_LIFECYCLE_RESOURCE_DIR, "user-pirate-owner.xml"); - protected static final File USER_JUDGE_OWNER_FILE = new File(TEST_LIFECYCLE_RESOURCE_DIR, "user-judge-owner.xml"); - - protected String userPirateOwnerOid; - protected String userJudgeOwnerOid; - - String rolePirateOid; - - @Override - public void initSystem(Task initTask, OperationResult initResult) throws Exception { - super.initSystem(initTask, initResult); - userPirateOwnerOid = addAndRecomputeUser(USER_PIRATE_OWNER_FILE, initTask, initResult); - userJudgeOwnerOid = addAndRecomputeUser(USER_JUDGE_OWNER_FILE, initTask, initResult); - } - - protected boolean approveObjectAdd() { - return false; - } - - @Test - public void test010CreateRolePirate() throws Exception { - final String TEST_NAME = "test010CreateRolePirate"; - TestUtil.displayTestTitle(this, TEST_NAME); - login(userAdministrator); - - Task task = createTask(TEST_NAME); - OperationResult result = task.getResult(); - - RoleType pirate = new RoleType(prismContext); - pirate.setName(PolyStringType.fromOrig("pirate")); - - if (approveObjectAdd()) { - createObject(TEST_NAME, pirate, false, true, userLead1Oid); - rolePirateOid = searchObjectByName(RoleType.class, "pirate").getOid(); - } else { - repoAddObject(pirate.asPrismObject(), result); - rolePirateOid = pirate.getOid(); - } - - PrismReferenceValue pirateOwner = getPrismContext().itemFactory().createReferenceValue(rolePirateOid, RoleType.COMPLEX_TYPE); - pirateOwner.setRelation(SchemaConstants.ORG_OWNER); - executeChanges(prismContext.deltaFor(UserType.class) - .item(UserType.F_ASSIGNMENT).add(ObjectTypeUtil.createAssignmentTo(pirateOwner, prismContext)) - .asObjectDelta(userPirateOwnerOid), - null, task, result); - PrismObject pirateAfter = getRole(rolePirateOid); - display("Pirate role", pirateAfter); - display("Pirate owner", getUser(userPirateOwnerOid)); - - if (approveObjectAdd()) { - MetadataType metadata = pirateAfter.asObjectable().getMetadata(); - assertEquals("Wrong create approver ref", - singleton(ObjectTypeUtil.createObjectRef(userLead1Oid, ObjectTypes.USER).relation(SchemaConstants.ORG_DEFAULT)), - new HashSet<>(metadata.getCreateApproverRef())); - assertEquals("Wrong create approval comments", - singleton("lead1 :: creation comment"), - new HashSet<>(metadata.getCreateApprovalComment())); - } - } - - @Test - public void test100ModifyRolePirateDescription() throws Exception { - final String TEST_NAME = "test100ModifyRolePirateDescription"; - TestUtil.displayTestTitle(this, TEST_NAME); - login(userAdministrator); - - ObjectDelta descriptionDelta = prismContext.deltaFor(RoleType.class) - .item(RoleType.F_DESCRIPTION).replace("Bloody pirate") - .asObjectDelta(rolePirateOid); - ObjectDelta delta0 = prismContext.deltaFactory().object() - .createModifyDelta(rolePirateOid, Collections.emptyList(), RoleType.class); - //noinspection UnnecessaryLocalVariable - ObjectDelta delta1 = descriptionDelta; - ExpectedTask expectedTask = new ExpectedTask(null, "Modifying role \"pirate\""); - ExpectedWorkItem expectedWorkItem = new ExpectedWorkItem(userPirateOwnerOid, null, expectedTask); - modifyObject(TEST_NAME, descriptionDelta, delta0, delta1, false, true, userPirateOwnerOid, - Collections.singletonList(expectedTask), Collections.singletonList(expectedWorkItem), - () -> {}, - () -> assertNull("Description is modified", getRoleSimple(rolePirateOid).getDescription()), - () -> assertEquals("Description was NOT modified", "Bloody pirate", getRoleSimple(rolePirateOid).getDescription())); - - PrismObject roleAfter = getRole(rolePirateOid); - display("pirate after", roleAfter); - MetadataType metadata = roleAfter.asObjectable().getMetadata(); - assertEquals("Wrong modify approver ref", - singleton(ObjectTypeUtil.createObjectRef(userPirateOwnerOid, ObjectTypes.USER).relation(SchemaConstants.ORG_DEFAULT)), - new HashSet<>(metadata.getModifyApproverRef())); - assertEquals("Wrong modify approval comments", - singleton("pirate-owner :: modification comment"), - new HashSet<>(metadata.getModifyApprovalComment())); - } - - @Test - public void test200DeleteRolePirate() throws Exception { - final String TEST_NAME = "test200DeleteRolePirate"; - TestUtil.displayTestTitle(this, TEST_NAME); - login(userAdministrator); - - ExpectedTask expectedTask = new ExpectedTask(null, "Deleting role \"pirate\""); - ExpectedWorkItem expectedWorkItem = new ExpectedWorkItem(userPirateOwnerOid, null, expectedTask); - deleteObject(TEST_NAME, RoleType.class, rolePirateOid, false, true, userPirateOwnerOid, - Collections.singletonList(expectedTask), Collections.singletonList(expectedWorkItem)); - } - - @Test - public void zzzMarkAsNotInitialized() { - display("Setting class as not initialized"); - unsetSystemInitialized(); - } - -} diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/package-info.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/package-info.java deleted file mode 100644 index f5e5d845ba0..00000000000 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/policy/package-info.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2010-2017 Evolveum - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Set of tests for policy-based approvals. These are structure in the following way: - * - * assignments: Tests approvals for simple assigning of (sensitive) roles. - * plain: Uses default policy rules that are used if no other rules are present. The default rules look - * for org:approver assignees and/or approverRef objects). - * TestAssignmentApprovalPlainImplicit: tests assignments, uses org:approver relation - * TestAssignmentApprovalPlainExplicit: tests assignments, uses approverRef relation - * global: Uses global policy rules (but quite similar to default ones) - * TestAssignmentApprovalGlobal: ## not used, as the functionality is not implemented yet ## - * metarole: Uses metarole-induced policy rules. - * TestAssignmentApprovalMetaroleExplicit: uses metaroles that are explicitly assigned to given roles - * TestAssignmentsWithDifferentMetaroles: DOES NOT EXTEND AbstractTestAssignmentApproval (as other approval tests do), - * but uses specific metaroles to provide different approval requirements. See Role21..23. - * - * lifecycle: Tests approvals for add/modify/delete of roles - * plain: Uses default rules that look for org:owner assignees. - * TestLifecyclePlain: tests role modify/delete (uses org:owner relation) - * global: Uses global policy rules (but quite similar to default ones) - * TestLifecycleGlobal: for role modify/delete, uses org:owner relation; for role add, uses specified user - * - * sod: Tests approvals for SoD violations - * - * @author mederly - */ -package com.evolveum.midpoint.wf.impl.policy; \ No newline at end of file diff --git a/model/workflow-impl/src/test/resources/policy/metarole-default.xml b/model/workflow-impl/src/test/resources/assignments-advanced/metarole-default.xml similarity index 95% rename from model/workflow-impl/src/test/resources/policy/metarole-default.xml rename to model/workflow-impl/src/test/resources/assignments-advanced/metarole-default.xml index b68622ed958..09509fd046a 100644 --- a/model/workflow-impl/src/test/resources/policy/metarole-default.xml +++ b/model/workflow-impl/src/test/resources/assignments-advanced/metarole-default.xml @@ -33,10 +33,10 @@ 1 - + special-approver skip - + diff --git a/model/workflow-impl/src/test/resources/policy/metarole-security.xml b/model/workflow-impl/src/test/resources/assignments-advanced/metarole-security.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/metarole-security.xml rename to model/workflow-impl/src/test/resources/assignments-advanced/metarole-security.xml diff --git a/model/workflow-impl/src/test/resources/policy/assignments/org-leads2122.xml b/model/workflow-impl/src/test/resources/assignments-advanced/org-leads2122.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/assignments/org-leads2122.xml rename to model/workflow-impl/src/test/resources/assignments-advanced/org-leads2122.xml diff --git a/model/workflow-impl/src/test/resources/policy/assignments/role-role21-standard.xml b/model/workflow-impl/src/test/resources/assignments-advanced/role-role21-standard.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/assignments/role-role21-standard.xml rename to model/workflow-impl/src/test/resources/assignments-advanced/role-role21-standard.xml diff --git a/model/workflow-impl/src/test/resources/policy/assignments/role-role22-special.xml b/model/workflow-impl/src/test/resources/assignments-advanced/role-role22-special.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/assignments/role-role22-special.xml rename to model/workflow-impl/src/test/resources/assignments-advanced/role-role22-special.xml diff --git a/model/workflow-impl/src/test/resources/policy/assignments/role-role23-special-and-security.xml b/model/workflow-impl/src/test/resources/assignments-advanced/role-role23-special-and-security.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/assignments/role-role23-special-and-security.xml rename to model/workflow-impl/src/test/resources/assignments-advanced/role-role23-special-and-security.xml diff --git a/model/workflow-impl/src/test/resources/policy/assignments/role-role24-approval-and-enforce.xml b/model/workflow-impl/src/test/resources/assignments-advanced/role-role24-approval-and-enforce.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/assignments/role-role24-approval-and-enforce.xml rename to model/workflow-impl/src/test/resources/assignments-advanced/role-role24-approval-and-enforce.xml diff --git a/model/workflow-impl/src/test/resources/policy/assignments/role-role25-very-complex-approval.xml b/model/workflow-impl/src/test/resources/assignments-advanced/role-role25-very-complex-approval.xml similarity index 94% rename from model/workflow-impl/src/test/resources/policy/assignments/role-role25-very-complex-approval.xml rename to model/workflow-impl/src/test/resources/assignments-advanced/role-role25-very-complex-approval.xml index b7f12e11a53..4a3ad05372b 100644 --- a/model/workflow-impl/src/test/resources/policy/assignments/role-role25-very-complex-approval.xml +++ b/model/workflow-impl/src/test/resources/assignments-advanced/role-role25-very-complex-approval.xml @@ -90,7 +90,7 @@ - + @@ -101,12 +101,16 @@ 50 - extraordinary - - - + + + extraordinary + + + + + diff --git a/model/workflow-impl/src/test/resources/policy/assignments/role-role26-no-approvers.xml b/model/workflow-impl/src/test/resources/assignments-advanced/role-role26-no-approvers.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/assignments/role-role26-no-approvers.xml rename to model/workflow-impl/src/test/resources/assignments-advanced/role-role26-no-approvers.xml diff --git a/model/workflow-impl/src/test/resources/policy/assignments/role-role27-modifications-and.xml b/model/workflow-impl/src/test/resources/assignments-advanced/role-role27-modifications-and.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/assignments/role-role27-modifications-and.xml rename to model/workflow-impl/src/test/resources/assignments-advanced/role-role27-modifications-and.xml diff --git a/model/workflow-impl/src/test/resources/policy/assignments/role-role28-modifications-or.xml b/model/workflow-impl/src/test/resources/assignments-advanced/role-role28-modifications-or.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/assignments/role-role28-modifications-or.xml rename to model/workflow-impl/src/test/resources/assignments-advanced/role-role28-modifications-or.xml diff --git a/model/workflow-impl/src/test/resources/policy/assignments/role-role29-modifications-no-items.xml b/model/workflow-impl/src/test/resources/assignments-advanced/role-role29-modifications-no-items.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/assignments/role-role29-modifications-no-items.xml rename to model/workflow-impl/src/test/resources/assignments-advanced/role-role29-modifications-no-items.xml diff --git a/model/workflow-impl/src/test/resources/policy/assignments/user-lead21.xml b/model/workflow-impl/src/test/resources/assignments-advanced/user-lead21.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/assignments/user-lead21.xml rename to model/workflow-impl/src/test/resources/assignments-advanced/user-lead21.xml diff --git a/model/workflow-impl/src/test/resources/policy/assignments/user-lead22.xml b/model/workflow-impl/src/test/resources/assignments-advanced/user-lead22.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/assignments/user-lead22.xml rename to model/workflow-impl/src/test/resources/assignments-advanced/user-lead22.xml diff --git a/model/workflow-impl/src/test/resources/policy/assignments/user-lead23.xml b/model/workflow-impl/src/test/resources/assignments-advanced/user-lead23.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/assignments/user-lead23.xml rename to model/workflow-impl/src/test/resources/assignments-advanced/user-lead23.xml diff --git a/model/workflow-impl/src/test/resources/policy/assignments/user-lead24.xml b/model/workflow-impl/src/test/resources/assignments-advanced/user-lead24.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/assignments/user-lead24.xml rename to model/workflow-impl/src/test/resources/assignments-advanced/user-lead24.xml diff --git a/model/workflow-impl/src/test/resources/policy/user-security-approver-deputy-limited.xml b/model/workflow-impl/src/test/resources/assignments-advanced/user-security-approver-deputy-limited.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/user-security-approver-deputy-limited.xml rename to model/workflow-impl/src/test/resources/assignments-advanced/user-security-approver-deputy-limited.xml diff --git a/model/workflow-impl/src/test/resources/policy/user-security-approver-deputy.xml b/model/workflow-impl/src/test/resources/assignments-advanced/user-security-approver-deputy.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/user-security-approver-deputy.xml rename to model/workflow-impl/src/test/resources/assignments-advanced/user-security-approver-deputy.xml diff --git a/model/workflow-impl/src/test/resources/policy/user-security-approver.xml b/model/workflow-impl/src/test/resources/assignments-advanced/user-security-approver.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/user-security-approver.xml rename to model/workflow-impl/src/test/resources/assignments-advanced/user-security-approver.xml diff --git a/model/workflow-impl/src/test/resources/assignments/metarole-default.xml b/model/workflow-impl/src/test/resources/assignments/metarole-default.xml new file mode 100644 index 00000000000..09509fd046a --- /dev/null +++ b/model/workflow-impl/src/test/resources/assignments/metarole-default.xml @@ -0,0 +1,45 @@ + + + + Metarole 1 'default' + Treats assignments and modifications in the default way (but with specific approver/owner relations) + + + + + add + q:any + + + + + + 1 + + + + special-approver + skip + + + + + + + diff --git a/model/workflow-impl/src/test/resources/policy/role-role1.xml b/model/workflow-impl/src/test/resources/assignments/role-role1.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/role-role1.xml rename to model/workflow-impl/src/test/resources/assignments/role-role1.xml diff --git a/model/workflow-impl/src/test/resources/policy/role-role10.xml b/model/workflow-impl/src/test/resources/assignments/role-role10.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/role-role10.xml rename to model/workflow-impl/src/test/resources/assignments/role-role10.xml diff --git a/model/workflow-impl/src/test/resources/policy/role-role10b.xml b/model/workflow-impl/src/test/resources/assignments/role-role10b.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/role-role10b.xml rename to model/workflow-impl/src/test/resources/assignments/role-role10b.xml diff --git a/model/workflow-impl/src/test/resources/policy/role-role15.xml b/model/workflow-impl/src/test/resources/assignments/role-role15.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/role-role15.xml rename to model/workflow-impl/src/test/resources/assignments/role-role15.xml diff --git a/model/workflow-impl/src/test/resources/policy/role-role1b.xml b/model/workflow-impl/src/test/resources/assignments/role-role1b.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/role-role1b.xml rename to model/workflow-impl/src/test/resources/assignments/role-role1b.xml diff --git a/model/workflow-impl/src/test/resources/policy/role-role2.xml b/model/workflow-impl/src/test/resources/assignments/role-role2.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/role-role2.xml rename to model/workflow-impl/src/test/resources/assignments/role-role2.xml diff --git a/model/workflow-impl/src/test/resources/policy/role-role2b.xml b/model/workflow-impl/src/test/resources/assignments/role-role2b.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/role-role2b.xml rename to model/workflow-impl/src/test/resources/assignments/role-role2b.xml diff --git a/model/workflow-impl/src/test/resources/policy/role-role3.xml b/model/workflow-impl/src/test/resources/assignments/role-role3.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/role-role3.xml rename to model/workflow-impl/src/test/resources/assignments/role-role3.xml diff --git a/model/workflow-impl/src/test/resources/policy/role-role3b.xml b/model/workflow-impl/src/test/resources/assignments/role-role3b.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/role-role3b.xml rename to model/workflow-impl/src/test/resources/assignments/role-role3b.xml diff --git a/model/workflow-impl/src/test/resources/policy/role-role4.xml b/model/workflow-impl/src/test/resources/assignments/role-role4.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/role-role4.xml rename to model/workflow-impl/src/test/resources/assignments/role-role4.xml diff --git a/model/workflow-impl/src/test/resources/policy/role-role4b.xml b/model/workflow-impl/src/test/resources/assignments/role-role4b.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/role-role4b.xml rename to model/workflow-impl/src/test/resources/assignments/role-role4b.xml diff --git a/model/workflow-impl/src/test/resources/policy/system-configuration-global.xml b/model/workflow-impl/src/test/resources/assignments/system-configuration-global.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/system-configuration-global.xml rename to model/workflow-impl/src/test/resources/assignments/system-configuration-global.xml diff --git a/model/workflow-impl/src/test/resources/policy/user-jack-deputy.xml b/model/workflow-impl/src/test/resources/assignments/user-jack-deputy.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/user-jack-deputy.xml rename to model/workflow-impl/src/test/resources/assignments/user-jack-deputy.xml diff --git a/model/workflow-impl/src/test/resources/policy/user-lead1-deputy1.xml b/model/workflow-impl/src/test/resources/assignments/user-lead1-deputy1.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/user-lead1-deputy1.xml rename to model/workflow-impl/src/test/resources/assignments/user-lead1-deputy1.xml diff --git a/model/workflow-impl/src/test/resources/policy/user-lead1-deputy2.xml b/model/workflow-impl/src/test/resources/assignments/user-lead1-deputy2.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/user-lead1-deputy2.xml rename to model/workflow-impl/src/test/resources/assignments/user-lead1-deputy2.xml diff --git a/model/workflow-impl/src/test/resources/policy/user-lead1.xml b/model/workflow-impl/src/test/resources/assignments/user-lead1.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/user-lead1.xml rename to model/workflow-impl/src/test/resources/assignments/user-lead1.xml diff --git a/model/workflow-impl/src/test/resources/policy/user-lead10.xml b/model/workflow-impl/src/test/resources/assignments/user-lead10.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/user-lead10.xml rename to model/workflow-impl/src/test/resources/assignments/user-lead10.xml diff --git a/model/workflow-impl/src/test/resources/policy/user-lead15.xml b/model/workflow-impl/src/test/resources/assignments/user-lead15.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/user-lead15.xml rename to model/workflow-impl/src/test/resources/assignments/user-lead15.xml diff --git a/model/workflow-impl/src/test/resources/policy/user-lead2.xml b/model/workflow-impl/src/test/resources/assignments/user-lead2.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/user-lead2.xml rename to model/workflow-impl/src/test/resources/assignments/user-lead2.xml diff --git a/model/workflow-impl/src/test/resources/policy/user-lead3.xml b/model/workflow-impl/src/test/resources/assignments/user-lead3.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/user-lead3.xml rename to model/workflow-impl/src/test/resources/assignments/user-lead3.xml diff --git a/model/workflow-impl/src/test/resources/legacy/shadow-modify-add-entitlement-guests.xml b/model/workflow-impl/src/test/resources/association/req-add-entitlement-guests.xml similarity index 100% rename from model/workflow-impl/src/test/resources/legacy/shadow-modify-add-entitlement-guests.xml rename to model/workflow-impl/src/test/resources/association/req-add-entitlement-guests.xml diff --git a/model/workflow-impl/src/test/resources/legacy/shadow-modify-add-entitlement-testers.xml b/model/workflow-impl/src/test/resources/association/req-add-entitlement-testers.xml similarity index 100% rename from model/workflow-impl/src/test/resources/legacy/shadow-modify-add-entitlement-testers.xml rename to model/workflow-impl/src/test/resources/association/req-add-entitlement-testers.xml diff --git a/model/workflow-impl/src/test/resources/common/resource-dummy.xml b/model/workflow-impl/src/test/resources/association/resource-dummy.xml similarity index 92% rename from model/workflow-impl/src/test/resources/common/resource-dummy.xml rename to model/workflow-impl/src/test/resources/association/resource-dummy.xml index f3f4a66e373..175e997e30b 100644 --- a/model/workflow-impl/src/test/resources/common/resource-dummy.xml +++ b/model/workflow-impl/src/test/resources/association/resource-dummy.xml @@ -1,6 +1,6 @@ - elisabeth - + diff --git a/model/workflow-impl/src/test/resources/legacy/group-guests-dummy.xml b/model/workflow-impl/src/test/resources/association/shadow-guests-dummy.xml similarity index 100% rename from model/workflow-impl/src/test/resources/legacy/group-guests-dummy.xml rename to model/workflow-impl/src/test/resources/association/shadow-guests-dummy.xml diff --git a/model/workflow-impl/src/test/resources/common/account-shadow-jack-dummy.xml b/model/workflow-impl/src/test/resources/association/shadow-jack-dummy.xml similarity index 98% rename from model/workflow-impl/src/test/resources/common/account-shadow-jack-dummy.xml rename to model/workflow-impl/src/test/resources/association/shadow-jack-dummy.xml index 10e4371e518..879841a944c 100644 --- a/model/workflow-impl/src/test/resources/common/account-shadow-jack-dummy.xml +++ b/model/workflow-impl/src/test/resources/association/shadow-jack-dummy.xml @@ -15,7 +15,7 @@ ~ limitations under the License. --> - jack - + diff --git a/model/workflow-impl/src/test/resources/legacy/group-testers-dummy.xml b/model/workflow-impl/src/test/resources/association/shadow-testers-dummy.xml similarity index 100% rename from model/workflow-impl/src/test/resources/legacy/group-testers-dummy.xml rename to model/workflow-impl/src/test/resources/association/shadow-testers-dummy.xml diff --git a/model/workflow-impl/src/test/resources/association/system-configuration.xml b/model/workflow-impl/src/test/resources/association/system-configuration.xml new file mode 100644 index 00000000000..10b5c15382a --- /dev/null +++ b/model/workflow-impl/src/test/resources/association/system-configuration.xml @@ -0,0 +1,79 @@ + + + + + SystemConfiguration + + File Appender + INFO + + TRACE + com.evolveum.midpoint.common.LoggingConfigurationManager + + + %date [%thread] %-5level \(%logger{46}\): %message%n + target/test.log + true + + + + + + + + + + + + + true + + true + + + + + + + + + + diff --git a/model/workflow-impl/src/test/resources/association/user-dummy-boss.xml b/model/workflow-impl/src/test/resources/association/user-dummy-boss.xml new file mode 100644 index 00000000000..a1738284a1f --- /dev/null +++ b/model/workflow-impl/src/test/resources/association/user-dummy-boss.xml @@ -0,0 +1,28 @@ + + + + + dummy-boss + + + + Dummy Boss + Dummy + Boss + diff --git a/model/workflow-impl/src/test/resources/legacy/user-elisabeth.xml b/model/workflow-impl/src/test/resources/association/user-elisabeth.xml similarity index 100% rename from model/workflow-impl/src/test/resources/legacy/user-elisabeth.xml rename to model/workflow-impl/src/test/resources/association/user-elisabeth.xml diff --git a/model/workflow-impl/src/test/resources/common/account-elaine-dummy.xml b/model/workflow-impl/src/test/resources/common/account-elaine-dummy.xml deleted file mode 100644 index f6a69f5452f..00000000000 --- a/model/workflow-impl/src/test/resources/common/account-elaine-dummy.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - elaine - - ri:AccountObjectClass - - elaine - elaine - - diff --git a/model/workflow-impl/src/test/resources/common/account-guybrush-dummy.xml b/model/workflow-impl/src/test/resources/common/account-guybrush-dummy.xml deleted file mode 100644 index 9f1d251e652..00000000000 --- a/model/workflow-impl/src/test/resources/common/account-guybrush-dummy.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - guybrush - - ri:AccountObjectClass - default - - guybrush - guybrush - Guybrush Threepwood - The Sea Monkey - - diff --git a/model/workflow-impl/src/test/resources/common/account-hbarbossa-dummy.xml b/model/workflow-impl/src/test/resources/common/account-hbarbossa-dummy.xml deleted file mode 100644 index 8bfdbdf4a1c..00000000000 --- a/model/workflow-impl/src/test/resources/common/account-hbarbossa-dummy.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - hbarbossa - - Black Pearl - - - ri:AccountObjectClass - default - - hbarbossa - - diff --git a/model/workflow-impl/src/test/resources/common/account-herman-dummy.xml b/model/workflow-impl/src/test/resources/common/account-herman-dummy.xml deleted file mode 100644 index 4af25f8cacf..00000000000 --- a/model/workflow-impl/src/test/resources/common/account-herman-dummy.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - ri:AccountObjectClass - - ht - ht - Herman Toothrot - Monkey Island - - diff --git a/model/workflow-impl/src/test/resources/common/account-herman-opendj.xml b/model/workflow-impl/src/test/resources/common/account-herman-opendj.xml deleted file mode 100644 index f178ebab481..00000000000 --- a/model/workflow-impl/src/test/resources/common/account-herman-opendj.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - ht - - ri:AccountObjectClass - default - - uid=ht, ou=People, dc=example,dc=com - ht - Herman Toothrot - Herman - Toothrot - Monkey Island - - diff --git a/model/workflow-impl/src/test/resources/common/account-shadow-guybrush-dummy.xml b/model/workflow-impl/src/test/resources/common/account-shadow-guybrush-dummy.xml deleted file mode 100644 index a5539316dd7..00000000000 --- a/model/workflow-impl/src/test/resources/common/account-shadow-guybrush-dummy.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - guybrush - - ri:AccountObjectClass - default - - guybrush - guybrush - - diff --git a/model/workflow-impl/src/test/resources/common/connector-dummy.xml b/model/workflow-impl/src/test/resources/common/connector-dummy.xml deleted file mode 100644 index 6444dc5a478..00000000000 --- a/model/workflow-impl/src/test/resources/common/connector-dummy.xml +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - ICF com.evolveum.icf.dummy.connector.DummyConnector - http://midpoint.evolveum.com/xml/ns/public/connector/icf-1 - com.evolveum.icf.dummy.connector.DummyConnector - 2.0 - com.evolveum.icf.dummy - http://midpoint.evolveum.com/xml/ns/public/connector/icf-1/bundle/com.evolveum.icf.dummy/com.evolveum.icf.dummy.connector.DummyConnector - - - - - - - - - - - - UI_INSTANCE_USELESS_STRING - UI_INSTANCE_USELESS_STRING - - - - - - - Instance identifier - Instance identifier - - - - - - - UI_SUPPORT_SCHEMA - UI_SUPPORT_SCHEMA - - - - - - - UI_INSTANCE_USELESS_GUARDED_STRING - UI_INSTANCE_USELESS_GUARDED_STRING - - - - - - - - - - - qn915:ConnectorPoolConfigurationType - - - - - - - - qn915:TimeoutsType - - - - - - - tns:ConfigurationPropertiesType - - - - - - - - - - - - - - - - - diff --git a/model/workflow-impl/src/test/resources/common/password-policy-global.xml b/model/workflow-impl/src/test/resources/common/password-policy-global.xml deleted file mode 100644 index 704944e8ebc..00000000000 --- a/model/workflow-impl/src/test/resources/common/password-policy-global.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - Global Password Policy - Global password policy - - 999 - 9 - 0 - 0 - 0 - - - Testing string policy - - 5 - 8 - 3 - true - - - Alphas - 1 - 5 - false - - abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ - - - - Numbers - 1 - 5 - false - - 1234567890 - - - - - diff --git a/model/workflow-impl/src/test/resources/common/security-policy.xml b/model/workflow-impl/src/test/resources/common/security-policy.xml deleted file mode 100644 index d37e8b9dc97..00000000000 --- a/model/workflow-impl/src/test/resources/common/security-policy.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - Security Policy - - - P30D - 3 - PT3M - PT15M - - - - http://midpoint.evolveum.com/xml/ns/public/security/question-2#q001 - true - How much wood would a woodchuck chuck if woodchuck could chuck wood? - - - http://midpoint.evolveum.com/xml/ns/public/security/question-2#q002 - What is your mother's best friend's uncle's grandaughter's dog's mother maiden name? - - - - diff --git a/model/workflow-impl/src/test/resources/common/system-configuration.xml b/model/workflow-impl/src/test/resources/common/system-configuration.xml index 633890fbf8f..94f4a0811dd 100644 --- a/model/workflow-impl/src/test/resources/common/system-configuration.xml +++ b/model/workflow-impl/src/test/resources/common/system-configuration.xml @@ -32,103 +32,58 @@ true - - - - - recipient@evolveum.com - - dummy:simpleUserNotifier - - - - - workflowProcessEvent - - recipient@evolveum.com - - true - dummy:simpleWorkflowNotifier-Processes - - - - - workItemEvent - - recipient@evolveum.com - - dummy:simpleWorkflowNotifier-WorkItems - - - - target/mail-notifications.log - - - - - - - - - - - - - true - - true - - - - - - - + try { + return event.isSuccess() + } catch (Exception e) { + TestAssignmentsAdvanced.exception = e + throw e + } + + + + + + + + + + + + + + + + - - false - - primaryScenario - - - - MyGreatPrimaryProcess - - - secondaryScenario - - - - ApprovingDummyResourceChangesProcess - approvingDummyResourceChangesScenarioBean - - diff --git a/model/workflow-impl/src/test/resources/common/user-barbossa.xml b/model/workflow-impl/src/test/resources/common/user-barbossa.xml deleted file mode 100644 index 4943e9a0b35..00000000000 --- a/model/workflow-impl/src/test/resources/common/user-barbossa.xml +++ /dev/null @@ -1,100 +0,0 @@ - - - - barbossa - - - - Brethren account construction - - - - ri:ship - - - Pirate Brethren, Inc. - - - - - ri:location - - - $c:user/c:locality - - - - - - - - ri:weapon - - - Sword - - - - - - - - - Undead monkey account construction - - - - ri:weapon - - - Undead Monkey - - - - - - - - - Hector Barbossa - Hector - Barbossa - Caribbean - - - - - deadjacktellnotales - - - - - - - diff --git a/model/workflow-impl/src/test/resources/common/user-elaine.xml b/model/workflow-impl/src/test/resources/common/user-elaine.xml deleted file mode 100644 index acb8d6db496..00000000000 --- a/model/workflow-impl/src/test/resources/common/user-elaine.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - elaine - - - - - - - - - - - - - - - - - - - - - - - - Elaine Marley - Elaine - Marley - Melee Island - - diff --git a/model/workflow-impl/src/test/resources/common/user-guybrush.xml b/model/workflow-impl/src/test/resources/common/user-guybrush.xml deleted file mode 100644 index e6ec4495d32..00000000000 --- a/model/workflow-impl/src/test/resources/common/user-guybrush.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - guybrush - - - - Guybrush Threepwood - Guybrush - Threepwood - Melee Island - - - - - - - - - - - diff --git a/model/workflow-impl/src/test/resources/common/user-largo.xml b/model/workflow-impl/src/test/resources/common/user-largo.xml deleted file mode 100644 index 839f8cfd9d0..00000000000 --- a/model/workflow-impl/src/test/resources/common/user-largo.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - largo - - Largo - LaGrande - PIRATE - - - - dead123 - - - - diff --git a/model/workflow-impl/src/test/resources/common/user-template.xml b/model/workflow-impl/src/test/resources/common/user-template.xml deleted file mode 100644 index f1a4a8215b8..00000000000 --- a/model/workflow-impl/src/test/resources/common/user-template.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - Default User Template - - weak - - $user/givenName - - - $user/familyName - - - - - - fullName - - - diff --git a/model/workflow-impl/src/test/resources/policy/role-role4a.xml b/model/workflow-impl/src/test/resources/delegation/role-prince.xml similarity index 87% rename from model/workflow-impl/src/test/resources/policy/role-role4a.xml rename to model/workflow-impl/src/test/resources/delegation/role-prince.xml index 5d80e1bd4b3..84aec63fddd 100644 --- a/model/workflow-impl/src/test/resources/policy/role-role4a.xml +++ b/model/workflow-impl/src/test/resources/delegation/role-prince.xml @@ -15,7 +15,6 @@ --> - Role4a - true + oid="9252328b-b0b4-458f-9397-31b67291d566"> + Prince diff --git a/model/workflow-impl/src/test/resources/policy/secondary/user-richard.xml b/model/workflow-impl/src/test/resources/delegation/user-girth.xml similarity index 68% rename from model/workflow-impl/src/test/resources/policy/secondary/user-richard.xml rename to model/workflow-impl/src/test/resources/delegation/user-girth.xml index b3f7ac714b5..fc09bf276c6 100644 --- a/model/workflow-impl/src/test/resources/policy/secondary/user-richard.xml +++ b/model/workflow-impl/src/test/resources/delegation/user-girth.xml @@ -1,5 +1,5 @@ - - richard - - + + + girth + + - \ No newline at end of file + diff --git a/model/workflow-impl/src/test/resources/delegation/user-keen.xml b/model/workflow-impl/src/test/resources/delegation/user-keen.xml new file mode 100644 index 00000000000..a40c2a189c3 --- /dev/null +++ b/model/workflow-impl/src/test/resources/delegation/user-keen.xml @@ -0,0 +1,23 @@ + + + + keen + + + + diff --git a/model/workflow-impl/src/test/resources/policy/secondary/role-ordinary-1.xml b/model/workflow-impl/src/test/resources/delegation/user-longshanks.xml similarity index 56% rename from model/workflow-impl/src/test/resources/policy/secondary/role-ordinary-1.xml rename to model/workflow-impl/src/test/resources/delegation/user-longshanks.xml index 36e5d4cfba5..3f187ddd791 100644 --- a/model/workflow-impl/src/test/resources/policy/secondary/role-ordinary-1.xml +++ b/model/workflow-impl/src/test/resources/delegation/user-longshanks.xml @@ -1,5 +1,5 @@ - - ordinary-1 - - - approval - - - - - - - - - + + + longshanks + + - + + + + diff --git a/model/workflow-impl/src/test/resources/policy/escalation/metarole-escalated.xml b/model/workflow-impl/src/test/resources/escalation/metarole-escalated.xml similarity index 86% rename from model/workflow-impl/src/test/resources/policy/escalation/metarole-escalated.xml rename to model/workflow-impl/src/test/resources/escalation/metarole-escalated.xml index 9957656b68d..4f427fdf953 100644 --- a/model/workflow-impl/src/test/resources/policy/escalation/metarole-escalated.xml +++ b/model/workflow-impl/src/test/resources/escalation/metarole-escalated.xml @@ -29,7 +29,7 @@ - + P14D First, send a notification @@ -48,10 +48,10 @@ - + addAssignees - escalation-to-lead2 - Escalated to lead2 + escalation-to-bobek + Escalated to bobek diff --git a/model/workflow-impl/src/test/resources/policy/escalation/role-e1.xml b/model/workflow-impl/src/test/resources/escalation/role-e1.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/escalation/role-e1.xml rename to model/workflow-impl/src/test/resources/escalation/role-e1.xml diff --git a/model/workflow-impl/src/test/resources/policy/escalation/role-e2.xml b/model/workflow-impl/src/test/resources/escalation/role-e2.xml similarity index 87% rename from model/workflow-impl/src/test/resources/policy/escalation/role-e2.xml rename to model/workflow-impl/src/test/resources/escalation/role-e2.xml index b3a6c86290a..f0560164584 100644 --- a/model/workflow-impl/src/test/resources/policy/escalation/role-e2.xml +++ b/model/workflow-impl/src/test/resources/escalation/role-e2.xml @@ -28,8 +28,8 @@ - - + + firstDecides P3D @@ -42,8 +42,8 @@ - - - - - diff --git a/model/workflow-impl/src/test/resources/legacy/role12.xml b/model/workflow-impl/src/test/resources/legacy/role12.xml deleted file mode 100644 index 5293b95b121..00000000000 --- a/model/workflow-impl/src/test/resources/legacy/role12.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - Role12 - - - - - - allMustApprove - approve - - - - diff --git a/model/workflow-impl/src/test/resources/legacy/role13.xml b/model/workflow-impl/src/test/resources/legacy/role13.xml deleted file mode 100644 index a4b87133adc..00000000000 --- a/model/workflow-impl/src/test/resources/legacy/role13.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - Role13 - - - - - - firstDecides - approve - - - - diff --git a/model/workflow-impl/src/test/resources/legacy/user-bill.xml b/model/workflow-impl/src/test/resources/legacy/user-bill.xml deleted file mode 100644 index 6395fe81452..00000000000 --- a/model/workflow-impl/src/test/resources/legacy/user-bill.xml +++ /dev/null @@ -1,110 +0,0 @@ - - - - bill - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Bill Turner - Bill - Turner - Caribbean - - - - - aaaaaaa - - - - - - - diff --git a/model/workflow-impl/src/test/resources/legacy/user-elisabeth-modify-add-assignment-role1.xml b/model/workflow-impl/src/test/resources/legacy/user-elisabeth-modify-add-assignment-role1.xml deleted file mode 100644 index 359a91fdc85..00000000000 --- a/model/workflow-impl/src/test/resources/legacy/user-elisabeth-modify-add-assignment-role1.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - c0c010c0-d34d-b33f-f00d-111111112222 - - add - c:assignment - - - - 2015-02-28T00:00:00+01:00 - - - - diff --git a/model/workflow-impl/src/test/resources/legacy/user-jack-modify-activation-disable.xml b/model/workflow-impl/src/test/resources/legacy/user-jack-modify-activation-disable.xml deleted file mode 100644 index 36c631730b9..00000000000 --- a/model/workflow-impl/src/test/resources/legacy/user-jack-modify-activation-disable.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - c0c010c0-d34d-b33f-f00d-111111111111 - - replace - c:activation/c:administrativeStatus - disabled - - - diff --git a/model/workflow-impl/src/test/resources/legacy/user-jack-modify-activation-enable.xml b/model/workflow-impl/src/test/resources/legacy/user-jack-modify-activation-enable.xml deleted file mode 100644 index 27c048b38d3..00000000000 --- a/model/workflow-impl/src/test/resources/legacy/user-jack-modify-activation-enable.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - c0c010c0-d34d-b33f-f00d-111111111111 - - replace - c:activation/c:administrativeStatus - enabled - - - diff --git a/model/workflow-impl/src/test/resources/legacy/user-jack-modify-add-assignment-dummy.xml b/model/workflow-impl/src/test/resources/legacy/user-jack-modify-add-assignment-dummy.xml deleted file mode 100644 index 8516eca784c..00000000000 --- a/model/workflow-impl/src/test/resources/legacy/user-jack-modify-add-assignment-dummy.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - c0c010c0-d34d-b33f-f00d-111111111111 - - add - c:assignment - - - Dummy account construction - - account - - - - diff --git a/model/workflow-impl/src/test/resources/legacy/user-jack-modify-add-assignment-role-r1.xml b/model/workflow-impl/src/test/resources/legacy/user-jack-modify-add-assignment-role-r1.xml deleted file mode 100644 index bceac383104..00000000000 --- a/model/workflow-impl/src/test/resources/legacy/user-jack-modify-add-assignment-role-r1.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - c0c010c0-d34d-b33f-f00d-111111111111 - - add - c:assignment - - - - - diff --git a/model/workflow-impl/src/test/resources/legacy/user-jack-modify-add-assignment-role1.xml b/model/workflow-impl/src/test/resources/legacy/user-jack-modify-add-assignment-role1.xml deleted file mode 100644 index 881bb0fdc01..00000000000 --- a/model/workflow-impl/src/test/resources/legacy/user-jack-modify-add-assignment-role1.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - c0c010c0-d34d-b33f-f00d-111111111111 - - add - c:assignment - - - - - diff --git a/model/workflow-impl/src/test/resources/legacy/user-jack-modify-add-assignment-role10.xml b/model/workflow-impl/src/test/resources/legacy/user-jack-modify-add-assignment-role10.xml deleted file mode 100644 index 32272c0ad49..00000000000 --- a/model/workflow-impl/src/test/resources/legacy/user-jack-modify-add-assignment-role10.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - c0c010c0-d34d-b33f-f00d-111111111111 - - add - c:assignment - - - - - diff --git a/model/workflow-impl/src/test/resources/legacy/user-jack-modify-add-assignment-role2-change-gn.xml b/model/workflow-impl/src/test/resources/legacy/user-jack-modify-add-assignment-role2-change-gn.xml deleted file mode 100644 index 8f39f673569..00000000000 --- a/model/workflow-impl/src/test/resources/legacy/user-jack-modify-add-assignment-role2-change-gn.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - c0c010c0-d34d-b33f-f00d-111111111111 - - add - c:assignment - - - - - - replace - c:givenName - JACK - - diff --git a/model/workflow-impl/src/test/resources/legacy/user-jack-modify-add-assignment-role3-change-gn2.xml b/model/workflow-impl/src/test/resources/legacy/user-jack-modify-add-assignment-role3-change-gn2.xml deleted file mode 100644 index 4dc3898a1f9..00000000000 --- a/model/workflow-impl/src/test/resources/legacy/user-jack-modify-add-assignment-role3-change-gn2.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - c0c010c0-d34d-b33f-f00d-111111111111 - - add - c:assignment - - - - - - replace - c:givenName - J-A-C-K - - diff --git a/model/workflow-impl/src/test/resources/legacy/user-jack-modify-add-assignment-roles2-3-4.xml b/model/workflow-impl/src/test/resources/legacy/user-jack-modify-add-assignment-roles2-3-4.xml deleted file mode 100644 index bd6d92a66ed..00000000000 --- a/model/workflow-impl/src/test/resources/legacy/user-jack-modify-add-assignment-roles2-3-4.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - c0c010c0-d34d-b33f-f00d-111111111111 - - add - c:assignment - - - - - - - - - - - diff --git a/model/workflow-impl/src/test/resources/legacy/user-jack-modify-change-password-2.xml b/model/workflow-impl/src/test/resources/legacy/user-jack-modify-change-password-2.xml deleted file mode 100644 index 8dc4b25d094..00000000000 --- a/model/workflow-impl/src/test/resources/legacy/user-jack-modify-change-password-2.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - c0c010c0-d34d-b33f-f00d-111111111111 - - replace - c:credentials/c:password/c:value - - jack123456-2 - - - diff --git a/model/workflow-impl/src/test/resources/legacy/user-jack-modify-change-password.xml b/model/workflow-impl/src/test/resources/legacy/user-jack-modify-change-password.xml deleted file mode 100644 index 5884e070f91..00000000000 --- a/model/workflow-impl/src/test/resources/legacy/user-jack-modify-change-password.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - c0c010c0-d34d-b33f-f00d-111111111111 - - replace - c:credentials/c:password/c:value - - jack123456 - - - diff --git a/model/workflow-impl/src/test/resources/legacy/users-and-roles.xml b/model/workflow-impl/src/test/resources/legacy/users-and-roles.xml deleted file mode 100644 index bb37ef4ecb3..00000000000 --- a/model/workflow-impl/src/test/resources/legacy/users-and-roles.xml +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - - dummyboss - - - - Dummy Boss - Dummy - Boss - - - - r1boss - - - - Role1 Boss - Role1 - Boss - - - - r2boss - - - - Role2 Boss - Role2 - Boss - john@127.0.0.1 - - - - r3boss - - - - Role3 Boss - Role3 - Boss - john@127.0.0.1 - - - - Role1 - - - disabled - - - - - Role2 - - - - - - c:name - r2boss - - - - - - - - - Role3 - - Role3 Boss' OID - - - - - - Role4 - - - - Role R10 - - - - - - - - - - - - Role R10 skip - - - - - - - - - - - diff --git a/model/workflow-impl/src/test/resources/policy/metarole-approve-unassign.xml b/model/workflow-impl/src/test/resources/miscellaneous/metarole-approve-unassign.xml similarity index 84% rename from model/workflow-impl/src/test/resources/policy/metarole-approve-unassign.xml rename to model/workflow-impl/src/test/resources/miscellaneous/metarole-approve-unassign.xml index 9282b468986..1d18d23e0b9 100644 --- a/model/workflow-impl/src/test/resources/policy/metarole-approve-unassign.xml +++ b/model/workflow-impl/src/test/resources/miscellaneous/metarole-approve-unassign.xml @@ -1,5 +1,5 @@ metarole-approve-unassign @@ -34,7 +33,6 @@ approver - skip diff --git a/model/workflow-impl/src/test/resources/policy/metarole-prune-test2x-roles.xml b/model/workflow-impl/src/test/resources/miscellaneous/metarole-prize.xml similarity index 72% rename from model/workflow-impl/src/test/resources/policy/metarole-prune-test2x-roles.xml rename to model/workflow-impl/src/test/resources/miscellaneous/metarole-prize.xml index 3e78caed844..2f49418b02f 100644 --- a/model/workflow-impl/src/test/resources/policy/metarole-prune-test2x-roles.xml +++ b/model/workflow-impl/src/test/resources/miscellaneous/metarole-prize.xml @@ -1,6 +1,6 @@ + @@ -33,10 +33,10 @@ - pruning-test2x-roles-2a + pruning-silver - + @@ -46,10 +46,10 @@ - pruning-test2x-roles-2b + pruning-bronze - + diff --git a/model/workflow-impl/src/test/resources/policy/role-focus-assignment-mapping.xml b/model/workflow-impl/src/test/resources/miscellaneous/role-assigning-captain.xml similarity index 83% rename from model/workflow-impl/src/test/resources/policy/role-focus-assignment-mapping.xml rename to model/workflow-impl/src/test/resources/miscellaneous/role-assigning-captain.xml index 512d99ae3bf..e22f18ccb9a 100644 --- a/model/workflow-impl/src/test/resources/policy/role-focus-assignment-mapping.xml +++ b/model/workflow-impl/src/test/resources/miscellaneous/role-assigning-captain.xml @@ -1,5 +1,5 @@ + diff --git a/model/workflow-impl/src/test/resources/policy/role-role3a.xml b/model/workflow-impl/src/test/resources/miscellaneous/role-bronze.xml similarity index 74% rename from model/workflow-impl/src/test/resources/policy/role-role3a.xml rename to model/workflow-impl/src/test/resources/miscellaneous/role-bronze.xml index 672ce5a0858..88c96e2c278 100644 --- a/model/workflow-impl/src/test/resources/policy/role-role3a.xml +++ b/model/workflow-impl/src/test/resources/miscellaneous/role-bronze.xml @@ -1,5 +1,5 @@ - Role3a - true - + oid="f16f4dd7-2830-4d0a-b6ed-9fbf253dbaf3"> + bronze + + + diff --git a/model/workflow-impl/src/test/resources/policy/role-role2a.xml b/model/workflow-impl/src/test/resources/miscellaneous/role-captain.xml similarity index 74% rename from model/workflow-impl/src/test/resources/policy/role-role2a.xml rename to model/workflow-impl/src/test/resources/miscellaneous/role-captain.xml index b05f0a03340..8f45f729202 100644 --- a/model/workflow-impl/src/test/resources/policy/role-role2a.xml +++ b/model/workflow-impl/src/test/resources/miscellaneous/role-captain.xml @@ -1,5 +1,5 @@ - Role2a - true - + oid="15a99cf1-5886-44d4-8aaf-7e1f46ccec36"> + captain diff --git a/model/workflow-impl/src/test/resources/policy/role-role1a.xml b/model/workflow-impl/src/test/resources/miscellaneous/role-gold.xml similarity index 61% rename from model/workflow-impl/src/test/resources/policy/role-role1a.xml rename to model/workflow-impl/src/test/resources/miscellaneous/role-gold.xml index 2f08aa2b648..fbaa6cca880 100644 --- a/model/workflow-impl/src/test/resources/policy/role-role1a.xml +++ b/model/workflow-impl/src/test/resources/miscellaneous/role-gold.xml @@ -1,5 +1,5 @@ - Role1a - - disabled - - - - - true - + oid="0b3ad53e-7c1d-41d0-a447-ce94cd25c46a"> + gold + + + + + + diff --git a/model/workflow-impl/src/test/resources/policy/role-role10a.xml b/model/workflow-impl/src/test/resources/miscellaneous/role-sailor.xml similarity index 71% rename from model/workflow-impl/src/test/resources/policy/role-role10a.xml rename to model/workflow-impl/src/test/resources/miscellaneous/role-sailor.xml index 63d2b9d3fa4..38df16d7120 100644 --- a/model/workflow-impl/src/test/resources/policy/role-role10a.xml +++ b/model/workflow-impl/src/test/resources/miscellaneous/role-sailor.xml @@ -1,5 +1,5 @@ - - Role10a - Induced by Role1a - - true + + sailor diff --git a/model/workflow-impl/src/test/resources/miscellaneous/role-silver.xml b/model/workflow-impl/src/test/resources/miscellaneous/role-silver.xml new file mode 100644 index 00000000000..79cacbfbe6a --- /dev/null +++ b/model/workflow-impl/src/test/resources/miscellaneous/role-silver.xml @@ -0,0 +1,23 @@ + + + + silver + + + + diff --git a/model/workflow-impl/src/test/resources/policy/user-template-assigning-role1a-after.xml b/model/workflow-impl/src/test/resources/miscellaneous/template-assigning-captain-after.xml similarity index 83% rename from model/workflow-impl/src/test/resources/policy/user-template-assigning-role1a-after.xml rename to model/workflow-impl/src/test/resources/miscellaneous/template-assigning-captain-after.xml index 3aa9a7c73c5..085bcca8f1f 100644 --- a/model/workflow-impl/src/test/resources/policy/user-template-assigning-role1a-after.xml +++ b/model/workflow-impl/src/test/resources/miscellaneous/template-assigning-captain-after.xml @@ -1,6 +1,6 @@ + diff --git a/model/workflow-impl/src/test/resources/policy/user-template-assigning-role1a.xml b/model/workflow-impl/src/test/resources/miscellaneous/template-assigning-captain.xml similarity index 83% rename from model/workflow-impl/src/test/resources/policy/user-template-assigning-role1a.xml rename to model/workflow-impl/src/test/resources/miscellaneous/template-assigning-captain.xml index 16fb823f9d2..4c3bc52a51b 100644 --- a/model/workflow-impl/src/test/resources/policy/user-template-assigning-role1a.xml +++ b/model/workflow-impl/src/test/resources/miscellaneous/template-assigning-captain.xml @@ -1,6 +1,6 @@ + diff --git a/model/workflow-impl/src/test/resources/miscellaneous/user-scott.xml b/model/workflow-impl/src/test/resources/miscellaneous/user-scott.xml new file mode 100644 index 00000000000..8b8a0aa432b --- /dev/null +++ b/model/workflow-impl/src/test/resources/miscellaneous/user-scott.xml @@ -0,0 +1,38 @@ + + + + scott + + + + + + + + + + + + + + + + + + + diff --git a/model/workflow-impl/src/test/resources/model-contexts/context-dummy-resource.xml b/model/workflow-impl/src/test/resources/model-contexts/context-dummy-resource.xml deleted file mode 100644 index 370c99a75c3..00000000000 --- a/model/workflow-impl/src/test/resources/model-contexts/context-dummy-resource.xml +++ /dev/null @@ -1,353 +0,0 @@ - - - secondary - - - - jack - jack - - - Black Pearl - mouth - pistol - - - enabled - - - Jack Sparrow - jack sparrow - - - Jack - jack - - - Sparrow - sparrow - - - Jackie - jackie - - - Cpt. - cpt - - - PhD. - phd - - jack.sparrow@evolveum.com - 555-1234 - emp1234 - CAPTAIN - - Caribbean - caribbean - - - - - - - - - 4HXeUejV93Vd3JuIZz7sbs5bVko= - - - QQJocejnP6CzcT43Ji01eImBqUtecVpR60H41erwopQLuCNWStGpOpZtc0OjgCz3L9LzYzQxb7AvpjF/Ud1ooA== - - - - - - - - - - - - jack - jack - - - Black Pearl - mouth - pistol - - - enabled - enabled - 2014-01-07T17:39:51.444+01:00 - - - Jack Sparrow - jack sparrow - - - Jack - jack - - - Sparrow - sparrow - - - Jackie - jackie - - - Cpt. - cpt - - - PhD. - phd - - jack.sparrow@evolveum.com - 555-1234 - emp1234 - CAPTAIN - - Caribbean - caribbean - - - - - - - - - 4HXeUejV93Vd3JuIZz7sbs5bVko= - - - QQJocejnP6CzcT43Ji01eImBqUtecVpR60H41erwopQLuCNWStGpOpZtc0OjgCz3L9LzYzQxb7AvpjF/Ud1ooA== - - - - - - - - - - com.evolveum.midpoint.xml.ns._public.common.common_3.UserType - c0c010c0-d34d-b33f-f00d-111111111111 - - - - modify - c:UserType - c0c010c0-d34d-b33f-f00d-111111111111 - - replace - c:activation - - enabled - - - - replace - c:activation - - 2014-01-07T17:39:51.444+01:00 - - - - - - - - com.evolveum.midpoint.xml.ns._public.common.common_3.UserType - false - 2 - 0 - false - true - false - - 2014-01-07T17:39:51.426+01:00 - - - diff --git a/model/workflow-impl/src/test/resources/policy/object/metarole-constraints.xml b/model/workflow-impl/src/test/resources/objects-advanced/metarole-constraints.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/object/metarole-constraints.xml rename to model/workflow-impl/src/test/resources/objects-advanced/metarole-constraints.xml diff --git a/model/workflow-impl/src/test/resources/policy/object/role-employee.xml b/model/workflow-impl/src/test/resources/objects-advanced/role-employee.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/object/role-employee.xml rename to model/workflow-impl/src/test/resources/objects-advanced/role-employee.xml diff --git a/model/workflow-impl/src/test/resources/policy/object/system-configuration.xml b/model/workflow-impl/src/test/resources/objects-advanced/system-configuration.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/object/system-configuration.xml rename to model/workflow-impl/src/test/resources/objects-advanced/system-configuration.xml diff --git a/model/workflow-impl/src/test/resources/policy/object/user-employee-owner.xml b/model/workflow-impl/src/test/resources/objects-advanced/user-employee-owner.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/object/user-employee-owner.xml rename to model/workflow-impl/src/test/resources/objects-advanced/user-employee-owner.xml diff --git a/model/workflow-impl/src/test/resources/policy/lifecycle/global-policy-rules.xml b/model/workflow-impl/src/test/resources/objects/global-policy-rules.xml similarity index 89% rename from model/workflow-impl/src/test/resources/policy/lifecycle/global-policy-rules.xml rename to model/workflow-impl/src/test/resources/objects/global-policy-rules.xml index dd550ef650d..5f388cf640d 100644 --- a/model/workflow-impl/src/test/resources/policy/lifecycle/global-policy-rules.xml +++ b/model/workflow-impl/src/test/resources/objects/global-policy-rules.xml @@ -79,7 +79,7 @@ 20 - + @@ -113,7 +113,7 @@ 100 - + @@ -122,31 +122,31 @@ - modification-of-approverRef + modification-of-inducements - Changing approverRef + Changing inducement add modify - approverRef + inducement - approverRef + inducement approve-by-administrator 100 - + diff --git a/model/workflow-impl/src/test/resources/objects/user-bob.xml b/model/workflow-impl/src/test/resources/objects/user-bob.xml new file mode 100644 index 00000000000..cc50306979e --- /dev/null +++ b/model/workflow-impl/src/test/resources/objects/user-bob.xml @@ -0,0 +1,23 @@ + + + + bob + + + + diff --git a/model/workflow-impl/src/test/resources/policy/lifecycle/user-judge-owner.xml b/model/workflow-impl/src/test/resources/objects/user-judge-owner.xml similarity index 73% rename from model/workflow-impl/src/test/resources/policy/lifecycle/user-judge-owner.xml rename to model/workflow-impl/src/test/resources/objects/user-judge-owner.xml index 7f6cd9e9f57..57c3cb53f4c 100644 --- a/model/workflow-impl/src/test/resources/policy/lifecycle/user-judge-owner.xml +++ b/model/workflow-impl/src/test/resources/objects/user-judge-owner.xml @@ -15,12 +15,7 @@ ~ limitations under the License. --> + xmlns='http://midpoint.evolveum.com/xml/ns/public/common/common-3'> judge-owner Judge owner diff --git a/model/workflow-impl/src/test/resources/objects/user-jupiter.xml b/model/workflow-impl/src/test/resources/objects/user-jupiter.xml new file mode 100644 index 00000000000..b107db44f66 --- /dev/null +++ b/model/workflow-impl/src/test/resources/objects/user-jupiter.xml @@ -0,0 +1,23 @@ + + + + jupiter + + + + diff --git a/model/workflow-impl/src/test/resources/policy/secondary/user-peter.xml b/model/workflow-impl/src/test/resources/objects/user-peter.xml similarity index 70% rename from model/workflow-impl/src/test/resources/policy/secondary/user-peter.xml rename to model/workflow-impl/src/test/resources/objects/user-peter.xml index ada43ca282a..89b859ee480 100644 --- a/model/workflow-impl/src/test/resources/policy/secondary/user-peter.xml +++ b/model/workflow-impl/src/test/resources/objects/user-peter.xml @@ -1,5 +1,5 @@ - + + peter - - + + - \ No newline at end of file + diff --git a/model/workflow-impl/src/test/resources/policy/lifecycle/user-pirate-owner.xml b/model/workflow-impl/src/test/resources/objects/user-pirate-owner.xml similarity index 73% rename from model/workflow-impl/src/test/resources/policy/lifecycle/user-pirate-owner.xml rename to model/workflow-impl/src/test/resources/objects/user-pirate-owner.xml index 674ae2ffcea..b2e43b9946c 100644 --- a/model/workflow-impl/src/test/resources/policy/lifecycle/user-pirate-owner.xml +++ b/model/workflow-impl/src/test/resources/objects/user-pirate-owner.xml @@ -15,12 +15,7 @@ ~ limitations under the License. --> + xmlns='http://midpoint.evolveum.com/xml/ns/public/common/common-3'> pirate-owner Pirate owner diff --git a/model/workflow-impl/src/test/resources/policy/role-role50a-slow.xml b/model/workflow-impl/src/test/resources/parallel/role-role50a-slow.xml similarity index 86% rename from model/workflow-impl/src/test/resources/policy/role-role50a-slow.xml rename to model/workflow-impl/src/test/resources/parallel/role-role50a-slow.xml index b506adcb10f..0f3ba78ec30 100644 --- a/model/workflow-impl/src/test/resources/policy/role-role50a-slow.xml +++ b/model/workflow-impl/src/test/resources/parallel/role-role50a-slow.xml @@ -1,5 +1,5 @@ + diff --git a/model/workflow-impl/src/test/resources/policy/role-role52a-slow.xml b/model/workflow-impl/src/test/resources/parallel/role-role52a-slow.xml similarity index 83% rename from model/workflow-impl/src/test/resources/policy/role-role52a-slow.xml rename to model/workflow-impl/src/test/resources/parallel/role-role52a-slow.xml index 94e3ddff998..017f73dd3f6 100644 --- a/model/workflow-impl/src/test/resources/policy/role-role52a-slow.xml +++ b/model/workflow-impl/src/test/resources/parallel/role-role52a-slow.xml @@ -1,5 +1,5 @@ + diff --git a/model/workflow-impl/src/test/resources/policy/role-role53a-slow.xml b/model/workflow-impl/src/test/resources/parallel/role-role53a-slow.xml similarity index 83% rename from model/workflow-impl/src/test/resources/policy/role-role53a-slow.xml rename to model/workflow-impl/src/test/resources/parallel/role-role53a-slow.xml index 39899cbc74d..e4647c0888c 100644 --- a/model/workflow-impl/src/test/resources/policy/role-role53a-slow.xml +++ b/model/workflow-impl/src/test/resources/parallel/role-role53a-slow.xml @@ -1,5 +1,5 @@ + diff --git a/model/workflow-impl/src/test/resources/policy/user-bob.xml b/model/workflow-impl/src/test/resources/parallel/user-bob.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/user-bob.xml rename to model/workflow-impl/src/test/resources/parallel/user-bob.xml diff --git a/model/workflow-impl/src/test/resources/policy/user-chuck.xml b/model/workflow-impl/src/test/resources/parallel/user-chuck.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/user-chuck.xml rename to model/workflow-impl/src/test/resources/parallel/user-chuck.xml diff --git a/model/workflow-impl/src/test/resources/policy/secondary/role-ordinary-2.xml b/model/workflow-impl/src/test/resources/policy/secondary/role-ordinary-2.xml deleted file mode 100644 index a8ddf32d716..00000000000 --- a/model/workflow-impl/src/test/resources/policy/secondary/role-ordinary-2.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - ordinary-2 - - - approval - - - - - - - - - - - diff --git a/model/workflow-impl/src/test/resources/policy/secondary/role-prize-bronze.xml b/model/workflow-impl/src/test/resources/policy/secondary/role-prize-bronze.xml deleted file mode 100644 index a90fa492be0..00000000000 --- a/model/workflow-impl/src/test/resources/policy/secondary/role-prize-bronze.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - Prize: Bronze - - - prize exclusion: bronze-gold - - - - - - - - - - - - - prize exclusion: bronze-silver - - - - - - - - - - - - - approval - - - - - - - - - - - diff --git a/model/workflow-impl/src/test/resources/policy/secondary/role-prize-gold.xml b/model/workflow-impl/src/test/resources/policy/secondary/role-prize-gold.xml deleted file mode 100644 index 92289d1c536..00000000000 --- a/model/workflow-impl/src/test/resources/policy/secondary/role-prize-gold.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - Prize: Gold - - - prize exclusion: gold-silver - - - - - - - - - - - - - prize exclusion: gold-bronze - - - - - - - - - - - - - approval - - - - - - - - - - - diff --git a/model/workflow-impl/src/test/resources/policy/secondary/role-prize-silver.xml b/model/workflow-impl/src/test/resources/policy/secondary/role-prize-silver.xml deleted file mode 100644 index 992a6277a2a..00000000000 --- a/model/workflow-impl/src/test/resources/policy/secondary/role-prize-silver.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - Prize: Silver - - - prize exclusion: silver-gold - - - - - - - - - - - - - prize exclusion: silver-bronze - - - - - - - - - - - - - approval - - - - - - - - - - - diff --git a/model/workflow-impl/src/test/resources/policy/system-configuration.xml b/model/workflow-impl/src/test/resources/policy/system-configuration.xml deleted file mode 100644 index a7f86e7e3d0..00000000000 --- a/model/workflow-impl/src/test/resources/policy/system-configuration.xml +++ /dev/null @@ -1,88 +0,0 @@ - - - - - SystemConfiguration - - File Appender - INFO - - TRACE - com.evolveum.midpoint.common.LoggingConfigurationManager - - - %date [%thread] %-5level \(%logger{46}\): %message%n - target/test.log - true - - - - - - workflowProcessEvent - - recipient@evolveum.com - - dummy:simpleWorkflowNotifier-Processes - - - - - workItemEvent - - recipient@evolveum.com - - dummy:simpleWorkflowNotifier-WorkItems - - - - - - - - - - - - - - - - - - - - - - - diff --git a/model/workflow-impl/src/test/resources/policy/sod/metarole-criminal-exclusion.xml b/model/workflow-impl/src/test/resources/sod/metarole-criminal-exclusion.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/sod/metarole-criminal-exclusion.xml rename to model/workflow-impl/src/test/resources/sod/metarole-criminal-exclusion.xml diff --git a/model/workflow-impl/src/test/resources/policy/sod/role-judge.xml b/model/workflow-impl/src/test/resources/sod/role-judge.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/sod/role-judge.xml rename to model/workflow-impl/src/test/resources/sod/role-judge.xml diff --git a/model/workflow-impl/src/test/resources/policy/sod/role-pirate.xml b/model/workflow-impl/src/test/resources/sod/role-pirate.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/sod/role-pirate.xml rename to model/workflow-impl/src/test/resources/sod/role-pirate.xml diff --git a/model/workflow-impl/src/test/resources/policy/sod/role-respectable.xml b/model/workflow-impl/src/test/resources/sod/role-respectable.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/sod/role-respectable.xml rename to model/workflow-impl/src/test/resources/sod/role-respectable.xml diff --git a/model/workflow-impl/src/test/resources/policy/sod/role-thief.xml b/model/workflow-impl/src/test/resources/sod/role-thief.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/sod/role-thief.xml rename to model/workflow-impl/src/test/resources/sod/role-thief.xml diff --git a/model/workflow-impl/src/test/resources/policy/sod/user-sod-approver.xml b/model/workflow-impl/src/test/resources/sod/user-sod-approver.xml similarity index 100% rename from model/workflow-impl/src/test/resources/policy/sod/user-sod-approver.xml rename to model/workflow-impl/src/test/resources/sod/user-sod-approver.xml diff --git a/model/workflow-impl/testng-integration.xml b/model/workflow-impl/testng-integration.xml index b52cfcdaf74..7a6ba787695 100644 --- a/model/workflow-impl/testng-integration.xml +++ b/model/workflow-impl/testng-integration.xml @@ -16,45 +16,34 @@ --> - - - - - + - + - - - + + + + - + - - - - - - - - - - - - - + + + - - - - + + + + + + diff --git a/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/dummy/AbstractDummyTest.java b/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/dummy/AbstractDummyTest.java index 791f7ac5c3d..f10928b33e5 100644 --- a/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/dummy/AbstractDummyTest.java +++ b/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/dummy/AbstractDummyTest.java @@ -40,7 +40,6 @@ import com.evolveum.icf.dummy.resource.DummyObject; import com.evolveum.icf.dummy.resource.DummyPrivilege; import com.evolveum.icf.dummy.resource.DummyResource; -import com.evolveum.icf.dummy.resource.DummySyncStyle; import com.evolveum.icf.dummy.resource.SchemaViolationException; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.PrismProperty; @@ -293,7 +292,7 @@ protected void assertAttribute(PrismObject shadow, String attrNa } protected void assertAttribute(PrismObject shadow, QName attrName, T... expectedValues) { - assertAttribute(resource, shadow.asObjectable(), attrName, expectedValues); + assertAttribute(shadow.asObjectable(), attrName, expectedValues); } protected void assertAttribute(PrismObject shadow, MatchingRule matchingRule, QName attrName, T... expectedValues) throws SchemaException { diff --git a/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/manual/AbstractManualResourceTest.java b/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/manual/AbstractManualResourceTest.java index a123f3e2c67..42b52442b99 100644 --- a/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/manual/AbstractManualResourceTest.java +++ b/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/manual/AbstractManualResourceTest.java @@ -2549,11 +2549,11 @@ private PendingOperationType findPendingOperation(PrismObject shadow } protected void assertAttribute(PrismObject shadow, QName attrName, T... expectedValues) { - assertAttribute(resource, shadow.asObjectable(), attrName, expectedValues); + assertAttribute(shadow.asObjectable(), attrName, expectedValues); } protected void assertNoAttribute(PrismObject shadow, QName attrName) { - assertNoAttribute(resource, shadow.asObjectable(), attrName); + assertNoAttribute(shadow.asObjectable(), attrName); } protected void assertAttributeFromCache(ShadowAsserter shadowRepoAsserter, QName attrQName, diff --git a/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/opendj/AbstractOpenDjTest.java b/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/opendj/AbstractOpenDjTest.java index bd5eeaa926c..453eea12604 100644 --- a/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/opendj/AbstractOpenDjTest.java +++ b/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/opendj/AbstractOpenDjTest.java @@ -210,7 +210,7 @@ protected void assertAttribute(PrismObject shadow, String attrNa } protected void assertAttribute(ShadowType shadow, QName attrName, T... expectedValues) { - assertAttribute(resource, shadow, attrName, expectedValues); + assertAttribute(shadow, attrName, expectedValues); } protected ItemName getPrimaryIdentifierQName() { diff --git a/repo/repo-test-util/src/main/java/com/evolveum/midpoint/test/AbstractIntegrationTest.java b/repo/repo-test-util/src/main/java/com/evolveum/midpoint/test/AbstractIntegrationTest.java index 67f5cead3b2..a2c76453aa6 100644 --- a/repo/repo-test-util/src/main/java/com/evolveum/midpoint/test/AbstractIntegrationTest.java +++ b/repo/repo-test-util/src/main/java/com/evolveum/midpoint/test/AbstractIntegrationTest.java @@ -73,6 +73,7 @@ import com.evolveum.midpoint.test.asserter.AbstractAsserter; import com.evolveum.midpoint.test.asserter.ShadowAsserter; import com.evolveum.midpoint.test.asserter.prism.PolyStringAsserter; +import com.evolveum.midpoint.test.asserter.prism.PrismObjectAsserter; import com.evolveum.midpoint.test.asserter.refinedschema.RefinedResourceSchemaAsserter; import com.evolveum.midpoint.test.ldap.OpenDJController; import com.evolveum.midpoint.test.util.DerbyController; @@ -707,10 +708,7 @@ protected void assertShadowSanity(PrismObject shadow) { */ @Deprecated protected void assertObjectSanity(PrismObject object) { - object.checkConsistence(true, true, ConsistencyCheckScope.THOROUGH); - assertTrue("Incomplete definition in "+object, object.hasCompleteDefinition()); - assertFalse("No OID", StringUtils.isEmpty(object.getOid())); - assertNotNull("Null name in "+object, object.asObjectable().getName()); + new PrismObjectAsserter<>(object).assertSanity(); } protected void assertUser(PrismObject user, String oid, String name, String fullName, String givenName, String familyName) { @@ -1917,8 +1915,7 @@ protected void assertTestResourceNotApplicable(OperationResult testResult, Conne IntegrationTestTools.assertTestResourceNotApplicable(testResult, operation); } - protected void assertAttribute(PrismObject resource, ShadowType shadow, QName attrQname, - T... expectedValues) { + protected void assertAttribute(ShadowType shadow, QName attrQname, T... expectedValues) { List actualValues = ShadowUtil.getAttributeValues(shadow, attrQname); PrismAsserts.assertSets("attribute "+attrQname+" in " + shadow, actualValues, expectedValues); } @@ -1928,15 +1925,10 @@ protected void assertAttribute(ResourceType resourceType, ShadowType shadowT assertAttribute(resourceType.asPrismObject(), shadowType, attrName, expectedValues); } - protected void assertAttribute(ResourceType resourceType, ShadowType shadowType, QName attrName, - T... expectedValues) { - assertAttribute(resourceType.asPrismObject(), shadowType, attrName, expectedValues); - } - protected void assertAttribute(PrismObject resource, ShadowType shadow, String attrName, T... expectedValues) { QName attrQname = new QName(ResourceTypeUtil.getResourceNamespace(resource), attrName); - assertAttribute(resource, shadow, attrQname, expectedValues); + assertAttribute(shadow, attrQname, expectedValues); } protected void assertAttribute(PrismObject resource, ShadowType shadow, MatchingRule matchingRule, @@ -1945,7 +1937,7 @@ protected void assertAttribute(PrismObject resource, ShadowTyp PrismAsserts.assertSets("attribute "+attrQname+" in " + shadow, matchingRule, actualValues, expectedValues); } - protected void assertNoAttribute(PrismObject resource, ShadowType shadow, QName attrQname) { + protected void assertNoAttribute(ShadowType shadow, QName attrQname) { PrismContainer attributesContainer = shadow.asPrismObject().findContainer(ShadowType.F_ATTRIBUTES); if (attributesContainer == null || attributesContainer.isEmpty()) { return; @@ -1956,7 +1948,7 @@ protected void assertNoAttribute(PrismObject resource, ShadowType protected void assertNoAttribute(PrismObject resource, ShadowType shadow, String attrName) { QName attrQname = new QName(ResourceTypeUtil.getResourceNamespace(resource), attrName); - assertNoAttribute(resource, shadow, attrQname); + assertNoAttribute(shadow, attrQname); } protected void assertNoPendingOperation(PrismObject shadow) { diff --git a/repo/repo-test-util/src/main/java/com/evolveum/midpoint/test/asserter/prism/PrismObjectAsserter.java b/repo/repo-test-util/src/main/java/com/evolveum/midpoint/test/asserter/prism/PrismObjectAsserter.java index 267db278f98..864e3f0014c 100644 --- a/repo/repo-test-util/src/main/java/com/evolveum/midpoint/test/asserter/prism/PrismObjectAsserter.java +++ b/repo/repo-test-util/src/main/java/com/evolveum/midpoint/test/asserter/prism/PrismObjectAsserter.java @@ -27,13 +27,10 @@ import javax.xml.namespace.QName; +import com.evolveum.midpoint.prism.*; +import org.apache.commons.lang.StringUtils; import org.testng.AssertJUnit; -import com.evolveum.midpoint.prism.Item; -import com.evolveum.midpoint.prism.ItemDefinition; -import com.evolveum.midpoint.prism.PrismObject; -import com.evolveum.midpoint.prism.PrismProperty; -import com.evolveum.midpoint.prism.PrismValue; import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.prism.path.ItemName; import com.evolveum.midpoint.prism.polystring.PolyString; @@ -109,7 +106,24 @@ public PrismObjectAsserter assertOidDifferentThan(String oid) { return this; } - + public PrismObjectAsserter assertConsistence() { + object.checkConsistence(true, true, ConsistencyCheckScope.THOROUGH); + return this; + } + + public PrismObjectAsserter assertDefinition() { + assertTrue("Incomplete definition in "+object, object.hasCompleteDefinition()); + return this; + } + + public PrismObjectAsserter assertSanity() { + assertConsistence(); + assertDefinition(); + assertOid(); + assertName(); + return this; + } + public PrismObjectAsserter assertName() { assertNotNull("No name in "+desc(), getObject().getName()); return this; diff --git a/testing/sanity/src/test/java/com/evolveum/midpoint/testing/sanity/TestSanity.java b/testing/sanity/src/test/java/com/evolveum/midpoint/testing/sanity/TestSanity.java index 5620c978681..e385c8cfcc0 100644 --- a/testing/sanity/src/test/java/com/evolveum/midpoint/testing/sanity/TestSanity.java +++ b/testing/sanity/src/test/java/com/evolveum/midpoint/testing/sanity/TestSanity.java @@ -4158,7 +4158,7 @@ protected void assertAttribute(PrismObject shadow, String attrNa } protected void assertAttribute(ShadowType shadowType, QName attrName, T... expectedValues) { - assertAttribute(resourceTypeOpenDjrepo, shadowType, attrName, expectedValues); + assertAttribute(shadowType, attrName, expectedValues); } } diff --git a/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestConsistencyMechanism.java b/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestConsistencyMechanism.java index f52be84715f..f728c49c7e5 100644 --- a/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestConsistencyMechanism.java +++ b/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestConsistencyMechanism.java @@ -83,7 +83,6 @@ import com.evolveum.midpoint.schema.util.SchemaTestConstants; import com.evolveum.midpoint.schema.util.ShadowUtil; import com.evolveum.midpoint.task.api.Task; -import com.evolveum.midpoint.task.api.TaskManagerException; import com.evolveum.midpoint.test.Checker; import com.evolveum.midpoint.test.ldap.OpenDJController; import com.evolveum.midpoint.test.util.MidPointAsserts; @@ -99,7 +98,6 @@ import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; -import com.evolveum.midpoint.util.exception.SystemException; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.xml.ns._public.common.api_types_3.PropertyReferenceListType; @@ -2619,9 +2617,4 @@ protected void assertAttribute(ShadowType shadowType, String attrName, T... protected void assertAttribute(PrismObject shadow, String attrName, T... expectedValues) { assertAttribute(resourceTypeOpenDjrepo, shadow.asObjectable(), attrName, expectedValues); } - - protected void assertAttribute(ShadowType shadowType, QName attrName, T... expectedValues) { - assertAttribute(resourceTypeOpenDjrepo, shadowType, attrName, expectedValues); - } - } diff --git a/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestRetirement.java b/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestRetirement.java index ff692180b74..6d4a6c236ad 100644 --- a/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestRetirement.java +++ b/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestRetirement.java @@ -567,13 +567,13 @@ private void dumpLdap() throws DirectoryException { private void assertGroupMembers(PrismObject org, String... members) throws Exception { String groupOid = getLinkRefOid(org, RESOURCE_OPENDJ_OID, ShadowKindType.ENTITLEMENT, "org-group"); PrismObject groupShadow = getShadowModel(groupOid); - assertAttribute(resourceOpenDj, groupShadow.asObjectable(), new QName(MidPointConstants.NS_RI, "uniqueMember"), members); + assertAttribute(groupShadow.asObjectable(), new QName(MidPointConstants.NS_RI, "uniqueMember"), members); } private void assertNoGroupMembers(PrismObject org) throws Exception { String groupOid = getLinkRefOid(org, RESOURCE_OPENDJ_OID, ShadowKindType.ENTITLEMENT, "org-group"); PrismObject groupShadow = getShadowModel(groupOid); - assertNoAttribute(resourceOpenDj, groupShadow.asObjectable(), new QName(MidPointConstants.NS_RI, "uniqueMember")); + assertNoAttribute(groupShadow.asObjectable(), new QName(MidPointConstants.NS_RI, "uniqueMember")); } private void reconcileAllUsers() throws SchemaException, ObjectNotFoundException, CommunicationException, ConfigurationException, SecurityViolationException, ExpressionEvaluationException { diff --git a/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestUniversity.java b/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestUniversity.java index bc3631fdae3..2ae3b82222c 100644 --- a/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestUniversity.java +++ b/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestUniversity.java @@ -24,12 +24,8 @@ import com.evolveum.midpoint.model.impl.sync.ReconciliationTaskHandler; import com.evolveum.midpoint.model.impl.util.DebugReconciliationTaskResultListener; import com.evolveum.midpoint.prism.PrismObject; -import com.evolveum.midpoint.prism.PrismReferenceValue; import com.evolveum.midpoint.prism.util.PrismAsserts; -import com.evolveum.midpoint.prism.util.PrismTestUtil; -import com.evolveum.midpoint.schema.SchemaConstantsGenerated; import com.evolveum.midpoint.schema.constants.MidPointConstants; -import com.evolveum.midpoint.schema.constants.SchemaConstants; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.test.DummyResourceContoller; @@ -48,7 +44,6 @@ import org.opends.server.types.DirectoryException; import org.opends.server.types.Entry; -import org.opends.server.types.SearchResultEntry; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext.ClassMode; @@ -60,13 +55,7 @@ import java.io.File; -import static com.evolveum.midpoint.test.IntegrationTestTools.assertAttribute; -import static com.evolveum.midpoint.test.IntegrationTestTools.assertNoAttribute; -import static com.evolveum.midpoint.test.IntegrationTestTools.display; -import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertNotNull; -import static org.testng.AssertJUnit.assertNull; -import static org.testng.AssertJUnit.assertTrue; /** * @author Radovan Semancik @@ -287,13 +276,13 @@ public void test110AddComeniusStructure() throws Exception { private void assertGroupMembers(PrismObject org, String... members) throws Exception { String groupOid = getLinkRefOid(org, RESOURCE_OPENDJ_OID, ShadowKindType.ENTITLEMENT, "org-group"); PrismObject groupShadow = getShadowModel(groupOid); - assertAttribute(resourceOpenDj, groupShadow.asObjectable(), new QName(MidPointConstants.NS_RI, "uniqueMember"), members); + assertAttribute(groupShadow.asObjectable(), new QName(MidPointConstants.NS_RI, "uniqueMember"), members); } private void assertNoGroupMembers(PrismObject org) throws Exception { String groupOid = getLinkRefOid(org, RESOURCE_OPENDJ_OID, ShadowKindType.ENTITLEMENT, "org-group"); PrismObject groupShadow = getShadowModel(groupOid); - assertNoAttribute(resourceOpenDj, groupShadow.asObjectable(), new QName(MidPointConstants.NS_RI, "uniqueMember")); + assertNoAttribute(groupShadow.asObjectable(), new QName(MidPointConstants.NS_RI, "uniqueMember")); } diff --git a/testing/story/src/test/java/com/evolveum/midpoint/testing/story/ldap/hierarchy/AbstractLdapHierarchyTest.java b/testing/story/src/test/java/com/evolveum/midpoint/testing/story/ldap/hierarchy/AbstractLdapHierarchyTest.java index 3d1675733ef..bec48d65fd2 100644 --- a/testing/story/src/test/java/com/evolveum/midpoint/testing/story/ldap/hierarchy/AbstractLdapHierarchyTest.java +++ b/testing/story/src/test/java/com/evolveum/midpoint/testing/story/ldap/hierarchy/AbstractLdapHierarchyTest.java @@ -597,13 +597,13 @@ protected void dumpLdap() throws DirectoryException { protected void assertGroupMembers(PrismObject org, String... members) throws Exception { String groupOid = getLinkRefOid(org, RESOURCE_OPENDJ_OID, ShadowKindType.ENTITLEMENT, "org-group"); PrismObject groupShadow = getShadowModel(groupOid); - assertAttribute(resourceOpenDj, groupShadow.asObjectable(), new QName(MidPointConstants.NS_RI, "uniqueMember"), members); + assertAttribute(groupShadow.asObjectable(), new QName(MidPointConstants.NS_RI, "uniqueMember"), members); } protected void assertNoGroupMembers(PrismObject org) throws Exception { String groupOid = getLinkRefOid(org, RESOURCE_OPENDJ_OID, ShadowKindType.ENTITLEMENT, "org-group"); PrismObject groupShadow = getShadowModel(groupOid); - assertNoAttribute(resourceOpenDj, groupShadow.asObjectable(), new QName(MidPointConstants.NS_RI, "uniqueMember")); + assertNoAttribute(groupShadow.asObjectable(), new QName(MidPointConstants.NS_RI, "uniqueMember")); } protected void reconcileAllUsers() throws SchemaException, ObjectNotFoundException, CommunicationException, ConfigurationException, SecurityViolationException, ExpressionEvaluationException {