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