@Test
public void testSubtractAssignmentFromAddDelta() throws Exception {
final String TEST_NAME = "testSubtractAssignmentFromAddDelta";
displayTestTile(TEST_NAME);
PrismObject<UserType> user = PrismTestUtil.parseObject(USER_BILL_FILE);
ObjectDelta<UserType> addDelta = DeltaFactory.Object.createAddDelta(user);
PrismContainerDefinition<AssignmentType> assignmentDef = PrismTestUtil.getSchemaRegistry()
.findContainerDefinitionByCompileTimeClass(AssignmentType.class).clone();
assignmentDef.toMutable().setMaxOccurs(1);
PrismContainer<AssignmentType> assignmentContainer = assignmentDef.instantiate();
PrismContainerValue<AssignmentType> assignmentValue =
ObjectTypeUtil.createAssignmentTo("00000001-d34d-b33f-f00d-000000000002", ObjectTypes.ROLE,
getPrismContext())
.asPrismContainerValue();
assignmentContainer.add(assignmentValue);
System.out.println("Delta before operation:\n" + addDelta.debugDump() + "\n");
System.out.println("Assignment to subtract:\n" + assignmentValue.debugDump() + "\n");
boolean removed = addDelta.subtract(ItemPath.create(SchemaConstants.PATH_ASSIGNMENT), assignmentValue, false, false);
System.out.println("Delta after operation:\n" + addDelta.debugDump() + "\n");
System.out.println("Removed: " + removed + "\n");
assertTrue("Not removed", removed);
assertTrue("Remaining delta is not an ADD delta", addDelta.isAdd());
assertEquals("Wrong # of remaining assignments", 2, addDelta.getObjectToAdd().asObjectable().getAssignment().size());
}