From 51a33aad5f8e2974fab59593c789e63a30e2aef1 Mon Sep 17 00:00:00 2001 From: jamesrdi Date: Tue, 11 Jul 2023 11:11:43 +0200 Subject: [PATCH] Closes #2316 - refactor DmnTaskRouterAccTest to use test-api --- .../taskana-spi-routing-dmn-router/pom.xml | 6 + .../routing/dmn/DmnTaskRouterAccTest.java | 133 ++++++++++++++++-- .../src/test/resources/empty.dmn | 20 +++ .../src/test/resources/taskana.properties | 2 +- 4 files changed, 149 insertions(+), 12 deletions(-) create mode 100644 routing/taskana-spi-routing-dmn-router/src/test/resources/empty.dmn diff --git a/routing/taskana-spi-routing-dmn-router/pom.xml b/routing/taskana-spi-routing-dmn-router/pom.xml index 568fde9601..26be321a0e 100644 --- a/routing/taskana-spi-routing-dmn-router/pom.xml +++ b/routing/taskana-spi-routing-dmn-router/pom.xml @@ -82,6 +82,12 @@ ${version.oracle} test + + pro.taskana + taskana-test-api + ${project.version} + test + diff --git a/routing/taskana-spi-routing-dmn-router/src/test/java/pro/taskana/routing/dmn/DmnTaskRouterAccTest.java b/routing/taskana-spi-routing-dmn-router/src/test/java/pro/taskana/routing/dmn/DmnTaskRouterAccTest.java index 7a267dbd89..ee03b0f1b5 100644 --- a/routing/taskana-spi-routing-dmn-router/src/test/java/pro/taskana/routing/dmn/DmnTaskRouterAccTest.java +++ b/routing/taskana-spi-routing-dmn-router/src/test/java/pro/taskana/routing/dmn/DmnTaskRouterAccTest.java @@ -2,29 +2,94 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static pro.taskana.testapi.DefaultTestEntities.defaultTestClassification; +import static pro.taskana.testapi.DefaultTestEntities.defaultTestWorkbasket; +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import org.assertj.core.api.ThrowableAssert.ThrowingCallable; +import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import pro.taskana.AbstractAccTest; +import pro.taskana.TaskanaConfiguration; +import pro.taskana.classification.api.ClassificationService; +import pro.taskana.classification.api.models.ClassificationSummary; +import pro.taskana.common.api.TaskanaEngine; import pro.taskana.common.api.exceptions.InvalidArgumentException; -import pro.taskana.common.test.security.JaasExtension; -import pro.taskana.common.test.security.WithAccessId; +import pro.taskana.common.internal.InternalTaskanaEngine; +import pro.taskana.spi.routing.api.TaskRoutingProvider; +import pro.taskana.spi.routing.internal.TaskRoutingManager; import pro.taskana.task.api.TaskService; import pro.taskana.task.api.models.ObjectReference; import pro.taskana.task.api.models.Task; +import pro.taskana.testapi.TaskanaInject; +import pro.taskana.testapi.TaskanaIntegrationTest; +import pro.taskana.testapi.WithServiceProvider; +import pro.taskana.testapi.builder.ObjectReferenceBuilder; +import pro.taskana.testapi.builder.UserBuilder; +import pro.taskana.testapi.builder.WorkbasketAccessItemBuilder; +import pro.taskana.testapi.builder.WorkbasketBuilder; +import pro.taskana.testapi.security.WithAccessId; +import pro.taskana.user.api.UserService; +import pro.taskana.workbasket.api.WorkbasketPermission; +import pro.taskana.workbasket.api.WorkbasketService; +import pro.taskana.workbasket.api.WorkbasketType; +import pro.taskana.workbasket.api.models.WorkbasketSummary; -@ExtendWith(JaasExtension.class) -class DmnTaskRouterAccTest extends AbstractAccTest { +@WithServiceProvider( + serviceProviderInterface = TaskRoutingProvider.class, + serviceProviders = DmnTaskRouter.class) +@TaskanaIntegrationTest +class DmnTaskRouterAccTest { + TaskanaConfiguration taskanaConfiguration; + @TaskanaInject TaskService taskService; + @TaskanaInject ClassificationService classificationService; + @TaskanaInject WorkbasketService workbasketService; + @TaskanaInject UserService userService; + @TaskanaInject TaskanaEngine taskanaEngine; + @TaskanaInject InternalTaskanaEngine internalTaskanaEngine; - private final TaskService taskService = taskanaEngine.getTaskService(); + ClassificationSummary defaultClassificationSummary; + WorkbasketSummary defaultWorkbasketSummary; + + @WithAccessId(user = "businessadmin") + @BeforeAll + void setup() throws Exception { + taskanaConfiguration = taskanaEngine.getConfiguration(); + defaultClassificationSummary = + defaultTestClassification().buildAndStoreAsSummary(classificationService); + defaultWorkbasketSummary = defaultTestWorkbasket().buildAndStoreAsSummary(workbasketService); + + createWorkbasketWithDomainA("GPK_KSC").buildAndStoreAsSummary(workbasketService); + createWorkbasketWithDomainA("GPK_KSC_1").buildAndStoreAsSummary(workbasketService); + createWorkbasketWithDomainA("GPK_KSC_2").buildAndStoreAsSummary(workbasketService); + + WorkbasketAccessItemBuilder.newWorkbasketAccessItem() + .workbasketId(defaultWorkbasketSummary.getId()) + .accessId("user-1-2") + .permission(WorkbasketPermission.OPEN) + .permission(WorkbasketPermission.READ) + .permission(WorkbasketPermission.APPEND) + .buildAndStore(workbasketService); + + UserBuilder.newUser() + .id("user-1-2") + .firstName("Max") + .lastName("Mustermann") + .longName("Long name of user-1-2") + .buildAndStore(userService); + + changeDmnTable("/dmn-table.dmn"); + + reinitializeTaskRoutingProviders(); + } @WithAccessId(user = "taskadmin") @Test void should_RouteTaskToCorrectWorkbasket_When_DmnTaskRouterFindsRule() throws Exception { - Task taskToRoute = taskService.newTask(); - taskToRoute.setClassificationKey("T2100"); + taskToRoute.setClassificationKey(defaultClassificationSummary.getKey()); ObjectReference objectReference = createObjectReference("company", null, null, "MyType1", "00000001"); taskToRoute.setPrimaryObjRef(objectReference); @@ -36,9 +101,8 @@ void should_RouteTaskToCorrectWorkbasket_When_DmnTaskRouterFindsRule() throws Ex @WithAccessId(user = "taskadmin") @Test void should_ThrowException_When_DmnTaskRouterFindsNoRule() { - Task taskToRoute = taskService.newTask(); - taskToRoute.setClassificationKey("T2100"); + taskToRoute.setClassificationKey(defaultClassificationSummary.getKey()); ObjectReference objectReference = createObjectReference("company", null, null, "MyTeö", "000002"); taskToRoute.setPrimaryObjRef(objectReference); @@ -49,4 +113,51 @@ void should_ThrowException_When_DmnTaskRouterFindsNoRule() { .extracting(Throwable::getMessage) .isEqualTo("Cannot create a Task outside a Workbasket"); } + + ObjectReference createObjectReference( + String company, String system, String systemInstance, String type, String value) { + return ObjectReferenceBuilder.newObjectReference() + .company(company) + .system(system) + .systemInstance(systemInstance) + .type(type) + .value(value) + .build(); + } + + private void changeDmnTable(String newPath) throws Exception { + Map mutableProperties = new HashMap<>(); + String dmnTableProperty = "taskana.routing.dmn"; + mutableProperties.put(dmnTableProperty, newPath); + Field property = taskanaConfiguration.getClass().getDeclaredField("properties"); + property.setAccessible(true); + property.set(taskanaConfiguration, mutableProperties); + property.setAccessible(false); + } + + private Object getProperty(String declaredField, Object object) throws Exception { + Field property = object.getClass().getDeclaredField(declaredField); + property.setAccessible(true); + Object returnObject = property.get(object); + property.setAccessible(false); + return returnObject; + } + + private void reinitializeTaskRoutingProviders() throws Exception { + TaskRoutingManager taskRoutingManager = internalTaskanaEngine.getTaskRoutingManager(); + List taskRoutingProviders = + (List) getProperty("taskRoutingProviders", taskRoutingManager); + for (TaskRoutingProvider taskRoutingProvider : taskRoutingProviders) { + taskRoutingProvider.initialize(taskanaEngine); + } + } + + private WorkbasketBuilder createWorkbasketWithDomainA(String key) { + return WorkbasketBuilder.newWorkbasket() + .key(key) + .domain("DOMAIN_A") + .name("Megabasket") + .type(WorkbasketType.GROUP) + .orgLevel1("company"); + } } diff --git a/routing/taskana-spi-routing-dmn-router/src/test/resources/empty.dmn b/routing/taskana-spi-routing-dmn-router/src/test/resources/empty.dmn new file mode 100644 index 0000000000..06a43acec5 --- /dev/null +++ b/routing/taskana-spi-routing-dmn-router/src/test/resources/empty.dmn @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/routing/taskana-spi-routing-dmn-router/src/test/resources/taskana.properties b/routing/taskana-spi-routing-dmn-router/src/test/resources/taskana.properties index b5826ca589..d94e368b00 100644 --- a/routing/taskana-spi-routing-dmn-router/src/test/resources/taskana.properties +++ b/routing/taskana-spi-routing-dmn-router/src/test/resources/taskana.properties @@ -20,7 +20,7 @@ taskana.jobs.history.cleanup.runEvery=P1D taskana.workingTime.holidays.german.enabled=true taskana.workingTime.holidays.german.corpus-christi.enabled=true taskana.history.logger.name=AUDIT -taskana.routing.dmn=/dmn-table.dmn +taskana.routing.dmn=/empty.dmn # enable or disable the jobscheduler at all # set it to false and no jobs are running taskana.jobs.scheduler.enabled=false