Closes #2316 - refactor DmnTaskRouterAccTest to use test-api
This commit is contained in:
parent
e443169804
commit
3bf9306929
|
@ -82,6 +82,12 @@
|
|||
<version>${version.oracle}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>pro.taskana</groupId>
|
||||
<artifactId>taskana-test-api</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
|
|
|
@ -2,29 +2,94 @@ package pro.taskana.routing.dmn;
|
|||
|
||||
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 @@ class DmnTaskRouterAccTest extends AbstractAccTest {
|
|||
@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 @@ class DmnTaskRouterAccTest extends AbstractAccTest {
|
|||
.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<String, String> 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<TaskRoutingProvider> taskRoutingProviders =
|
||||
(List<TaskRoutingProvider>) 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");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<definitions xmlns="https://www.omg.org/spec/DMN/20191111/MODEL/" xmlns:dmndi="https://www.omg.org/spec/DMN/20191111/DMNDI/" xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/" xmlns:modeler="http://camunda.org/schema/modeler/1.0" id="Definitions_0m4jljf" name="DRD" namespace="http://camunda.org/schema/1.0/dmn" exporter="Camunda Modeler" exporterVersion="5.12.1" modeler:executionPlatform="Camunda Cloud" modeler:executionPlatformVersion="8.2.0">
|
||||
<decision id="workbasketRouting" name="Workbasket Routing">
|
||||
<decisionTable id="workbasketRouting_decisionTable" hitPolicy="FIRST">
|
||||
<input id="Input_1">
|
||||
<inputExpression id="InputExpression_1" typeRef="string">
|
||||
<text></text>
|
||||
</inputExpression>
|
||||
</input>
|
||||
<output id="Output_1" typeRef="string" />
|
||||
</decisionTable>
|
||||
</decision>
|
||||
<dmndi:DMNDI>
|
||||
<dmndi:DMNDiagram>
|
||||
<dmndi:DMNShape dmnElementRef="Decision_1e62yjv">
|
||||
<dc:Bounds height="80" width="180" x="160" y="100" />
|
||||
</dmndi:DMNShape>
|
||||
</dmndi:DMNDiagram>
|
||||
</dmndi:DMNDI>
|
||||
</definitions>
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue