use of com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser in project midpoint by Evolveum.
the class SqaleRepoModifyObjectTest method test131DeletePolyStringAttribute.
@Test
public void test131DeletePolyStringAttribute() throws ObjectAlreadyExistsException, ObjectNotFoundException, SchemaException {
OperationResult result = createOperationResult();
given("delta with polystring nickname replace with null for user 1");
ObjectDelta<UserType> delta = prismContext.deltaFor(UserType.class).item(UserType.F_NICK_NAME).replace().asObjectDelta(user1Oid);
and("user row previously having the nickname value");
MUser originalRow = selectObjectByOid(QUser.class, user1Oid);
assertThat(originalRow.nickNameOrig).isNotNull();
assertThat(originalRow.nickNameNorm).isNotNull();
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 nickname is gone");
UserType userObject = repositoryService.getObject(UserType.class, user1Oid, null, result).asObjectable();
assertThat(userObject.getVersion()).isEqualTo(String.valueOf(originalRow.version + 1));
assertThat(userObject.getNickName()).isNull();
and("externalized column is set to NULL");
MUser row = selectObjectByOid(QUser.class, user1Oid);
assertThat(row.version).isEqualTo(originalRow.version + 1);
assertThat(row.nickNameOrig).isNull();
assertThat(row.nickNameNorm).isNull();
}
use of com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser in project midpoint by Evolveum.
the class SqaleRepoModifyObjectTest method test105StringReplaceWithExistingValueWorksOk.
@Test
public void test105StringReplaceWithExistingValueWorksOk() throws ObjectAlreadyExistsException, ObjectNotFoundException, SchemaException {
OperationResult result = createOperationResult();
given("delta with email replace for user 1 (email has previous value)");
ObjectDelta<UserType> delta = prismContext.deltaFor(UserType.class).item(UserType.F_EMAIL_ADDRESS).replace("newest@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 changed and email value is replaced");
UserType userObject = repositoryService.getObject(UserType.class, user1Oid, null, result).asObjectable();
assertThat(userObject.getEmailAddress()).isEqualTo("newest@email.com");
and("externalized column is updated");
MUser row = selectObjectByOid(QUser.class, user1Oid);
assertThat(row.emailAddress).isEqualTo("newest@email.com");
}
use of com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser in project midpoint by Evolveum.
the class SqaleRepoModifyObjectTest method test175ReplacingProjectionRefsWithoutSpecifyingTypeShouldUseDefinition.
@Test
public void test175ReplacingProjectionRefsWithoutSpecifyingTypeShouldUseDefinition() throws ObjectNotFoundException, SchemaException, ObjectAlreadyExistsException {
OperationResult result = createOperationResult();
MUser originalRow = selectObjectByOid(QUser.class, user1Oid);
given("delta replacing projection refs with one without specified type");
UUID refTargetOid = UUID.randomUUID();
ObjectDelta<UserType> delta = prismContext.deltaFor(UserType.class).item(UserType.F_LINK_REF).replace(new ObjectReferenceType().oid(refTargetOid.toString())).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.getLinkRef()).singleElement().matches(r -> r.getType().equals(ShadowType.COMPLEX_TYPE));
and("externalized refs are inserted to the dedicated table");
QObjectReference<?> r = QObjectReferenceMapping.getForProjection().defaultAlias();
List<MReference> refs = select(r, r.ownerOid.eq(UUID.fromString(user1Oid)));
assertThat(refs).singleElement().matches(rRow -> rRow.targetType == MObjectType.SHADOW);
}
use of com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser in project midpoint by Evolveum.
the class SqaleRepoModifyObjectTest method test163ReplacingProjectionRefs.
@Test
public void test163ReplacingProjectionRefs() throws ObjectNotFoundException, SchemaException, ObjectAlreadyExistsException {
OperationResult result = createOperationResult();
given("user 1 with a few projection refs");
UUID refTargetOid1 = UUID.randomUUID();
UUID refTargetOid2 = UUID.randomUUID();
QName refRelation1 = QName.valueOf("{https://random.org/ns}projection-rel1");
QName refRelation2 = QName.valueOf("{https://random.org/ns}projection-rel2");
ObjectDelta<UserType> delta = prismContext.deltaFor(UserType.class).item(UserType.F_LINK_REF).replace(new ObjectReferenceType().oid(refTargetOid1.toString()).type(ShadowType.COMPLEX_TYPE).relation(// to delete
refRelation1), new ObjectReferenceType().oid(refTargetOid1.toString()).type(ShadowType.COMPLEX_TYPE).relation(refRelation2), new ObjectReferenceType().oid(refTargetOid2.toString()).type(ShadowType.COMPLEX_TYPE).relation(refRelation1), new ObjectReferenceType().oid(refTargetOid2.toString()).type(ShadowType.COMPLEX_TYPE).relation(// to delete
refRelation2)).asObjectDelta(user1Oid);
repositoryService.modifyObject(UserType.class, user1Oid, delta.getModifications(), result);
and("delta both adding and deleting multiple projection refs");
UUID refTargetOid3 = UUID.randomUUID();
UUID refTargetOid4 = UUID.randomUUID();
delta = prismContext.deltaFor(UserType.class).item(UserType.F_LINK_REF).delete(// type is ignored/ignorable
new ObjectReferenceType().oid(refTargetOid1.toString()).relation(refRelation1), new ObjectReferenceType().oid(refTargetOid2.toString()).relation(refRelation2), // nonexistent anyway
new ObjectReferenceType().oid(refTargetOid3.toString()).relation(refRelation2), // like add bellow, the deletion will be "narrowed" out and ignored
new ObjectReferenceType().oid(refTargetOid3.toString()).relation(refRelation1)).add(new ObjectReferenceType().oid(refTargetOid3.toString()).type(ShadowType.COMPLEX_TYPE).relation(refRelation1), // delete above will be "narrowed" out, this WILL be added
new ObjectReferenceType().oid(refTargetOid3.toString()).type(ShadowType.COMPLEX_TYPE).relation(refRelation2), new ObjectReferenceType().oid(refTargetOid4.toString()).type(ShadowType.COMPLEX_TYPE).relation(refRelation1), new ObjectReferenceType().oid(refTargetOid4.toString()).type(ShadowType.COMPLEX_TYPE).relation(refRelation2)).asObjectDelta(user1Oid);
when("modifyObject is called");
MUser originalRow = selectObjectByOid(QUser.class, user1Oid);
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.getLinkRef()).hasSize(6).anyMatch(refMatcher(refTargetOid1, refRelation2)).anyMatch(refMatcher(refTargetOid2, refRelation1)).anyMatch(refMatcher(refTargetOid3, refRelation1)).anyMatch(refMatcher(refTargetOid3, refRelation2)).anyMatch(refMatcher(refTargetOid4, refRelation1)).anyMatch(refMatcher(refTargetOid4, refRelation2));
and("user row version is incremented");
MUser row = selectObjectByOid(QUser.class, user1Oid);
assertThat(row.version).isEqualTo(originalRow.version + 1);
and("externalized refs are inserted and deleted accordingly");
QObjectReference<?> r = QObjectReferenceMapping.getForProjection().defaultAlias();
List<MReference> refs = select(r, r.ownerOid.eq(UUID.fromString(user1Oid)));
assertThat(refs).hasSize(6).anyMatch(refRowMatcher(refTargetOid1, refRelation2)).anyMatch(refRowMatcher(refTargetOid2, refRelation1)).anyMatch(refRowMatcher(refTargetOid3, refRelation1)).anyMatch(refRowMatcher(refTargetOid3, refRelation2)).anyMatch(refRowMatcher(refTargetOid4, refRelation1)).anyMatch(refRowMatcher(refTargetOid4, refRelation2));
}
use of com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser in project midpoint by Evolveum.
the class SqaleRepoModifyObjectTest method test507SettingExtensionContainerToNull.
@Test
public void test507SettingExtensionContainerToNull() throws Exception {
OperationResult result = createOperationResult();
MUser originalRow = selectObjectByOid(QUser.class, user1Oid);
given("delta adding int extension item");
List<ItemDelta<?, ?>> delta = prismContext.deltaFor(UserType.class).item(FocusType.F_EXTENSION).replace().asItemDeltas();
when("modifyObject is called");
repositoryService.modifyObject(UserType.class, user1Oid, delta, 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).isNull();
and("ext column is cleared");
MUser row = selectObjectByOid(QUser.class, user1Oid);
assertThat(row.version).isEqualTo(originalRow.version + 1);
assertThat(row.ext).isNull();
}
Aggregations