TSK-1816: Update QueryClassificationAccTest to use Test-API

Used new builder to create classifications.
Instead of working with a clean database for each test, we create a scenario. In that scenario we use ClassificationCustomField#CUSTOM_1 to filter out all the other created Classifications. Therefore, all tests regarding ClassificationCustomFields are executed first.
The alternative is to create a "big" scenario as a test setup. But that would result to the same issues we have with the sql file.
Corrected assertion for should_FindClassifications_When_QueryingForListValueField():167. The databases (H2, POSTGRES) have different interpretations for boolean values.
getCustomAttribute got deprecated, now getCustomField is being used.
Move test to taskana-core-test according to new project structure.
Separated QueryClassificationsAccTest to filtering and sorting class.
ClassificationQueryAccTest resolved to QueryClassifications classes.
TSK-1816: X
This commit is contained in:
Yakup Ensar Evli 2022-08-24 12:55:58 +02:00
parent f7b2a46e75
commit e074a90222
4 changed files with 1153 additions and 687 deletions

View File

@ -1,48 +0,0 @@
package acceptance.classification.query;
import static org.assertj.core.api.Assertions.assertThat;
import static pro.taskana.testapi.DefaultTestEntities.defaultTestClassification;
import java.util.List;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestTemplate;
import pro.taskana.classification.api.ClassificationService;
import pro.taskana.classification.api.models.ClassificationSummary;
import pro.taskana.testapi.TaskanaInject;
import pro.taskana.testapi.TaskanaIntegrationTest;
import pro.taskana.testapi.security.WithAccessId;
/** Acceptance test for classification queries and authorization. */
@TaskanaIntegrationTest
class ClassificationQueryAccTest {
@TaskanaInject ClassificationService classificationService;
@WithAccessId(user = "businessadmin")
@BeforeAll
void createClassificationsWithDifferentRoles() throws Exception {
for (int i = 0; i < 5; i++) {
defaultTestClassification().buildAndStoreAsSummary(classificationService);
}
}
@Test
void should_FindAllAccesibleClassifications_When_UserNotAuthenticated() {
List<ClassificationSummary> classificationSummaryList =
classificationService.createClassificationQuery().domainIn("DOMAIN_A").list();
assertThat(classificationSummaryList).hasSize(5);
}
@WithAccessId(user = "admin")
@WithAccessId(user = "businessadmin")
@TestTemplate
void should_FindAllAccessibleClassifications_When_UserInRoleAdminOrBusinessadmin() {
List<ClassificationSummary> classificationSummaryList =
classificationService.createClassificationQuery().domainIn("DOMAIN_A").list();
assertThat(classificationSummaryList).hasSize(5);
}
}

View File

@ -0,0 +1,724 @@
package acceptance.classification.query;
import static org.assertj.core.api.Assertions.assertThat;
import static pro.taskana.classification.api.ClassificationCustomField.CUSTOM_1;
import static pro.taskana.classification.api.ClassificationCustomField.CUSTOM_2;
import static pro.taskana.classification.api.ClassificationCustomField.CUSTOM_3;
import static pro.taskana.classification.api.ClassificationCustomField.CUSTOM_4;
import static pro.taskana.classification.api.ClassificationCustomField.CUSTOM_5;
import static pro.taskana.classification.api.ClassificationCustomField.CUSTOM_6;
import static pro.taskana.classification.api.ClassificationCustomField.CUSTOM_7;
import static pro.taskana.classification.api.ClassificationCustomField.CUSTOM_8;
import static pro.taskana.classification.api.ClassificationQueryColumnName.CREATED;
import static pro.taskana.classification.api.ClassificationQueryColumnName.NAME;
import static pro.taskana.classification.api.ClassificationQueryColumnName.TYPE;
import static pro.taskana.classification.api.ClassificationQueryColumnName.VALID_IN_DOMAIN;
import static pro.taskana.testapi.DefaultTestEntities.defaultTestClassification;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestFactory;
import org.junit.jupiter.api.TestMethodOrder;
import org.junit.jupiter.api.TestTemplate;
import org.junit.jupiter.api.function.ThrowingConsumer;
import pro.taskana.classification.api.ClassificationCustomField;
import pro.taskana.classification.api.ClassificationService;
import pro.taskana.classification.api.models.Classification;
import pro.taskana.classification.api.models.ClassificationSummary;
import pro.taskana.common.api.TimeInterval;
import pro.taskana.common.internal.util.Pair;
import pro.taskana.testapi.TaskanaInject;
import pro.taskana.testapi.TaskanaIntegrationTest;
import pro.taskana.testapi.security.WithAccessId;
/**
* The QueryClassificationsFilteringAccTest for all "query classification with filtering" scenarios.
*
* <p>Note: Instead of working with a clean database for each test, we create a scenario. In that
* scenario we use {@linkplain ClassificationCustomField#CUSTOM_1} to filter out all the other
* created {@linkplain Classification Classifications}. Therefore, all tests regarding {@linkplain
* ClassificationCustomField ClassificationCustomFields} are executed first.
*
* <p>The alternative is to create a "big" scenario as a test setup. But that would result to the
* same issues we have with the sql file.
*/
@TaskanaIntegrationTest
@TestMethodOrder(value = MethodOrderer.OrderAnnotation.class)
class ClassificationQueryFilteringAccTest {
@TaskanaInject ClassificationService classificationService;
ClassificationSummary classificationSummaryBeforeAll;
@WithAccessId(user = "businessadmin")
@BeforeAll
void createClassificationsWithDifferentRoles() throws Exception {
classificationSummaryBeforeAll =
defaultTestClassification().buildAndStoreAsSummary(classificationService);
}
@WithAccessId(user = "businessadmin")
@TestFactory
@Order(1)
Stream<DynamicTest> should_FindClassifications_When_QueryingForCustomAttributeIn() {
String testIdentifier = UUID.randomUUID().toString();
Iterator<ClassificationCustomField> customFieldIterator =
Arrays.stream(ClassificationCustomField.values()).iterator();
ThrowingConsumer<ClassificationCustomField> test =
customField -> {
ClassificationSummary classificationSummary =
defaultTestClassification()
.customAttribute(customField, testIdentifier)
.buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.customAttributeIn(customField, testIdentifier)
.list();
ClassificationSummary masterClassificationSummary =
classificationService
.getClassification(classificationSummary.getKey(), "")
.asSummary();
assertThat(classificationSummaryList)
.containsExactlyInAnyOrder(classificationSummary, masterClassificationSummary);
};
return DynamicTest.stream(
customFieldIterator, c -> String.format("for %s", c.toString()), test);
}
@WithAccessId(user = "businessadmin")
@TestFactory
Stream<DynamicTest> should_FindClassifications_When_QueryingForCustomAttributeLike() {
String testIdentifier = UUID.randomUUID().toString();
// Value for Custom-Field has to be unique. Ensure uniqueness with testIdentifier
Iterator<Pair<ClassificationCustomField, String>> identifierToCustomFieldsIterator =
List.of(
Pair.of(CUSTOM_1, testIdentifier + "_1CUSTOM1"),
Pair.of(CUSTOM_2, testIdentifier + "_2CUSTOM2"),
Pair.of(CUSTOM_3, testIdentifier + "_3CUSTOM3"),
Pair.of(CUSTOM_4, testIdentifier + "_4CUSTOM4"),
Pair.of(CUSTOM_5, testIdentifier + "_5CUSTOM5"),
Pair.of(CUSTOM_6, testIdentifier + "_6CUSTOM6"),
Pair.of(CUSTOM_7, testIdentifier + "_7CUSTOM7"),
Pair.of(CUSTOM_8, testIdentifier + "_8CUSTOM8"))
.iterator();
ThrowingConsumer<Pair<ClassificationCustomField, String>> test =
pair -> {
ClassificationSummary classificationSummary =
defaultTestClassification()
.customAttribute(pair.getLeft(), pair.getRight())
.buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.customAttributeLike(pair.getLeft(), testIdentifier + "%")
.domainIn("DOMAIN_A")
.list();
assertThat(classificationSummaryList).containsExactlyInAnyOrder(classificationSummary);
};
return DynamicTest.stream(
identifierToCustomFieldsIterator,
p -> String.format("for %s", p.getLeft().toString()),
test);
}
@Test
void should_FindAllAccessibleClassifications_When_QueryingNotAuthenticated() throws Exception {
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.idIn(classificationSummaryBeforeAll.getId())
.list();
assertThat(classificationSummaryList).containsExactly(classificationSummaryBeforeAll);
}
@WithAccessId(user = "admin")
@WithAccessId(user = "businessadmin")
@TestTemplate
void should_FindAllAccessibleClassifications_When_UserInRoleAdminOrBusinessadmin() {
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.idIn(classificationSummaryBeforeAll.getId())
.list();
assertThat(classificationSummaryList).containsExactly(classificationSummaryBeforeAll);
}
@WithAccessId(user = "businessadmin")
@Test
void should_FindClassifications_When_QueryingForCategoryInAndDomainIn() throws Exception {
String testIdentifier = UUID.randomUUID().toString();
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.category("EXTERNAL")
.type("TASK")
.buildAndStoreAsSummary(classificationService);
ClassificationSummary classificationSummary =
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.category("MANUAL")
.type("TASK")
.buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_1, testIdentifier)
.domainIn("DOMAIN_A")
.categoryIn("MANUAL")
.list();
assertThat(classificationSummaryList).containsExactly(classificationSummary);
}
@WithAccessId(user = "businessadmin")
@Test
void should_FindAClassification_When_QueryingForMultipleDomainsInAndKeyIn() throws Exception {
defaultTestClassification().domain("DOMAIN_B").buildAndStoreAsSummary(classificationService);
ClassificationSummary classificationSummary =
defaultTestClassification().buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.keyIn(classificationSummary.getKey())
.domainIn("DOMAIN_A", "DOMAIN_B", "")
.list();
ClassificationSummary masterClassification =
classificationService.getClassification(classificationSummary.getKey(), "").asSummary();
assertThat(classificationSummaryList)
.containsExactlyInAnyOrder(classificationSummary, masterClassification);
}
@WithAccessId(user = "businessadmin")
@Test
void should_FindClassifications_When_QueryingForTypeInAndParentIn() throws Exception {
String testIdentifier = UUID.randomUUID().toString();
ClassificationSummary classificationSummary =
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.type("TASK")
.buildAndStoreAsSummary(classificationService);
ClassificationSummary parentClassificationSummary =
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.type("DOCUMENT")
.buildAndStoreAsSummary(classificationService);
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.type("DOCUMENT")
.parentId(parentClassificationSummary.getId())
.buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_1, testIdentifier)
.typeIn("TASK", "DOCUMENT")
.parentIdIn("")
.list();
ClassificationSummary masterClassification =
classificationService.getClassification(classificationSummary.getKey(), "").asSummary();
ClassificationSummary masterParentClassification =
classificationService
.getClassification(parentClassificationSummary.getKey(), "")
.asSummary();
assertThat(classificationSummaryList)
.containsExactlyInAnyOrder(
classificationSummary,
parentClassificationSummary,
masterClassification,
masterParentClassification);
}
@WithAccessId(user = "businessadmin")
@Test
void should_FindClassifications_When_QueryingForKeyInAndCategoryIn() throws Exception {
ClassificationSummary externalClassificationSummary =
defaultTestClassification()
.type("TASK")
.category("EXTERNAL")
.buildAndStoreAsSummary(classificationService);
ClassificationSummary manualClassificationSummary =
defaultTestClassification()
.type("TASK")
.category("MANUAL")
.buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.keyIn(externalClassificationSummary.getKey(), manualClassificationSummary.getKey())
.categoryIn("EXTERNAL", "MANUAL")
.list();
ClassificationSummary masterClassificationExternal =
classificationService
.getClassification(externalClassificationSummary.getKey(), "")
.asSummary();
ClassificationSummary masterClassificationManual =
classificationService
.getClassification(manualClassificationSummary.getKey(), "")
.asSummary();
assertThat(classificationSummaryList)
.containsExactlyInAnyOrder(
externalClassificationSummary,
manualClassificationSummary,
masterClassificationExternal,
masterClassificationManual);
}
@WithAccessId(user = "businessadmin")
@Test
void should_FindClassifications_When_QueryingForParentIdIn() throws Exception {
String testIdentifier = UUID.randomUUID().toString();
ClassificationSummary parentClassificationSummary =
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.buildAndStoreAsSummary(classificationService);
ClassificationSummary childClassificationSummary =
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.parentId(parentClassificationSummary.getId())
.buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_1, testIdentifier)
.parentIdIn(parentClassificationSummary.getId())
.list();
ClassificationSummary masterChildClassification =
classificationService
.getClassification(childClassificationSummary.getKey(), "")
.asSummary();
assertThat(classificationSummaryList)
.containsExactlyInAnyOrder(childClassificationSummary, masterChildClassification);
}
@WithAccessId(user = "businessadmin")
@Test
void should_FindClassifications_When_QueryingForParentKeyIn() throws Exception {
String testIdentifier = UUID.randomUUID().toString();
ClassificationSummary parentClassificationSummary =
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.buildAndStoreAsSummary(classificationService);
ClassificationSummary childClassificationSummary =
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.parentKey(parentClassificationSummary.getKey())
.buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.parentKeyIn(parentClassificationSummary.getKey())
.list();
ClassificationSummary masterChildClassification =
classificationService
.getClassification(childClassificationSummary.getKey(), "")
.asSummary();
assertThat(classificationSummaryList)
.containsExactlyInAnyOrder(childClassificationSummary, masterChildClassification);
}
@WithAccessId(user = "businessadmin")
@Test
void should_FindClassification_When_QueryingForParentIdInAndCustom2In() throws Exception {
String testIdentifier = UUID.randomUUID().toString();
ClassificationSummary parentClassificationSummary =
defaultTestClassification()
.customAttribute(CUSTOM_2, testIdentifier)
.buildAndStoreAsSummary(classificationService);
ClassificationSummary childClassificationSummary =
defaultTestClassification()
.customAttribute(CUSTOM_2, testIdentifier)
.parentId(parentClassificationSummary.getId())
.buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_2, testIdentifier)
.parentIdIn(parentClassificationSummary.getId())
.list();
ClassificationSummary masterChildClassification =
classificationService
.getClassification(childClassificationSummary.getKey(), "")
.asSummary();
assertThat(classificationSummaryList)
.containsExactlyInAnyOrder(childClassificationSummary, masterChildClassification);
}
@WithAccessId(user = "businessadmin")
@Test
void should_FindClassification_When_QueryingForPriorityInAndValidInDomain() throws Exception {
String testIdentifier = UUID.randomUUID().toString();
ClassificationSummary classificationSummary =
defaultTestClassification()
.priority(999)
.isValidInDomain(true)
.customAttribute(CUSTOM_1, testIdentifier)
.buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.validInDomainEquals(true)
.priorityIn(999)
.customAttributeIn(CUSTOM_1, testIdentifier)
.list();
assertThat(classificationSummaryList).containsExactlyInAnyOrder(classificationSummary);
}
@WithAccessId(user = "businessadmin")
@Test
void should_FindClassification_When_QueryingForNameLike() throws Exception {
String testIdentifier = UUID.randomUUID().toString();
ClassificationSummary classificationSummary =
defaultTestClassification()
.name(testIdentifier + "Name")
.buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService.createClassificationQuery().nameLike(testIdentifier + "%").list();
ClassificationSummary masterClassificationSummary =
classificationService.getClassification(classificationSummary.getKey(), "").asSummary();
assertThat(classificationSummaryList)
.containsExactlyInAnyOrder(classificationSummary, masterClassificationSummary);
}
@WithAccessId(user = "businessadmin")
@Test
void should_FindClassification_When_QueryingForNameIn() throws Exception {
String testIdentifier = UUID.randomUUID().toString();
ClassificationSummary classificationSummary =
defaultTestClassification()
.name(testIdentifier)
.buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService.createClassificationQuery().nameIn(testIdentifier).list();
ClassificationSummary masterClassificationSummary =
classificationService.getClassification(classificationSummary.getKey(), "").asSummary();
assertThat(classificationSummaryList)
.containsExactlyInAnyOrder(classificationSummary, masterClassificationSummary);
}
@WithAccessId(user = "businessadmin")
@Test
void should_FindClassification_When_QueryingForDescriptionLike() throws Exception {
String testIdentifier = UUID.randomUUID().toString();
ClassificationSummary classificationSummary =
defaultTestClassification()
.description(testIdentifier + "Description")
.buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.descriptionLike(testIdentifier + "%")
.list();
ClassificationSummary masterClassificationSummary =
classificationService.getClassification(classificationSummary.getKey(), "").asSummary();
assertThat(classificationSummaryList)
.containsExactlyInAnyOrder(classificationSummary, masterClassificationSummary);
}
@WithAccessId(user = "businessadmin")
@Test
void should_FindClassification_When_QueryingForServiceLevelIn() throws Exception {
String testIdentifier = UUID.randomUUID().toString();
ClassificationSummary classificationSummary =
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.serviceLevel("P99D")
.buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_1, testIdentifier)
.serviceLevelIn("P99D")
.list();
ClassificationSummary masterClassificationSummary =
classificationService.getClassification(classificationSummary.getKey(), "").asSummary();
assertThat(classificationSummaryList)
.containsExactlyInAnyOrder(classificationSummary, masterClassificationSummary);
}
@WithAccessId(user = "businessadmin")
@Test
void should_FindClassification_When_QueryingForServiceLevelLike() throws Exception {
String testIdentifier = UUID.randomUUID().toString();
ClassificationSummary classificationSummary =
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.serviceLevel("P99D")
.buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_1, testIdentifier)
.serviceLevelLike("P99%")
.list();
ClassificationSummary masterClassificationSummary =
classificationService.getClassification(classificationSummary.getKey(), "").asSummary();
assertThat(classificationSummaryList)
.containsExactlyInAnyOrder(classificationSummary, masterClassificationSummary);
}
@WithAccessId(user = "businessadmin")
@Test
void should_FindClassification_When_QueryingForApplicationEntryPointIn() throws Exception {
String testIdentifier = UUID.randomUUID().toString();
ClassificationSummary classificationSummary =
defaultTestClassification()
.applicationEntryPoint(testIdentifier)
.buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.applicationEntryPointIn(testIdentifier)
.list();
ClassificationSummary masterClassificationSummary =
classificationService.getClassification(classificationSummary.getKey(), "").asSummary();
assertThat(classificationSummaryList)
.containsExactlyInAnyOrder(classificationSummary, masterClassificationSummary);
}
@WithAccessId(user = "businessadmin")
@Test
void should_FindClassification_When_QueryingForApplicationEntryPointLike() throws Exception {
String testIdentifier = UUID.randomUUID().toString();
ClassificationSummary classificationSummary =
defaultTestClassification()
.applicationEntryPoint(testIdentifier + "ApplicationEntryPoint")
.buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.applicationEntryPointLike(testIdentifier + "%")
.list();
ClassificationSummary masterClassificationSummary =
classificationService.getClassification(classificationSummary.getKey(), "").asSummary();
assertThat(classificationSummaryList)
.containsExactlyInAnyOrder(classificationSummary, masterClassificationSummary);
}
@WithAccessId(user = "businessadmin")
@Test
void should_FindClassifications_When_QueryingForCreatedTimestampWithin() throws Exception {
final Instant now = Instant.now();
Thread.sleep(10);
String testIdentifier = UUID.randomUUID().toString();
ClassificationSummary classificationSummary =
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_1, testIdentifier)
.createdWithin(new TimeInterval(now, null))
.list();
ClassificationSummary masterClassificationSummary =
classificationService.getClassification(classificationSummary.getKey(), "").asSummary();
assertThat(classificationSummaryList)
.containsExactlyInAnyOrder(classificationSummary, masterClassificationSummary);
}
@WithAccessId(user = "businessadmin")
@Test
void should_FindClassification_When_QueryingForModifiedTimestampWithin() throws Exception {
String testIdentifier = UUID.randomUUID().toString();
Classification classification =
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.buildAndStore(classificationService);
final Instant now = Instant.now();
Thread.sleep(10);
classificationService.updateClassification(classification);
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_1, testIdentifier)
.modifiedWithin(new TimeInterval(now, null))
.list();
assertThat(classificationSummaryList).containsExactlyInAnyOrder(classification.asSummary());
}
@WithAccessId(user = "businessadmin")
@Test
void should_FindClassifications_When_QueryingUsingListNameValues() throws Exception {
String testIdentifier = UUID.randomUUID().toString();
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.name("Classification Name")
.buildAndStoreAsSummary(classificationService);
defaultTestClassification().buildAndStoreAsSummary(classificationService);
List<String> columnNameList =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_1, testIdentifier)
.listValues(NAME, null);
List<String> columnNameMasterList =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_1, testIdentifier)
.domainIn("")
.listValues(NAME, null);
List<String> columnNameAllList =
Stream.concat(columnNameList.stream(), columnNameMasterList.stream())
.collect(Collectors.toList());
assertThat(columnNameAllList).containsOnly("Classification Name");
}
@WithAccessId(user = "businessadmin")
@Test
void should_FindClassifications_When_QueryingUsingListTypeValues() throws Exception {
String testIdentifier = UUID.randomUUID().toString();
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.type("DOCUMENT")
.buildAndStoreAsSummary(classificationService);
defaultTestClassification().buildAndStoreAsSummary(classificationService);
List<String> columnTypeList =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_1, testIdentifier)
.listValues(TYPE, null);
List<String> columnTypeMasterList =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_1, testIdentifier)
.domainIn("")
.listValues(TYPE, null);
List<String> columnTypeAllList =
Stream.concat(columnTypeList.stream(), columnTypeMasterList.stream())
.collect(Collectors.toList());
assertThat(columnTypeAllList).containsOnly("DOCUMENT");
}
@WithAccessId(user = "businessadmin")
@Test
void should_FindClassifications_When_QueryingUsingListIsValidInDomainValues() throws Exception {
String testIdentifier = UUID.randomUUID().toString();
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.type("TASK")
.isValidInDomain(false)
.buildAndStoreAsSummary(classificationService);
defaultTestClassification().buildAndStoreAsSummary(classificationService);
List<String> columnIsValidInDomainList =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_1, testIdentifier)
.listValues(VALID_IN_DOMAIN, null);
List<String> columnIsValidInDomainMasterList =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_1, testIdentifier)
.domainIn("")
.listValues(TYPE, null);
List<String> columnIsValidInDomainAllList =
Stream.concat(columnIsValidInDomainList.stream(), columnIsValidInDomainMasterList.stream())
.collect(Collectors.toList());
// Expecting "0" for H2 (==> false in Oracle DBs) and "f" for POSTGRES (==> abbreviation of
// false)
assertThat(columnIsValidInDomainAllList).containsAnyOf("f", "0");
}
@WithAccessId(user = "businessadmin")
@Test
void should_FindClassifications_When_QueryingUsingListCreatedValues() throws Exception {
final DateTimeFormatterBuilder dateTimeFormatterBuilder =
new DateTimeFormatterBuilder()
.appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"))
.appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS"))
.appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S"));
String testIdentifier = UUID.randomUUID().toString();
final Instant now = Instant.now();
Thread.sleep(10);
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.type("TASK")
.isValidInDomain(false)
.buildAndStoreAsSummary(classificationService);
defaultTestClassification().buildAndStoreAsSummary(classificationService);
List<String> columnCreatedList =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_1, testIdentifier)
.listValues(CREATED, null);
List<String> columnCreatedMasterList =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_1, testIdentifier)
.listValues(CREATED, null);
List<String> columnCreatedAllList =
Stream.concat(columnCreatedList.stream(), columnCreatedMasterList.stream())
.collect(Collectors.toList());
assertThat(columnCreatedAllList)
.isNotEmpty()
.allSatisfy(
c ->
assertThat(now)
.isBefore(
LocalDateTime.parse(c, dateTimeFormatterBuilder.toFormatter())
.toInstant(ZoneOffset.UTC)));
}
}

View File

@ -0,0 +1,429 @@
package acceptance.classification.query;
import static java.lang.String.CASE_INSENSITIVE_ORDER;
import static org.assertj.core.api.Assertions.assertThat;
import static pro.taskana.classification.api.ClassificationCustomField.CUSTOM_1;
import static pro.taskana.common.api.BaseQuery.SortDirection.ASCENDING;
import static pro.taskana.common.api.BaseQuery.SortDirection.DESCENDING;
import static pro.taskana.testapi.DefaultTestEntities.defaultTestClassification;
import java.text.Collator;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.UUID;
import java.util.stream.Stream;
import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestFactory;
import org.junit.jupiter.api.TestMethodOrder;
import org.junit.jupiter.api.function.ThrowingConsumer;
import pro.taskana.classification.api.ClassificationCustomField;
import pro.taskana.classification.api.ClassificationService;
import pro.taskana.classification.api.models.Classification;
import pro.taskana.classification.api.models.ClassificationSummary;
import pro.taskana.testapi.TaskanaInject;
import pro.taskana.testapi.TaskanaIntegrationTest;
import pro.taskana.testapi.security.WithAccessId;
/**
* The QueryClassificationsWithSortingAccTest for all "query classification with sorting" scenarios.
*
* <p>Note: Instead of working with a clean database for each test, we create a scenario. In that
* scenario we use {@linkplain ClassificationCustomField#CUSTOM_1} to filter out all the other
* created {@linkplain Classification Classifications}. Therefore, all tests regarding {@linkplain
* ClassificationCustomField ClassificationCustomFields} are executed first.
*
* <p>The alternative is to create a "big" scenario as a test setup. But that would result to the
* same issues we have with the sql file.
*/
@TaskanaIntegrationTest
@TestMethodOrder(value = MethodOrderer.OrderAnnotation.class)
class ClassificationQuerySortingAccTest {
@TaskanaInject ClassificationService classificationService;
@WithAccessId(user = "businessadmin")
@TestFactory
@Order(1)
Stream<DynamicTest> should_FindClassifications_When_QueryingForCustomAttributeIn() {
String testIdentifier = UUID.randomUUID().toString();
Iterator<ClassificationCustomField> customFieldIterator =
Arrays.stream(ClassificationCustomField.values()).iterator();
ThrowingConsumer<ClassificationCustomField> test =
customField -> {
ClassificationSummary classificationSummary =
defaultTestClassification()
.customAttribute(customField, testIdentifier)
.buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.customAttributeIn(customField, testIdentifier)
.list();
ClassificationSummary masterClassificationSummary =
classificationService
.getClassification(classificationSummary.getKey(), "")
.asSummary();
assertThat(classificationSummaryList)
.containsExactlyInAnyOrder(classificationSummary, masterClassificationSummary);
};
return DynamicTest.stream(
customFieldIterator, c -> String.format("for %s", c.toString()), test);
}
@WithAccessId(user = "businessadmin")
@Test
void should_OrderClassifications_When_QueryingForOrderByKeyAsc() throws Exception {
String testIdentifier = UUID.randomUUID().toString();
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.buildAndStoreAsSummary(classificationService);
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_1, testIdentifier)
.orderByKey(ASCENDING)
.list();
// Ensure that there are enough elements to compare
assertThat(classificationSummaryList)
.hasSize(4)
.extracting(ClassificationSummary::getKey)
.isSortedAccordingTo(CASE_INSENSITIVE_ORDER);
}
@WithAccessId(user = "businessadmin")
@Test
void should_OrderClassifications_When_QueryingForOrderByParentKeyDesc() throws Exception {
String testIdentifier = UUID.randomUUID().toString();
ClassificationSummary parentClassificationSummary1 =
defaultTestClassification().buildAndStoreAsSummary(classificationService);
ClassificationSummary parentClassificationSummary2 =
defaultTestClassification().buildAndStoreAsSummary(classificationService);
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.parentKey(parentClassificationSummary1.getKey())
.buildAndStoreAsSummary(classificationService);
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.parentKey(parentClassificationSummary2.getKey())
.buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_1, testIdentifier)
.orderByParentKey(DESCENDING)
.list();
// Ensure that there are enough elements to compare
assertThat(classificationSummaryList)
.hasSize(4)
.extracting(ClassificationSummary::getParentKey)
.isSortedAccordingTo(CASE_INSENSITIVE_ORDER.reversed());
}
@WithAccessId(user = "businessadmin")
@Test
void should_OrderClassifications_When_QueryingForOrderByParentKeyAsc() throws Exception {
String testIdentifier = UUID.randomUUID().toString();
ClassificationSummary parentClassificationSummary1 =
defaultTestClassification().buildAndStoreAsSummary(classificationService);
ClassificationSummary parentClassificationSummary2 =
defaultTestClassification().buildAndStoreAsSummary(classificationService);
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.parentKey(parentClassificationSummary1.getKey())
.buildAndStoreAsSummary(classificationService);
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.parentKey(parentClassificationSummary2.getKey())
.buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_1, testIdentifier)
.orderByParentKey(ASCENDING)
.list();
// Ensure that there are enough elements to compare
assertThat(classificationSummaryList)
.hasSize(4)
.extracting(ClassificationSummary::getParentKey)
.isSortedAccordingTo(CASE_INSENSITIVE_ORDER);
}
@WithAccessId(user = "businessadmin")
@Test
void should_OrderClassifications_When_QueryingForOrderByParentIdDesc() throws Exception {
String testIdentifier = UUID.randomUUID().toString();
ClassificationSummary parentClassificationSummary1 =
defaultTestClassification().buildAndStoreAsSummary(classificationService);
ClassificationSummary parentClassificationSummary2 =
defaultTestClassification().buildAndStoreAsSummary(classificationService);
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.parentId(parentClassificationSummary1.getId())
.buildAndStoreAsSummary(classificationService);
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.parentId(parentClassificationSummary2.getId())
.buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_1, testIdentifier)
.orderByParentId(DESCENDING)
.list();
// Ensure that there are enough elements to compare
assertThat(classificationSummaryList)
.hasSize(4)
.extracting(ClassificationSummary::getParentId)
.isSortedAccordingTo(CASE_INSENSITIVE_ORDER.reversed());
}
@WithAccessId(user = "businessadmin")
@Test
void should_OrderClassifications_When_QueryingForOrderByCategoryDesc() throws Exception {
String testIdentifier = UUID.randomUUID().toString();
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.category("MANUAL")
.type("TASK")
.buildAndStoreAsSummary(classificationService);
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.category("EXTERNAL")
.type("TASK")
.buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_1, testIdentifier)
.orderByCategory(DESCENDING)
.list();
// Ensure that there are enough elements to compare
assertThat(classificationSummaryList)
.hasSize(4)
.extracting(ClassificationSummary::getCategory)
.isSortedAccordingTo(CASE_INSENSITIVE_ORDER.reversed());
}
@WithAccessId(user = "businessadmin")
@Test
void should_OrderClassifications_When_QueryingForOrderByDomainAsc() throws Exception {
String testIdentifier = UUID.randomUUID().toString();
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.domain("DOMAIN_A")
.buildAndStoreAsSummary(classificationService);
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.domain("DOMAIN_B")
.buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_1, testIdentifier)
.orderByDomain(ASCENDING)
.list();
// Ensure that there are enough elements to compare
assertThat(classificationSummaryList)
.hasSize(4)
.extracting(ClassificationSummary::getDomain)
.isSortedAccordingTo(CASE_INSENSITIVE_ORDER);
}
@WithAccessId(user = "businessadmin")
@Test
void should_OrderClassifications_When_QueryingForOrderByPriorityDesc() throws Exception {
String testIdentifier = UUID.randomUUID().toString();
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.priority(1)
.buildAndStoreAsSummary(classificationService);
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.priority(99)
.buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_1, testIdentifier)
.orderByPriority(DESCENDING)
.list();
// Ensure that there are enough elements to compare
assertThat(classificationSummaryList)
.hasSize(4)
.isSortedAccordingTo(
Comparator.comparingInt(ClassificationSummary::getPriority).reversed());
}
@WithAccessId(user = "businessadmin")
@Test
void should_OrderClassifications_When_QueryingForOrderByNameAsc() throws Exception {
String testIdentifier = UUID.randomUUID().toString();
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.name("A")
.buildAndStoreAsSummary(classificationService);
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.name("B")
.buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_1, testIdentifier)
.orderByName(ASCENDING)
.list();
// Ensure that there are enough elements to compare
assertThat(classificationSummaryList)
.hasSize(4)
.extracting(ClassificationSummary::getName)
.isSortedAccordingTo(Collator.getInstance(Locale.GERMANY));
}
@WithAccessId(user = "businessadmin")
@Test
void should_OrderClassifications_When_QueryingForOrderByServiceLevelDesc() throws Exception {
String testIdentifier = UUID.randomUUID().toString();
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.serviceLevel("P1D")
.buildAndStoreAsSummary(classificationService);
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.serviceLevel("P99D")
.buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_1, testIdentifier)
.orderByServiceLevel(DESCENDING)
.list();
assertThat(classificationSummaryList)
.hasSize(4)
.extracting(ClassificationSummary::getServiceLevel)
.isSortedAccordingTo(CASE_INSENSITIVE_ORDER.reversed());
}
@WithAccessId(user = "businessadmin")
@Test
void should_OrderClassifications_When_QueryingForOrderByApplicationEntryPointAsc()
throws Exception {
String testIdentifier = UUID.randomUUID().toString();
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.applicationEntryPoint("A")
.buildAndStoreAsSummary(classificationService);
defaultTestClassification()
.customAttribute(CUSTOM_1, testIdentifier)
.applicationEntryPoint("B")
.buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_1, testIdentifier)
.orderByApplicationEntryPoint(ASCENDING)
.list();
// Ensure that there are enough elements to compare
assertThat(classificationSummaryList)
.hasSize(4)
.extracting(ClassificationSummary::getApplicationEntryPoint)
.isSortedAccordingTo(CASE_INSENSITIVE_ORDER);
}
@WithAccessId(user = "businessadmin")
@TestFactory
Stream<DynamicTest> should_OrderClassifications_When_QueryingForOrderByCustomAttributesAsc() {
String testIdentifier = UUID.randomUUID().toString();
Iterator<ClassificationCustomField> customFieldIterator =
Arrays.stream(ClassificationCustomField.values()).iterator();
ThrowingConsumer<ClassificationCustomField> test =
customField -> {
defaultTestClassification()
.customAttribute(customField, "A" + testIdentifier)
.buildAndStoreAsSummary(classificationService);
defaultTestClassification()
.customAttribute(customField, "B" + testIdentifier)
.buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.customAttributeIn(customField, "A" + testIdentifier, "B" + testIdentifier)
.orderByCustomAttribute(customField, ASCENDING)
.list();
// Ensure that there are enough elements to compare
assertThat(classificationSummaryList)
.hasSize(4)
.extracting(c -> c.getCustomField(customField))
.isSortedAccordingTo(CASE_INSENSITIVE_ORDER);
};
return DynamicTest.stream(
customFieldIterator, c -> String.format("for %s", c.toString()), test);
}
@WithAccessId(user = "businessadmin")
@TestFactory
Stream<DynamicTest> should_OrderClassifications_When_QueryingForOrderByCustomAttributesDesc() {
String testIdentifier = UUID.randomUUID().toString();
Iterator<ClassificationCustomField> customFieldIterator =
Arrays.stream(ClassificationCustomField.values()).iterator();
ThrowingConsumer<ClassificationCustomField> test =
customField -> {
defaultTestClassification()
.customAttribute(customField, "A" + testIdentifier)
.buildAndStoreAsSummary(classificationService);
defaultTestClassification()
.customAttribute(customField, "B" + testIdentifier)
.buildAndStoreAsSummary(classificationService);
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.customAttributeIn(customField, "A" + testIdentifier, "B" + testIdentifier)
.orderByCustomAttribute(customField, DESCENDING)
.list();
// Ensure that there are enough elements to compare
assertThat(classificationSummaryList)
.hasSize(4)
.extracting(c -> c.getCustomField(customField))
.isSortedAccordingTo(CASE_INSENSITIVE_ORDER.reversed());
};
return DynamicTest.stream(
customFieldIterator, c -> String.format("for %s", c.toString()), test);
}
}

View File

@ -1,639 +0,0 @@
package acceptance.classification.query;
import static java.lang.String.CASE_INSENSITIVE_ORDER;
import static org.assertj.core.api.Assertions.assertThat;
import static pro.taskana.classification.api.ClassificationCustomField.CUSTOM_1;
import static pro.taskana.classification.api.ClassificationCustomField.CUSTOM_2;
import static pro.taskana.classification.api.ClassificationCustomField.CUSTOM_3;
import static pro.taskana.classification.api.ClassificationCustomField.CUSTOM_4;
import static pro.taskana.classification.api.ClassificationCustomField.CUSTOM_5;
import static pro.taskana.classification.api.ClassificationCustomField.CUSTOM_6;
import static pro.taskana.classification.api.ClassificationCustomField.CUSTOM_7;
import static pro.taskana.classification.api.ClassificationCustomField.CUSTOM_8;
import static pro.taskana.classification.api.ClassificationQueryColumnName.CREATED;
import static pro.taskana.classification.api.ClassificationQueryColumnName.NAME;
import static pro.taskana.classification.api.ClassificationQueryColumnName.TYPE;
import static pro.taskana.classification.api.ClassificationQueryColumnName.VALID_IN_DOMAIN;
import static pro.taskana.common.api.BaseQuery.SortDirection.ASCENDING;
import static pro.taskana.common.api.BaseQuery.SortDirection.DESCENDING;
import static pro.taskana.common.api.SharedConstants.MASTER_DOMAIN;
import acceptance.AbstractAccTest;
import java.text.Collator;
import java.time.Instant;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.stream.Stream;
import org.assertj.core.api.Condition;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestFactory;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.api.function.ThrowingConsumer;
import pro.taskana.classification.api.ClassificationCustomField;
import pro.taskana.classification.api.ClassificationService;
import pro.taskana.classification.api.models.ClassificationSummary;
import pro.taskana.common.api.TimeInterval;
import pro.taskana.common.test.security.JaasExtension;
import pro.taskana.common.test.security.WithAccessId;
/** Acceptance test for all "get classification" scenarios. */
@ExtendWith(JaasExtension.class)
class QueryClassificationAccTest extends AbstractAccTest {
private static ClassificationService classificationService;
@BeforeAll
static void setup() {
classificationService = taskanaEngine.getClassificationService();
}
@Test
void testQueryClassificationValuesForColumnName() {
List<String> columnValueList =
classificationService.createClassificationQuery().listValues(NAME, null);
assertThat(columnValueList).hasSize(16);
columnValueList = classificationService.createClassificationQuery().listValues(TYPE, null);
assertThat(columnValueList).hasSize(2);
columnValueList =
classificationService
.createClassificationQuery()
.domainIn(MASTER_DOMAIN)
.listValues(TYPE, null);
assertThat(columnValueList).hasSize(2);
columnValueList =
classificationService
.createClassificationQuery()
.domainIn(MASTER_DOMAIN)
.listValues(CREATED, null);
assertThat(columnValueList).hasSize(1);
columnValueList =
classificationService
.createClassificationQuery()
.domainIn(MASTER_DOMAIN)
.validInDomainEquals(false)
.listValues(VALID_IN_DOMAIN, null);
assertThat(columnValueList).hasSize(1); // all are false in ""
}
@Test
void testFindClassificationsByCategoryAndDomain() {
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.categoryIn("MANUAL")
.domainIn("DOMAIN_A")
.list();
assertThat(classificationSummaryList).hasSize(3);
}
@Test
void testGetOneClassificationForMultipleDomains() {
List<ClassificationSummary> classifications =
classificationService
.createClassificationQuery()
.keyIn("L10000")
.domainIn("DOMAIN_A", "DOMAIN_B", MASTER_DOMAIN)
.list();
assertThat(classifications).hasSize(2);
}
@Test
void testGetClassificationsForTypeAndParent() {
List<ClassificationSummary> classifications =
classificationService
.createClassificationQuery()
.typeIn("TASK", "DOCUMENT")
.parentIdIn("")
.list();
assertThat(classifications)
.hasSize(30)
.extracting(ClassificationSummary::getType)
.containsOnly("TASK", "DOCUMENT")
.areExactly(28, new Condition<>("TASK"::equals, "TASK"))
.areExactly(2, new Condition<>("DOCUMENT"::equals, "DOCUMENT"));
}
@Test
void testGetClassificationsForKeyAndCategories() {
List<ClassificationSummary> classifications =
classificationService
.createClassificationQuery()
.keyIn("T2100", "L10000")
.categoryIn("EXTERNAL", "MANUAL")
.list();
assertThat(classifications)
.hasSize(5)
.extracting(ClassificationSummary::getCategory)
.containsOnly("EXTERNAL", "MANUAL")
.areExactly(2, new Condition<>("EXTERNAL"::equals, "EXTERNAL"))
.areExactly(3, new Condition<>("MANUAL"::equals, "MANUAL"));
}
@Test
void testGetClassificationsWithParentId() {
List<ClassificationSummary> classifications =
classificationService
.createClassificationQuery()
.keyIn("A12", "A13")
.categoryIn("EXTERNAL", "MANUAL")
.parentIdIn("CLI:100000000000000000000000000000000014")
.list();
assertThat(classifications).hasSize(1);
classifications =
classificationService
.createClassificationQuery()
.keyIn("A12", "A13")
.categoryIn("EXTERNAL", "MANUAL", "AUTOMATIC")
.parentIdIn(
"CLI:100000000000000000000000000000000014",
"CLI:100000000000000000000000000000000010",
"CLI:100000000000000000000000000000000011")
.domainIn("DOMAIN_A")
.list();
assertThat(classifications).hasSize(2);
}
@Test
void testGetClassificationsWithParentKey() {
List<ClassificationSummary> classifications =
classificationService
.createClassificationQuery()
.keyIn("A12", "A13")
.categoryIn("EXTERNAL", "MANUAL")
.parentKeyIn("L10000")
.list();
assertThat(classifications).hasSize(2);
classifications =
classificationService
.createClassificationQuery()
.keyIn("A12", "A13")
.categoryIn("EXTERNAL", "MANUAL", "AUTOMATIC")
.parentKeyIn("L10000", "T2100", "T6310")
.domainIn("DOMAIN_A")
.list();
assertThat(classifications).hasSize(2);
}
@Test
void testGetClassificationsWithCustom1() throws Exception {
List<ClassificationSummary> classifications =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_1, "VNR,RVNR,KOLVNR", "VNR")
.domainIn("DOMAIN_A")
.list();
assertThat(classifications).hasSize(14);
}
@Test
void testGetClassificationsWithCustom1Like() throws Exception {
List<ClassificationSummary> classifications =
classificationService
.createClassificationQuery()
.customAttributeLike(CUSTOM_1, "%RVNR%")
.domainIn("DOMAIN_A")
.typeIn("TASK")
.list();
assertThat(classifications).hasSize(14);
}
@Test
void testGetClassificationsWithParentAndCustom2() throws Exception {
List<ClassificationSummary> classifications =
classificationService
.createClassificationQuery()
.parentIdIn("CLI:100000000000000000000000000000000004")
.customAttributeIn(CUSTOM_2, "TEXT_1", "TEXT_2")
.list();
assertThat(classifications).hasSize(3);
}
@Test
void testFindClassificationsByCreatedTimestamp() {
List<ClassificationSummary> classificationSummaryList =
classificationService
.createClassificationQuery()
.domainIn("DOMAIN_A")
.createdWithin(toDaysInterval())
.list();
assertThat(classificationSummaryList).hasSize(18);
}
@Test
void testFindClassificationsByPriorityAndValidInDomain() {
List<ClassificationSummary> list =
classificationService
.createClassificationQuery()
.validInDomainEquals(Boolean.TRUE)
.priorityIn(1, 2, 3)
.list();
assertThat(list).hasSize(16);
}
@WithAccessId(user = "businessadmin")
@Test
void testFindClassificationByModifiedWithin() throws Exception {
String clId = "CLI:200000000000000000000000000000000015";
classificationService.updateClassification(classificationService.getClassification(clId));
List<ClassificationSummary> list =
classificationService
.createClassificationQuery()
.modifiedWithin(
new TimeInterval(
classificationService.getClassification(clId).getModified(), Instant.now()))
.list();
assertThat(list).hasSize(1).first().extracting(ClassificationSummary::getId).isEqualTo(clId);
}
@Test
void testQueryForNameLike() {
List<ClassificationSummary> results =
classificationService.createClassificationQuery().nameLike("Dynamik%").list();
assertThat(results).hasSize(8);
}
@Test
void testQueryForNameIn() {
List<ClassificationSummary> results =
classificationService
.createClassificationQuery()
.nameIn("Widerruf", "OLD-Leistungsfall")
.list();
assertThat(results).hasSize(6);
}
@Test
void testQueryForDescriptionLike() {
List<ClassificationSummary> results =
classificationService.createClassificationQuery().descriptionLike("Widerruf%").list();
assertThat(results).hasSize(9);
}
@Test
void testQueryForServiceLevelIn() {
List<ClassificationSummary> results =
classificationService.createClassificationQuery().serviceLevelIn("P2D").list();
assertThat(results).hasSize(6);
}
@Test
void testQueryForServiceLevelLike() {
List<ClassificationSummary> results =
classificationService.createClassificationQuery().serviceLevelLike("PT%").list();
assertThat(results).isEmpty();
}
@Test
void testQueryForApplicationEntryPointIn() {
List<ClassificationSummary> results =
classificationService
.createClassificationQuery()
.applicationEntryPointIn("specialPoint", "point0815")
.list();
assertThat(results).hasSize(3);
}
@Test
void testQueryForApplicationEntryPointLike() {
List<ClassificationSummary> results =
classificationService
.createClassificationQuery()
.applicationEntryPointLike("point%")
.list();
assertThat(results).hasSize(3);
}
@Test
void testQueryForCustom1In() throws Exception {
List<ClassificationSummary> results =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_1, "VNR,RVNR,KOLVNR, ANR", "VNR")
.list();
assertThat(results).hasSize(17);
}
@Test
void testQueryForCustom2In() throws Exception {
List<ClassificationSummary> results =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_2, "CUSTOM2", "custom2")
.list();
assertThat(results).hasSize(5);
}
@Test
void testQueryForCustom3In() throws Exception {
List<ClassificationSummary> results =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_3, "Custom3", "custom3")
.list();
assertThat(results).hasSize(5);
}
@Test
void testQueryForCustom4In() throws Exception {
List<ClassificationSummary> results =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_4, "custom4")
.list();
assertThat(results).hasSize(5);
}
@Test
void testQueryForCustom5In() throws Exception {
List<ClassificationSummary> results =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_5, "custom5")
.list();
assertThat(results).hasSize(5);
}
@Test
void testQueryForCustom6In() throws Exception {
List<ClassificationSummary> results =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_6, "custom6")
.list();
assertThat(results).hasSize(5);
}
@Test
void testQueryForCustom7In() throws Exception {
List<ClassificationSummary> results =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_7, "custom7", "custom_7")
.list();
assertThat(results).hasSize(5);
}
@Test
void testQueryForCustom8In() throws Exception {
List<ClassificationSummary> results =
classificationService
.createClassificationQuery()
.customAttributeIn(CUSTOM_8, "custom_8", "custom8")
.list();
assertThat(results).hasSize(5);
}
@Test
void testQueryForCustom2Like() throws Exception {
List<ClassificationSummary> results =
classificationService
.createClassificationQuery()
.customAttributeLike(CUSTOM_2, "cus%")
.list();
assertThat(results).hasSize(6);
}
@Test
void testQueryForCustom3Like() throws Exception {
List<ClassificationSummary> results =
classificationService
.createClassificationQuery()
.customAttributeLike(CUSTOM_3, "cus%")
.list();
assertThat(results).hasSize(6);
}
@Test
void testQueryForCustom4Like() throws Exception {
List<ClassificationSummary> results =
classificationService
.createClassificationQuery()
.customAttributeLike(CUSTOM_4, "cus%")
.list();
assertThat(results).hasSize(6);
}
@Test
void testQueryForCustom5Like() throws Exception {
List<ClassificationSummary> results =
classificationService
.createClassificationQuery()
.customAttributeLike(CUSTOM_5, "cus%")
.list();
assertThat(results).hasSize(6);
}
@Test
void testQueryForCustom6Like() throws Exception {
List<ClassificationSummary> results =
classificationService
.createClassificationQuery()
.customAttributeLike(CUSTOM_6, "cus%")
.list();
assertThat(results).hasSize(6);
}
@Test
void testQueryForCustom7Like() throws Exception {
List<ClassificationSummary> results =
classificationService
.createClassificationQuery()
.customAttributeLike(CUSTOM_7, "cus%")
.list();
assertThat(results).hasSize(6);
}
@Test
void testQueryForCustom8Like() throws Exception {
List<ClassificationSummary> results =
classificationService
.createClassificationQuery()
.customAttributeLike(CUSTOM_8, "cus%")
.list();
assertThat(results).hasSize(6);
}
@Test
void testQueryForOrderByKeyAsc() {
List<ClassificationSummary> results =
classificationService.createClassificationQuery().orderByKey(ASCENDING).list();
assertThat(results)
.hasSizeGreaterThan(2)
.extracting(ClassificationSummary::getKey)
.isSortedAccordingTo(CASE_INSENSITIVE_ORDER);
}
@Test
void testQueryForOrderByParentIdDesc() {
List<ClassificationSummary> results =
classificationService.createClassificationQuery().orderByParentId(DESCENDING).list();
assertThat(results)
.hasSizeGreaterThan(2)
.extracting(ClassificationSummary::getParentId)
.isSortedAccordingTo(CASE_INSENSITIVE_ORDER.reversed());
}
@Test
void testQueryForOrderByParentKeyDesc() {
List<ClassificationSummary> results =
classificationService.createClassificationQuery().orderByParentKey(DESCENDING).list();
assertThat(results)
.hasSizeGreaterThan(2)
.extracting(ClassificationSummary::getParentKey)
.isSortedAccordingTo(CASE_INSENSITIVE_ORDER.reversed());
}
@Test
void testQueryForOrderByCategoryDesc() {
List<ClassificationSummary> results =
classificationService.createClassificationQuery().orderByCategory(DESCENDING).list();
assertThat(results)
.hasSizeGreaterThan(2)
.extracting(ClassificationSummary::getCategory)
.isSortedAccordingTo(CASE_INSENSITIVE_ORDER.reversed());
}
@Test
void testQueryForOrderByDomainAsc() {
List<ClassificationSummary> results =
classificationService.createClassificationQuery().orderByDomain(ASCENDING).list();
assertThat(results)
.hasSizeGreaterThan(2)
.extracting(ClassificationSummary::getDomain)
.isSortedAccordingTo(CASE_INSENSITIVE_ORDER);
}
@Test
void testQueryForOrderByPriorityDesc() {
List<ClassificationSummary> results =
classificationService.createClassificationQuery().orderByPriority(DESCENDING).list();
assertThat(results)
.hasSizeGreaterThan(2)
.isSortedAccordingTo(
Comparator.comparingInt(ClassificationSummary::getPriority).reversed());
}
@Test
void testQueryForOrderByNameAsc_old() {
ClassificationService classificationService = taskanaEngine.getClassificationService();
List<ClassificationSummary> results =
classificationService.createClassificationQuery().orderByName(ASCENDING).list();
assertThat(results.get(0).getName()).isEqualTo("Beratungsprotokoll");
}
// This test checks the collation of the used databases H2, Postgres and DB2 11.1
@Test
void testQueryForOrderByNameAsc() {
List<ClassificationSummary> results =
classificationService.createClassificationQuery().orderByName(ASCENDING).list();
assertThat(results)
.hasSizeGreaterThan(2)
.extracting(ClassificationSummary::getName)
.isSortedAccordingTo(Collator.getInstance(Locale.GERMANY));
}
@Test
void testQueryForOrderByServiceLevelDesc() {
List<ClassificationSummary> results =
classificationService.createClassificationQuery().orderByServiceLevel(DESCENDING).list();
assertThat(results)
.hasSizeGreaterThan(2)
.extracting(ClassificationSummary::getServiceLevel)
.isSortedAccordingTo(CASE_INSENSITIVE_ORDER.reversed());
}
@Test
void testQueryForOrderByApplicationEntryPointAsc() {
List<ClassificationSummary> results =
classificationService
.createClassificationQuery()
.orderByApplicationEntryPoint(ASCENDING)
.list();
assertThat(results)
.hasSizeGreaterThan(2)
.extracting(ClassificationSummary::getApplicationEntryPoint)
.isSortedAccordingTo(CASE_INSENSITIVE_ORDER);
}
@Test
void testQueryForOrderByParentKeyAsc() {
List<ClassificationSummary> results =
classificationService.createClassificationQuery().orderByParentKey(ASCENDING).list();
assertThat(results)
.hasSizeGreaterThan(2)
.extracting(ClassificationSummary::getParentKey)
.isSortedAccordingTo(CASE_INSENSITIVE_ORDER);
}
@TestFactory
Stream<DynamicTest> should_SortQueryAsc_When_OrderingByCustomAttribute() {
Iterator<ClassificationCustomField> iterator =
Arrays.stream(ClassificationCustomField.values()).iterator();
ThrowingConsumer<ClassificationCustomField> test =
customField -> {
List<ClassificationSummary> results =
classificationService
.createClassificationQuery()
.orderByCustomAttribute(customField, ASCENDING)
.list();
assertThat(results)
.hasSizeGreaterThan(2)
.extracting(c -> c.getCustomField(customField))
.isSortedAccordingTo(CASE_INSENSITIVE_ORDER);
};
return DynamicTest.stream(iterator, c -> "for " + c, test);
}
@TestFactory
Stream<DynamicTest> should_SortQueryDesc_When_OrderingByCustomAttribute() {
Iterator<ClassificationCustomField> iterator =
Arrays.stream(ClassificationCustomField.values()).iterator();
ThrowingConsumer<ClassificationCustomField> test =
customField -> {
List<ClassificationSummary> results =
classificationService
.createClassificationQuery()
.orderByCustomAttribute(customField, DESCENDING)
.list();
assertThat(results)
.hasSizeGreaterThan(2)
.extracting(c -> c.getCustomField(customField))
.isSortedAccordingTo(CASE_INSENSITIVE_ORDER.reversed());
};
return DynamicTest.stream(iterator, c -> "for " + c, test);
}
}