use of com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser in project midpoint by Evolveum.
the class SqaleRepoAddDeleteObjectTest method test208AddObjectWithRefWithoutTypeImpliedByDefault.
@Test
public void test208AddObjectWithRefWithoutTypeImpliedByDefault() throws ObjectAlreadyExistsException, SchemaException {
OperationResult result = createOperationResult();
given("object with ref without specified target type");
String userName = "user" + getTestNumber();
UUID approverRef1 = UUID.randomUUID();
UserType user = new UserType(prismContext).name(userName).metadata(new MetadataType().creatorRef(new ObjectReferenceType().oid(approverRef1.toString())));
when("adding it to the repository");
String oid = repositoryService.addObject(user.asPrismObject(), null, result);
then("object and its reference rows are created");
assertThatOperationResult(result).isSuccess();
MUser userRow = selectObjectByOid(QUser.class, oid);
assertThat(userRow.oid).isNotNull();
assertThat(userRow.creatorRefTargetOid).isEqualTo(approverRef1);
// default from def
assertThat(userRow.creatorRefTargetType).isEqualTo(MObjectType.USER);
}
use of com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser in project midpoint by Evolveum.
the class SqaleRepoAddDeleteObjectTest method test301AddObjectWithNonIndexedStringExtension.
@Test
public void test301AddObjectWithNonIndexedStringExtension() throws ObjectAlreadyExistsException, SchemaException, ObjectNotFoundException {
OperationResult result = createOperationResult();
given("object with string extension item");
String objectName = "user" + getTestNumber();
UserType object = new UserType(prismContext).name(objectName).extension(new ExtensionType(prismContext));
ExtensionType extensionContainer = object.getExtension();
addExtensionValue(extensionContainer, "string-ni", "string-value");
when("adding it to the repository");
String returnedOid = repositoryService.addObject(object.asPrismObject(), null, result);
then("operation is successful and ext column is null");
assertThatOperationResult(result).isSuccess();
assertThat(returnedOid).isEqualTo(object.getOid());
MUser row = selectObjectByOid(QUser.class, returnedOid);
assertThat(row.ext).isNull();
and("stored object contains the extension item");
PrismObject<UserType> storedObject = repositoryService.getObject(UserType.class, returnedOid, null, result);
assertThat(storedObject.getExtension().findItem(new ItemName("string-ni"))).isNotNull().extracting(i -> i.getRealValue()).isEqualTo("string-value");
}
use of com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser in project midpoint by Evolveum.
the class SqaleRepoAddDeleteObjectTest method test205AddObjectWithMultivalueRefs.
@Test
public void test205AddObjectWithMultivalueRefs() throws ObjectAlreadyExistsException, SchemaException {
OperationResult result = createOperationResult();
given("user with ref");
String userName = "user" + getTestNumber();
String targetRef1 = UUID.randomUUID().toString();
String targetRef2 = UUID.randomUUID().toString();
UserType user = new UserType(prismContext).name(userName).linkRef(targetRef1, RoleType.COMPLEX_TYPE).linkRef(targetRef2, RoleType.COMPLEX_TYPE);
when("adding it to the repository");
repositoryService.addObject(user.asPrismObject(), null, result);
then("object and its reference rows are created");
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();
// cid sequence is in initial state
assertThat(userRow.containerIdSeq).isEqualTo(1);
UUID userOid = UUID.fromString(user.getOid());
QObjectReference<?> or = QObjectReferenceMapping.getForProjection().defaultAlias();
List<MReference> projectionRefs = select(or, or.ownerOid.eq(userOid));
assertThat(projectionRefs).hasSize(2).allMatch(rRow -> rRow.referenceType == MReferenceType.PROJECTION).allMatch(rRow -> rRow.ownerOid.equals(userOid)).extracting(rRow -> rRow.targetOid.toString()).containsExactlyInAnyOrder(targetRef1, targetRef2);
// this is the same set of refs queried from the super-table
QReference<MReference, ?> r = aliasFor(QReference.CLASS);
List<MReference> refs = select(r, r.ownerOid.eq(userOid));
assertThat(refs).hasSize(2).allMatch(rRow -> rRow.referenceType == MReferenceType.PROJECTION);
}
use of com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser in project midpoint by Evolveum.
the class SqaleRepoAddDeleteObjectTest method test305AddObjectWithExtensionItemsOfVariousSimpleTypes.
@Test
public void test305AddObjectWithExtensionItemsOfVariousSimpleTypes() throws ObjectAlreadyExistsException, SchemaException {
OperationResult result = createOperationResult();
given("object with extension items of various simple types");
String objectName = "user" + getTestNumber();
UserType object = new UserType(prismContext).name(objectName).extension(new ExtensionType(prismContext));
ExtensionType extensionContainer = object.getExtension();
addExtensionValue(extensionContainer, "int", 1);
addExtensionValue(extensionContainer, "short", (short) 2);
addExtensionValue(extensionContainer, "long", 3L);
addExtensionValue(extensionContainer, "integer", BigInteger.valueOf(4));
addExtensionValue(extensionContainer, "decimal", new BigDecimal("12345678901234567890.12345678901234567890"));
addExtensionValue(extensionContainer, "decimal-2", new BigDecimal("12345678901234567890"));
addExtensionValue(extensionContainer, "decimal-3", new BigDecimal("-1"));
addExtensionValue(extensionContainer, "double", Double.MAX_VALUE);
addExtensionValue(extensionContainer, "double-2", -Double.MIN_VALUE);
addExtensionValue(extensionContainer, "float", Float.MAX_VALUE);
addExtensionValue(extensionContainer, "float-2", -Float.MIN_VALUE);
addExtensionValue(extensionContainer, "boolean", true);
addExtensionValue(extensionContainer, "enum", BeforeAfterType.AFTER);
Instant dateTime = Instant.now();
addExtensionValue(extensionContainer, "dateTime", MiscUtil.asXMLGregorianCalendar(dateTime));
when("adding it to the repository");
String returnedOid = repositoryService.addObject(object.asPrismObject(), null, result);
then("operation is successful and ext column stores the values");
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, "int"), 1).containsEntry(extensionKey(extensionContainer, "short"), // returned as Integer
2).containsEntry(extensionKey(extensionContainer, "long"), // returned as Integer
3).containsEntry(extensionKey(extensionContainer, "integer"), // returned as Integer
4).containsEntry(extensionKey(extensionContainer, "decimal"), new BigDecimal("12345678901234567890.12345678901234567890")).containsEntry(extensionKey(extensionContainer, "decimal-2"), // no decimal part, returned as BInt
new BigInteger("12345678901234567890")).containsEntry(extensionKey(extensionContainer, "decimal-3"), // Integer
-1).containsEntry(extensionKey(extensionContainer, "double"), new BigDecimal(Double.toString(Double.MAX_VALUE)).toBigInteger()).containsEntry(extensionKey(extensionContainer, "double-2"), new BigDecimal(Double.toString(-Double.MIN_VALUE))).containsEntry(extensionKey(extensionContainer, "float"), new BigDecimal(Float.toString(Float.MAX_VALUE)).toBigInteger()).containsEntry(extensionKey(extensionContainer, "float-2"), new BigDecimal(Float.toString(-Float.MIN_VALUE))).containsEntry(extensionKey(extensionContainer, "boolean"), true).containsEntry(extensionKey(extensionContainer, "enum"), "AFTER").containsEntry(extensionKey(extensionContainer, "dateTime"), dateTime.truncatedTo(ChronoUnit.MILLIS).toString());
// The different types are OK here, must be treated only for index-only extensions.
// In that case value must be converted to the expected target type; not part of this test.
}
use of com.evolveum.midpoint.repo.sqale.qmodel.focus.MUser in project midpoint by Evolveum.
the class SqaleRepoAddDeleteObjectTest method test115OverwriteWithContainers.
// detailed container tests are from test200 on, this one has overwrite priority :-)
@Test
public void test115OverwriteWithContainers() throws ObjectAlreadyExistsException, SchemaException {
OperationResult result = createOperationResult();
given("user with container in the repository");
long baseCount = count(QUser.class);
UUID assConstructionRef = UUID.randomUUID();
QName assConstructionRel = QName.valueOf("{https://random.org/ns}const-rel");
String userName = "user" + getTestNumber();
UserType user1 = new UserType(prismContext).name(userName).assignment(new AssignmentType(prismContext).id(// assigned CID to make things simple for tracking
2L).construction(new ConstructionType(prismContext).resourceRef(assConstructionRef.toString(), ResourceType.COMPLEX_TYPE, assConstructionRel)));
repositoryService.addObject(user1.asPrismObject(), null, result);
assertThat(count(QUser.class)).isEqualTo(baseCount + 1);
UUID userOid = UUID.fromString(user1.getOid());
QAssignment<?> qa = QAssignmentMapping.getAssignmentMapping().defaultAlias();
List<MAssignment> assRows = select(qa, qa.ownerOid.eq(userOid));
assertThat(assRows).hasSize(1).anyMatch(aRow -> aRow.resourceRefTargetOid != null && aRow.resourceRefTargetType != null && aRow.resourceRefRelationId != null);
when("using overwrite with changed container identified by id");
UserType user2 = new UserType(prismContext).oid(user1.getOid()).version(// should be ignored
"5").name(userName).assignment(new AssignmentType(prismContext).id(2L).targetRef(UUID.randomUUID().toString(), RoleType.COMPLEX_TYPE));
repositoryService.addObject(user2.asPrismObject(), createOverwrite(), result);
then("operation is successful");
assertThatOperationResult(result).isSuccess();
and("identified container is modified/overwritten");
// no change in count
assertThat(count(QUser.class)).isEqualTo(baseCount + 1);
MUser row = selectObjectByOid(QUser.class, user2.getOid());
assRows = select(qa, qa.ownerOid.eq(UUID.fromString(user2.getOid())));
assertThat(assRows).hasSize(1);
MAssignment assRow = assRows.get(0);
// removed
assertThat(assRow.resourceRefTargetOid).isNull();
// removed
assertThat(assRow.resourceRefTargetType).isNull();
// removed
assertThat(assRow.resourceRefRelationId).isNull();
// added
assertThat(assRow.targetRefTargetOid).isNotNull();
assertThat(assRow.targetRefTargetType).isEqualTo(MObjectType.ROLE);
and("provided version for overwrite is ignored");
assertThat(row.version).isEqualTo(SqaleRepositoryService.INITIAL_VERSION_NUMBER + 1);
}
Aggregations