use of com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser in project midpoint by Evolveum.
the class SqaleRepoModifyObjectTest method test503AddingAndDeletingValuesFromSingleExtensionItem.
@Test
public void test503AddingAndDeletingValuesFromSingleExtensionItem() throws Exception {
OperationResult result = createOperationResult();
MUser originalRow = selectObjectByOid(QUser.class, user1Oid);
given("delta adding and deleting values from a single extension item");
ObjectDelta<UserType> delta = prismContext.deltaFor(UserType.class).item(FocusType.F_EXTENSION, new QName("string-mv")).delete("s1", "s5", "s6").item(FocusType.F_EXTENSION, new QName("string-mv")).add("s5", "s7").asObjectDelta(user1Oid);
when("modifyObject is called");
repositoryService.modifyObject(UserType.class, user1Oid, delta.getModifications(), result);
then("operation is successful");
assertThatOperationResult(result).isSuccess();
and("serialized form (fullObject) is updated");
UserType user = repositoryService.getObject(UserType.class, user1Oid, null, result).asObjectable();
assertThat(user.getVersion()).isEqualTo(String.valueOf(originalRow.version + 1));
ExtensionType extension = user.getExtension();
Item<?, ?> item = extension.asPrismContainerValue().findItem(new ItemName("string-mv"));
assertThat(item).isNotNull();
// noinspection unchecked
assertThat((Collection<String>) item.getRealValues()).containsExactlyInAnyOrder("s2", "s3", "s4", "s7");
and("externalized column is updated");
ExtensionType extensionContainer = user.getExtension();
MUser row = selectObjectByOid(QUser.class, user1Oid);
assertThat(row.version).isEqualTo(originalRow.version + 1);
assertThat(row.ext).isNotNull();
assertThat(Jsonb.toMap(row.ext)).containsEntry(// changed
extensionKey(extensionContainer, "string-mv"), List.of("s2", "s3", "s4", "s7")).containsEntry(extensionKey(extensionContainer, "int"), // preserved
47).containsEntry(extensionKey(extensionContainer, "poly-mv"), List.of(Map.of("o", "poly-ext1", "n", "polyext1"), Map.of("o", "poly-ext2", "n", "polyext2")));
}
use of com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser in project midpoint by Evolveum.
the class SqaleRepoModifyObjectTest method test312AddingAssignmentWithUsedBytFreeCid.
@Test
public void test312AddingAssignmentWithUsedBytFreeCid() throws ObjectAlreadyExistsException, ObjectNotFoundException, SchemaException {
OperationResult result = createOperationResult();
MUser originalRow = selectObjectByOid(QUser.class, user1Oid);
QAssignment<?> a = QAssignmentMapping.getAssignmentMapping().defaultAlias();
int origAssignmentCount = (int) count(a, a.ownerOid.eq(UUID.fromString(user1Oid)));
// this is NOT recommended in practice, reusing previous CIDs is messy
given("delta adding assignments with used but now free CID for user 1");
ObjectDelta<UserType> delta = prismContext.deltaFor(UserType.class).item(UserType.F_ASSIGNMENT).add(new AssignmentType(prismContext).id(originalRow.containerIdSeq - 1).order(1)).asObjectDelta(user1Oid);
when("modifyObject is called");
repositoryService.modifyObject(UserType.class, user1Oid, delta.getModifications(), result);
then("operation is successful");
assertThatOperationResult(result).isSuccess();
and("serialized form (fullObject) is updated and provided CID is used");
UserType userObject = repositoryService.getObject(UserType.class, user1Oid, null, result).asObjectable();
assertThat(userObject.getVersion()).isEqualTo(String.valueOf(originalRow.version + 1));
List<AssignmentType> assignments = userObject.getAssignment();
assertThat(assignments).hasSize(origAssignmentCount + 1).anyMatch(ass -> ass.getId().equals(originalRow.containerIdSeq - 1));
and("new assignment row is created");
MUser row = selectObjectByOid(QUser.class, user1Oid);
assertThat(row.version).isEqualTo(originalRow.version + 1);
// no change
assertThat(row.containerIdSeq).isEqualTo(originalRow.containerIdSeq);
List<MAssignment> aRows = select(a, a.ownerOid.eq(UUID.fromString(user1Oid)));
assertThat(aRows).hasSize(assignments.size()).anyMatch(aRow -> aRow.cid.equals(originalRow.containerIdSeq - 1) && aRow.orderValue == 1);
}
use of com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser in project midpoint by Evolveum.
the class SqaleRepoModifyObjectTest method test100ChangeStringAttribute.
// region various types of simple items
@Test
public void test100ChangeStringAttribute() throws ObjectAlreadyExistsException, ObjectNotFoundException, SchemaException {
OperationResult result = createOperationResult();
MUser originalRow = selectObjectByOid(QUser.class, user1Oid);
given("delta with email change for user 1 using property add modification");
ObjectDelta<UserType> delta = prismContext.deltaFor(UserType.class).item(UserType.F_EMAIL_ADDRESS).add("new@email.com").asObjectDelta(user1Oid);
when("modifyObject is called");
repositoryService.modifyObject(UserType.class, user1Oid, delta.getModifications(), result);
then("operation is successful");
assertThatOperationResult(result).isSuccess();
and("serialized form (fullObject) is updated");
UserType userObject = repositoryService.getObject(UserType.class, user1Oid, null, result).asObjectable();
assertThat(userObject.getVersion()).isEqualTo(String.valueOf(originalRow.version + 1));
assertThat(userObject.getEmailAddress()).isEqualTo("new@email.com");
and("externalized column is updated");
MUser row = selectObjectByOid(QUser.class, user1Oid);
assertThat(row.version).isEqualTo(originalRow.version + 1);
assertThat(row.emailAddress).isEqualTo("new@email.com");
}
use of com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser in project midpoint by Evolveum.
the class SqaleRepoModifyObjectTest method test192DeletingAllOrganizationsByValuesSetsColumnToNull.
@Test
public void test192DeletingAllOrganizationsByValuesSetsColumnToNull() throws Exception {
OperationResult result = createOperationResult();
given("delta deleting all subtype values");
ObjectDelta<UserType> delta = prismContext.deltaFor(UserType.class).item(UserType.F_ORGANIZATION).delete(new PolyString("orgmod-1"), new PolyString("orgmod-3"), new PolyString("orgmod-4")).asObjectDelta(user1Oid);
when("modifyObject is called");
repositoryService.modifyObject(UserType.class, user1Oid, delta.getModifications(), result);
then("operation is successful");
assertThatOperationResult(result).isSuccess();
and("serialized form (fullObject) is updated and has no subtypes now");
UserType userObject = repositoryService.getObject(UserType.class, user1Oid, null, result).asObjectable();
assertThat(userObject.getOrganization()).isNullOrEmpty();
and("column with subtypes is set to null");
MUser row = selectObjectByOid(QUser.class, user1Oid);
assertThat(row.organizations).isNull();
}
use of com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser in project midpoint by Evolveum.
the class SqaleRepoModifyObjectTest method test102DeleteStringAttribute.
@Test
public void test102DeleteStringAttribute() throws ObjectAlreadyExistsException, ObjectNotFoundException, SchemaException {
OperationResult result = createOperationResult();
MUser originalRow = selectObjectByOid(QUser.class, user1Oid);
given("delta with email replace to null ('delete') for user 1");
ObjectDelta<UserType> delta = prismContext.deltaFor(UserType.class).item(UserType.F_EMAIL_ADDRESS).replace().asObjectDelta(user1Oid);
when("modifyObject is called");
repositoryService.modifyObject(UserType.class, user1Oid, delta.getModifications(), result);
then("operation is successful");
assertThatOperationResult(result).isSuccess();
and("serialized form (fullObject) is updated and email is gone");
UserType userObject = repositoryService.getObject(UserType.class, user1Oid, null, result).asObjectable();
assertThat(userObject.getVersion()).isEqualTo(String.valueOf(originalRow.version + 1));
assertThat(userObject.getEmailAddress()).isNull();
and("externalized column is set to NULL");
MUser row = selectObjectByOid(QUser.class, user1Oid);
assertThat(row.version).isEqualTo(originalRow.version + 1);
assertThat(row.emailAddress).isNull();
}
Aggregations