/*
* 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.model.intest;
import static com.evolveum.midpoint.test.IntegrationTestTools.display;
import static org.testng.AssertJUnit.assertEquals;
import java.io.File;
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 com.evolveum.midpoint.model.api.util.MergeDeltas;
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.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.UserType;
/**
* @author semancik
*
*/
@ContextConfiguration(locations = {"classpath:ctx-model-intest-test-main.xml"})
@DirtiesContext(classMode = ClassMode.AFTER_CLASS)
public class TestMerge extends AbstractInitializedModelIntegrationTest {
public static final File TEST_DIR = new File("src/test/resources/merge");
public static final String MERGE_CONFIG_DEFAULT_NAME = "default";
public static final String MERGE_CONFIG_DEFAULT_SPECIFIC_NAME = "default-specific";
public static final String MERGE_CONFIG_EXPRESSION_NAME = "expression";
private String jackDummyAccountOid;
private String jackDummyAccountRedOid;
private String guybrushDummyAccountOid;
private String guybrushDummyAccountCyanOid;
@Override
public void initSystem(Task initTask, OperationResult initResult) throws Exception {
super.initSystem(initTask, initResult);
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("Sailors"), createPolyString("Rum Club"), createPolyString("Lovers"));
assignRole(USER_GUYBRUSH_OID, ROLE_SAILOR_OID, initTask, initResult);
assignRole(USER_GUYBRUSH_OID, ROLE_CYAN_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("Sailors"), createPolyString("Rum Club"), createPolyString("Drinkers"));
assignRole(USER_JACK_OID, ROLE_SAILOR_OID, initTask, initResult);
assignRole(USER_JACK_OID, ROLE_RED_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
public void test000Sanity() throws Exception {
final String TEST_NAME = "test000Sanity";
TestUtil.displayTestTile(this, TEST_NAME);
PrismObject<UserType> userJackBefore = getUser(USER_JACK_OID);
display("Jack before", userJackBefore);
jackDummyAccountOid = assertAccount(userJackBefore, RESOURCE_DUMMY_OID);
jackDummyAccountRedOid = assertAccount(userJackBefore, RESOURCE_DUMMY_RED_OID);
assertLinks(userJackBefore, 2);
PrismObject<UserType> userGuybrushBefore = getUser(USER_GUYBRUSH_OID);
display("Guybrush before", userGuybrushBefore);
guybrushDummyAccountOid = assertAccount(userGuybrushBefore, RESOURCE_DUMMY_OID);
guybrushDummyAccountCyanOid = assertAccount(userGuybrushBefore, RESOURCE_DUMMY_CYAN_OID);
assertLinks(userGuybrushBefore, 2);
display("Jack DUMMY account", jackDummyAccountOid);
display("Jack RED account", jackDummyAccountRedOid);
display("Guybrush DUMMY account", guybrushDummyAccountOid);
display("Guybrush CYAN account", guybrushDummyAccountCyanOid);
}
/**
* MID-3460
*/
@Test
public void test100MergeJackGuybrushPreviewDelta() throws Exception {
final String TEST_NAME = "test100MergeJackGuybrushPreviewDelta";
TestUtil.displayTestTile(this, TEST_NAME);
Task task = taskManager.createTaskInstance(TestMerge.class.getName() + "." + TEST_NAME);
OperationResult result = task.getResult();
PrismObject<UserType> userJackBefore = getUser(USER_JACK_OID);
display("Jack before", userJackBefore);
PrismObject<UserType> userGuybrushBefore = getUser(USER_GUYBRUSH_OID);
display("Guybrush before", userGuybrushBefore);
// WHEN
TestUtil.displayWhen(TEST_NAME);
MergeDeltas<UserType> deltas =
modelInteractionService.mergeObjectsPreviewDeltas(UserType.class,
USER_JACK_OID, USER_GUYBRUSH_OID, MERGE_CONFIG_DEFAULT_NAME, task, result);
// THEN
TestUtil.displayThen(TEST_NAME);
result.computeStatus();
TestUtil.assertSuccess(result);
display("Deltas", deltas);
ObjectDelta<UserType> leftObjectdelta = deltas.getLeftObjectDelta();
PrismAsserts.assertIsModify(leftObjectdelta);
assertEquals("Wrong delta OID", USER_JACK_OID, leftObjectdelta.getOid());
PrismAsserts.assertNoItemDelta(leftObjectdelta, UserType.F_NAME);
PrismAsserts.assertNoItemDelta(leftObjectdelta, UserType.F_GIVEN_NAME);
PrismAsserts.assertPropertyReplace(leftObjectdelta, UserType.F_FAMILY_NAME);
PrismAsserts.assertPropertyReplace(leftObjectdelta, UserType.F_FULL_NAME,
createPolyString(USER_GUYBRUSH_FULL_NAME));
PrismAsserts.assertPropertyReplace(leftObjectdelta, UserType.F_ADDITIONAL_NAME);
PrismAsserts.assertPropertyReplace(leftObjectdelta, UserType.F_LOCALITY,
createPolyString(USER_GUYBRUSH_LOCALITY));
PrismAsserts.assertPropertyAdd(leftObjectdelta, UserType.F_EMPLOYEE_TYPE,
"SAILOR", "PIRATE WANNABE");
PrismAsserts.assertPropertyAdd(leftObjectdelta, UserType.F_ORGANIZATION,
createPolyString("Pirate Wannabes"), createPolyString("Lovers"));
PrismAsserts.assertNoItemDelta(leftObjectdelta, UserType.F_ACTIVATION);
PrismAsserts.assertNoItemDelta(leftObjectdelta,
new ItemPath(UserType.F_ACTIVATION, ActivationType.F_ADMINISTRATIVE_STATUS));
PrismAsserts.assertNoItemDelta(leftObjectdelta, UserType.F_ROLE_MEMBERSHIP_REF);
PrismAsserts.assertNoItemDelta(leftObjectdelta, UserType.F_DELEGATED_REF);
PrismAsserts.assertContainerAdd(leftObjectdelta, UserType.F_ASSIGNMENT,
FocusTypeUtil.createRoleAssignment(ROLE_THIEF_OID));
PrismAsserts.assertNoItemDelta(leftObjectdelta, UserType.F_LINK_REF);
ObjectDelta<UserType> leftLinkDelta = deltas.getLeftLinkDelta();
PrismAsserts.assertReferenceAdd(leftLinkDelta, UserType.F_LINK_REF, guybrushDummyAccountCyanOid);
ObjectDelta<UserType> rightLinkDelta = deltas.getRightLinkDelta();
PrismAsserts.assertReferenceDelete(rightLinkDelta, UserType.F_LINK_REF, guybrushDummyAccountCyanOid);
}
/**
* MID-3460
*/
@Test
public void test102MergeJackGuybrushPreviewObject() throws Exception {
final String TEST_NAME = "test102MergeJackGuybrushPreviewObject";
TestUtil.displayTestTile(this, TEST_NAME);
Task task = taskManager.createTaskInstance(TestMerge.class.getName() + "." + TEST_NAME);
OperationResult result = task.getResult();
// WHEN
TestUtil.displayWhen(TEST_NAME);
PrismObject<UserType> object =
modelInteractionService.mergeObjectsPreviewObject(UserType.class,
USER_JACK_OID, USER_GUYBRUSH_OID, MERGE_CONFIG_DEFAULT_NAME, task, result);
// THEN
TestUtil.displayThen(TEST_NAME);
result.computeStatus();
TestUtil.assertSuccess(result);
display("Object", object);
assertEquals("Wrong object OID", USER_JACK_OID, object.getOid());
PrismAsserts.assertPropertyValue(object,
UserType.F_NAME, createPolyString(USER_JACK_USERNAME));
PrismAsserts.assertPropertyValue(object,
UserType.F_GIVEN_NAME, createPolyString(USER_JACK_GIVEN_NAME));
PrismAsserts.assertNoItem(object, UserType.F_FAMILY_NAME);
PrismAsserts.assertPropertyValue(object,
UserType.F_FULL_NAME, createPolyString(USER_GUYBRUSH_FULL_NAME));
PrismAsserts.assertNoItem(object, UserType.F_ADDITIONAL_NAME);
PrismAsserts.assertPropertyValue(object,
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("Sailors"), createPolyString("Rum Club"),
createPolyString("Pirate Wannabes"), createPolyString("Lovers"), createPolyString("Drinkers"));
assertAssignedRoles(object, ROLE_SAILOR_OID, ROLE_RED_SAILOR_OID, ROLE_CYAN_SAILOR_OID,
ROLE_EMPTY_OID, ROLE_THIEF_OID, ROLE_PIRATE_OID, ROLE_NICE_PIRATE_OID);
assertLinked(object, jackDummyAccountOid);
assertLinked(object, jackDummyAccountRedOid);
assertLinked(object, guybrushDummyAccountCyanOid);
assertLinks(object, 3);
}
/**
* MID-3460
*/
@Test
public void test110MergeGuybrushJackPreviewDelta() throws Exception {
final String TEST_NAME = "test110MergeGuybrushJackPreviewDelta";
TestUtil.displayTestTile(this, TEST_NAME);
Task task = taskManager.createTaskInstance(TestMerge.class.getName() + "." + TEST_NAME);
OperationResult result = task.getResult();
PrismObject<UserType> userGuybrushBefore = getUser(USER_GUYBRUSH_OID);
display("Guybrush before", userGuybrushBefore);
PrismObject<UserType> userJackBefore = getUser(USER_JACK_OID);
display("Jack before", userJackBefore);
// WHEN
TestUtil.displayWhen(TEST_NAME);
MergeDeltas<UserType> deltas =
modelInteractionService.mergeObjectsPreviewDeltas(UserType.class,
USER_GUYBRUSH_OID, USER_JACK_OID, MERGE_CONFIG_DEFAULT_NAME, task, result);
// THEN
TestUtil.displayThen(TEST_NAME);
result.computeStatus();
TestUtil.assertSuccess(result);
display("Deltas", deltas);
ObjectDelta<UserType> delta = deltas.getLeftObjectDelta();
PrismAsserts.assertIsModify(delta);
assertEquals("Wrong delta OID", USER_GUYBRUSH_OID, delta.getOid());
PrismAsserts.assertNoItemDelta(delta, UserType.F_NAME);
PrismAsserts.assertNoItemDelta(delta, UserType.F_GIVEN_NAME);
PrismAsserts.assertPropertyReplace(delta, UserType.F_FAMILY_NAME);
PrismAsserts.assertPropertyReplace(delta, UserType.F_FULL_NAME,
createPolyString(USER_JACK_FULL_NAME));
PrismAsserts.assertPropertyReplace(delta, UserType.F_ADDITIONAL_NAME,
createPolyString(USER_JACK_ADDITIONAL_NAME));
PrismAsserts.assertPropertyReplace(delta, UserType.F_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"), createPolyString("Drinkers"));
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.assertNoItemDelta(delta, UserType.F_DELEGATED_REF);
PrismAsserts.assertContainerAdd(delta, UserType.F_ASSIGNMENT,
FocusTypeUtil.createRoleAssignment(ROLE_PIRATE_OID),
FocusTypeUtil.createRoleAssignment(ROLE_NICE_PIRATE_OID));
PrismAsserts.assertNoItemDelta(delta, UserType.F_LINK_REF);
ObjectDelta<UserType> leftLinkDelta = deltas.getLeftLinkDelta();
PrismAsserts.assertReferenceAdd(leftLinkDelta, UserType.F_LINK_REF, jackDummyAccountRedOid);
ObjectDelta<UserType> rightLinkDelta = deltas.getRightLinkDelta();
PrismAsserts.assertReferenceDelete(rightLinkDelta, UserType.F_LINK_REF, jackDummyAccountRedOid);
}
/**
* MID-3460
*/
@Test
public void test112MergeGuybrushJackPreviewObject() throws Exception {
final String TEST_NAME = "test112MergeGuybrushJackPreviewObject";
TestUtil.displayTestTile(this, TEST_NAME);
Task task = taskManager.createTaskInstance(TestMerge.class.getName() + "." + TEST_NAME);
OperationResult result = task.getResult();
// WHEN
TestUtil.displayWhen(TEST_NAME);
PrismObject<UserType> object =
modelInteractionService.mergeObjectsPreviewObject(UserType.class,
USER_GUYBRUSH_OID, USER_JACK_OID, MERGE_CONFIG_DEFAULT_NAME, task, result);
// THEN
TestUtil.displayThen(TEST_NAME);
result.computeStatus();
TestUtil.assertSuccess(result);
display("Object", object);
assertEquals("Wrong object OID", USER_GUYBRUSH_OID, object.getOid());
PrismAsserts.assertPropertyValue(object,
UserType.F_NAME, createPolyString(USER_GUYBRUSH_USERNAME));
PrismAsserts.assertPropertyValue(object,
UserType.F_GIVEN_NAME, createPolyString(USER_GUYBRUSH_GIVEN_NAME));
PrismAsserts.assertNoItem(object, UserType.F_FAMILY_NAME);
PrismAsserts.assertPropertyValue(object,
UserType.F_FULL_NAME, createPolyString(USER_JACK_FULL_NAME));
PrismAsserts.assertPropertyValue(object,
UserType.F_ADDITIONAL_NAME, createPolyString(USER_JACK_ADDITIONAL_NAME));
PrismAsserts.assertPropertyValue(object,
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("Sailors"), createPolyString("Rum Club"),
createPolyString("Pirate Wannabes"), createPolyString("Lovers"), createPolyString("Drinkers"));
assertAssignedRoles(object, ROLE_SAILOR_OID, ROLE_RED_SAILOR_OID, ROLE_CYAN_SAILOR_OID,
ROLE_EMPTY_OID, ROLE_THIEF_OID, ROLE_PIRATE_OID, ROLE_NICE_PIRATE_OID);
}
/**
* MID-3460
*/
@Test
public void test200MergeJackGuybrushExpressionPreviewDelta() throws Exception {
final String TEST_NAME = "test200MergeJackGuybrushExpressionPreviewDelta";
TestUtil.displayTestTile(this, TEST_NAME);
Task task = taskManager.createTaskInstance(TestMerge.class.getName() + "." + TEST_NAME);
OperationResult result = task.getResult();
PrismObject<UserType> userJackBefore = getUser(USER_JACK_OID);
display("Jack before", userJackBefore);
PrismObject<UserType> userGuybrushBefore = getUser(USER_GUYBRUSH_OID);
display("Guybrush before", userGuybrushBefore);
// WHEN
TestUtil.displayWhen(TEST_NAME);
MergeDeltas<UserType> deltas =
modelInteractionService.mergeObjectsPreviewDeltas(UserType.class,
USER_JACK_OID, USER_GUYBRUSH_OID, MERGE_CONFIG_EXPRESSION_NAME, task, result);
// THEN
TestUtil.displayThen(TEST_NAME);
result.computeStatus();
TestUtil.assertSuccess(result);
display("Deltas", deltas);
ObjectDelta<UserType> delta = deltas.getLeftObjectDelta();
PrismAsserts.assertIsModify(delta);
assertEquals("Wrong delta OID", USER_JACK_OID, delta.getOid());
PrismAsserts.assertNoItemDelta(delta, UserType.F_NAME);
PrismAsserts.assertNoItemDelta(delta, UserType.F_GIVEN_NAME);
PrismAsserts.assertNoItemDelta(delta, UserType.F_FAMILY_NAME);
PrismAsserts.assertNoItemDelta(delta, UserType.F_FULL_NAME);
PrismAsserts.assertNoItemDelta(delta, UserType.F_ADDITIONAL_NAME);
PrismAsserts.assertPropertyAdd(delta, UserType.F_EMPLOYEE_TYPE,
"SAILOR");
PrismAsserts.assertPropertyAdd(delta, UserType.F_ORGANIZATION,
createPolyString("Pirate Wannabes"));
PrismAsserts.assertPropertyDelete(delta, UserType.F_ORGANIZATION,
createPolyString("Sailors"), createPolyString("Drinkers"));
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.assertNoItemDelta(delta, UserType.F_DELEGATED_REF);
PrismAsserts.assertContainerAdd(delta, UserType.F_ASSIGNMENT,
FocusTypeUtil.createRoleAssignment(ROLE_THIEF_OID));
}
/**
* MID-3460
*/
@Test
public void test202MergeJackGuybrushExpressionPreviewObject() throws Exception {
final String TEST_NAME = "test202MergeJackGuybrushExpressionPreviewObject";
TestUtil.displayTestTile(this, TEST_NAME);
Task task = taskManager.createTaskInstance(TestMerge.class.getName() + "." + TEST_NAME);
OperationResult result = task.getResult();
// WHEN
TestUtil.displayWhen(TEST_NAME);
PrismObject<UserType> object =
modelInteractionService.mergeObjectsPreviewObject(UserType.class,
USER_JACK_OID, USER_GUYBRUSH_OID, MERGE_CONFIG_EXPRESSION_NAME, task, result);
// THEN
TestUtil.displayThen(TEST_NAME);
result.computeStatus();
TestUtil.assertSuccess(result);
display("Object", object);
assertEquals("Wrong object OID", USER_JACK_OID, object.getOid());
PrismAsserts.assertPropertyValue(object,
UserType.F_NAME, createPolyString(USER_JACK_USERNAME));
PrismAsserts.assertPropertyValue(object,
UserType.F_GIVEN_NAME, createPolyString(USER_JACK_GIVEN_NAME));
PrismAsserts.assertPropertyValue(object,
UserType.F_FAMILY_NAME, createPolyString(USER_JACK_FAMILY_NAME));
PrismAsserts.assertPropertyValue(object,
UserType.F_FULL_NAME, createPolyString(USER_JACK_FULL_NAME));
PrismAsserts.assertPropertyValue(object,
UserType.F_ADDITIONAL_NAME, createPolyString(USER_JACK_ADDITIONAL_NAME));
PrismAsserts.assertPropertyValue(object,
UserType.F_LOCALITY, createPolyString(USER_JACK_LOCALITY));
PrismAsserts.assertPropertyValue(object,
UserType.F_EMPLOYEE_TYPE, USER_JACK_EMPLOYEE_TYPE, "SAILOR");
PrismAsserts.assertPropertyValue(object,
UserType.F_ORGANIZATION,
createPolyString("Pirate Brethren"), createPolyString("Rum Club"),
createPolyString("Pirate Wannabes"));
assertAssignedRoles(object, ROLE_SAILOR_OID, ROLE_RED_SAILOR_OID, ROLE_CYAN_SAILOR_OID,
ROLE_EMPTY_OID, ROLE_THIEF_OID, ROLE_PIRATE_OID, ROLE_NICE_PIRATE_OID);
}
/**
* The default-specific config is almost the same as default (test1XX),
* just the projections are selected by specific resource.
* MID-3460
*/
@Test
public void test300MergeJackGuybrushPreviewDeltaDefaultSpecific() throws Exception {
final String TEST_NAME = "test300MergeJackGuybrushPreviewDeltaDefaultSpecific";
TestUtil.displayTestTile(this, TEST_NAME);
Task task = taskManager.createTaskInstance(TestMerge.class.getName() + "." + TEST_NAME);
OperationResult result = task.getResult();
PrismObject<UserType> userJackBefore = getUser(USER_JACK_OID);
display("Jack before", userJackBefore);
PrismObject<UserType> userGuybrushBefore = getUser(USER_GUYBRUSH_OID);
display("Guybrush before", userGuybrushBefore);
// WHEN
TestUtil.displayWhen(TEST_NAME);
MergeDeltas<UserType> deltas =
modelInteractionService.mergeObjectsPreviewDeltas(UserType.class,
USER_JACK_OID, USER_GUYBRUSH_OID, MERGE_CONFIG_DEFAULT_SPECIFIC_NAME, task, result);
// THEN
TestUtil.displayThen(TEST_NAME);
result.computeStatus();
TestUtil.assertSuccess(result);
display("Deltas", deltas);
ObjectDelta<UserType> leftObjectdelta = deltas.getLeftObjectDelta();
PrismAsserts.assertIsModify(leftObjectdelta);
assertEquals("Wrong delta OID", USER_JACK_OID, leftObjectdelta.getOid());
PrismAsserts.assertNoItemDelta(leftObjectdelta, UserType.F_NAME);
PrismAsserts.assertNoItemDelta(leftObjectdelta, UserType.F_GIVEN_NAME);
PrismAsserts.assertPropertyReplace(leftObjectdelta, UserType.F_FAMILY_NAME);
PrismAsserts.assertPropertyReplace(leftObjectdelta, UserType.F_FULL_NAME,
createPolyString(USER_GUYBRUSH_FULL_NAME));
PrismAsserts.assertPropertyReplace(leftObjectdelta, UserType.F_ADDITIONAL_NAME);
PrismAsserts.assertPropertyReplace(leftObjectdelta, UserType.F_LOCALITY,
createPolyString(USER_GUYBRUSH_LOCALITY));
PrismAsserts.assertPropertyAdd(leftObjectdelta, UserType.F_EMPLOYEE_TYPE,
"SAILOR", "PIRATE WANNABE");
PrismAsserts.assertPropertyAdd(leftObjectdelta, UserType.F_ORGANIZATION,
createPolyString("Pirate Wannabes"), createPolyString("Lovers"));
PrismAsserts.assertNoItemDelta(leftObjectdelta, UserType.F_ACTIVATION);
PrismAsserts.assertNoItemDelta(leftObjectdelta,
new ItemPath(UserType.F_ACTIVATION, ActivationType.F_ADMINISTRATIVE_STATUS));
PrismAsserts.assertNoItemDelta(leftObjectdelta, UserType.F_ROLE_MEMBERSHIP_REF);
PrismAsserts.assertNoItemDelta(leftObjectdelta, UserType.F_DELEGATED_REF);
PrismAsserts.assertContainerAdd(leftObjectdelta, UserType.F_ASSIGNMENT,
FocusTypeUtil.createRoleAssignment(ROLE_THIEF_OID));
PrismAsserts.assertNoItemDelta(leftObjectdelta, UserType.F_LINK_REF);
ObjectDelta<UserType> leftLinkDelta = deltas.getLeftLinkDelta();
PrismAsserts.assertReferenceAdd(leftLinkDelta, UserType.F_LINK_REF, guybrushDummyAccountCyanOid);
ObjectDelta<UserType> rightLinkDelta = deltas.getRightLinkDelta();
PrismAsserts.assertReferenceDelete(rightLinkDelta, UserType.F_LINK_REF, guybrushDummyAccountCyanOid);
}
/**
* MID-3460
*/
@Test
public void test500MergeJackGuybrush() throws Exception {
final String TEST_NAME = "test500MergeJackGuybrush";
TestUtil.displayTestTile(this, TEST_NAME);
Task task = taskManager.createTaskInstance(TestMerge.class.getName() + "." + TEST_NAME);
OperationResult result = task.getResult();
// WHEN
TestUtil.displayWhen(TEST_NAME);
modelService.mergeObjects(UserType.class,
USER_JACK_OID, USER_GUYBRUSH_OID, MERGE_CONFIG_DEFAULT_NAME, task, result);
// THEN
TestUtil.displayThen(TEST_NAME);
result.computeStatus();
TestUtil.assertSuccess(result);
PrismObject<UserType> object = getObject(UserType.class, USER_JACK_OID);
display("Object", object);
assertEquals("Wrong object OID", USER_JACK_OID, object.getOid());
PrismAsserts.assertPropertyValue(object,
UserType.F_NAME, createPolyString(USER_JACK_USERNAME));
PrismAsserts.assertPropertyValue(object,
UserType.F_GIVEN_NAME, createPolyString(USER_JACK_GIVEN_NAME));
PrismAsserts.assertNoItem(object, UserType.F_FAMILY_NAME);
PrismAsserts.assertPropertyValue(object,
UserType.F_FULL_NAME, createPolyString(USER_GUYBRUSH_FULL_NAME));
PrismAsserts.assertNoItem(object, UserType.F_ADDITIONAL_NAME);
PrismAsserts.assertPropertyValue(object,
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_RED_SAILOR_OID, ROLE_CYAN_SAILOR_OID,
ROLE_EMPTY_OID, ROLE_THIEF_OID, ROLE_PIRATE_OID, ROLE_NICE_PIRATE_OID);
assertNoObject(UserType.class, USER_GUYBRUSH_OID);
}
}