Search in sources :

Example 21 with MUser

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();
}
Also used : OperationResult(com.evolveum.midpoint.schema.result.OperationResult) MUser(com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser) Test(org.testng.annotations.Test) SqaleRepoBaseTest(com.evolveum.midpoint.repo.sqale.SqaleRepoBaseTest)

Example 22 with MUser

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");
}
Also used : OperationResult(com.evolveum.midpoint.schema.result.OperationResult) MUser(com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser) Test(org.testng.annotations.Test) SqaleRepoBaseTest(com.evolveum.midpoint.repo.sqale.SqaleRepoBaseTest)

Example 23 with MUser

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);
}
Also used : OperationResult(com.evolveum.midpoint.schema.result.OperationResult) MReference(com.evolveum.midpoint.repo.sqale.qmodel.ref.MReference) MUser(com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser) Test(org.testng.annotations.Test) SqaleRepoBaseTest(com.evolveum.midpoint.repo.sqale.SqaleRepoBaseTest)

Example 24 with MUser

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));
}
Also used : QName(javax.xml.namespace.QName) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) MReference(com.evolveum.midpoint.repo.sqale.qmodel.ref.MReference) MUser(com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser) Test(org.testng.annotations.Test) SqaleRepoBaseTest(com.evolveum.midpoint.repo.sqale.SqaleRepoBaseTest)

Example 25 with MUser

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();
}
Also used : OperationResult(com.evolveum.midpoint.schema.result.OperationResult) ItemDelta(com.evolveum.midpoint.prism.delta.ItemDelta) MUser(com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser) Test(org.testng.annotations.Test) SqaleRepoBaseTest(com.evolveum.midpoint.repo.sqale.SqaleRepoBaseTest)

Aggregations

SqaleRepoBaseTest (com.evolveum.midpoint.repo.sqale.SqaleRepoBaseTest)82 MUser (com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser)82 Test (org.testng.annotations.Test)82 OperationResult (com.evolveum.midpoint.schema.result.OperationResult)81 PolyString (com.evolveum.midpoint.prism.polystring.PolyString)36 QName (javax.xml.namespace.QName)30 QUser (com.evolveum.midpoint.repo.sqale.qmodel.focus.QUser)23 ItemName (com.evolveum.midpoint.prism.path.ItemName)21 PolyStringType (com.evolveum.prism.xml.ns._public.types_3.PolyStringType)21 BigDecimal (java.math.BigDecimal)21 Jsonb (com.evolveum.midpoint.repo.sqale.jsonb.Jsonb)20 JdbcSession (com.evolveum.midpoint.repo.sqlbase.JdbcSession)20 Instant (java.time.Instant)20 PrismObject (com.evolveum.midpoint.prism.PrismObject)19 RepositoryService (com.evolveum.midpoint.repo.api.RepositoryService)19 com.evolveum.midpoint.repo.sqale.qmodel.accesscert (com.evolveum.midpoint.repo.sqale.qmodel.accesscert)19 com.evolveum.midpoint.repo.sqale.qmodel.assignment (com.evolveum.midpoint.repo.sqale.qmodel.assignment)19 MContainerType (com.evolveum.midpoint.repo.sqale.qmodel.common.MContainerType)19 QConnector (com.evolveum.midpoint.repo.sqale.qmodel.connector.QConnector)19 MReference (com.evolveum.midpoint.repo.sqale.qmodel.ref.MReference)19