Search in sources :

Example 11 with MUser

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")));
}
Also used : QName(javax.xml.namespace.QName) ItemName(com.evolveum.midpoint.prism.path.ItemName) 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 12 with MUser

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);
}
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 13 with MUser

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");
}
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 14 with MUser

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();
}
Also used : PolyString(com.evolveum.midpoint.prism.polystring.PolyString) 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 15 with MUser

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();
}
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)

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