use of com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser in project midpoint by Evolveum.
the class SqaleRepoModifyObjectTest method test500SettingExtensionItemValue.
// endregion
// region extension items
@Test
public void test500SettingExtensionItemValue() throws Exception {
OperationResult result = createOperationResult();
MUser originalRow = selectObjectByOid(QUser.class, user1Oid);
given("delta adding string extension item");
ObjectDelta<UserType> delta = prismContext.deltaFor(UserType.class).item(FocusType.F_EXTENSION, new QName("string")).replace("string-value500").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 extensionContainer = user.getExtension();
assertThat(extensionContainer).isNotNull().extracting(e -> e.asPrismContainerValue().findItem(new ItemName("string"))).isNotNull().extracting(i -> i.getRealValue()).isEqualTo("string-value500");
and("externalized column is updated");
MUser row = selectObjectByOid(QUser.class, user1Oid);
assertThat(row.version).isEqualTo(originalRow.version + 1);
assertThat(row.ext).isNotNull();
assertThat(Jsonb.toMap(row.ext)).containsEntry(extensionKey(extensionContainer, "string"), "string-value500");
}
use of com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser in project midpoint by Evolveum.
the class SqaleRepoModifyObjectTest method test190ReplacingOrganizationValuesSetsJsonbColumn.
@Test
public void test190ReplacingOrganizationValuesSetsJsonbColumn() throws Exception {
OperationResult result = createOperationResult();
MUser originalRow = selectObjectByOid(QUser.class, user1Oid);
given("delta to replace organizations with a couple of values");
ObjectDelta<UserType> delta = prismContext.deltaFor(UserType.class).item(UserType.F_ORGANIZATION).replace(new PolyString("orgmod-1"), new PolyString("orgmod-2")).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 provided subtypes");
UserType userObject = repositoryService.getObject(UserType.class, user1Oid, null, result).asObjectable();
assertThat(userObject.getVersion()).isEqualTo(String.valueOf(originalRow.version + 1));
assertThat(userObject.getOrganization()).extracting(p -> p.getOrig()).containsExactlyInAnyOrder("orgmod-1", "orgmod-2");
and("column with subtypes is updated");
MUser row = selectObjectByOid(QUser.class, user1Oid);
assertThat(row.version).isEqualTo(originalRow.version + 1);
assertThat(row.organizations).isNotNull();
assertThat(Jsonb.toList(row.organizations)).containsExactlyInAnyOrder(Map.of("o", "orgmod-1", "n", "orgmod1"), Map.of("o", "orgmod-2", "n", "orgmod2"));
}
use of com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser in project midpoint by Evolveum.
the class SqaleRepoModifyObjectTest method test399DeleteAllAssignments.
@Test
public void test399DeleteAllAssignments() throws ObjectAlreadyExistsException, ObjectNotFoundException, SchemaException {
OperationResult result = createOperationResult();
MUser originalRow = selectObjectByOid(QUser.class, user1Oid);
given("delta deleting all assignments from user 1 using replace");
ObjectDelta<UserType> delta = prismContext.deltaFor(UserType.class).item(UserType.F_ASSIGNMENT).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 has no assignment now");
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).isEmpty();
and("there are no assignment rows for the user now");
MUser row = selectObjectByOid(QUser.class, user1Oid);
assertThat(row.version).isEqualTo(originalRow.version + 1);
QAssignment<?> a = QAssignmentMapping.getAssignmentMapping().defaultAlias();
assertThat(select(a, a.ownerOid.eq(UUID.fromString(user1Oid)))).isEmpty();
}
use of com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser in project midpoint by Evolveum.
the class SqaleRepoModifyObjectTest method test304MultipleModificationsOfExistingAssignment.
@Test
public void test304MultipleModificationsOfExistingAssignment() throws ObjectAlreadyExistsException, ObjectNotFoundException, SchemaException {
OperationResult result = createOperationResult();
MUser originalRow = selectObjectByOid(QUser.class, user1Oid);
given("delta changing multiple assignments for user 1");
QAssignment<?> a = QAssignmentMapping.getAssignmentMapping().defaultAlias();
long assOrder48Cid = selectOne(a, a.ownerOid.eq(UUID.fromString(user1Oid)), a.orderValue.eq(48)).cid;
long assOrder50Cid = selectOne(a, a.ownerOid.eq(UUID.fromString(user1Oid)), a.orderValue.eq(50)).cid;
ObjectDelta<UserType> delta = prismContext.deltaFor(UserType.class).item(UserType.F_ASSIGNMENT, assOrder48Cid, AssignmentType.F_ORDER).replace(50).item(UserType.F_ASSIGNMENT, assOrder48Cid, AssignmentType.F_METADATA).replace().item(UserType.F_ASSIGNMENT, assOrder50Cid, AssignmentType.F_CONSTRUCTION).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");
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(3).anyMatch(// first one stays 47
ass -> ass.getOrder() == 47).anyMatch(ass -> // previously 48
ass.getOrder() == 50 && // removed metadata
ass.getMetadata() == null && ass.getTargetRef() != null).anyMatch(ass -> ass.getOrder() == 50 && // never had any
ass.getMetadata() == null && ass.getTargetRef() == null && // removed construction
ass.getConstruction() == null);
and("assignment row is created");
MUser row = selectObjectByOid(QUser.class, user1Oid);
assertThat(row.version).isEqualTo(originalRow.version + 1);
assertThat(select(a, a.ownerOid.eq(UUID.fromString(user1Oid)))).hasSize(3).anyMatch(// first one stays 47
ass -> ass.orderValue == 47).anyMatch(ass -> // previously 48
ass.orderValue == 50 && // removed metadata
ass.createChannelId == null && ass.targetRefTargetOid != null).anyMatch(ass -> ass.orderValue == 50 && // never had any
ass.createChannelId == null && ass.targetRefTargetOid == null && // removed construction
ass.resourceRefTargetOid == null);
// Approver references were removed from the only assignment that had them.
QAssignmentReference ar = QAssignmentReferenceMapping.getForAssignmentCreateApprover().defaultAlias();
assertThat(count(ar, ar.ownerOid.eq(UUID.fromString(user1Oid)))).isZero();
}
use of com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser in project midpoint by Evolveum.
the class SqaleRepoModifyObjectTest method test104StringDeleteWithWrongValueDoesNotChangeAnything.
@Test
public void test104StringDeleteWithWrongValueDoesNotChangeAnything() throws ObjectAlreadyExistsException, ObjectNotFoundException, SchemaException {
OperationResult result = createOperationResult();
MUser originalRow = selectObjectByOid(QUser.class, user1Oid);
given("delta with email delete for user 1 using wrong previous value");
ObjectDelta<UserType> delta = prismContext.deltaFor(UserType.class).item(UserType.F_EMAIL_ADDRESS).delete("x").asObjectDelta(user1Oid);
when("modifyObject is called");
repositoryService.modifyObject(UserType.class, user1Oid, delta.getModifications(), result);
then("operation is successful");
assertThatOperationResult(result).isSuccess();
// Internal note: the delta is filter by prismObject.narrowModifications
and("serialized form (fullObject) is not changed and previous email is still there");
UserType userObject = repositoryService.getObject(UserType.class, user1Oid, null, result).asObjectable();
assertThat(userObject.getEmailAddress()).isEqualTo("newer@email.com");
and("externalized column is updated");
MUser row = selectObjectByOid(QUser.class, user1Oid);
assertThat(row.emailAddress).isEqualTo("newer@email.com");
// This is rather implementation detail, but it shows that when narrowed modifications are
// empty, we don't bother with update at all which is more efficient.
assertThat(row.version).isEqualTo(originalRow.version);
}
Aggregations