Search in sources :

Example 46 with MUser

use of com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser in project midpoint by Evolveum.

the class SqaleRepoAddDeleteObjectTest method test200AddObjectWithMultivalueContainers.

@Test
public void test200AddObjectWithMultivalueContainers() throws ObjectAlreadyExistsException, SchemaException {
    OperationResult result = createOperationResult();
    given("user with assignment and ref");
    String userName = "user" + getTestNumber();
    String targetRef1 = UUID.randomUUID().toString();
    String targetRef2 = UUID.randomUUID().toString();
    UserType user = new UserType(prismContext).name(userName).assignment(new AssignmentType(prismContext).targetRef(targetRef1, RoleType.COMPLEX_TYPE)).assignment(new AssignmentType(prismContext).targetRef(targetRef2, RoleType.COMPLEX_TYPE));
    when("adding it to the repository");
    repositoryService.addObject(user.asPrismObject(), null, result);
    then("object and its container rows are created and container IDs are assigned");
    assertThatOperationResult(result).isSuccess();
    QUser u = aliasFor(QUser.class);
    List<MUser> users = select(u, u.nameOrig.eq(userName));
    assertThat(users).hasSize(1);
    MUser userRow = users.get(0);
    assertThat(userRow.oid).isNotNull();
    // next free container number
    assertThat(userRow.containerIdSeq).isEqualTo(3);
    QContainer<MContainer, ?> c = aliasFor(QContainer.CLASS);
    List<MContainer> containers = select(c, c.ownerOid.eq(userRow.oid));
    assertThat(containers).hasSize(2).allMatch(cRow -> cRow.ownerOid.equals(userRow.oid) && cRow.containerType == MContainerType.ASSIGNMENT).extracting(cRow -> cRow.cid).containsExactlyInAnyOrder(1L, 2L);
}
Also used : MArchetype(com.evolveum.midpoint.repo.sqale.qmodel.role.MArchetype) MReportData(com.evolveum.midpoint.repo.sqale.qmodel.report.MReportData) com.evolveum.midpoint.repo.sqale.qmodel.object(com.evolveum.midpoint.repo.sqale.qmodel.object) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) JdbcSession(com.evolveum.midpoint.repo.sqlbase.JdbcSession) SchemaException(com.evolveum.midpoint.util.exception.SchemaException) Test(org.testng.annotations.Test) com.evolveum.midpoint.repo.sqale.qmodel.ref(com.evolveum.midpoint.repo.sqale.qmodel.ref) QSystemConfiguration(com.evolveum.midpoint.repo.sqale.qmodel.system.QSystemConfiguration) BigDecimal(java.math.BigDecimal) DOMUtil(com.evolveum.midpoint.util.DOMUtil) Map(java.util.Map) QNode(com.evolveum.midpoint.repo.sqale.qmodel.node.QNode) BigInteger(java.math.BigInteger) MContainer(com.evolveum.midpoint.repo.sqale.qmodel.common.MContainer) MConnector(com.evolveum.midpoint.repo.sqale.qmodel.connector.MConnector) QUser(com.evolveum.midpoint.repo.sqale.qmodel.focus.QUser) RepoAddOptions.createOverwrite(com.evolveum.midpoint.repo.api.RepoAddOptions.createOverwrite) QContainer(com.evolveum.midpoint.repo.sqale.qmodel.common.QContainer) ObjectNotFoundException(com.evolveum.midpoint.util.exception.ObjectNotFoundException) MContainerType(com.evolveum.midpoint.repo.sqale.qmodel.common.MContainerType) MFocus(com.evolveum.midpoint.repo.sqale.qmodel.focus.MFocus) MiscUtil(com.evolveum.midpoint.util.MiscUtil) ObjectAlreadyExistsException(com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException) UUID(java.util.UUID) Instant(java.time.Instant) QLookupTableRow(com.evolveum.midpoint.repo.sqale.qmodel.lookuptable.QLookupTableRow) StandardCharsets(java.nio.charset.StandardCharsets) QMessageTemplate(com.evolveum.midpoint.repo.sqale.qmodel.notification.QMessageTemplate) com.evolveum.midpoint.repo.sqale.qmodel.cases.workitem(com.evolveum.midpoint.repo.sqale.qmodel.cases.workitem) QGenericObject(com.evolveum.midpoint.repo.sqale.qmodel.focus.QGenericObject) MTask(com.evolveum.midpoint.repo.sqale.qmodel.task.MTask) List(java.util.List) QConnector(com.evolveum.midpoint.repo.sqale.qmodel.connector.QConnector) PolyStringType(com.evolveum.prism.xml.ns._public.types_3.PolyStringType) QName(javax.xml.namespace.QName) com.evolveum.midpoint.xml.ns._public.common.common_3(com.evolveum.midpoint.xml.ns._public.common.common_3) Jsonb(com.evolveum.midpoint.repo.sqale.jsonb.Jsonb) QResource(com.evolveum.midpoint.repo.sqale.qmodel.resource.QResource) SchemaConstants(com.evolveum.midpoint.schema.constants.SchemaConstants) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) MResource(com.evolveum.midpoint.repo.sqale.qmodel.resource.MResource) QCase(com.evolveum.midpoint.repo.sqale.qmodel.cases.QCase) SqaleRepoBaseTest(com.evolveum.midpoint.repo.sqale.SqaleRepoBaseTest) QConnectorHost(com.evolveum.midpoint.repo.sqale.qmodel.connector.QConnectorHost) MShadow(com.evolveum.midpoint.repo.sqale.qmodel.shadow.MShadow) Assertions.assertThatThrownBy(org.assertj.core.api.Assertions.assertThatThrownBy) MConnectorHost(com.evolveum.midpoint.repo.sqale.qmodel.connector.MConnectorHost) QReport(com.evolveum.midpoint.repo.sqale.qmodel.report.QReport) Comparator.comparing(java.util.Comparator.comparing) RepositoryService(com.evolveum.midpoint.repo.api.RepositoryService) Containerable(com.evolveum.midpoint.prism.Containerable) MLookupTableRow(com.evolveum.midpoint.repo.sqale.qmodel.lookuptable.MLookupTableRow) PolyString(com.evolveum.midpoint.prism.polystring.PolyString) DeleteObjectResult(com.evolveum.midpoint.repo.api.DeleteObjectResult) MNode(com.evolveum.midpoint.repo.sqale.qmodel.node.MNode) com.evolveum.midpoint.repo.sqale.qmodel.assignment(com.evolveum.midpoint.repo.sqale.qmodel.assignment) PrismObject(com.evolveum.midpoint.prism.PrismObject) QShadow(com.evolveum.midpoint.repo.sqale.qmodel.shadow.QShadow) MUser(com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser) SimpleExpressionUtil.velocityExpression(com.evolveum.midpoint.schema.util.SimpleExpressionUtil.velocityExpression) ChronoUnit(java.time.temporal.ChronoUnit) ItemName(com.evolveum.midpoint.prism.path.ItemName) QReportData(com.evolveum.midpoint.repo.sqale.qmodel.report.QReportData) MCase(com.evolveum.midpoint.repo.sqale.qmodel.cases.MCase) QArchetype(com.evolveum.midpoint.repo.sqale.qmodel.role.QArchetype) SqaleRepositoryService(com.evolveum.midpoint.repo.sqale.SqaleRepositoryService) QTask(com.evolveum.midpoint.repo.sqale.qmodel.task.QTask) com.evolveum.midpoint.repo.sqale.qmodel.accesscert(com.evolveum.midpoint.repo.sqale.qmodel.accesscert) QUser(com.evolveum.midpoint.repo.sqale.qmodel.focus.QUser) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) PolyString(com.evolveum.midpoint.prism.polystring.PolyString) MUser(com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser) MContainer(com.evolveum.midpoint.repo.sqale.qmodel.common.MContainer) Test(org.testng.annotations.Test) SqaleRepoBaseTest(com.evolveum.midpoint.repo.sqale.SqaleRepoBaseTest)

Example 47 with MUser

use of com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser in project midpoint by Evolveum.

the class SqaleRepoAddDeleteObjectTest method test100AddNamedUserWithoutOidWorksOk.

// region basic object/container and various item types tests
@Test
public void test100AddNamedUserWithoutOidWorksOk() throws ObjectAlreadyExistsException, SchemaException {
    OperationResult result = createOperationResult();
    given("user with a name");
    String userName = "user" + getTestNumber();
    UserType userType = new UserType(prismContext).name(userName).version(// version will be ignored and set to 1
    "5");
    when("adding it to the repository");
    String returnedOid = repositoryService.addObject(userType.asPrismObject(), null, result);
    then("operation is successful and user row for it is created");
    assertThatOperationResult(result).isSuccess();
    assertThat(returnedOid).isEqualTo(userType.getOid());
    QUser u = aliasFor(QUser.class);
    MUser row = selectOne(u, u.nameOrig.eq(userName));
    assertThat(row.oid).isEqualTo(UUID.fromString(returnedOid));
    // normalized name is stored
    assertThat(row.nameNorm).isNotNull();
    // initial version is set, ignoring provided version
    assertThat(row.version).isEqualTo(SqaleRepositoryService.INITIAL_VERSION_NUMBER);
    // read-only column with value generated/stored in the database
    assertThat(row.objectType).isEqualTo(MObjectType.USER);
    // we don't store empty lists as empty arrays
    assertThat(row.subtypes).isNull();
}
Also used : QUser(com.evolveum.midpoint.repo.sqale.qmodel.focus.QUser) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) PolyString(com.evolveum.midpoint.prism.polystring.PolyString) MUser(com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser) Test(org.testng.annotations.Test) SqaleRepoBaseTest(com.evolveum.midpoint.repo.sqale.SqaleRepoBaseTest)

Example 48 with MUser

use of com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser in project midpoint by Evolveum.

the class SqaleRepoAddDeleteObjectTest method test308AddObjectWithExtensionMultiValueItems.

@Test
public void test308AddObjectWithExtensionMultiValueItems() throws ObjectAlreadyExistsException, SchemaException {
    OperationResult result = createOperationResult();
    given("object with extension reference and poly string");
    String objectName = "user" + getTestNumber();
    UserType object = new UserType(prismContext).name(objectName).extension(new ExtensionType(prismContext));
    ExtensionType extensionContainer = object.getExtension();
    addExtensionValue(extensionContainer, "string-mv", "string-value1", "string-value2");
    addExtensionValue(extensionContainer, "poly-mv", PolyString.fromOrig("poly-value1"), PolyString.fromOrig("poly-value2"), PolyString.fromOrig("poly-value3"));
    String targetOid1 = UUID.randomUUID().toString();
    String targetOid2 = UUID.randomUUID().toString();
    QName relation = QName.valueOf("{https://random.org/ns}random-rel-1");
    addExtensionValue(extensionContainer, "ref-mv", // type is nullable if provided in schema
    ref(targetOid1, null, relation), ref(targetOid2, UserType.COMPLEX_TYPE));
    when("adding it to the repository");
    String returnedOid = repositoryService.addObject(object.asPrismObject(), null, result);
    then("operation is successful and ext column stores the values as JSON arrays");
    assertThatOperationResult(result).isSuccess();
    assertThat(returnedOid).isEqualTo(object.getOid());
    MUser row = selectObjectByOid(QUser.class, returnedOid);
    assertThat(row.ext).isNotNull();
    assertThat(Jsonb.toMap(row.ext)).containsEntry(extensionKey(extensionContainer, "string-mv"), List.of("string-value1", "string-value2")).containsEntry(extensionKey(extensionContainer, "poly-mv"), List.of(Map.of("o", "poly-value1", "n", "polyvalue1"), Map.of("o", "poly-value2", "n", "polyvalue2"), Map.of("o", "poly-value3", "n", "polyvalue3"))).containsEntry(extensionKey(extensionContainer, "ref-mv"), List.of(Map.of("o", targetOid1, // default from schema
    "t", // default from schema
    MObjectType.ORG.name(), "r", cachedUriId(relation)), Map.of("o", targetOid2, "t", MObjectType.USER.name(), "r", cachedUriId(SchemaConstants.ORG_DEFAULT))));
}
Also used : QName(javax.xml.namespace.QName) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) PolyString(com.evolveum.midpoint.prism.polystring.PolyString) MUser(com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser) Test(org.testng.annotations.Test) SqaleRepoBaseTest(com.evolveum.midpoint.repo.sqale.SqaleRepoBaseTest)

Example 49 with MUser

use of com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser in project midpoint by Evolveum.

the class SqaleRepoAddDeleteObjectTest method test201AddObjectWithOidAndMultivalueContainers.

@Test
public void test201AddObjectWithOidAndMultivalueContainers() throws ObjectAlreadyExistsException, SchemaException {
    OperationResult result = createOperationResult();
    given("user with assignment and ref");
    UUID providedOid = UUID.randomUUID();
    String userName = "user" + getTestNumber();
    String targetRef1 = UUID.randomUUID().toString();
    String targetRef2 = UUID.randomUUID().toString();
    UserType user = new UserType(prismContext).oid(providedOid.toString()).name(userName).assignment(new AssignmentType(prismContext).targetRef(targetRef1, RoleType.COMPLEX_TYPE)).assignment(new AssignmentType(prismContext).targetRef(targetRef2, RoleType.COMPLEX_TYPE));
    when("adding it to the repository");
    repositoryService.addObject(user.asPrismObject(), null, result);
    then("object and its container rows are created and container IDs are assigned");
    assertThatOperationResult(result).isSuccess();
    QUser u = aliasFor(QUser.class);
    List<MUser> users = select(u, u.nameOrig.eq(userName));
    assertThat(users).hasSize(1);
    MUser userRow = users.get(0);
    assertThat(userRow.oid).isNotNull();
    // next free container number
    assertThat(userRow.containerIdSeq).isEqualTo(3);
    QContainer<MContainer, ?> c = aliasFor(QContainer.CLASS);
    List<MContainer> containers = select(c, c.ownerOid.eq(userRow.oid));
    assertThat(containers).hasSize(2).allMatch(cRow -> cRow.ownerOid.equals(userRow.oid) && cRow.containerType == MContainerType.ASSIGNMENT).extracting(cRow -> cRow.cid).containsExactlyInAnyOrder(1L, 2L);
}
Also used : MArchetype(com.evolveum.midpoint.repo.sqale.qmodel.role.MArchetype) MReportData(com.evolveum.midpoint.repo.sqale.qmodel.report.MReportData) com.evolveum.midpoint.repo.sqale.qmodel.object(com.evolveum.midpoint.repo.sqale.qmodel.object) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) JdbcSession(com.evolveum.midpoint.repo.sqlbase.JdbcSession) SchemaException(com.evolveum.midpoint.util.exception.SchemaException) Test(org.testng.annotations.Test) com.evolveum.midpoint.repo.sqale.qmodel.ref(com.evolveum.midpoint.repo.sqale.qmodel.ref) QSystemConfiguration(com.evolveum.midpoint.repo.sqale.qmodel.system.QSystemConfiguration) BigDecimal(java.math.BigDecimal) DOMUtil(com.evolveum.midpoint.util.DOMUtil) Map(java.util.Map) QNode(com.evolveum.midpoint.repo.sqale.qmodel.node.QNode) BigInteger(java.math.BigInteger) MContainer(com.evolveum.midpoint.repo.sqale.qmodel.common.MContainer) MConnector(com.evolveum.midpoint.repo.sqale.qmodel.connector.MConnector) QUser(com.evolveum.midpoint.repo.sqale.qmodel.focus.QUser) RepoAddOptions.createOverwrite(com.evolveum.midpoint.repo.api.RepoAddOptions.createOverwrite) QContainer(com.evolveum.midpoint.repo.sqale.qmodel.common.QContainer) ObjectNotFoundException(com.evolveum.midpoint.util.exception.ObjectNotFoundException) MContainerType(com.evolveum.midpoint.repo.sqale.qmodel.common.MContainerType) MFocus(com.evolveum.midpoint.repo.sqale.qmodel.focus.MFocus) MiscUtil(com.evolveum.midpoint.util.MiscUtil) ObjectAlreadyExistsException(com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException) UUID(java.util.UUID) Instant(java.time.Instant) QLookupTableRow(com.evolveum.midpoint.repo.sqale.qmodel.lookuptable.QLookupTableRow) StandardCharsets(java.nio.charset.StandardCharsets) QMessageTemplate(com.evolveum.midpoint.repo.sqale.qmodel.notification.QMessageTemplate) com.evolveum.midpoint.repo.sqale.qmodel.cases.workitem(com.evolveum.midpoint.repo.sqale.qmodel.cases.workitem) QGenericObject(com.evolveum.midpoint.repo.sqale.qmodel.focus.QGenericObject) MTask(com.evolveum.midpoint.repo.sqale.qmodel.task.MTask) List(java.util.List) QConnector(com.evolveum.midpoint.repo.sqale.qmodel.connector.QConnector) PolyStringType(com.evolveum.prism.xml.ns._public.types_3.PolyStringType) QName(javax.xml.namespace.QName) com.evolveum.midpoint.xml.ns._public.common.common_3(com.evolveum.midpoint.xml.ns._public.common.common_3) Jsonb(com.evolveum.midpoint.repo.sqale.jsonb.Jsonb) QResource(com.evolveum.midpoint.repo.sqale.qmodel.resource.QResource) SchemaConstants(com.evolveum.midpoint.schema.constants.SchemaConstants) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) MResource(com.evolveum.midpoint.repo.sqale.qmodel.resource.MResource) QCase(com.evolveum.midpoint.repo.sqale.qmodel.cases.QCase) SqaleRepoBaseTest(com.evolveum.midpoint.repo.sqale.SqaleRepoBaseTest) QConnectorHost(com.evolveum.midpoint.repo.sqale.qmodel.connector.QConnectorHost) MShadow(com.evolveum.midpoint.repo.sqale.qmodel.shadow.MShadow) Assertions.assertThatThrownBy(org.assertj.core.api.Assertions.assertThatThrownBy) MConnectorHost(com.evolveum.midpoint.repo.sqale.qmodel.connector.MConnectorHost) QReport(com.evolveum.midpoint.repo.sqale.qmodel.report.QReport) Comparator.comparing(java.util.Comparator.comparing) RepositoryService(com.evolveum.midpoint.repo.api.RepositoryService) Containerable(com.evolveum.midpoint.prism.Containerable) MLookupTableRow(com.evolveum.midpoint.repo.sqale.qmodel.lookuptable.MLookupTableRow) PolyString(com.evolveum.midpoint.prism.polystring.PolyString) DeleteObjectResult(com.evolveum.midpoint.repo.api.DeleteObjectResult) MNode(com.evolveum.midpoint.repo.sqale.qmodel.node.MNode) com.evolveum.midpoint.repo.sqale.qmodel.assignment(com.evolveum.midpoint.repo.sqale.qmodel.assignment) PrismObject(com.evolveum.midpoint.prism.PrismObject) QShadow(com.evolveum.midpoint.repo.sqale.qmodel.shadow.QShadow) MUser(com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser) SimpleExpressionUtil.velocityExpression(com.evolveum.midpoint.schema.util.SimpleExpressionUtil.velocityExpression) ChronoUnit(java.time.temporal.ChronoUnit) ItemName(com.evolveum.midpoint.prism.path.ItemName) QReportData(com.evolveum.midpoint.repo.sqale.qmodel.report.QReportData) MCase(com.evolveum.midpoint.repo.sqale.qmodel.cases.MCase) QArchetype(com.evolveum.midpoint.repo.sqale.qmodel.role.QArchetype) SqaleRepositoryService(com.evolveum.midpoint.repo.sqale.SqaleRepositoryService) QTask(com.evolveum.midpoint.repo.sqale.qmodel.task.QTask) com.evolveum.midpoint.repo.sqale.qmodel.accesscert(com.evolveum.midpoint.repo.sqale.qmodel.accesscert) QUser(com.evolveum.midpoint.repo.sqale.qmodel.focus.QUser) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) PolyString(com.evolveum.midpoint.prism.polystring.PolyString) UUID(java.util.UUID) MUser(com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser) MContainer(com.evolveum.midpoint.repo.sqale.qmodel.common.MContainer) Test(org.testng.annotations.Test) SqaleRepoBaseTest(com.evolveum.midpoint.repo.sqale.SqaleRepoBaseTest)

Example 50 with MUser

use of com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser in project midpoint by Evolveum.

the class SqaleRepoAddDeleteObjectTest method test122AddSecondObjectWithTheSameOidWithOverwriteIsOk.

@Test
public void test122AddSecondObjectWithTheSameOidWithOverwriteIsOk() throws ObjectAlreadyExistsException, SchemaException {
    OperationResult result = createOperationResult();
    given("user with provided OID already exists");
    UUID providedOid = UUID.randomUUID();
    UserType user1 = new UserType(prismContext).oid(providedOid.toString()).name("user" + getTestNumber());
    repositoryService.addObject(user1.asPrismObject(), null, result);
    when("adding it again with overwrite without any changes");
    long baseCount = count(QObject.CLASS);
    UserType user2 = new UserType(prismContext).oid(providedOid.toString()).name("user" + getTestNumber());
    repositoryService.addObject(user2.asPrismObject(), createOverwrite(), result);
    then("operation is success and no changes are made (delta is empty)");
    assertThatOperationResult(result).isSuccess();
    // no new object was created
    assertCount(QObject.CLASS, baseCount);
    MUser row = selectObjectByOid(QUser.class, providedOid);
    // no change
    assertThat(row.version).isEqualTo(SqaleRepositoryService.INITIAL_VERSION_NUMBER);
}
Also used : OperationResult(com.evolveum.midpoint.schema.result.OperationResult) UUID(java.util.UUID) 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