diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/util/PrismAsserts.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/util/PrismAsserts.java index 421a62ecdf8..4055627d0e4 100644 --- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/util/PrismAsserts.java +++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/util/PrismAsserts.java @@ -428,11 +428,11 @@ public static void assertNoItemDelta(ObjectDelta objectDelta, ItemPath itemPa assert !objectDelta.hasItemDelta(itemPath) : "Delta for item "+itemPath+" present while not expecting it"; } - public static ContainerDelta assertContainerAdd(ObjectDelta objectDelta, QName name) { - return assertContainerAdd(objectDelta, new ItemPath(name)); + public static ContainerDelta assertContainerAddGetContainerDelta(ObjectDelta objectDelta, QName name) { + return assertContainerAddGetContainerDelta(objectDelta, new ItemPath(name)); } - public static ContainerDelta assertContainerAdd(ObjectDelta objectDelta, ItemPath propertyPath) { + public static ContainerDelta assertContainerAddGetContainerDelta(ObjectDelta objectDelta, ItemPath propertyPath) { ContainerDelta delta = objectDelta.findContainerDelta(propertyPath); assertNotNull("Container delta for "+propertyPath+" not found",delta); assert !delta.isEmpty() : "Container delta for "+propertyPath+" is empty"; @@ -441,11 +441,11 @@ public static ContainerDelta assertContainerAdd(ObjectDelta objectDelta, I return delta; } - public static ContainerDelta assertContainerDelete(ObjectDelta objectDelta, QName name) { - return assertContainerDelete(objectDelta, new ItemPath(name)); + public static ContainerDelta assertContainerDeleteGetContainerDelta(ObjectDelta objectDelta, QName name) { + return assertContainerDeleteGetContainerDelta(objectDelta, new ItemPath(name)); } - public static ContainerDelta assertContainerDelete(ObjectDelta objectDelta, ItemPath propertyPath) { + public static ContainerDelta assertContainerDeleteGetContainerDelta(ObjectDelta objectDelta, ItemPath propertyPath) { ContainerDelta delta = objectDelta.findContainerDelta(propertyPath); assertNotNull("Container delta for "+propertyPath+" not found",delta); assert !delta.isEmpty() : "Container delta for "+propertyPath+" is empty"; @@ -454,6 +454,48 @@ public static ContainerDelta assertContainerDelete(ObjectDelta objectDelta return delta; } + public static void assertContainerAdd(ObjectDelta objectDelta, QName itemName, C... containerables) { + assertContainerAdd(objectDelta, new ItemPath(itemName), containerables); + } + + public static void assertContainerAdd(ObjectDelta objectDelta, ItemPath propertyPath, C... containerables) { + List> expectedCVals = new ArrayList<>(); + for (C expectedContainerable: containerables) { + expectedCVals.add(expectedContainerable.asPrismContainerValue()); + } + } + + public static void assertContainerAdd(ObjectDelta objectDelta, QName itemName, + PrismContainerValue... expectedCVals) { + assertContainerAdd(objectDelta, new ItemPath(itemName), expectedCVals); + } + + public static void assertContainerAdd(ObjectDelta objectDelta, ItemPath propertyPath, + PrismContainerValue... expectedCVals) { + ContainerDelta delta = objectDelta.findContainerDelta(propertyPath); + assertNotNull("Container delta for "+propertyPath+" not found",delta); + assert !delta.isEmpty() : "Container delta for "+propertyPath+" is empty"; + assert delta.getValuesToAdd() != null : "Container delta for "+propertyPath+" has null values to add"; + assert !delta.getValuesToAdd().isEmpty() : "Container delta for "+propertyPath+" has empty values to add"; + assertEquivalentContainerValues("Wrong values in container delta for "+propertyPath, + delta.getValuesToAdd(), expectedCVals); + } + + private static void assertEquivalentContainerValues(String message, Collection> haveValues, + PrismContainerValue[] expectedCVals) { + List> expectedValues = Arrays.asList(expectedCVals); + Comparator> comparator = new Comparator>() { + @Override + public int compare(PrismContainerValue a, PrismContainerValue b) { + if (a.equivalent(b)) { + return 0; + } + return 1; + } + }; + assert MiscUtil.unorderedCollectionEquals(haveValues, expectedValues, comparator) : message; + } + public static void assertOrigin(ObjectDelta objectDelta, final OriginType... expectedOriginTypes) { assertOrigin(objectDelta, null, expectedOriginTypes); } diff --git a/infra/prism/src/test/java/com/evolveum/midpoint/prism/TestCompare.java b/infra/prism/src/test/java/com/evolveum/midpoint/prism/TestCompare.java index 4361169225f..54c09aa7856 100644 --- a/infra/prism/src/test/java/com/evolveum/midpoint/prism/TestCompare.java +++ b/infra/prism/src/test/java/com/evolveum/midpoint/prism/TestCompare.java @@ -156,7 +156,7 @@ public void testDiffJack() throws SchemaException, SAXException, IOException { new NameItemPathSegment(USER_DESCRIPTION_QNAME)), "Assignment II"); - ContainerDelta assignment3Delta = PrismAsserts.assertContainerAdd(jackDelta, new ItemPath(USER_ASSIGNMENT_QNAME)); + ContainerDelta assignment3Delta = PrismAsserts.assertContainerAddGetContainerDelta(jackDelta, new ItemPath(USER_ASSIGNMENT_QNAME)); PrismContainerValue assignment3DeltaAddValue = assignment3Delta.getValuesToAdd().iterator().next(); assertEquals("Assignment 3 wrong ID", USER_ASSIGNMENT_3_ID, assignment3DeltaAddValue.getId()); diff --git a/infra/schema/src/main/java/com/evolveum/midpoint/schema/util/FocusTypeUtil.java b/infra/schema/src/main/java/com/evolveum/midpoint/schema/util/FocusTypeUtil.java new file mode 100644 index 00000000000..37862763008 --- /dev/null +++ b/infra/schema/src/main/java/com/evolveum/midpoint/schema/util/FocusTypeUtil.java @@ -0,0 +1,47 @@ +/** + * Copyright (c) 2016 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.schema.util; + +import javax.xml.namespace.QName; + +import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.OrgType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType; + +/** + * @author semancik + * + */ +public class FocusTypeUtil { + + public static AssignmentType createRoleAssignment(String roleOid) { + return createTargetAssignment(roleOid, RoleType.COMPLEX_TYPE); + } + + public static AssignmentType createOrgAssignment(String roleOid) { + return createTargetAssignment(roleOid, OrgType.COMPLEX_TYPE); + } + + public static AssignmentType createTargetAssignment(String targetOid, QName type) { + AssignmentType assignmentType = new AssignmentType(); + ObjectReferenceType targetRef = new ObjectReferenceType(); + targetRef.setOid(targetOid); + targetRef.setType(type); + assignmentType.setTargetRef(targetRef); + return assignmentType; + } +} diff --git a/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestParseDiffPatch.java b/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestParseDiffPatch.java index b66d98aefd1..034db4bdb15 100644 --- a/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestParseDiffPatch.java +++ b/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestParseDiffPatch.java @@ -346,7 +346,7 @@ public void testTask() throws SchemaException, SAXException, IOException, JAXBEx Collection modifications = diffDelta.getModifications(); assertEquals("Unexpected number of modifications", 1, modifications.size()); // there is only one property in the container. after deleting this property, all container will be deleted, isn't it right? - PrismAsserts.assertContainerDelete(diffDelta, new ItemPath(TaskType.F_EXTENSION)); + PrismAsserts.assertContainerDeleteGetContainerDelta(diffDelta, new ItemPath(TaskType.F_EXTENSION)); // PrismAsserts.assertPropertyDelete(diffDelta, new ItemPath(TaskType.F_EXTENSION, // new QName("http://midpoint.evolveum.com/xml/ns/public/provisioning/liveSync-1.xsd","token")), 480); @@ -430,7 +430,7 @@ public void testResource() throws SchemaException, SAXException, IOException, JA assertEquals("Wrong change type", ChangeType.MODIFY, resourceDelta.getChangeType()); Collection modifications = resourceDelta.getModifications(); assertEquals("Unexpected number of modifications", 7, modifications.size()); - PrismAsserts.assertContainerDelete(resourceDelta, ResourceType.F_SCHEMA); + PrismAsserts.assertContainerDeleteGetContainerDelta(resourceDelta, ResourceType.F_SCHEMA); PrismAsserts.assertPropertyReplace(resourceDelta, pathTimeouts("update"), 3); PrismAsserts.assertPropertyReplace(resourceDelta, pathTimeouts("scriptOnResource"), 4); PrismAsserts.assertPropertyDelete(resourceDelta, diff --git a/infra/test-util/src/main/java/com/evolveum/midpoint/test/util/MidPointAsserts.java b/infra/test-util/src/main/java/com/evolveum/midpoint/test/util/MidPointAsserts.java index 4f9ae7015c3..267cb8d1c11 100644 --- a/infra/test-util/src/main/java/com/evolveum/midpoint/test/util/MidPointAsserts.java +++ b/infra/test-util/src/main/java/com/evolveum/midpoint/test/util/MidPointAsserts.java @@ -19,6 +19,7 @@ import static org.testng.AssertJUnit.assertTrue; import static org.testng.AssertJUnit.assertNotNull; +import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -129,6 +130,28 @@ public static void assertAssignedRole(PrismObject user, public static void assertNotAssignedRole(PrismObject user, String roleOid) { assertNotAssigned(user, roleOid, RoleType.COMPLEX_TYPE); } + + public static void assertAssignedRoles(PrismObject user, String... roleOids) { + assertAssignedTargets(user, "roles", RoleType.COMPLEX_TYPE, roleOids); + } + + public static void assertAssignedOrgs(PrismObject user, String... orgOids) { + assertAssignedTargets(user, "orgs", OrgType.COMPLEX_TYPE, orgOids); + } + + public static void assertAssignedTargets(PrismObject user, String typeDesc, QName type, String... expectedTargetOids) { + F userType = user.asObjectable(); + List haveTagetOids = new ArrayList<>(); + for (AssignmentType assignmentType: userType.getAssignment()) { + ObjectReferenceType targetRef = assignmentType.getTargetRef(); + if (targetRef != null) { + if (type.equals(targetRef.getType())) { + haveTagetOids.add(targetRef.getOid()); + } + } + } + PrismAsserts.assertSets("Wrong "+typeDesc+" in "+user, haveTagetOids, expectedTargetOids); + } public static void assertNotAssignedResource(PrismObject user, String resourceOid) { F userType = user.asObjectable(); diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ObjectMerger.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ObjectMerger.java index 4ee585510da..e65fcf408f8 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ObjectMerger.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ObjectMerger.java @@ -28,14 +28,17 @@ import com.evolveum.midpoint.prism.Item; import com.evolveum.midpoint.prism.ItemDefinition; import com.evolveum.midpoint.prism.PrismContainer; +import com.evolveum.midpoint.prism.PrismContainerValue; import com.evolveum.midpoint.prism.PrismContext; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.PrismObjectDefinition; +import com.evolveum.midpoint.prism.PrismValue; import com.evolveum.midpoint.prism.Visitable; import com.evolveum.midpoint.prism.Visitor; import com.evolveum.midpoint.prism.delta.ItemDelta; import com.evolveum.midpoint.prism.delta.ObjectDelta; import com.evolveum.midpoint.prism.path.ItemPath; +import com.evolveum.midpoint.prism.path.ItemPath.CompareResult; import com.evolveum.midpoint.schema.ObjectDeltaOperation; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.schema.util.MiscSchemaUtil; @@ -157,10 +160,11 @@ public void visit(Visitable visitable) { boolean found = false; for (ItemPath processedPath: processedPaths) { - // TODO: We might need to check for super-paths here. + // Need to check for super-paths here. // E.g. if we have already processed metadata, we do not want to process // metadata/modifyTimestamp - if (processedPath.equivalent(itemPath)) { + CompareResult compareResult = processedPath.compareComplex(itemPath); + if (compareResult == CompareResult.EQUIVALENT || compareResult == CompareResult.SUBPATH) { found = true; break; } @@ -225,6 +229,11 @@ private ItemDelta mergeItem(PrismObject ItemDelta mergeItem(PrismObject valuesRight = itemRight.getValues(); + for (PrismValue valueRight: valuesRight) { + if (!itemLeft.containsEquivalentValue(valueRight)) { + PrismValue clonedValue = valueRight.clone(); + if (clonedValue instanceof PrismContainerValue) { + ((PrismContainerValue)clonedValue).setId(null); + } + itemDelta.addValueToAdd(clonedValue); + } + } + return itemDelta; + } } } } diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestMerge.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestMerge.java index c0d48bad3f4..61086ab10fb 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestMerge.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestMerge.java @@ -27,11 +27,15 @@ import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.delta.ObjectDelta; +import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.prism.util.PrismAsserts; import com.evolveum.midpoint.prism.util.PrismTestUtil; import com.evolveum.midpoint.schema.result.OperationResult; +import com.evolveum.midpoint.schema.util.FocusTypeUtil; import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.test.util.TestUtil; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ActivationType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.MetadataType; import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; /** @@ -50,6 +54,18 @@ public void initSystem(Task initTask, OperationResult initResult) throws Excepti modifyUserAdd(USER_GUYBRUSH_OID, UserType.F_EMPLOYEE_TYPE, initTask, initResult, "SAILOR", "PIRATE WANNABE"); + modifyUserAdd(USER_GUYBRUSH_OID, UserType.F_ORGANIZATION, initTask, initResult, + createPolyString("Pirate Wannabes"), createPolyString("Scurvy Seadogs")); + assignRole(USER_GUYBRUSH_OID, ROLE_SAILOR_OID, initTask, initResult); + assignRole(USER_GUYBRUSH_OID, ROLE_EMPTY_OID, initTask, initResult); + assignRole(USER_GUYBRUSH_OID, ROLE_THIEF_OID, initTask, initResult); + + modifyUserAdd(USER_JACK_OID, UserType.F_ORGANIZATION, initTask, initResult, + createPolyString("Pirate Brethren"), createPolyString("Scurvy Seadogs")); + assignRole(USER_JACK_OID, ROLE_SAILOR_OID, initTask, initResult); + assignRole(USER_JACK_OID, ROLE_EMPTY_OID, initTask, initResult); + assignRole(USER_JACK_OID, ROLE_PIRATE_OID, initTask, initResult); + assignRole(USER_JACK_OID, ROLE_NICE_PIRATE_OID, initTask, initResult); } @Test @@ -59,7 +75,13 @@ public void test100MergeJackGuybrushPreviewDelta() throws Exception { Task task = taskManager.createTaskInstance(TestMerge.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); + + PrismObject userJackBefore = getUser(USER_JACK_OID); + display("Jack before", userJackBefore); + PrismObject userGuybrushBefore = getUser(USER_GUYBRUSH_OID); + display("Guybrush before", userGuybrushBefore); + // WHEN TestUtil.displayWhen(TEST_NAME); ObjectDelta delta = @@ -78,12 +100,21 @@ public void test100MergeJackGuybrushPreviewDelta() throws Exception { PrismAsserts.assertNoItemDelta(delta, UserType.F_GIVEN_NAME); PrismAsserts.assertPropertyReplace(delta, UserType.F_FAMILY_NAME); PrismAsserts.assertPropertyReplace(delta, UserType.F_FULL_NAME, - PrismTestUtil.createPolyString(USER_GUYBRUSH_FULL_NAME)); + createPolyString(USER_GUYBRUSH_FULL_NAME)); PrismAsserts.assertPropertyReplace(delta, UserType.F_ADDITIONAL_NAME); PrismAsserts.assertPropertyReplace(delta, UserType.F_LOCALITY, - PrismTestUtil.createPolyString(USER_GUYBRUSH_LOCALITY)); + createPolyString(USER_GUYBRUSH_LOCALITY)); PrismAsserts.assertPropertyAdd(delta, UserType.F_EMPLOYEE_TYPE, "SAILOR", "PIRATE WANNABE"); + PrismAsserts.assertPropertyAdd(delta, UserType.F_ORGANIZATION, + createPolyString("Pirate Wannabes")); + PrismAsserts.assertNoItemDelta(delta, UserType.F_ACTIVATION); + PrismAsserts.assertNoItemDelta(delta, + new ItemPath(UserType.F_ACTIVATION, ActivationType.F_ADMINISTRATIVE_STATUS)); + PrismAsserts.assertNoItemDelta(delta, UserType.F_ROLE_MEMBERSHIP_REF); + + PrismAsserts.assertContainerAdd(delta, UserType.F_ASSIGNMENT, + FocusTypeUtil.createRoleAssignment(ROLE_THIEF_OID)); } @@ -109,18 +140,23 @@ public void test102MergeJackGuybrushPreviewObject() throws Exception { assertEquals("Wrong object OID", USER_JACK_OID, object.getOid()); PrismAsserts.assertPropertyValue(object, - UserType.F_NAME, PrismTestUtil.createPolyString(USER_JACK_USERNAME)); + UserType.F_NAME, createPolyString(USER_JACK_USERNAME)); PrismAsserts.assertPropertyValue(object, - UserType.F_GIVEN_NAME, PrismTestUtil.createPolyString(USER_JACK_GIVEN_NAME)); + UserType.F_GIVEN_NAME, createPolyString(USER_JACK_GIVEN_NAME)); PrismAsserts.assertNoItem(object, UserType.F_FAMILY_NAME); PrismAsserts.assertPropertyValue(object, - UserType.F_FULL_NAME, PrismTestUtil.createPolyString(USER_GUYBRUSH_FULL_NAME)); + UserType.F_FULL_NAME, createPolyString(USER_GUYBRUSH_FULL_NAME)); PrismAsserts.assertNoItem(object, UserType.F_ADDITIONAL_NAME); PrismAsserts.assertPropertyValue(object, - UserType.F_LOCALITY, PrismTestUtil.createPolyString(USER_GUYBRUSH_LOCALITY)); + UserType.F_LOCALITY, createPolyString(USER_GUYBRUSH_LOCALITY)); PrismAsserts.assertPropertyValue(object, UserType.F_EMPLOYEE_TYPE, USER_JACK_EMPLOYEE_TYPE, "SAILOR", "PIRATE WANNABE"); + PrismAsserts.assertPropertyValue(object, + UserType.F_ORGANIZATION, + createPolyString("Pirate Brethren"), createPolyString("Scurvy Seadogs"), createPolyString("Pirate Wannabes")); + assertAssignedRoles(object, ROLE_SAILOR_OID, ROLE_EMPTY_OID, ROLE_THIEF_OID, + ROLE_PIRATE_OID, ROLE_NICE_PIRATE_OID); } @Test @@ -155,13 +191,24 @@ public void test110MergeGuybrushJackPreviewDelta() throws Exception { PrismAsserts.assertNoItemDelta(delta, UserType.F_GIVEN_NAME); PrismAsserts.assertPropertyReplace(delta, UserType.F_FAMILY_NAME); PrismAsserts.assertPropertyReplace(delta, UserType.F_FULL_NAME, - PrismTestUtil.createPolyString(USER_JACK_FULL_NAME)); + createPolyString(USER_JACK_FULL_NAME)); PrismAsserts.assertPropertyReplace(delta, UserType.F_ADDITIONAL_NAME, - PrismTestUtil.createPolyString(USER_JACK_ADDITIONAL_NAME)); + createPolyString(USER_JACK_ADDITIONAL_NAME)); PrismAsserts.assertPropertyReplace(delta, UserType.F_LOCALITY, - PrismTestUtil.createPolyString(USER_JACK_LOCALITY)); + createPolyString(USER_JACK_LOCALITY)); PrismAsserts.assertPropertyAdd(delta, UserType.F_EMPLOYEE_TYPE, USER_JACK_EMPLOYEE_TYPE); + PrismAsserts.assertPropertyAdd(delta, UserType.F_ORGANIZATION, + createPolyString("Pirate Brethren")); + PrismAsserts.assertNoItemDelta(delta, UserType.F_ACTIVATION); + PrismAsserts.assertNoItemDelta(delta, + new ItemPath(UserType.F_ACTIVATION, ActivationType.F_ADMINISTRATIVE_STATUS)); + PrismAsserts.assertNoItemDelta(delta, UserType.F_ROLE_MEMBERSHIP_REF); + + PrismAsserts.assertContainerAdd(delta, UserType.F_ASSIGNMENT, + FocusTypeUtil.createRoleAssignment(ROLE_PIRATE_OID), + FocusTypeUtil.createRoleAssignment(ROLE_NICE_PIRATE_OID)); + } @@ -187,18 +234,24 @@ public void test112MergeGuybrushJackPreviewObject() throws Exception { assertEquals("Wrong object OID", USER_GUYBRUSH_OID, object.getOid()); PrismAsserts.assertPropertyValue(object, - UserType.F_NAME, PrismTestUtil.createPolyString(USER_GUYBRUSH_USERNAME)); + UserType.F_NAME, createPolyString(USER_GUYBRUSH_USERNAME)); PrismAsserts.assertPropertyValue(object, - UserType.F_GIVEN_NAME, PrismTestUtil.createPolyString(USER_GUYBRUSH_GIVEN_NAME)); + UserType.F_GIVEN_NAME, createPolyString(USER_GUYBRUSH_GIVEN_NAME)); PrismAsserts.assertNoItem(object, UserType.F_FAMILY_NAME); PrismAsserts.assertPropertyValue(object, - UserType.F_FULL_NAME, PrismTestUtil.createPolyString(USER_JACK_FULL_NAME)); + UserType.F_FULL_NAME, createPolyString(USER_JACK_FULL_NAME)); PrismAsserts.assertPropertyValue(object, - UserType.F_ADDITIONAL_NAME, PrismTestUtil.createPolyString(USER_JACK_ADDITIONAL_NAME)); + UserType.F_ADDITIONAL_NAME, createPolyString(USER_JACK_ADDITIONAL_NAME)); PrismAsserts.assertPropertyValue(object, - UserType.F_LOCALITY, PrismTestUtil.createPolyString(USER_JACK_LOCALITY)); + UserType.F_LOCALITY, createPolyString(USER_JACK_LOCALITY)); PrismAsserts.assertPropertyValue(object, UserType.F_EMPLOYEE_TYPE, USER_JACK_EMPLOYEE_TYPE, "SAILOR", "PIRATE WANNABE"); + PrismAsserts.assertPropertyValue(object, + UserType.F_ORGANIZATION, + createPolyString("Pirate Brethren"), createPolyString("Scurvy Seadogs"), createPolyString("Pirate Wannabes")); + + assertAssignedRoles(object, ROLE_SAILOR_OID, ROLE_EMPTY_OID, ROLE_THIEF_OID, + ROLE_PIRATE_OID, ROLE_NICE_PIRATE_OID); } @@ -224,18 +277,21 @@ public void test200MergeJackGuybrush() throws Exception { assertEquals("Wrong object OID", USER_JACK_OID, object.getOid()); PrismAsserts.assertPropertyValue(object, - UserType.F_NAME, PrismTestUtil.createPolyString(USER_JACK_USERNAME)); + UserType.F_NAME, createPolyString(USER_JACK_USERNAME)); PrismAsserts.assertPropertyValue(object, - UserType.F_GIVEN_NAME, PrismTestUtil.createPolyString(USER_JACK_GIVEN_NAME)); + UserType.F_GIVEN_NAME, createPolyString(USER_JACK_GIVEN_NAME)); PrismAsserts.assertNoItem(object, UserType.F_FAMILY_NAME); PrismAsserts.assertPropertyValue(object, - UserType.F_FULL_NAME, PrismTestUtil.createPolyString(USER_GUYBRUSH_FULL_NAME)); + UserType.F_FULL_NAME, createPolyString(USER_GUYBRUSH_FULL_NAME)); PrismAsserts.assertNoItem(object, UserType.F_ADDITIONAL_NAME); PrismAsserts.assertPropertyValue(object, - UserType.F_LOCALITY, PrismTestUtil.createPolyString(USER_GUYBRUSH_LOCALITY)); + UserType.F_LOCALITY, createPolyString(USER_GUYBRUSH_LOCALITY)); PrismAsserts.assertPropertyValue(object, UserType.F_EMPLOYEE_TYPE, USER_JACK_EMPLOYEE_TYPE, "SAILOR", "PIRATE WANNABE"); + assertAssignedRoles(object, ROLE_SAILOR_OID, ROLE_EMPTY_OID, ROLE_THIEF_OID, + ROLE_PIRATE_OID, ROLE_NICE_PIRATE_OID); + assertNoObject(UserType.class, USER_GUYBRUSH_OID); } diff --git a/model/model-intest/src/test/resources/common/system-configuration.xml b/model/model-intest/src/test/resources/common/system-configuration.xml index 93f7741d057..bf470baba22 100644 --- a/model/model-intest/src/test/resources/common/system-configuration.xml +++ b/model/model-intest/src/test/resources/common/system-configuration.xml @@ -207,6 +207,28 @@ take take + + organization + take + take + + + organizationalUnit + take + + + activation + take + + + assignment + take + take + + + linkRef + take + take 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 164f1a4fe6f..752e7a64840 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 @@ -1363,6 +1363,14 @@ protected void assertAssignedRole(PrismObject user, Str MidPointAsserts.assertAssignedRole(user, roleOid); } + protected static void assertAssignedRoles(PrismObject user, String... roleOids) { + MidPointAsserts.assertAssignedRoles(user, roleOids); + } + + protected static void assertAssignedOrgs(PrismObject user, String... orgOids) { + MidPointAsserts.assertAssignedOrgs(user, orgOids); + } + protected void assertRoleMembershipRef(PrismObject focus, String... roleOids) { List refOids = new ArrayList(); for (ObjectReferenceType ref: focus.asObjectable().getRoleMembershipRef()) { 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 c319fedd8bb..0d1dd7b9ef1 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 @@ -42,6 +42,7 @@ import com.evolveum.midpoint.prism.delta.PropertyDelta; import com.evolveum.midpoint.prism.match.MatchingRule; import com.evolveum.midpoint.prism.path.ItemPath; +import com.evolveum.midpoint.prism.polystring.PolyString; import com.evolveum.midpoint.prism.query.AndFilter; import com.evolveum.midpoint.prism.query.EqualFilter; import com.evolveum.midpoint.prism.query.ObjectFilter; @@ -85,6 +86,7 @@ import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; +import com.evolveum.prism.xml.ns._public.types_3.PolyStringType; import com.evolveum.prism.xml.ns._public.types_3.ProtectedStringType; import org.apache.commons.lang.StringUtils; @@ -1128,4 +1130,12 @@ protected void assertUserLockout(PrismObject user, LockoutStatusType e assertEquals("Wrong lockout status of "+user, expectedStatus, activationType.getLockoutStatus()); } } + + protected PolyString createPolyString(String string) { + return PrismTestUtil.createPolyString(string); + } + + protected PolyStringType createPolyStringType(String string) { + return PrismTestUtil.createPolyStringType(string); + } }