TSK-1486: Deleted unnecessary UnitTests of taskana-core (#1383)
* TSK-1486: Deleted unnecessary UnitTests of taskana-core * TSK-1486: Improvements after review * TSK-1486: fixed checkstyle issues * TSK-1486: restored tests which were deleted by previous commits * TSK-1486: moved helper package into acceptance package * TSK-1486: fixed some code smells Co-authored-by: Mustapha Zorgati <15628173+mustaphazorgati@users.noreply.github.com>
This commit is contained in:
parent
8e9d1e66c9
commit
b02dea9291
|
@ -1044,8 +1044,8 @@ public class WorkbasketServiceImpl implements WorkbasketService {
|
||||||
* @param workbasketImplToUpdate the workbasket to update
|
* @param workbasketImplToUpdate the workbasket to update
|
||||||
* @throws ConcurrencyException if the workbasket has been modified by some other process.
|
* @throws ConcurrencyException if the workbasket has been modified by some other process.
|
||||||
*/
|
*/
|
||||||
void checkModifiedHasNotChanged(Workbasket oldWorkbasket, WorkbasketImpl workbasketImplToUpdate)
|
public void checkModifiedHasNotChanged(
|
||||||
throws ConcurrencyException {
|
Workbasket oldWorkbasket, WorkbasketImpl workbasketImplToUpdate) throws ConcurrencyException {
|
||||||
|
|
||||||
if (!oldWorkbasket.getModified().equals(workbasketImplToUpdate.getModified())) {
|
if (!oldWorkbasket.getModified().equals(workbasketImplToUpdate.getModified())) {
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,6 @@ import pro.taskana.common.api.TimeInterval;
|
||||||
import pro.taskana.common.api.WorkingDaysToDaysConverter;
|
import pro.taskana.common.api.WorkingDaysToDaysConverter;
|
||||||
import pro.taskana.common.internal.JobMapper;
|
import pro.taskana.common.internal.JobMapper;
|
||||||
import pro.taskana.common.internal.TaskanaEngineImpl;
|
import pro.taskana.common.internal.TaskanaEngineImpl;
|
||||||
import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
|
|
||||||
import pro.taskana.sampledata.SampleDataGenerator;
|
import pro.taskana.sampledata.SampleDataGenerator;
|
||||||
import pro.taskana.task.api.models.Attachment;
|
import pro.taskana.task.api.models.Attachment;
|
||||||
import pro.taskana.task.api.models.ObjectReference;
|
import pro.taskana.task.api.models.ObjectReference;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package pro.taskana;
|
package acceptance;
|
||||||
|
|
||||||
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.classes;
|
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.classes;
|
||||||
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses;
|
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses;
|
||||||
|
@ -228,7 +228,7 @@ class ArchitectureTest {
|
||||||
|
|
||||||
private static ArchCondition<JavaClass> beDefinedInTaskanaSubPackages(
|
private static ArchCondition<JavaClass> beDefinedInTaskanaSubPackages(
|
||||||
List<Pattern> excludePackages) {
|
List<Pattern> excludePackages) {
|
||||||
return new ArchCondition<>("all be defined in TASKANA_SUB_PACKAGES") {
|
return new ArchCondition<JavaClass>("all be defined in TASKANA_SUB_PACKAGES") {
|
||||||
@Override
|
@Override
|
||||||
public void check(JavaClass javaClass, ConditionEvents events) {
|
public void check(JavaClass javaClass, ConditionEvents events) {
|
||||||
if (TASKANA_SUB_PACKAGES.stream().noneMatch(p -> javaClass.getPackageName().startsWith(p))
|
if (TASKANA_SUB_PACKAGES.stream().noneMatch(p -> javaClass.getPackageName().startsWith(p))
|
||||||
|
@ -268,7 +268,7 @@ class ArchitectureTest {
|
||||||
return values;
|
return values;
|
||||||
};
|
};
|
||||||
|
|
||||||
return new ArchCondition<>("not use the SQL function 'CURRENT_TIMESTAMP'") {
|
return new ArchCondition<JavaClass>("not use the SQL function 'CURRENT_TIMESTAMP'") {
|
||||||
@Override
|
@Override
|
||||||
public void check(JavaClass javaClass, ConditionEvents events) {
|
public void check(JavaClass javaClass, ConditionEvents events) {
|
||||||
for (JavaMethod method : javaClass.getAllMethods()) {
|
for (JavaMethod method : javaClass.getAllMethods()) {
|
|
@ -1,4 +1,4 @@
|
||||||
package pro.taskana.task.internal;
|
package acceptance;
|
||||||
|
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
@ -9,7 +9,6 @@ import pro.taskana.classification.internal.models.ClassificationImpl;
|
||||||
import pro.taskana.task.api.TaskState;
|
import pro.taskana.task.api.TaskState;
|
||||||
import pro.taskana.task.internal.models.AttachmentImpl;
|
import pro.taskana.task.internal.models.AttachmentImpl;
|
||||||
import pro.taskana.task.internal.models.TaskImpl;
|
import pro.taskana.task.internal.models.TaskImpl;
|
||||||
import pro.taskana.workbasket.internal.models.WorkbasketImpl;
|
|
||||||
|
|
||||||
public class CreateTaskModelHelper {
|
public class CreateTaskModelHelper {
|
||||||
|
|
||||||
|
@ -22,15 +21,6 @@ public class CreateTaskModelHelper {
|
||||||
return classification;
|
return classification;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static WorkbasketImpl createWorkbasket(String id, String key) {
|
|
||||||
WorkbasketImpl workbasket = new WorkbasketImpl();
|
|
||||||
workbasket.setId(id);
|
|
||||||
workbasket.setDomain("Domain1");
|
|
||||||
workbasket.setKey(key);
|
|
||||||
workbasket.setName("Workbasket " + id);
|
|
||||||
return workbasket;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static AttachmentImpl createAttachment(String id, String taskId) {
|
public static AttachmentImpl createAttachment(String id, String taskId) {
|
||||||
AttachmentImpl attachment = new AttachmentImpl();
|
AttachmentImpl attachment = new AttachmentImpl();
|
||||||
attachment.setId(id);
|
attachment.setId(id);
|
|
@ -1,4 +1,4 @@
|
||||||
package pro.taskana;
|
package acceptance;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
|
@ -0,0 +1,82 @@
|
||||||
|
package acceptance;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.apache.ibatis.annotations.Result;
|
||||||
|
import org.apache.ibatis.annotations.Results;
|
||||||
|
import org.apache.ibatis.annotations.Select;
|
||||||
|
import org.apache.ibatis.type.ClobTypeHandler;
|
||||||
|
|
||||||
|
import pro.taskana.common.internal.persistence.MapTypeHandler;
|
||||||
|
import pro.taskana.task.internal.models.TaskImpl;
|
||||||
|
|
||||||
|
/** This class contains specific mybatis mappings for task tests. */
|
||||||
|
|
||||||
|
@SuppressWarnings({"checkstyle:LineLength"})
|
||||||
|
public interface TaskTestMapper {
|
||||||
|
|
||||||
|
@Select("select CUSTOM_ATTRIBUTES from TASK where id = #{taskId}")
|
||||||
|
@Results(
|
||||||
|
value = {
|
||||||
|
@Result(
|
||||||
|
property = "customAttributes",
|
||||||
|
column = "CUSTOM_ATTRIBUTES",
|
||||||
|
javaType = String.class,
|
||||||
|
typeHandler = ClobTypeHandler.class)
|
||||||
|
})
|
||||||
|
String getCustomAttributesAsString(@Param("taskId") String taskId);
|
||||||
|
|
||||||
|
@Select(
|
||||||
|
"SELECT ID, CREATED, CLAIMED, COMPLETED, MODIFIED, PLANNED, DUE, NAME, CREATOR, DESCRIPTION, NOTE, PRIORITY, STATE, CLASSIFICATION_CATEGORY, CLASSIFICATION_KEY, CLASSIFICATION_ID, WORKBASKET_ID, WORKBASKET_KEY, DOMAIN, BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID, OWNER, POR_COMPANY, POR_SYSTEM, POR_INSTANCE, POR_TYPE, POR_VALUE, IS_READ, IS_TRANSFERRED, CUSTOM_ATTRIBUTES, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, CUSTOM_5, CUSTOM_6, CUSTOM_7, CUSTOM_8, CUSTOM_9, CUSTOM_10 "
|
||||||
|
+ "FROM TASK "
|
||||||
|
+ "WHERE CUSTOM_ATTRIBUTES like #{searchText}")
|
||||||
|
@Results(
|
||||||
|
value = {
|
||||||
|
@Result(property = "id", column = "ID"),
|
||||||
|
@Result(property = "created", column = "CREATED"),
|
||||||
|
@Result(property = "claimed", column = "CLAIMED"),
|
||||||
|
@Result(property = "completed", column = "COMPLETED"),
|
||||||
|
@Result(property = "modified", column = "MODIFIED"),
|
||||||
|
@Result(property = "planned", column = "PLANNED"),
|
||||||
|
@Result(property = "due", column = "DUE"),
|
||||||
|
@Result(property = "name", column = "NAME"),
|
||||||
|
@Result(property = "creator", column = "CREATOR"),
|
||||||
|
@Result(property = "description", column = "DESCRIPTION"),
|
||||||
|
@Result(property = "note", column = "NOTE"),
|
||||||
|
@Result(property = "priority", column = "PRIORITY"),
|
||||||
|
@Result(property = "state", column = "STATE"),
|
||||||
|
@Result(
|
||||||
|
property = "classificationSummaryImpl.category",
|
||||||
|
column = "CLASSIFICATION_CATEGORY"),
|
||||||
|
@Result(property = "classificationSummaryImpl.id", column = "CLASSIFICATION_ID"),
|
||||||
|
@Result(property = "classificationSummaryImpl.key", column = "CLASSIFICATION_KEY"),
|
||||||
|
@Result(property = "domain", column = "DOMAIN"),
|
||||||
|
@Result(property = "businessProcessId", column = "BUSINESS_PROCESS_ID"),
|
||||||
|
@Result(property = "parentBusinessProcessId", column = "PARENT_BUSINESS_PROCESS_ID"),
|
||||||
|
@Result(property = "owner", column = "OWNER"),
|
||||||
|
@Result(property = "primaryObjRef.company", column = "POR_COMPANY"),
|
||||||
|
@Result(property = "primaryObjRef.system", column = "POR_SYSTEM"),
|
||||||
|
@Result(property = "primaryObjRef.systemInstance", column = "POR_INSTANCE"),
|
||||||
|
@Result(property = "primaryObjRef.type", column = "POR_TYPE"),
|
||||||
|
@Result(property = "primaryObjRef.value", column = "POR_VALUE"),
|
||||||
|
@Result(property = "isRead", column = "IS_READ"),
|
||||||
|
@Result(property = "isTransferred", column = "IS_TRANSFERRED"),
|
||||||
|
@Result(
|
||||||
|
property = "customAttributes",
|
||||||
|
column = "CUSTOM_ATTRIBUTES",
|
||||||
|
javaType = Map.class,
|
||||||
|
typeHandler = MapTypeHandler.class),
|
||||||
|
@Result(property = "custom1", column = "CUSTOM_1"),
|
||||||
|
@Result(property = "custom2", column = "CUSTOM_2"),
|
||||||
|
@Result(property = "custom3", column = "CUSTOM_3"),
|
||||||
|
@Result(property = "custom4", column = "CUSTOM_4"),
|
||||||
|
@Result(property = "custom5", column = "CUSTOM_5"),
|
||||||
|
@Result(property = "custom6", column = "CUSTOM_6"),
|
||||||
|
@Result(property = "custom7", column = "CUSTOM_7"),
|
||||||
|
@Result(property = "custom8", column = "CUSTOM_8"),
|
||||||
|
@Result(property = "custom9", column = "CUSTOM_9"),
|
||||||
|
@Result(property = "custom10", column = "CUSTOM_10")
|
||||||
|
})
|
||||||
|
List<TaskImpl> selectTasksByCustomAttributeLike(@Param("searchText") String searchText);
|
||||||
|
}
|
|
@ -1,9 +1,11 @@
|
||||||
package pro.taskana.common.internal;
|
package acceptance;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import org.apache.ibatis.session.SqlSession;
|
import org.apache.ibatis.session.SqlSession;
|
||||||
|
|
||||||
import pro.taskana.common.api.TaskanaEngine;
|
import pro.taskana.common.api.TaskanaEngine;
|
||||||
|
import pro.taskana.common.internal.InternalTaskanaEngine;
|
||||||
|
import pro.taskana.common.internal.TaskanaEngineImpl;
|
||||||
|
|
||||||
/** Utility class to enable unit tests to access mappers directly. */
|
/** Utility class to enable unit tests to access mappers directly. */
|
||||||
public class TaskanaEngineProxy {
|
public class TaskanaEngineProxy {
|
|
@ -1,4 +1,4 @@
|
||||||
package pro.taskana.common.internal;
|
package acceptance;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
|
@ -1,4 +1,4 @@
|
||||||
package pro.taskana.classification.internal.models;
|
package acceptance.classification;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
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_1;
|
||||||
|
@ -13,6 +13,8 @@ import static pro.taskana.classification.api.ClassificationCustomField.CUSTOM_8;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import pro.taskana.classification.api.models.Classification;
|
import pro.taskana.classification.api.models.Classification;
|
||||||
|
import pro.taskana.classification.internal.models.ClassificationImpl;
|
||||||
|
import pro.taskana.classification.internal.models.ClassificationSummaryImpl;
|
||||||
|
|
||||||
class ClassificationModelsCloneTest {
|
class ClassificationModelsCloneTest {
|
||||||
|
|
||||||
|
@ -44,8 +46,9 @@ class ClassificationModelsCloneTest {
|
||||||
|
|
||||||
assertThat(dummyClassificationSummaryCloned).isNotEqualTo(dummyClassificationSummary);
|
assertThat(dummyClassificationSummaryCloned).isNotEqualTo(dummyClassificationSummary);
|
||||||
dummyClassificationSummaryCloned.setId(dummyClassificationSummary.getId());
|
dummyClassificationSummaryCloned.setId(dummyClassificationSummary.getId());
|
||||||
assertThat(dummyClassificationSummaryCloned).isEqualTo(dummyClassificationSummary);
|
assertThat(dummyClassificationSummaryCloned)
|
||||||
assertThat(dummyClassificationSummaryCloned).isNotSameAs(dummyClassificationSummary);
|
.isEqualTo(dummyClassificationSummary)
|
||||||
|
.isNotSameAs(dummyClassificationSummary);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -75,7 +78,8 @@ class ClassificationModelsCloneTest {
|
||||||
|
|
||||||
assertThat(dummyClassificationCloned).isNotEqualTo(dummyClassification);
|
assertThat(dummyClassificationCloned).isNotEqualTo(dummyClassification);
|
||||||
dummyClassificationCloned.setId(dummyClassification.getId());
|
dummyClassificationCloned.setId(dummyClassification.getId());
|
||||||
assertThat(dummyClassificationCloned).isEqualTo(dummyClassification);
|
assertThat(dummyClassificationCloned)
|
||||||
assertThat(dummyClassificationCloned).isNotSameAs(dummyClassification);
|
.isEqualTo(dummyClassification)
|
||||||
|
.isNotSameAs(dummyClassification);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -5,6 +5,7 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import acceptance.AbstractAccTest;
|
import acceptance.AbstractAccTest;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.TestTemplate;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
||||||
import pro.taskana.classification.api.ClassificationService;
|
import pro.taskana.classification.api.ClassificationService;
|
||||||
|
@ -17,17 +18,7 @@ import pro.taskana.common.test.security.WithAccessId;
|
||||||
class ClassificationQueryAccTest extends AbstractAccTest {
|
class ClassificationQueryAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testFindClassificationsByDomainUnauthenticated() {
|
void should_FindAllAccesibleClassifications_When_UserNotAuthenticated() {
|
||||||
ClassificationService classificationService = taskanaEngine.getClassificationService();
|
|
||||||
List<ClassificationSummary> classificationSummaryList =
|
|
||||||
classificationService.createClassificationQuery().domainIn("DOMAIN_A").list();
|
|
||||||
|
|
||||||
assertThat(classificationSummaryList).hasSize(18);
|
|
||||||
}
|
|
||||||
|
|
||||||
@WithAccessId(user = "businessadmin")
|
|
||||||
@Test
|
|
||||||
void testFindClassificationsByDomainBusinessAdmin() {
|
|
||||||
ClassificationService classificationService = taskanaEngine.getClassificationService();
|
ClassificationService classificationService = taskanaEngine.getClassificationService();
|
||||||
List<ClassificationSummary> classificationSummaryList =
|
List<ClassificationSummary> classificationSummaryList =
|
||||||
classificationService.createClassificationQuery().domainIn("DOMAIN_A").list();
|
classificationService.createClassificationQuery().domainIn("DOMAIN_A").list();
|
||||||
|
@ -36,8 +27,9 @@ class ClassificationQueryAccTest extends AbstractAccTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@WithAccessId(user = "admin")
|
@WithAccessId(user = "admin")
|
||||||
@Test
|
@WithAccessId(user = "businessadmin")
|
||||||
void testFindClassificationsByDomainAdmin() {
|
@TestTemplate
|
||||||
|
void should_FindAllAccessibleClassifications_When_UserInRoleAdminOrBusinessadmin() {
|
||||||
ClassificationService classificationService = taskanaEngine.getClassificationService();
|
ClassificationService classificationService = taskanaEngine.getClassificationService();
|
||||||
List<ClassificationSummary> classificationSummaryList =
|
List<ClassificationSummary> classificationSummaryList =
|
||||||
classificationService.createClassificationQuery().domainIn("DOMAIN_A").list();
|
classificationService.createClassificationQuery().domainIn("DOMAIN_A").list();
|
||||||
|
|
|
@ -2,6 +2,7 @@ package acceptance.config;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
import acceptance.TaskanaEngineTestConfiguration;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
|
@ -17,7 +18,6 @@ import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import pro.taskana.TaskanaEngineConfiguration;
|
import pro.taskana.TaskanaEngineConfiguration;
|
||||||
import pro.taskana.common.internal.TaskanaEngineImpl;
|
import pro.taskana.common.internal.TaskanaEngineImpl;
|
||||||
import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
|
|
||||||
|
|
||||||
/** Test taskana configuration without roles. */
|
/** Test taskana configuration without roles. */
|
||||||
class TaskanaConfigAccTest extends TaskanaEngineImpl {
|
class TaskanaConfigAccTest extends TaskanaEngineImpl {
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
package pro.taskana.common.internal;
|
package acceptance.config;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
import acceptance.TaskanaEngineTestConfiguration;
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
@ -10,10 +11,10 @@ import pro.taskana.common.api.CustomHoliday;
|
||||||
import pro.taskana.common.api.TaskanaEngine;
|
import pro.taskana.common.api.TaskanaEngine;
|
||||||
|
|
||||||
/** Test of configuration. */
|
/** Test of configuration. */
|
||||||
class TaskanaEngineConfigurationTest {
|
class TaskanaEngineConfigTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testCreateTaskanaEngine() throws Exception {
|
void should_ReturnTaskanaEngine_When_BuildingWithConfiguration() throws Exception {
|
||||||
DataSource ds = TaskanaEngineTestConfiguration.getDataSource();
|
DataSource ds = TaskanaEngineTestConfiguration.getDataSource();
|
||||||
TaskanaEngineConfiguration taskEngineConfiguration =
|
TaskanaEngineConfiguration taskEngineConfiguration =
|
||||||
new TaskanaEngineConfiguration(ds, false, TaskanaEngineTestConfiguration.getSchemaName());
|
new TaskanaEngineConfiguration(ds, false, TaskanaEngineTestConfiguration.getSchemaName());
|
||||||
|
@ -30,7 +31,7 @@ class TaskanaEngineConfigurationTest {
|
||||||
new TaskanaEngineConfiguration(
|
new TaskanaEngineConfiguration(
|
||||||
ds,
|
ds,
|
||||||
false,
|
false,
|
||||||
false,
|
true,
|
||||||
"/corpusChristiEnabled.properties",
|
"/corpusChristiEnabled.properties",
|
||||||
"|",
|
"|",
|
||||||
TaskanaEngineTestConfiguration.getSchemaName());
|
TaskanaEngineTestConfiguration.getSchemaName());
|
||||||
|
@ -46,7 +47,7 @@ class TaskanaEngineConfigurationTest {
|
||||||
new TaskanaEngineConfiguration(
|
new TaskanaEngineConfiguration(
|
||||||
ds,
|
ds,
|
||||||
false,
|
false,
|
||||||
false,
|
true,
|
||||||
"/custom_holiday_taskana.properties",
|
"/custom_holiday_taskana.properties",
|
||||||
"|",
|
"|",
|
||||||
TaskanaEngineTestConfiguration.getSchemaName());
|
TaskanaEngineTestConfiguration.getSchemaName());
|
||||||
|
@ -62,7 +63,7 @@ class TaskanaEngineConfigurationTest {
|
||||||
new TaskanaEngineConfiguration(
|
new TaskanaEngineConfiguration(
|
||||||
ds,
|
ds,
|
||||||
false,
|
false,
|
||||||
false,
|
true,
|
||||||
"/custom_holiday_With_Wrong_format_taskana.properties",
|
"/custom_holiday_With_Wrong_format_taskana.properties",
|
||||||
"|",
|
"|",
|
||||||
TaskanaEngineTestConfiguration.getSchemaName());
|
TaskanaEngineTestConfiguration.getSchemaName());
|
|
@ -2,6 +2,7 @@ package acceptance.config;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
import acceptance.TaskanaEngineTestConfiguration;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
|
@ -15,7 +16,6 @@ import org.junit.jupiter.api.Test;
|
||||||
import pro.taskana.TaskanaEngineConfiguration;
|
import pro.taskana.TaskanaEngineConfiguration;
|
||||||
import pro.taskana.common.api.TaskanaRole;
|
import pro.taskana.common.api.TaskanaRole;
|
||||||
import pro.taskana.common.internal.TaskanaEngineImpl;
|
import pro.taskana.common.internal.TaskanaEngineImpl;
|
||||||
import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
|
|
||||||
|
|
||||||
/** Test taskana's role configuration. */
|
/** Test taskana's role configuration. */
|
||||||
class TaskanaRoleConfigAccTest extends TaskanaEngineImpl {
|
class TaskanaRoleConfigAccTest extends TaskanaEngineImpl {
|
||||||
|
|
|
@ -4,6 +4,7 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.assertj.core.api.Assertions.assertThatCode;
|
import static org.assertj.core.api.Assertions.assertThatCode;
|
||||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||||
|
|
||||||
|
import acceptance.TaskanaEngineTestConfiguration;
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
@ -14,7 +15,6 @@ import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import pro.taskana.TaskanaEngineConfiguration;
|
import pro.taskana.TaskanaEngineConfiguration;
|
||||||
import pro.taskana.common.api.exceptions.SystemException;
|
import pro.taskana.common.api.exceptions.SystemException;
|
||||||
import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
|
|
||||||
import pro.taskana.common.internal.configuration.DbSchemaCreator;
|
import pro.taskana.common.internal.configuration.DbSchemaCreator;
|
||||||
import pro.taskana.sampledata.SampleDataGenerator;
|
import pro.taskana.sampledata.SampleDataGenerator;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package pro.taskana.common.internal.util;
|
package acceptance.history;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@ import org.json.JSONArray;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import pro.taskana.common.internal.util.ObjectAttributeChangeDetector;
|
||||||
import pro.taskana.task.api.CallbackState;
|
import pro.taskana.task.api.CallbackState;
|
||||||
import pro.taskana.task.internal.models.TaskImpl;
|
import pro.taskana.task.internal.models.TaskImpl;
|
||||||
import pro.taskana.workbasket.api.WorkbasketType;
|
import pro.taskana.workbasket.api.WorkbasketType;
|
|
@ -1,11 +1,11 @@
|
||||||
package acceptance.report;
|
package acceptance.report;
|
||||||
|
|
||||||
|
import acceptance.TaskanaEngineTestConfiguration;
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
import org.junit.jupiter.api.BeforeAll;
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
|
|
||||||
import pro.taskana.TaskanaEngineConfiguration;
|
import pro.taskana.TaskanaEngineConfiguration;
|
||||||
import pro.taskana.common.api.TaskanaEngine;
|
import pro.taskana.common.api.TaskanaEngine;
|
||||||
import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
|
|
||||||
import pro.taskana.sampledata.SampleDataGenerator;
|
import pro.taskana.sampledata.SampleDataGenerator;
|
||||||
|
|
||||||
/** Abstract test class for all report building tests. */
|
/** Abstract test class for all report building tests. */
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package pro.taskana.monitor.internal;
|
package acceptance.report;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@ class ReportTest {
|
||||||
assertThat(report.getRows()).isEmpty();
|
assertThat(report.getRows()).isEmpty();
|
||||||
Row<MonitorQueryItem> sumRow = report.getSumRow();
|
Row<MonitorQueryItem> sumRow = report.getSumRow();
|
||||||
assertThat(sumRow.getCells()).isEqualTo(new int[] {0, 0, 0, 0});
|
assertThat(sumRow.getCells()).isEqualTo(new int[] {0, 0, 0, 0});
|
||||||
assertThat(sumRow.getTotalValue()).isEqualTo(0);
|
assertThat(sumRow.getTotalValue()).isZero();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -207,7 +207,7 @@ class ReportTest {
|
||||||
assertThat(report.getRows()).isEmpty();
|
assertThat(report.getRows()).isEmpty();
|
||||||
Row<MonitorQueryItem> sumRow = report.getSumRow();
|
Row<MonitorQueryItem> sumRow = report.getSumRow();
|
||||||
assertThat(sumRow.getCells()).isEqualTo(new int[] {0, 0, 0, 0});
|
assertThat(sumRow.getCells()).isEqualTo(new int[] {0, 0, 0, 0});
|
||||||
assertThat(sumRow.getTotalValue()).isEqualTo(0);
|
assertThat(sumRow.getTotalValue()).isZero();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
|
@ -1,4 +1,4 @@
|
||||||
package pro.taskana.monitor.internal;
|
package acceptance.report;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ class WorkingDaysToDaysReportConverterTest {
|
||||||
assertThat(instance.convertDaysToWorkingDays(-3)).isEqualTo(-1);
|
assertThat(instance.convertDaysToWorkingDays(-3)).isEqualTo(-1);
|
||||||
assertThat(instance.convertDaysToWorkingDays(-2)).isEqualTo(-1);
|
assertThat(instance.convertDaysToWorkingDays(-2)).isEqualTo(-1);
|
||||||
assertThat(instance.convertDaysToWorkingDays(-1)).isEqualTo(-1);
|
assertThat(instance.convertDaysToWorkingDays(-1)).isEqualTo(-1);
|
||||||
assertThat(instance.convertDaysToWorkingDays(0)).isEqualTo(0);
|
assertThat(instance.convertDaysToWorkingDays(0)).isZero();
|
||||||
assertThat(instance.convertDaysToWorkingDays(1)).isEqualTo(1);
|
assertThat(instance.convertDaysToWorkingDays(1)).isEqualTo(1);
|
||||||
assertThat(instance.convertDaysToWorkingDays(2)).isEqualTo(2);
|
assertThat(instance.convertDaysToWorkingDays(2)).isEqualTo(2);
|
||||||
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(3);
|
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(3);
|
||||||
|
@ -194,7 +194,7 @@ class WorkingDaysToDaysReportConverterTest {
|
||||||
WorkingDaysToDaysReportConverter.initialize(
|
WorkingDaysToDaysReportConverter.initialize(
|
||||||
getLargeListOfColumnHeaders(), converter, Instant.parse("2018-03-28T00:00:00.000Z"));
|
getLargeListOfColumnHeaders(), converter, Instant.parse("2018-03-28T00:00:00.000Z"));
|
||||||
|
|
||||||
assertThat(instance.convertDaysToWorkingDays(0)).isEqualTo(0);
|
assertThat(instance.convertDaysToWorkingDays(0)).isZero();
|
||||||
assertThat(instance.convertDaysToWorkingDays(1)).isEqualTo(1);
|
assertThat(instance.convertDaysToWorkingDays(1)).isEqualTo(1);
|
||||||
assertThat(instance.convertDaysToWorkingDays(2)).isEqualTo(1);
|
assertThat(instance.convertDaysToWorkingDays(2)).isEqualTo(1);
|
||||||
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(1);
|
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(1);
|
||||||
|
@ -210,7 +210,7 @@ class WorkingDaysToDaysReportConverterTest {
|
||||||
WorkingDaysToDaysReportConverter.initialize(
|
WorkingDaysToDaysReportConverter.initialize(
|
||||||
getLargeListOfColumnHeaders(), converter, Instant.parse("2018-05-16T00:00:00.000Z"));
|
getLargeListOfColumnHeaders(), converter, Instant.parse("2018-05-16T00:00:00.000Z"));
|
||||||
|
|
||||||
assertThat(instance.convertDaysToWorkingDays(0)).isEqualTo(0);
|
assertThat(instance.convertDaysToWorkingDays(0)).isZero();
|
||||||
assertThat(instance.convertDaysToWorkingDays(1)).isEqualTo(1);
|
assertThat(instance.convertDaysToWorkingDays(1)).isEqualTo(1);
|
||||||
assertThat(instance.convertDaysToWorkingDays(2)).isEqualTo(2);
|
assertThat(instance.convertDaysToWorkingDays(2)).isEqualTo(2);
|
||||||
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(2);
|
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(2);
|
||||||
|
@ -225,7 +225,7 @@ class WorkingDaysToDaysReportConverterTest {
|
||||||
WorkingDaysToDaysReportConverter.initialize(
|
WorkingDaysToDaysReportConverter.initialize(
|
||||||
getLargeListOfColumnHeaders(), converter, Instant.parse("2018-04-26T00:00:00.000Z"));
|
getLargeListOfColumnHeaders(), converter, Instant.parse("2018-04-26T00:00:00.000Z"));
|
||||||
|
|
||||||
assertThat(instance.convertDaysToWorkingDays(0)).isEqualTo(0);
|
assertThat(instance.convertDaysToWorkingDays(0)).isZero();
|
||||||
assertThat(instance.convertDaysToWorkingDays(1)).isEqualTo(1);
|
assertThat(instance.convertDaysToWorkingDays(1)).isEqualTo(1);
|
||||||
assertThat(instance.convertDaysToWorkingDays(2)).isEqualTo(1);
|
assertThat(instance.convertDaysToWorkingDays(2)).isEqualTo(1);
|
||||||
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(1);
|
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(1);
|
||||||
|
@ -241,7 +241,7 @@ class WorkingDaysToDaysReportConverterTest {
|
||||||
WorkingDaysToDaysReportConverter.initialize(
|
WorkingDaysToDaysReportConverter.initialize(
|
||||||
getLargeListOfColumnHeaders(), converter, Instant.parse("2018-05-07T00:00:00.000Z"));
|
getLargeListOfColumnHeaders(), converter, Instant.parse("2018-05-07T00:00:00.000Z"));
|
||||||
|
|
||||||
assertThat(instance.convertDaysToWorkingDays(0)).isEqualTo(0);
|
assertThat(instance.convertDaysToWorkingDays(0)).isZero();
|
||||||
assertThat(instance.convertDaysToWorkingDays(1)).isEqualTo(1);
|
assertThat(instance.convertDaysToWorkingDays(1)).isEqualTo(1);
|
||||||
assertThat(instance.convertDaysToWorkingDays(2)).isEqualTo(2);
|
assertThat(instance.convertDaysToWorkingDays(2)).isEqualTo(2);
|
||||||
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(2);
|
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(2);
|
||||||
|
@ -258,7 +258,7 @@ class WorkingDaysToDaysReportConverterTest {
|
||||||
WorkingDaysToDaysReportConverter.initialize(
|
WorkingDaysToDaysReportConverter.initialize(
|
||||||
getLargeListOfColumnHeaders(), converter, Instant.parse("2018-10-01T00:00:00.000Z"));
|
getLargeListOfColumnHeaders(), converter, Instant.parse("2018-10-01T00:00:00.000Z"));
|
||||||
|
|
||||||
assertThat(instance.convertDaysToWorkingDays(0)).isEqualTo(0);
|
assertThat(instance.convertDaysToWorkingDays(0)).isZero();
|
||||||
assertThat(instance.convertDaysToWorkingDays(1)).isEqualTo(1);
|
assertThat(instance.convertDaysToWorkingDays(1)).isEqualTo(1);
|
||||||
assertThat(instance.convertDaysToWorkingDays(2)).isEqualTo(1);
|
assertThat(instance.convertDaysToWorkingDays(2)).isEqualTo(1);
|
||||||
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(2);
|
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(2);
|
||||||
|
@ -275,7 +275,7 @@ class WorkingDaysToDaysReportConverterTest {
|
||||||
WorkingDaysToDaysReportConverter.initialize(
|
WorkingDaysToDaysReportConverter.initialize(
|
||||||
getLargeListOfColumnHeaders(), converter, Instant.parse("2018-12-20T00:00:00.000Z"));
|
getLargeListOfColumnHeaders(), converter, Instant.parse("2018-12-20T00:00:00.000Z"));
|
||||||
|
|
||||||
assertThat(instance.convertDaysToWorkingDays(0)).isEqualTo(0);
|
assertThat(instance.convertDaysToWorkingDays(0)).isZero();
|
||||||
assertThat(instance.convertDaysToWorkingDays(1)).isEqualTo(1);
|
assertThat(instance.convertDaysToWorkingDays(1)).isEqualTo(1);
|
||||||
assertThat(instance.convertDaysToWorkingDays(2)).isEqualTo(1);
|
assertThat(instance.convertDaysToWorkingDays(2)).isEqualTo(1);
|
||||||
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(1);
|
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(1);
|
||||||
|
@ -298,9 +298,9 @@ class WorkingDaysToDaysReportConverterTest {
|
||||||
WorkingDaysToDaysReportConverter.initialize(
|
WorkingDaysToDaysReportConverter.initialize(
|
||||||
getLargeListOfColumnHeaders(), converter, Instant.parse("2018-10-26T00:00:00.000Z"));
|
getLargeListOfColumnHeaders(), converter, Instant.parse("2018-10-26T00:00:00.000Z"));
|
||||||
|
|
||||||
assertThat(instance.convertDaysToWorkingDays(0)).isEqualTo(0);
|
assertThat(instance.convertDaysToWorkingDays(0)).isZero();
|
||||||
assertThat(instance.convertDaysToWorkingDays(1)).isEqualTo(0);
|
assertThat(instance.convertDaysToWorkingDays(1)).isZero();
|
||||||
assertThat(instance.convertDaysToWorkingDays(2)).isEqualTo(0);
|
assertThat(instance.convertDaysToWorkingDays(2)).isZero();
|
||||||
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(1);
|
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(1);
|
||||||
assertThat(instance.convertDaysToWorkingDays(4)).isEqualTo(2);
|
assertThat(instance.convertDaysToWorkingDays(4)).isEqualTo(2);
|
||||||
assertThat(instance.convertDaysToWorkingDays(5)).isEqualTo(2);
|
assertThat(instance.convertDaysToWorkingDays(5)).isEqualTo(2);
|
|
@ -4,6 +4,8 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||||
|
|
||||||
import acceptance.AbstractAccTest;
|
import acceptance.AbstractAccTest;
|
||||||
|
import acceptance.TaskTestMapper;
|
||||||
|
import acceptance.TaskanaEngineProxy;
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -17,7 +19,6 @@ import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
||||||
import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
||||||
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
||||||
import pro.taskana.common.internal.TaskanaEngineProxy;
|
|
||||||
import pro.taskana.common.test.security.JaasExtension;
|
import pro.taskana.common.test.security.JaasExtension;
|
||||||
import pro.taskana.common.test.security.WithAccessId;
|
import pro.taskana.common.test.security.WithAccessId;
|
||||||
import pro.taskana.task.api.TaskCustomField;
|
import pro.taskana.task.api.TaskCustomField;
|
||||||
|
@ -29,7 +30,6 @@ import pro.taskana.task.api.models.AttachmentSummary;
|
||||||
import pro.taskana.task.api.models.ObjectReference;
|
import pro.taskana.task.api.models.ObjectReference;
|
||||||
import pro.taskana.task.api.models.Task;
|
import pro.taskana.task.api.models.Task;
|
||||||
import pro.taskana.task.internal.AttachmentMapper;
|
import pro.taskana.task.internal.AttachmentMapper;
|
||||||
import pro.taskana.task.internal.TaskTestMapper;
|
|
||||||
import pro.taskana.workbasket.api.WorkbasketService;
|
import pro.taskana.workbasket.api.WorkbasketService;
|
||||||
import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
|
import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
|
||||||
import pro.taskana.workbasket.api.models.Workbasket;
|
import pro.taskana.workbasket.api.models.Workbasket;
|
||||||
|
|
|
@ -4,6 +4,7 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||||
|
|
||||||
import acceptance.AbstractAccTest;
|
import acceptance.AbstractAccTest;
|
||||||
|
import acceptance.TaskanaEngineProxy;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import org.assertj.core.api.ThrowableAssert.ThrowingCallable;
|
import org.assertj.core.api.ThrowableAssert.ThrowingCallable;
|
||||||
|
@ -14,7 +15,6 @@ import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
import pro.taskana.common.api.BulkOperationResults;
|
import pro.taskana.common.api.BulkOperationResults;
|
||||||
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
||||||
import pro.taskana.common.api.exceptions.TaskanaException;
|
import pro.taskana.common.api.exceptions.TaskanaException;
|
||||||
import pro.taskana.common.internal.TaskanaEngineProxy;
|
|
||||||
import pro.taskana.common.test.security.JaasExtension;
|
import pro.taskana.common.test.security.JaasExtension;
|
||||||
import pro.taskana.common.test.security.WithAccessId;
|
import pro.taskana.common.test.security.WithAccessId;
|
||||||
import pro.taskana.task.api.TaskService;
|
import pro.taskana.task.api.TaskService;
|
||||||
|
|
|
@ -11,7 +11,6 @@ import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
||||||
import pro.taskana.common.test.security.JaasExtension;
|
import pro.taskana.common.test.security.JaasExtension;
|
||||||
import pro.taskana.common.test.security.WithAccessId;
|
import pro.taskana.common.test.security.WithAccessId;
|
||||||
import pro.taskana.task.api.TaskCustomField;
|
|
||||||
import pro.taskana.task.api.TaskService;
|
import pro.taskana.task.api.TaskService;
|
||||||
import pro.taskana.task.api.models.Attachment;
|
import pro.taskana.task.api.models.Attachment;
|
||||||
import pro.taskana.task.api.models.AttachmentSummary;
|
import pro.taskana.task.api.models.AttachmentSummary;
|
||||||
|
@ -29,7 +28,7 @@ class QueryTaskWithAttachmentAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
@WithAccessId(user = "user-1-1")
|
@WithAccessId(user = "user-1-1")
|
||||||
@Test
|
@Test
|
||||||
void testGetAttachmentSummariesFromTask() {
|
void should_ReturnTaskSummaryIncludingAttachments_When_QueryingTaskWithAttachments() {
|
||||||
TaskService taskService = taskanaEngine.getTaskService();
|
TaskService taskService = taskanaEngine.getTaskService();
|
||||||
List<TaskSummary> tasks = taskService.createTaskQuery().classificationKeyIn("L110102").list();
|
List<TaskSummary> tasks = taskService.createTaskQuery().classificationKeyIn("L110102").list();
|
||||||
assertThat(tasks).hasSize(1);
|
assertThat(tasks).hasSize(1);
|
||||||
|
@ -40,7 +39,7 @@ class QueryTaskWithAttachmentAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
@WithAccessId(user = "user-1-2")
|
@WithAccessId(user = "user-1-2")
|
||||||
@Test
|
@Test
|
||||||
void testGetNoAttachmentSummaryFromTask() {
|
void should_ReturnTaskSummaryWithEmptyAttachments_When_QueryingTaskWithoutAttachments() {
|
||||||
TaskService taskService = taskanaEngine.getTaskService();
|
TaskService taskService = taskanaEngine.getTaskService();
|
||||||
List<TaskSummary> tasks = taskService.createTaskQuery().list();
|
List<TaskSummary> tasks = taskService.createTaskQuery().list();
|
||||||
assertThat(tasks).hasSize(30);
|
assertThat(tasks).hasSize(30);
|
||||||
|
@ -51,7 +50,7 @@ class QueryTaskWithAttachmentAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
@WithAccessId(user = "user-1-1")
|
@WithAccessId(user = "user-1-1")
|
||||||
@Test
|
@Test
|
||||||
void testIfNewTaskHasEmptyAttachmentList() {
|
void should_NotSetAttachmentSummariesToNull_When_CreatingNewTaskWithTaskService() {
|
||||||
TaskService taskService = taskanaEngine.getTaskService();
|
TaskService taskService = taskanaEngine.getTaskService();
|
||||||
Task task = taskService.newTask("WBI:100000000000000000000000000000000006");
|
Task task = taskService.newTask("WBI:100000000000000000000000000000000006");
|
||||||
assertThat(task.getAttachments()).isNotNull();
|
assertThat(task.getAttachments()).isNotNull();
|
||||||
|
@ -60,7 +59,7 @@ class QueryTaskWithAttachmentAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
@WithAccessId(user = "user-1-1")
|
@WithAccessId(user = "user-1-1")
|
||||||
@Test
|
@Test
|
||||||
void should_ConfirmIfAttachmentSummariesAreCorrect_When_UsingTaskQueryAndGetTaskById()
|
void should_ReturnTheSameAttachmentsOfATaskSummary_When_UsingTaskQueryAndTaskService()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
TaskService taskService = taskanaEngine.getTaskService();
|
TaskService taskService = taskanaEngine.getTaskService();
|
||||||
// find Task with ID TKI:00...00
|
// find Task with ID TKI:00...00
|
||||||
|
@ -81,31 +80,4 @@ class QueryTaskWithAttachmentAccTest extends AbstractAccTest {
|
||||||
.usingElementComparator(REFERENCE_COMPARATOR)
|
.usingElementComparator(REFERENCE_COMPARATOR)
|
||||||
.doesNotContainAnyElementsOf(originalAttachments); // but not same reference
|
.doesNotContainAnyElementsOf(originalAttachments); // but not same reference
|
||||||
}
|
}
|
||||||
|
|
||||||
@WithAccessId(user = "user-1-1")
|
|
||||||
@Test
|
|
||||||
void should_ConfirmIfAttachmentSummariesAreCorrect() throws Exception {
|
|
||||||
TaskService taskService = taskanaEngine.getTaskService();
|
|
||||||
// find Task with ID TKI:00...00
|
|
||||||
List<TaskSummary> tasks =
|
|
||||||
taskService
|
|
||||||
.createTaskQuery()
|
|
||||||
.classificationKeyIn("T2000")
|
|
||||||
.customAttributeIn(TaskCustomField.CUSTOM_1, "custom1")
|
|
||||||
.list();
|
|
||||||
assertThat(tasks).hasSize(1);
|
|
||||||
List<AttachmentSummary> queryAttachmentSummaries = tasks.get(0).getAttachmentSummaries();
|
|
||||||
|
|
||||||
Task originalTask = taskService.getTask("TKI:000000000000000000000000000000000000");
|
|
||||||
List<AttachmentSummary> originalAttachments =
|
|
||||||
originalTask.getAttachments().stream()
|
|
||||||
.map(Attachment::asSummary)
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
|
|
||||||
assertThat(queryAttachmentSummaries)
|
|
||||||
.hasSize(originalAttachments.size())
|
|
||||||
.containsExactlyInAnyOrderElementsOf(originalAttachments) // same values
|
|
||||||
.usingElementComparator(REFERENCE_COMPARATOR)
|
|
||||||
.doesNotContainAnyElementsOf(originalAttachments); // but not same reference
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,8 @@ import static pro.taskana.task.api.TaskQueryColumnName.OWNER;
|
||||||
import static pro.taskana.task.api.TaskQueryColumnName.STATE;
|
import static pro.taskana.task.api.TaskQueryColumnName.STATE;
|
||||||
|
|
||||||
import acceptance.AbstractAccTest;
|
import acceptance.AbstractAccTest;
|
||||||
|
import acceptance.TaskTestMapper;
|
||||||
|
import acceptance.TaskanaEngineProxy;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
@ -39,7 +41,6 @@ import pro.taskana.classification.api.models.ClassificationSummary;
|
||||||
import pro.taskana.common.api.BaseQuery.SortDirection;
|
import pro.taskana.common.api.BaseQuery.SortDirection;
|
||||||
import pro.taskana.common.api.TimeInterval;
|
import pro.taskana.common.api.TimeInterval;
|
||||||
import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
||||||
import pro.taskana.common.internal.TaskanaEngineProxy;
|
|
||||||
import pro.taskana.common.internal.util.CollectionUtil;
|
import pro.taskana.common.internal.util.CollectionUtil;
|
||||||
import pro.taskana.common.internal.util.Triplet;
|
import pro.taskana.common.internal.util.Triplet;
|
||||||
import pro.taskana.common.test.security.JaasExtension;
|
import pro.taskana.common.test.security.JaasExtension;
|
||||||
|
@ -53,7 +54,6 @@ import pro.taskana.task.api.models.ObjectReference;
|
||||||
import pro.taskana.task.api.models.Task;
|
import pro.taskana.task.api.models.Task;
|
||||||
import pro.taskana.task.api.models.TaskSummary;
|
import pro.taskana.task.api.models.TaskSummary;
|
||||||
import pro.taskana.task.internal.TaskServiceImpl;
|
import pro.taskana.task.internal.TaskServiceImpl;
|
||||||
import pro.taskana.task.internal.TaskTestMapper;
|
|
||||||
import pro.taskana.task.internal.models.TaskImpl;
|
import pro.taskana.task.internal.models.TaskImpl;
|
||||||
import pro.taskana.workbasket.api.models.WorkbasketSummary;
|
import pro.taskana.workbasket.api.models.WorkbasketSummary;
|
||||||
|
|
||||||
|
|
|
@ -5,8 +5,10 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import acceptance.AbstractAccTest;
|
import acceptance.AbstractAccTest;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.TestTemplate;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
||||||
|
import pro.taskana.common.api.exceptions.SystemException;
|
||||||
import pro.taskana.common.test.security.JaasExtension;
|
import pro.taskana.common.test.security.JaasExtension;
|
||||||
import pro.taskana.common.test.security.WithAccessId;
|
import pro.taskana.common.test.security.WithAccessId;
|
||||||
import pro.taskana.task.api.TaskService;
|
import pro.taskana.task.api.TaskService;
|
||||||
|
@ -26,63 +28,38 @@ class QueryTasksByRoleAccTest extends AbstractAccTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@WithAccessId(user = "admin")
|
@WithAccessId(user = "admin")
|
||||||
@Test
|
|
||||||
void should_ReturnAllTasks_For_Admin() {
|
|
||||||
TaskService taskService = taskanaEngine.getTaskService();
|
|
||||||
|
|
||||||
List<TaskSummary> results = taskService.createTaskQuery().list();
|
|
||||||
|
|
||||||
assertThat(results).hasSize(87);
|
|
||||||
}
|
|
||||||
|
|
||||||
@WithAccessId(user = "taskadmin")
|
@WithAccessId(user = "taskadmin")
|
||||||
@Test
|
|
||||||
void should_ReturnAllTasks_For_TaskAdmin() {
|
|
||||||
TaskService taskService = taskanaEngine.getTaskService();
|
|
||||||
|
|
||||||
List<TaskSummary> results = taskService.createTaskQuery().list();
|
|
||||||
|
|
||||||
assertThat(results).hasSize(87);
|
|
||||||
}
|
|
||||||
|
|
||||||
@WithAccessId(user = "businessadmin")
|
@WithAccessId(user = "businessadmin")
|
||||||
@Test
|
|
||||||
void should_ReturnAllTasks_For_BusinessAdmin() {
|
|
||||||
TaskService taskService = taskanaEngine.getTaskService();
|
|
||||||
|
|
||||||
List<TaskSummary> results = taskService.createTaskQuery().list();
|
|
||||||
|
|
||||||
assertThat(results).isEmpty();
|
|
||||||
}
|
|
||||||
|
|
||||||
@WithAccessId(user = "monitor")
|
@WithAccessId(user = "monitor")
|
||||||
@Test
|
|
||||||
void should_ReturnAllTasks_For_MonitorUser() {
|
|
||||||
TaskService taskService = taskanaEngine.getTaskService();
|
|
||||||
|
|
||||||
List<TaskSummary> results = taskService.createTaskQuery().list();
|
|
||||||
|
|
||||||
assertThat(results).isEmpty();
|
|
||||||
}
|
|
||||||
|
|
||||||
@WithAccessId(user = "teamlead-1")
|
@WithAccessId(user = "teamlead-1")
|
||||||
@Test
|
|
||||||
void should_ReturnAllTasks_For_TeamLead1() {
|
|
||||||
TaskService taskService = taskanaEngine.getTaskService();
|
|
||||||
|
|
||||||
List<TaskSummary> results = taskService.createTaskQuery().list();
|
|
||||||
|
|
||||||
assertThat(results).hasSize(25);
|
|
||||||
}
|
|
||||||
|
|
||||||
@WithAccessId(user = "user-1-1")
|
@WithAccessId(user = "user-1-1")
|
||||||
@Test
|
@TestTemplate
|
||||||
void should_ReturnAllTasks_For_User11() {
|
void should_FindAllAccessibleTasksDependentOnTheUser_When_MakingTaskQuery() {
|
||||||
TaskService taskService = taskanaEngine.getTaskService();
|
TaskService taskService = taskanaEngine.getTaskService();
|
||||||
|
|
||||||
List<TaskSummary> results = taskService.createTaskQuery().list();
|
List<TaskSummary> results = taskService.createTaskQuery().list();
|
||||||
|
|
||||||
assertThat(results).hasSize(7);
|
int expectedSize;
|
||||||
}
|
|
||||||
|
|
||||||
|
switch (taskanaEngine.getCurrentUserContext().getUserid()) {
|
||||||
|
case "admin":
|
||||||
|
case "taskadmin":
|
||||||
|
expectedSize = 87;
|
||||||
|
break;
|
||||||
|
case "businessadmin":
|
||||||
|
case "monitor":
|
||||||
|
expectedSize = 0;
|
||||||
|
break;
|
||||||
|
case "teamlead-1":
|
||||||
|
expectedSize = 25;
|
||||||
|
break;
|
||||||
|
case "user-1-1":
|
||||||
|
expectedSize = 7;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new SystemException(
|
||||||
|
String.format("Invalid User: '%s'", taskanaEngine.getCurrentUserContext().getUserid()));
|
||||||
|
}
|
||||||
|
|
||||||
|
assertThat(results).hasSize(expectedSize);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||||
|
|
||||||
import acceptance.AbstractAccTest;
|
import acceptance.AbstractAccTest;
|
||||||
|
import acceptance.TaskanaEngineProxy;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
@ -15,7 +16,6 @@ import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
import pro.taskana.common.api.BulkOperationResults;
|
import pro.taskana.common.api.BulkOperationResults;
|
||||||
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
||||||
import pro.taskana.common.api.exceptions.TaskanaException;
|
import pro.taskana.common.api.exceptions.TaskanaException;
|
||||||
import pro.taskana.common.internal.TaskanaEngineProxy;
|
|
||||||
import pro.taskana.common.test.security.JaasExtension;
|
import pro.taskana.common.test.security.JaasExtension;
|
||||||
import pro.taskana.common.test.security.WithAccessId;
|
import pro.taskana.common.test.security.WithAccessId;
|
||||||
import pro.taskana.task.api.TaskService;
|
import pro.taskana.task.api.TaskService;
|
||||||
|
|
|
@ -4,13 +4,13 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||||
|
|
||||||
import acceptance.AbstractAccTest;
|
import acceptance.AbstractAccTest;
|
||||||
|
import acceptance.TaskanaEngineProxy;
|
||||||
import org.assertj.core.api.ThrowableAssert.ThrowingCallable;
|
import org.assertj.core.api.ThrowableAssert.ThrowingCallable;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
||||||
import pro.taskana.common.api.TaskanaRole;
|
import pro.taskana.common.api.TaskanaRole;
|
||||||
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
||||||
import pro.taskana.common.internal.TaskanaEngineProxy;
|
|
||||||
import pro.taskana.common.test.security.JaasExtension;
|
import pro.taskana.common.test.security.JaasExtension;
|
||||||
import pro.taskana.common.test.security.WithAccessId;
|
import pro.taskana.common.test.security.WithAccessId;
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
package pro.taskana.task.internal.models;
|
package acceptance.task;
|
||||||
|
|
||||||
|
import static acceptance.CreateTaskModelHelper.createAttachment;
|
||||||
|
import static acceptance.CreateTaskModelHelper.createDummyClassification;
|
||||||
|
import static acceptance.CreateTaskModelHelper.createUnitTestTask;
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static pro.taskana.task.internal.CreateTaskModelHelper.createAttachment;
|
|
||||||
import static pro.taskana.task.internal.CreateTaskModelHelper.createDummyClassification;
|
|
||||||
import static pro.taskana.task.internal.CreateTaskModelHelper.createUnitTestTask;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
@ -14,6 +14,11 @@ import org.junit.jupiter.api.Test;
|
||||||
import pro.taskana.task.api.models.Attachment;
|
import pro.taskana.task.api.models.Attachment;
|
||||||
import pro.taskana.task.api.models.AttachmentSummary;
|
import pro.taskana.task.api.models.AttachmentSummary;
|
||||||
import pro.taskana.task.api.models.ObjectReference;
|
import pro.taskana.task.api.models.ObjectReference;
|
||||||
|
import pro.taskana.task.internal.models.AttachmentImpl;
|
||||||
|
import pro.taskana.task.internal.models.AttachmentSummaryImpl;
|
||||||
|
import pro.taskana.task.internal.models.TaskCommentImpl;
|
||||||
|
import pro.taskana.task.internal.models.TaskImpl;
|
||||||
|
import pro.taskana.task.internal.models.TaskSummaryImpl;
|
||||||
|
|
||||||
class TaskModelsCloneTest {
|
class TaskModelsCloneTest {
|
||||||
|
|
||||||
|
@ -33,8 +38,7 @@ class TaskModelsCloneTest {
|
||||||
assertThat(dummyTaskSummaryCloned).isNotEqualTo(dummyTaskSummary);
|
assertThat(dummyTaskSummaryCloned).isNotEqualTo(dummyTaskSummary);
|
||||||
dummyTaskSummaryCloned.setId(dummyTaskSummary.getId());
|
dummyTaskSummaryCloned.setId(dummyTaskSummary.getId());
|
||||||
dummyTaskSummaryCloned.setExternalId(dummyTaskSummary.getExternalId());
|
dummyTaskSummaryCloned.setExternalId(dummyTaskSummary.getExternalId());
|
||||||
assertThat(dummyTaskSummaryCloned).isEqualTo(dummyTaskSummary);
|
assertThat(dummyTaskSummaryCloned).isEqualTo(dummyTaskSummary).isNotSameAs(dummyTaskSummary);
|
||||||
assertThat(dummyTaskSummaryCloned).isNotSameAs(dummyTaskSummary);
|
|
||||||
|
|
||||||
Attachment dummyAttachmentForSummaryTestPostClone =
|
Attachment dummyAttachmentForSummaryTestPostClone =
|
||||||
createAttachment("differentIdForDeepTest", "differentTaskIdForDeepTest");
|
createAttachment("differentIdForDeepTest", "differentTaskIdForDeepTest");
|
||||||
|
@ -59,8 +63,7 @@ class TaskModelsCloneTest {
|
||||||
assertThat(dummyTaskCloned).isNotEqualTo(dummyTask);
|
assertThat(dummyTaskCloned).isNotEqualTo(dummyTask);
|
||||||
dummyTaskCloned.setId(dummyTask.getId());
|
dummyTaskCloned.setId(dummyTask.getId());
|
||||||
dummyTaskCloned.setExternalId(dummyTask.getExternalId());
|
dummyTaskCloned.setExternalId(dummyTask.getExternalId());
|
||||||
assertThat(dummyTaskCloned).isEqualTo(dummyTask);
|
assertThat(dummyTaskCloned).isEqualTo(dummyTask).isNotSameAs(dummyTask);
|
||||||
assertThat(dummyTaskCloned).isNotSameAs(dummyTask);
|
|
||||||
|
|
||||||
dummyCustomAttributesPreClone.put("deepTestAttributeKey", "deepTestAttributeValue");
|
dummyCustomAttributesPreClone.put("deepTestAttributeKey", "deepTestAttributeValue");
|
||||||
dummyCallbackInfoPreClone.put("deepTestCallbackKey", "deepTestCallbackValue");
|
dummyCallbackInfoPreClone.put("deepTestCallbackKey", "deepTestCallbackValue");
|
||||||
|
@ -108,8 +111,7 @@ class TaskModelsCloneTest {
|
||||||
TaskCommentImpl dummyCommentCloned = dummyComment.copy();
|
TaskCommentImpl dummyCommentCloned = dummyComment.copy();
|
||||||
assertThat(dummyCommentCloned).isNotEqualTo(dummyComment);
|
assertThat(dummyCommentCloned).isNotEqualTo(dummyComment);
|
||||||
dummyCommentCloned.setId(dummyComment.getId());
|
dummyCommentCloned.setId(dummyComment.getId());
|
||||||
assertThat(dummyCommentCloned).isEqualTo(dummyComment);
|
assertThat(dummyCommentCloned).isEqualTo(dummyComment).isNotSameAs(dummyComment);
|
||||||
assertThat(dummyCommentCloned).isNotSameAs(dummyComment);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -126,8 +128,7 @@ class TaskModelsCloneTest {
|
||||||
|
|
||||||
assertThat(dummyReferenceCloned).isNotEqualTo(dummyReference);
|
assertThat(dummyReferenceCloned).isNotEqualTo(dummyReference);
|
||||||
dummyReferenceCloned.setId(dummyReference.getId());
|
dummyReferenceCloned.setId(dummyReference.getId());
|
||||||
assertThat(dummyReferenceCloned).isEqualTo(dummyReference);
|
assertThat(dummyReferenceCloned).isEqualTo(dummyReference).isNotSameAs(dummyReference);
|
||||||
assertThat(dummyReferenceCloned).isNotSameAs(dummyReference);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -141,8 +142,9 @@ class TaskModelsCloneTest {
|
||||||
|
|
||||||
dummyAttachmentSummaryCloned.setId(dummyAttachmentSummary.getId());
|
dummyAttachmentSummaryCloned.setId(dummyAttachmentSummary.getId());
|
||||||
dummyAttachmentSummaryCloned.setTaskId(dummyAttachmentSummary.getTaskId());
|
dummyAttachmentSummaryCloned.setTaskId(dummyAttachmentSummary.getTaskId());
|
||||||
assertThat(dummyAttachmentSummaryCloned).isEqualTo(dummyAttachmentSummary);
|
assertThat(dummyAttachmentSummaryCloned)
|
||||||
assertThat(dummyAttachmentSummaryCloned).isNotSameAs(dummyAttachmentSummary);
|
.isEqualTo(dummyAttachmentSummary)
|
||||||
|
.isNotSameAs(dummyAttachmentSummary);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -157,8 +159,7 @@ class TaskModelsCloneTest {
|
||||||
assertThat(dummyAttachmentCloned).isNotEqualTo(dummyAttachment);
|
assertThat(dummyAttachmentCloned).isNotEqualTo(dummyAttachment);
|
||||||
dummyAttachmentCloned.setId(dummyAttachment.getId());
|
dummyAttachmentCloned.setId(dummyAttachment.getId());
|
||||||
dummyAttachmentCloned.setTaskId(dummyAttachment.getTaskId());
|
dummyAttachmentCloned.setTaskId(dummyAttachment.getTaskId());
|
||||||
assertThat(dummyAttachmentCloned).isEqualTo(dummyAttachment);
|
assertThat(dummyAttachmentCloned).isEqualTo(dummyAttachment).isNotSameAs(dummyAttachment);
|
||||||
assertThat(dummyAttachmentCloned).isNotSameAs(dummyAttachment);
|
|
||||||
|
|
||||||
dummyMapPreClone.put("deepTestString1", "deepTestString2");
|
dummyMapPreClone.put("deepTestString1", "deepTestString2");
|
||||||
assertThat(dummyAttachment).isNotEqualTo(dummyAttachmentCloned);
|
assertThat(dummyAttachment).isNotEqualTo(dummyAttachmentCloned);
|
|
@ -92,15 +92,15 @@ class TransferTaskAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
@WithAccessId(user = "user-1-1", groups = GROUP_1_DN)
|
@WithAccessId(user = "user-1-1", groups = GROUP_1_DN)
|
||||||
@Test
|
@Test
|
||||||
void should_ChangeDomain_When_TransferingTaskToWorkbasketWithDifferentDomain() throws Exception {
|
void should_ChangeDomain_When_TransferringTaskToWorkbasketWithDifferentDomain() throws Exception {
|
||||||
TaskService taskService = taskanaEngine.getTaskService();
|
TaskService taskService = taskanaEngine.getTaskService();
|
||||||
Task task = taskService.getTask("TKI:000000000000000000000000000000000000");
|
Task task = taskService.getTask("TKI:000000000000000000000000000000000000");
|
||||||
String domain1 = task.getDomain();
|
String domain1 = task.getDomain();
|
||||||
|
|
||||||
Task transferedTask = taskService.transfer(task.getId(), "GPK_B_KSC_1", "DOMAIN_B");
|
Task transferredTask = taskService.transfer(task.getId(), "GPK_B_KSC_1", "DOMAIN_B");
|
||||||
|
|
||||||
assertThat(transferedTask).isNotNull();
|
assertThat(transferredTask).isNotNull();
|
||||||
assertThat(transferedTask.getDomain()).isNotEqualTo(domain1);
|
assertThat(transferredTask.getDomain()).isNotEqualTo(domain1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@WithAccessId(user = "user-1-1")
|
@WithAccessId(user = "user-1-1")
|
||||||
|
@ -308,7 +308,7 @@ class TransferTaskAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
@WithAccessId(user = "teamlead-1", groups = GROUP_1_DN)
|
@WithAccessId(user = "teamlead-1", groups = GROUP_1_DN)
|
||||||
@Test
|
@Test
|
||||||
void should_TransferTasks_When_TransferTasksWithListNotSupportingRemove() {
|
void should_TransferTasks_When_TransferringTasksWithListNotSupportingRemove() {
|
||||||
TaskService taskService = taskanaEngine.getTaskService();
|
TaskService taskService = taskanaEngine.getTaskService();
|
||||||
List<String> taskIds = List.of("TKI:000000000000000000000000000000000006");
|
List<String> taskIds = List.of("TKI:000000000000000000000000000000000006");
|
||||||
|
|
||||||
|
@ -322,7 +322,7 @@ class TransferTaskAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
@WithAccessId(user = "teamlead-1", groups = GROUP_1_DN)
|
@WithAccessId(user = "teamlead-1", groups = GROUP_1_DN)
|
||||||
@Test
|
@Test
|
||||||
void should_ThrowException_When_TransferTasksWithInvalidTasksIdList() {
|
void should_ThrowException_When_TransferredTaskListIsNull() {
|
||||||
TaskService taskService = taskanaEngine.getTaskService();
|
TaskService taskService = taskanaEngine.getTaskService();
|
||||||
// test with invalid list
|
// test with invalid list
|
||||||
|
|
||||||
|
@ -331,9 +331,15 @@ class TransferTaskAccTest extends AbstractAccTest {
|
||||||
assertThatThrownBy(call)
|
assertThatThrownBy(call)
|
||||||
.isInstanceOf(InvalidArgumentException.class)
|
.isInstanceOf(InvalidArgumentException.class)
|
||||||
.hasMessage("TaskIds must not be null.");
|
.hasMessage("TaskIds must not be null.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@WithAccessId(user = "teamlead-1", groups = GROUP_1_DN)
|
||||||
|
@Test
|
||||||
|
void should_ThrowException_When_TransferringTasksWithOnlyInvalidTasksIds() {
|
||||||
|
TaskService taskService = taskanaEngine.getTaskService();
|
||||||
|
|
||||||
// test with list containing only invalid arguments
|
// test with list containing only invalid arguments
|
||||||
call =
|
ThrowingCallable call =
|
||||||
() ->
|
() ->
|
||||||
taskService.transferTasks(
|
taskService.transferTasks(
|
||||||
"WBI:100000000000000000000000000000000006",
|
"WBI:100000000000000000000000000000000006",
|
||||||
|
@ -346,7 +352,7 @@ class TransferTaskAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
@WithAccessId(user = "teamlead-1", groups = GROUP_1_DN)
|
@WithAccessId(user = "teamlead-1", groups = GROUP_1_DN)
|
||||||
@Test
|
@Test
|
||||||
void should_ThrowException_When_TransferEmptyTaskIdList() {
|
void should_ThrowException_When_TransferringEmptyTaskIdList() {
|
||||||
TaskService taskService = taskanaEngine.getTaskService();
|
TaskService taskService = taskanaEngine.getTaskService();
|
||||||
List<String> taskIds = new ArrayList<>();
|
List<String> taskIds = new ArrayList<>();
|
||||||
ThrowingCallable call =
|
ThrowingCallable call =
|
||||||
|
|
|
@ -63,7 +63,7 @@ class UpdateTaskAttachmentsAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
@WithAccessId(user = "user-1-1")
|
@WithAccessId(user = "user-1-1")
|
||||||
@Test
|
@Test
|
||||||
void testAddNewAttachment() throws Exception {
|
void should_UpdateTaskCorrectlyInDatabase_When_AddingAnAttachment() throws Exception {
|
||||||
final int attachmentCount = task.getAttachments().size();
|
final int attachmentCount = task.getAttachments().size();
|
||||||
assertThat(task.getPriority()).isEqualTo(1);
|
assertThat(task.getPriority()).isEqualTo(1);
|
||||||
assertThat(task.getPlanned().plus(Duration.ofDays(1))).isEqualTo(task.getDue());
|
assertThat(task.getPlanned().plus(Duration.ofDays(1))).isEqualTo(task.getDue());
|
||||||
|
@ -80,7 +80,7 @@ class UpdateTaskAttachmentsAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
@WithAccessId(user = "user-1-1")
|
@WithAccessId(user = "user-1-1")
|
||||||
@Test
|
@Test
|
||||||
void testAddValidAttachmentTwice() throws Exception {
|
void should_NotAddSameAttachmentAgain_When_AddingToTaskSummary() throws Exception {
|
||||||
task.getAttachments().clear();
|
task.getAttachments().clear();
|
||||||
task = taskService.updateTask(task);
|
task = taskService.updateTask(task);
|
||||||
task = taskService.getTask(task.getId());
|
task = taskService.getTask(task.getId());
|
||||||
|
@ -100,7 +100,7 @@ class UpdateTaskAttachmentsAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
@WithAccessId(user = "user-1-1")
|
@WithAccessId(user = "user-1-1")
|
||||||
@Test
|
@Test
|
||||||
void testAddNewAttachmentTwiceWithoutTaskanaMethodWillThrowAttachmentPersistenceException()
|
void should_ThrowAttachmentPersistenceException_When_UpdatingTaskWithTwoIdenticalAttachments()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
final int attachmentCount = 0;
|
final int attachmentCount = 0;
|
||||||
task.getAttachments().clear();
|
task.getAttachments().clear();
|
||||||
|
@ -118,7 +118,8 @@ class UpdateTaskAttachmentsAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
@WithAccessId(user = "user-1-1")
|
@WithAccessId(user = "user-1-1")
|
||||||
@Test
|
@Test
|
||||||
void testAddExistingAttachmentAgainWillUpdateWhenNotEqual() throws Exception {
|
void should_UpdateExistingAttachment_When_AddingSameButNotEqualAttachmentAgain()
|
||||||
|
throws Exception {
|
||||||
// Add attachment before
|
// Add attachment before
|
||||||
task = taskService.getTask(task.getId());
|
task = taskService.getTask(task.getId());
|
||||||
final int attachmentCount = task.getAttachments().size();
|
final int attachmentCount = task.getAttachments().size();
|
||||||
|
@ -150,7 +151,7 @@ class UpdateTaskAttachmentsAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
@WithAccessId(user = "user-1-1")
|
@WithAccessId(user = "user-1-1")
|
||||||
@Test
|
@Test
|
||||||
void testAddExistingAttachmentAgainWillDoNothingWhenEqual() throws Exception {
|
void should_NotUpdateExistingAttachment_When_AddingIdenticalAttachmentAgain() throws Exception {
|
||||||
// Add Attachment before
|
// Add Attachment before
|
||||||
final int attachmentCount = task.getAttachments().size();
|
final int attachmentCount = task.getAttachments().size();
|
||||||
((AttachmentImpl) attachment).setId("TAI:0001");
|
((AttachmentImpl) attachment).setId("TAI:0001");
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package pro.taskana.workbasket.internal.models;
|
package acceptance.workbasket;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static pro.taskana.workbasket.api.WorkbasketCustomField.CUSTOM_1;
|
import static pro.taskana.workbasket.api.WorkbasketCustomField.CUSTOM_1;
|
||||||
|
@ -10,6 +10,9 @@ import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import pro.taskana.workbasket.api.WorkbasketPermission;
|
import pro.taskana.workbasket.api.WorkbasketPermission;
|
||||||
import pro.taskana.workbasket.api.models.Workbasket;
|
import pro.taskana.workbasket.api.models.Workbasket;
|
||||||
|
import pro.taskana.workbasket.internal.models.WorkbasketAccessItemImpl;
|
||||||
|
import pro.taskana.workbasket.internal.models.WorkbasketImpl;
|
||||||
|
import pro.taskana.workbasket.internal.models.WorkbasketSummaryImpl;
|
||||||
|
|
||||||
class WorkbasketModelsCloneTest {
|
class WorkbasketModelsCloneTest {
|
||||||
|
|
||||||
|
@ -36,8 +39,9 @@ class WorkbasketModelsCloneTest {
|
||||||
|
|
||||||
assertThat(dummyWorkbasketSummaryCloned).isNotEqualTo(dummyWorkbasketSummary);
|
assertThat(dummyWorkbasketSummaryCloned).isNotEqualTo(dummyWorkbasketSummary);
|
||||||
dummyWorkbasketSummaryCloned.setId(dummyWorkbasketSummary.getId());
|
dummyWorkbasketSummaryCloned.setId(dummyWorkbasketSummary.getId());
|
||||||
assertThat(dummyWorkbasketSummaryCloned).isEqualTo(dummyWorkbasketSummary);
|
assertThat(dummyWorkbasketSummaryCloned)
|
||||||
assertThat(dummyWorkbasketSummaryCloned).isNotSameAs(dummyWorkbasketSummary);
|
.isEqualTo(dummyWorkbasketSummary)
|
||||||
|
.isNotSameAs(dummyWorkbasketSummary);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -61,8 +65,7 @@ class WorkbasketModelsCloneTest {
|
||||||
|
|
||||||
assertThat(dummyWorkbasketCloned).isNotEqualTo(dummyWorkbasket);
|
assertThat(dummyWorkbasketCloned).isNotEqualTo(dummyWorkbasket);
|
||||||
dummyWorkbasketCloned.setId(dummyWorkbasket.getId());
|
dummyWorkbasketCloned.setId(dummyWorkbasket.getId());
|
||||||
assertThat(dummyWorkbasketCloned).isEqualTo(dummyWorkbasket);
|
assertThat(dummyWorkbasketCloned).isEqualTo(dummyWorkbasket).isNotSameAs(dummyWorkbasket);
|
||||||
assertThat(dummyWorkbasketCloned).isNotSameAs(dummyWorkbasket);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -92,7 +95,8 @@ class WorkbasketModelsCloneTest {
|
||||||
|
|
||||||
assertThat(dummyWorkbasketAccessItemCloned).isNotEqualTo(dummyWorkbasketAccessItem);
|
assertThat(dummyWorkbasketAccessItemCloned).isNotEqualTo(dummyWorkbasketAccessItem);
|
||||||
dummyWorkbasketAccessItemCloned.setId(dummyWorkbasketAccessItem.getId());
|
dummyWorkbasketAccessItemCloned.setId(dummyWorkbasketAccessItem.getId());
|
||||||
assertThat(dummyWorkbasketAccessItemCloned).isEqualTo(dummyWorkbasketAccessItem);
|
assertThat(dummyWorkbasketAccessItemCloned)
|
||||||
assertThat(dummyWorkbasketAccessItemCloned).isNotSameAs(dummyWorkbasketAccessItem);
|
.isEqualTo(dummyWorkbasketAccessItem)
|
||||||
|
.isNotSameAs(dummyWorkbasketAccessItem);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,10 +1,9 @@
|
||||||
package pro.taskana.workbasket.internal;
|
package acceptance.workbasket;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.assertj.core.api.Assertions.assertThatCode;
|
import static org.assertj.core.api.Assertions.assertThatCode;
|
||||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
|
||||||
import static org.mockito.Mockito.doReturn;
|
import static org.mockito.Mockito.doReturn;
|
||||||
import static org.mockito.Mockito.lenient;
|
import static org.mockito.Mockito.lenient;
|
||||||
import static org.mockito.Mockito.times;
|
import static org.mockito.Mockito.times;
|
||||||
|
@ -38,6 +37,10 @@ import pro.taskana.workbasket.api.exceptions.WorkbasketAccessItemAlreadyExistExc
|
||||||
import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
|
import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
|
||||||
import pro.taskana.workbasket.api.models.Workbasket;
|
import pro.taskana.workbasket.api.models.Workbasket;
|
||||||
import pro.taskana.workbasket.api.models.WorkbasketAccessItem;
|
import pro.taskana.workbasket.api.models.WorkbasketAccessItem;
|
||||||
|
import pro.taskana.workbasket.internal.DistributionTargetMapper;
|
||||||
|
import pro.taskana.workbasket.internal.WorkbasketAccessMapper;
|
||||||
|
import pro.taskana.workbasket.internal.WorkbasketMapper;
|
||||||
|
import pro.taskana.workbasket.internal.WorkbasketServiceImpl;
|
||||||
import pro.taskana.workbasket.internal.models.WorkbasketAccessItemImpl;
|
import pro.taskana.workbasket.internal.models.WorkbasketAccessItemImpl;
|
||||||
import pro.taskana.workbasket.internal.models.WorkbasketImpl;
|
import pro.taskana.workbasket.internal.models.WorkbasketImpl;
|
||||||
|
|
||||||
|
@ -113,7 +116,7 @@ class WorkbasketServiceImplTest {
|
||||||
String otherWorkbasketId = "4711";
|
String otherWorkbasketId = "4711";
|
||||||
List<String> destinations = List.of(otherWorkbasketId);
|
List<String> destinations = List.of(otherWorkbasketId);
|
||||||
workbasketServiceSpy.createWorkbasket(expectedWb);
|
workbasketServiceSpy.createWorkbasket(expectedWb);
|
||||||
doReturn(expectedWb).when(workbasketServiceSpy).getWorkbasket(eq(expectedWb.getId()));
|
doReturn(expectedWb).when(workbasketServiceSpy).getWorkbasket(expectedWb.getId());
|
||||||
|
|
||||||
ThrowingCallable call =
|
ThrowingCallable call =
|
||||||
() -> {
|
() -> {
|
||||||
|
@ -135,8 +138,8 @@ class WorkbasketServiceImplTest {
|
||||||
verify(internalTaskanaEngineMock, times(2)).getEngine();
|
verify(internalTaskanaEngineMock, times(2)).getEngine();
|
||||||
verify(internalTaskanaEngineMock, times(1)).domainExists(any());
|
verify(internalTaskanaEngineMock, times(1)).domainExists(any());
|
||||||
verify(distributionTargetMapperMock)
|
verify(distributionTargetMapperMock)
|
||||||
.deleteAllDistributionTargetsBySourceId(eq(expectedWb.getId()));
|
.deleteAllDistributionTargetsBySourceId(expectedWb.getId());
|
||||||
verify(workbasketMapperMock).update(eq(expectedWb));
|
verify(workbasketMapperMock).update(expectedWb);
|
||||||
verify(internalTaskanaEngineMock, times(1)).getHistoryEventManager();
|
verify(internalTaskanaEngineMock, times(1)).getHistoryEventManager();
|
||||||
|
|
||||||
verifyNoMoreInteractions(
|
verifyNoMoreInteractions(
|
|
@ -1,74 +0,0 @@
|
||||||
package pro.taskana.classification.internal;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import org.apache.ibatis.session.SqlSession;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
|
||||||
import org.mockito.InjectMocks;
|
|
||||||
import org.mockito.Mock;
|
|
||||||
import org.mockito.junit.jupiter.MockitoExtension;
|
|
||||||
|
|
||||||
import pro.taskana.classification.api.models.ClassificationSummary;
|
|
||||||
import pro.taskana.classification.internal.models.ClassificationSummaryImpl;
|
|
||||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
|
||||||
|
|
||||||
/** Test for ClassificationQueryImpl. */
|
|
||||||
@ExtendWith(MockitoExtension.class)
|
|
||||||
class ClassificationQueryImplTest {
|
|
||||||
|
|
||||||
@InjectMocks private ClassificationQueryImpl classificationQueryImpl;
|
|
||||||
|
|
||||||
@Mock private InternalTaskanaEngine internalTaskanaEngine;
|
|
||||||
|
|
||||||
@Mock private SqlSession sqlSession;
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void should_ReturnList_When_BuilderIsUsed() {
|
|
||||||
when(internalTaskanaEngine.getSqlSession()).thenReturn(sqlSession);
|
|
||||||
when(sqlSession.selectList(any(), any())).thenReturn(new ArrayList<>());
|
|
||||||
|
|
||||||
List<ClassificationSummary> result =
|
|
||||||
classificationQueryImpl
|
|
||||||
.nameIn("test", "asd", "blubber")
|
|
||||||
.typeIn("cool", "bla")
|
|
||||||
.priorityIn(1, 2)
|
|
||||||
.parentIdIn("superId")
|
|
||||||
.list();
|
|
||||||
assertThat(result).isNotNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void should_ReturnListWithOffset_When_BuilderIsUsed() {
|
|
||||||
when(internalTaskanaEngine.getSqlSession()).thenReturn(sqlSession);
|
|
||||||
when(sqlSession.selectList(any(), any(), any())).thenReturn(new ArrayList<>());
|
|
||||||
|
|
||||||
List<ClassificationSummary> result =
|
|
||||||
classificationQueryImpl
|
|
||||||
.nameIn("test", "asd", "blubber")
|
|
||||||
.typeIn("cool", "bla")
|
|
||||||
.priorityIn(1, 2)
|
|
||||||
.parentIdIn("superId")
|
|
||||||
.list(1, 1);
|
|
||||||
assertThat(result).isNotNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void should_ReturnOneItem_When_BuilderIsUsed() {
|
|
||||||
when(internalTaskanaEngine.getSqlSession()).thenReturn(sqlSession);
|
|
||||||
when(sqlSession.selectOne(any(), any())).thenReturn(new ClassificationSummaryImpl());
|
|
||||||
|
|
||||||
ClassificationSummary result =
|
|
||||||
classificationQueryImpl
|
|
||||||
.nameIn("test", "asd", "blubber")
|
|
||||||
.typeIn("cool", "bla")
|
|
||||||
.priorityIn(1, 2)
|
|
||||||
.parentIdIn("superId")
|
|
||||||
.single();
|
|
||||||
assertThat(result).isNotNull();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,174 +0,0 @@
|
||||||
package pro.taskana.classification.internal;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
|
|
||||||
import java.time.Instant;
|
|
||||||
import java.time.LocalDate;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.time.LocalTime;
|
|
||||||
import java.time.ZoneId;
|
|
||||||
import java.util.List;
|
|
||||||
import javax.sql.DataSource;
|
|
||||||
import org.junit.jupiter.api.BeforeAll;
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
|
|
||||||
import pro.taskana.TaskanaEngineConfiguration;
|
|
||||||
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.TaskanaEngine;
|
|
||||||
import pro.taskana.common.api.TaskanaEngine.ConnectionManagementMode;
|
|
||||||
import pro.taskana.common.api.TimeInterval;
|
|
||||||
import pro.taskana.common.internal.TaskanaEngineImpl;
|
|
||||||
import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
|
|
||||||
import pro.taskana.sampledata.SampleDataGenerator;
|
|
||||||
|
|
||||||
/** Integration Test for ClassificationServiceImpl with connection management mode AUTOCOMMIT. */
|
|
||||||
class ClassificationServiceImplIntAutoCommitTest {
|
|
||||||
|
|
||||||
private static SampleDataGenerator sampleDataGenerator;
|
|
||||||
private static TaskanaEngineConfiguration taskanaEngineConfiguration;
|
|
||||||
private ClassificationService classificationService;
|
|
||||||
|
|
||||||
@BeforeAll
|
|
||||||
static void beforeAll() {
|
|
||||||
DataSource dataSource = TaskanaEngineTestConfiguration.getDataSource();
|
|
||||||
String schemaName = TaskanaEngineTestConfiguration.getSchemaName();
|
|
||||||
sampleDataGenerator = new SampleDataGenerator(dataSource, schemaName);
|
|
||||||
taskanaEngineConfiguration =
|
|
||||||
new TaskanaEngineConfiguration(dataSource, false, false, schemaName);
|
|
||||||
}
|
|
||||||
|
|
||||||
@BeforeEach
|
|
||||||
void setup() throws Exception {
|
|
||||||
sampleDataGenerator.clearDb();
|
|
||||||
TaskanaEngine taskanaEngine = taskanaEngineConfiguration.buildTaskanaEngine();
|
|
||||||
classificationService = taskanaEngine.getClassificationService();
|
|
||||||
TaskanaEngineImpl taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine;
|
|
||||||
taskanaEngineImpl.setConnectionManagementMode(ConnectionManagementMode.AUTOCOMMIT);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testFindAllClassifications() throws Exception {
|
|
||||||
Classification classification0 = classificationService.newClassification("TEST1", "", "TASK");
|
|
||||||
classification0.setServiceLevel("P1D");
|
|
||||||
classificationService.createClassification(classification0);
|
|
||||||
Classification classification1 = classificationService.newClassification("TEST2", "", "TASK");
|
|
||||||
classification1.setServiceLevel("P1D");
|
|
||||||
classificationService.createClassification(classification1);
|
|
||||||
Classification classification2 = classificationService.newClassification("TEST3", "", "TASK");
|
|
||||||
classification2.setParentId(classification0.getId());
|
|
||||||
classification2.setServiceLevel("P1D");
|
|
||||||
classificationService.createClassification(classification2);
|
|
||||||
|
|
||||||
assertThat(classificationService.createClassificationQuery().list()).hasSize(2 + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testModifiedClassification() throws Exception {
|
|
||||||
final String description = "TEST SOMETHING";
|
|
||||||
Classification classification =
|
|
||||||
classificationService.newClassification("TEST434", "DOMAIN_A", "TASK");
|
|
||||||
classification.setDescription("");
|
|
||||||
classification.setServiceLevel("P1D");
|
|
||||||
classification = classificationService.createClassification(classification);
|
|
||||||
classification.setDescription("TEST SOMETHING");
|
|
||||||
classificationService.updateClassification(classification);
|
|
||||||
|
|
||||||
classification =
|
|
||||||
classificationService.getClassification(
|
|
||||||
classification.getKey(), classification.getDomain());
|
|
||||||
assertThat(classification.getDescription()).isEqualTo(description);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testInsertClassification() throws Exception {
|
|
||||||
Classification classification =
|
|
||||||
classificationService.newClassification("TEST1333", "DOMAIN_A", "TASK");
|
|
||||||
classification.setServiceLevel("P1D");
|
|
||||||
classificationService.createClassification(classification);
|
|
||||||
|
|
||||||
List<ClassificationSummary> list =
|
|
||||||
classificationService
|
|
||||||
.createClassificationQuery()
|
|
||||||
.validInDomainEquals(Boolean.TRUE)
|
|
||||||
.createdWithin(today())
|
|
||||||
.list();
|
|
||||||
|
|
||||||
assertThat(list).hasSize(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testUpdateClassification() throws Exception {
|
|
||||||
Classification classification =
|
|
||||||
classificationService.newClassification("TEST32451", "DOMAIN_A", "TASK");
|
|
||||||
classification.setServiceLevel("P1D");
|
|
||||||
classification = classificationService.createClassification(classification);
|
|
||||||
classification.setDescription("description");
|
|
||||||
classification = classificationService.updateClassification(classification);
|
|
||||||
|
|
||||||
List<ClassificationSummary> list =
|
|
||||||
classificationService.createClassificationQuery().validInDomainEquals(true).list();
|
|
||||||
assertThat(list).hasSize(1);
|
|
||||||
|
|
||||||
classificationService.updateClassification(classification);
|
|
||||||
list = classificationService.createClassificationQuery().list();
|
|
||||||
assertThat(list).hasSize(2);
|
|
||||||
|
|
||||||
List<ClassificationSummary> allClassifications =
|
|
||||||
classificationService.createClassificationQuery().list();
|
|
||||||
assertThat(allClassifications).hasSize(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testDefaultSettings() throws Exception {
|
|
||||||
Classification classification =
|
|
||||||
classificationService.newClassification("TEST7771", "DOMAIN_A", "TASK");
|
|
||||||
classification.setServiceLevel("P1D");
|
|
||||||
classification = classificationService.createClassification(classification);
|
|
||||||
|
|
||||||
Classification classification1 =
|
|
||||||
classificationService.newClassification("TEST1865", "DOMAIN_A", "TASK");
|
|
||||||
classification1.setServiceLevel("P1D");
|
|
||||||
classification1 = classificationService.createClassification(classification1);
|
|
||||||
|
|
||||||
classification1.setParentId(classification.getId());
|
|
||||||
classificationService.updateClassification(classification1);
|
|
||||||
|
|
||||||
List<ClassificationSummary> list =
|
|
||||||
classificationService.createClassificationQuery().parentIdIn("").list();
|
|
||||||
assertThat(list).hasSize(3);
|
|
||||||
list = classificationService.createClassificationQuery().list();
|
|
||||||
assertThat(list).hasSize(4);
|
|
||||||
|
|
||||||
List<ClassificationSummary> listAll = classificationService.createClassificationQuery().list();
|
|
||||||
list = classificationService.createClassificationQuery().list();
|
|
||||||
assertThat(list).hasSize(listAll.size());
|
|
||||||
|
|
||||||
list = classificationService.createClassificationQuery().validInDomainEquals(true).list();
|
|
||||||
assertThat(list).hasSize(2);
|
|
||||||
|
|
||||||
list = classificationService.createClassificationQuery().createdWithin(today()).list();
|
|
||||||
assertThat(list).hasSize(4);
|
|
||||||
|
|
||||||
list =
|
|
||||||
classificationService
|
|
||||||
.createClassificationQuery()
|
|
||||||
.domainIn("DOMAIN_C")
|
|
||||||
.validInDomainEquals(false)
|
|
||||||
.list();
|
|
||||||
assertThat(list).isEmpty();
|
|
||||||
|
|
||||||
list = classificationService.createClassificationQuery().list();
|
|
||||||
assertThat(list).hasSize(4);
|
|
||||||
}
|
|
||||||
|
|
||||||
private TimeInterval today() {
|
|
||||||
Instant begin =
|
|
||||||
LocalDateTime.of(LocalDate.now(), LocalTime.MIN).atZone(ZoneId.systemDefault()).toInstant();
|
|
||||||
Instant end =
|
|
||||||
LocalDateTime.of(LocalDate.now(), LocalTime.MAX).atZone(ZoneId.systemDefault()).toInstant();
|
|
||||||
return new TimeInterval(begin, end);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,258 +0,0 @@
|
||||||
package pro.taskana.classification.internal;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
|
||||||
|
|
||||||
import java.sql.Connection;
|
|
||||||
import java.time.Instant;
|
|
||||||
import java.time.LocalDate;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.time.LocalTime;
|
|
||||||
import java.time.ZoneId;
|
|
||||||
import java.util.List;
|
|
||||||
import javax.sql.DataSource;
|
|
||||||
import org.assertj.core.api.ThrowableAssert.ThrowingCallable;
|
|
||||||
import org.junit.jupiter.api.AfterEach;
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
|
|
||||||
import pro.taskana.TaskanaEngineConfiguration;
|
|
||||||
import pro.taskana.classification.api.ClassificationService;
|
|
||||||
import pro.taskana.classification.api.models.Classification;
|
|
||||||
import pro.taskana.classification.api.models.ClassificationSummary;
|
|
||||||
import pro.taskana.classification.internal.models.ClassificationImpl;
|
|
||||||
import pro.taskana.common.api.TaskanaEngine.ConnectionManagementMode;
|
|
||||||
import pro.taskana.common.api.TimeInterval;
|
|
||||||
import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
|
||||||
import pro.taskana.common.internal.TaskanaEngineImpl;
|
|
||||||
import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
|
|
||||||
import pro.taskana.common.internal.util.IdGenerator;
|
|
||||||
import pro.taskana.sampledata.SampleDataGenerator;
|
|
||||||
|
|
||||||
/** Integration Test for ClassificationServiceImpl with connection management mode EXPLICIT. */
|
|
||||||
class ClassificationServiceImplIntExplicitTest {
|
|
||||||
|
|
||||||
static int counter = 0;
|
|
||||||
|
|
||||||
private DataSource dataSource;
|
|
||||||
private ClassificationService classificationService;
|
|
||||||
private TaskanaEngineImpl taskanaEngine;
|
|
||||||
|
|
||||||
@BeforeEach
|
|
||||||
void setup() throws Exception {
|
|
||||||
dataSource = TaskanaEngineTestConfiguration.getDataSource();
|
|
||||||
String schemaName = TaskanaEngineTestConfiguration.getSchemaName();
|
|
||||||
SampleDataGenerator sampleDataGenerator = new SampleDataGenerator(dataSource, schemaName);
|
|
||||||
sampleDataGenerator.clearDb();
|
|
||||||
TaskanaEngineConfiguration taskanaEngineConfiguration =
|
|
||||||
new TaskanaEngineConfiguration(dataSource, false, false, schemaName);
|
|
||||||
taskanaEngine = (TaskanaEngineImpl) taskanaEngineConfiguration.buildTaskanaEngine();
|
|
||||||
taskanaEngine.setConnectionManagementMode(ConnectionManagementMode.EXPLICIT);
|
|
||||||
classificationService = taskanaEngine.getClassificationService();
|
|
||||||
}
|
|
||||||
|
|
||||||
@AfterEach
|
|
||||||
void cleanUp() throws Exception {
|
|
||||||
taskanaEngine.setConnection(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testInsertClassification() throws Exception {
|
|
||||||
try (Connection connection = dataSource.getConnection()) {
|
|
||||||
taskanaEngine.setConnection(connection);
|
|
||||||
|
|
||||||
final String domain = "DOMAIN_A";
|
|
||||||
final String key = "dummy-key";
|
|
||||||
ClassificationImpl expectedClassification;
|
|
||||||
|
|
||||||
// new classification but master existing
|
|
||||||
expectedClassification =
|
|
||||||
(ClassificationImpl) this.createNewClassificationWithUniqueKey("", "TASK");
|
|
||||||
expectedClassification.setKey(key);
|
|
||||||
expectedClassification.setDomain("DOMAIN_B");
|
|
||||||
expectedClassification.setServiceLevel("P1D");
|
|
||||||
|
|
||||||
classificationService.createClassification(expectedClassification);
|
|
||||||
connection.commit();
|
|
||||||
Classification actualClassification =
|
|
||||||
classificationService.getClassification(key, "DOMAIN_B");
|
|
||||||
assertThat(actualClassification).isNotNull();
|
|
||||||
assertThat(actualClassification.getCreated()).isNotNull();
|
|
||||||
assertThat(actualClassification.getId()).isNotNull();
|
|
||||||
assertThat(actualClassification.getKey()).isEqualTo(key);
|
|
||||||
assertThat(actualClassification.getDomain()).isEqualTo("DOMAIN_B");
|
|
||||||
assertThat(actualClassification.getId()).startsWith(IdGenerator.ID_PREFIX_CLASSIFICATION);
|
|
||||||
Classification masterResult = classificationService.getClassification(key, "");
|
|
||||||
assertThat(masterResult).isNotNull();
|
|
||||||
|
|
||||||
// invalid serviceLevel
|
|
||||||
ClassificationImpl expectedClassificationCreated =
|
|
||||||
(ClassificationImpl) this.createNewClassificationWithUniqueKey("", "TASK");
|
|
||||||
expectedClassificationCreated.setDomain(domain);
|
|
||||||
expectedClassificationCreated.setKey("");
|
|
||||||
expectedClassificationCreated.setServiceLevel("ASAP");
|
|
||||||
|
|
||||||
ThrowingCallable call =
|
|
||||||
() -> classificationService.createClassification(expectedClassificationCreated);
|
|
||||||
assertThatThrownBy(call)
|
|
||||||
.describedAs(
|
|
||||||
"Should have thrown IllegalArgumentException, because ServiceLevel is invalid.")
|
|
||||||
.isInstanceOf(InvalidArgumentException.class);
|
|
||||||
|
|
||||||
connection.commit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testFindAllClassifications() throws Exception {
|
|
||||||
try (Connection connection = dataSource.getConnection()) {
|
|
||||||
taskanaEngine.setConnection(connection);
|
|
||||||
Classification classification0 = this.createNewClassificationWithUniqueKey("", "TASK");
|
|
||||||
classification0.setServiceLevel("P1D");
|
|
||||||
classificationService.createClassification(classification0);
|
|
||||||
Classification classification1 = this.createNewClassificationWithUniqueKey("", "TASK");
|
|
||||||
classification1.setServiceLevel("P1D");
|
|
||||||
classificationService.createClassification(classification1);
|
|
||||||
Classification classification2 = this.createNewClassificationWithUniqueKey("", "TASK");
|
|
||||||
classification2.setParentId(classification0.getId());
|
|
||||||
classification2.setServiceLevel("P1D");
|
|
||||||
classificationService.createClassification(classification2);
|
|
||||||
|
|
||||||
assertThat(classificationService.createClassificationQuery().list()).hasSize(2 + 1);
|
|
||||||
connection.commit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testModifiedClassification() throws Exception {
|
|
||||||
|
|
||||||
try (Connection connection = dataSource.getConnection()) {
|
|
||||||
taskanaEngine.setConnection(connection);
|
|
||||||
Classification classification = this.createNewClassificationWithUniqueKey("DOMAIN_A", "TASK");
|
|
||||||
classification.setServiceLevel("P1D");
|
|
||||||
connection.commit();
|
|
||||||
classification = classificationService.createClassification(classification);
|
|
||||||
|
|
||||||
String updatedDescription = "TEST SOMETHING";
|
|
||||||
classification.setDescription(updatedDescription);
|
|
||||||
classification = classificationService.updateClassification(classification);
|
|
||||||
connection.commit();
|
|
||||||
|
|
||||||
classification =
|
|
||||||
classificationService.getClassification(
|
|
||||||
classification.getKey(), classification.getDomain());
|
|
||||||
assertThat(classification.getDescription()).isEqualTo(updatedDescription);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testInsertAndClassificationQuery() throws Exception {
|
|
||||||
try (Connection connection = dataSource.getConnection()) {
|
|
||||||
taskanaEngine.setConnection(connection);
|
|
||||||
Classification classification = this.createNewClassificationWithUniqueKey("DOMAIN_A", "TASK");
|
|
||||||
classification.setServiceLevel("P1D");
|
|
||||||
classificationService.createClassification(classification);
|
|
||||||
List<ClassificationSummary> list =
|
|
||||||
classificationService
|
|
||||||
.createClassificationQuery()
|
|
||||||
.validInDomainEquals(Boolean.TRUE)
|
|
||||||
.createdWithin(today())
|
|
||||||
.list();
|
|
||||||
assertThat(list).hasSize(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testUpdateAndClassificationQuery() throws Exception {
|
|
||||||
try (Connection connection = dataSource.getConnection()) {
|
|
||||||
taskanaEngine.setConnection(connection);
|
|
||||||
Classification classification = this.createNewClassificationWithUniqueKey("DOMAIN_A", "TASK");
|
|
||||||
classification.setDescription("");
|
|
||||||
classification.setServiceLevel("P1D");
|
|
||||||
classification = classificationService.createClassification(classification);
|
|
||||||
classification.setDescription("description");
|
|
||||||
classification = classificationService.updateClassification(classification);
|
|
||||||
|
|
||||||
List<ClassificationSummary> list = classificationService.createClassificationQuery().list();
|
|
||||||
assertThat(list).hasSize(2);
|
|
||||||
list = classificationService.createClassificationQuery().validInDomainEquals(true).list();
|
|
||||||
assertThat(list).hasSize(1);
|
|
||||||
classification =
|
|
||||||
classificationService.getClassification(
|
|
||||||
classification.getKey(), classification.getDomain());
|
|
||||||
assertThat(classification.getDescription()).isEqualTo("description");
|
|
||||||
|
|
||||||
classificationService.updateClassification(classification);
|
|
||||||
list = classificationService.createClassificationQuery().list();
|
|
||||||
assertThat(list).hasSize(2);
|
|
||||||
|
|
||||||
List<ClassificationSummary> allClassifications =
|
|
||||||
classificationService.createClassificationQuery().list();
|
|
||||||
assertThat(allClassifications).hasSize(2);
|
|
||||||
connection.commit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testDefaultSettingsWithClassificationQuery() throws Exception {
|
|
||||||
try (Connection connection = dataSource.getConnection()) {
|
|
||||||
taskanaEngine.setConnection(connection);
|
|
||||||
Classification classification = this.createNewClassificationWithUniqueKey("DOMAIN_A", "TASK");
|
|
||||||
classification.setServiceLevel("P1D");
|
|
||||||
classification = classificationService.createClassification(classification);
|
|
||||||
|
|
||||||
Classification classification1 =
|
|
||||||
this.createNewClassificationWithUniqueKey("DOMAIN_A", "TASK");
|
|
||||||
classification1.setServiceLevel("P1D");
|
|
||||||
classification1 = classificationService.createClassification(classification1);
|
|
||||||
classification1.setParentId(classification.getId());
|
|
||||||
classification1 = classificationService.updateClassification(classification1);
|
|
||||||
|
|
||||||
List<ClassificationSummary> list =
|
|
||||||
classificationService.createClassificationQuery().parentIdIn("").list();
|
|
||||||
assertThat(list).hasSize(3);
|
|
||||||
list = classificationService.createClassificationQuery().list();
|
|
||||||
assertThat(list).hasSize(4);
|
|
||||||
connection.commit();
|
|
||||||
|
|
||||||
list = classificationService.createClassificationQuery().validInDomainEquals(true).list();
|
|
||||||
assertThat(list).hasSize(2);
|
|
||||||
list = classificationService.createClassificationQuery().createdWithin(today()).list();
|
|
||||||
assertThat(list).hasSize(4);
|
|
||||||
list =
|
|
||||||
classificationService
|
|
||||||
.createClassificationQuery()
|
|
||||||
.domainIn("DOMAIN_C")
|
|
||||||
.validInDomainEquals(false)
|
|
||||||
.list();
|
|
||||||
assertThat(list).isEmpty();
|
|
||||||
list =
|
|
||||||
classificationService.createClassificationQuery().keyIn(classification1.getKey()).list();
|
|
||||||
assertThat(list).hasSize(2);
|
|
||||||
|
|
||||||
list =
|
|
||||||
classificationService
|
|
||||||
.createClassificationQuery()
|
|
||||||
.parentIdIn(classification.getId())
|
|
||||||
.list();
|
|
||||||
assertThat(list).hasSize(1);
|
|
||||||
assertThat(list.get(0).getKey()).isEqualTo(classification1.getKey());
|
|
||||||
connection.commit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private Classification createNewClassificationWithUniqueKey(String domain, String type) {
|
|
||||||
Classification classification =
|
|
||||||
classificationService.newClassification("TEST" + counter, domain, type);
|
|
||||||
counter++;
|
|
||||||
return classification;
|
|
||||||
}
|
|
||||||
|
|
||||||
private TimeInterval today() {
|
|
||||||
Instant begin =
|
|
||||||
LocalDateTime.of(LocalDate.now(), LocalTime.MIN).atZone(ZoneId.systemDefault()).toInstant();
|
|
||||||
Instant end =
|
|
||||||
LocalDateTime.of(LocalDate.now(), LocalTime.MAX).atZone(ZoneId.systemDefault()).toInstant();
|
|
||||||
return new TimeInterval(begin, end);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,76 +0,0 @@
|
||||||
package pro.taskana.classification.internal;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
|
||||||
import static org.mockito.Mockito.times;
|
|
||||||
import static org.mockito.Mockito.verify;
|
|
||||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
import org.assertj.core.api.ThrowableAssert.ThrowingCallable;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
|
||||||
import org.mockito.InjectMocks;
|
|
||||||
import org.mockito.Mock;
|
|
||||||
import org.mockito.Spy;
|
|
||||||
import org.mockito.junit.jupiter.MockitoExtension;
|
|
||||||
|
|
||||||
import pro.taskana.classification.api.models.Classification;
|
|
||||||
import pro.taskana.classification.internal.models.ClassificationImpl;
|
|
||||||
import pro.taskana.common.api.TaskanaEngine;
|
|
||||||
import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
|
||||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
|
||||||
|
|
||||||
/** Unit Test for ClassificationServiceImpl. */
|
|
||||||
@ExtendWith(MockitoExtension.class)
|
|
||||||
class ClassificationServiceImplTest {
|
|
||||||
|
|
||||||
@Spy @InjectMocks private ClassificationServiceImpl cutSpy;
|
|
||||||
@Mock private ClassificationMapper classificationMapperMock;
|
|
||||||
@Mock private TaskanaEngine taskanaEngineMock;
|
|
||||||
@Mock private InternalTaskanaEngine internalTaskanaEngineMock;
|
|
||||||
@Mock private ClassificationQueryImpl classificationQueryImplMock;
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testCreateClassificationQuery() {
|
|
||||||
cutSpy.createClassificationQuery();
|
|
||||||
verify(internalTaskanaEngineMock, times(1)).getHistoryEventManager();
|
|
||||||
verifyNoMoreInteractions(
|
|
||||||
classificationMapperMock,
|
|
||||||
internalTaskanaEngineMock,
|
|
||||||
taskanaEngineMock,
|
|
||||||
classificationQueryImplMock);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testThrowExceptionIdIfClassificationIsCreatedWithAnExplicitId() {
|
|
||||||
when(internalTaskanaEngineMock.getEngine()).thenReturn(taskanaEngineMock);
|
|
||||||
ThrowingCallable call =
|
|
||||||
() -> {
|
|
||||||
Classification classification = createDummyClassification();
|
|
||||||
when(internalTaskanaEngineMock.domainExists(any())).thenReturn(true);
|
|
||||||
cutSpy.createClassification(classification);
|
|
||||||
};
|
|
||||||
assertThatThrownBy(call)
|
|
||||||
.isInstanceOf(InvalidArgumentException.class)
|
|
||||||
.hasMessage("ClassificationId should be null on creation");
|
|
||||||
}
|
|
||||||
|
|
||||||
private Classification createDummyClassification() {
|
|
||||||
return this.createDummyClassification("ID: 1");
|
|
||||||
}
|
|
||||||
|
|
||||||
private Classification createDummyClassification(String id) {
|
|
||||||
|
|
||||||
ClassificationImpl classificationImpl = new ClassificationImpl();
|
|
||||||
classificationImpl.setDescription("A DUMMY FOR TESTING A SERVICE");
|
|
||||||
classificationImpl.setName("SERVICE-DUMMY");
|
|
||||||
classificationImpl.setDomain("DOMAIN_A");
|
|
||||||
classificationImpl.setServiceLevel("P2D");
|
|
||||||
classificationImpl.setId(id);
|
|
||||||
classificationImpl.setKey("ABC111");
|
|
||||||
classificationImpl.setParentId("");
|
|
||||||
classificationImpl.setParentKey("");
|
|
||||||
return classificationImpl;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,316 +0,0 @@
|
||||||
package pro.taskana.monitor.internal;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
|
||||||
import static org.mockito.Mockito.times;
|
|
||||||
import static org.mockito.Mockito.verify;
|
|
||||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
|
||||||
import org.mockito.InjectMocks;
|
|
||||||
import org.mockito.Mock;
|
|
||||||
import org.mockito.junit.jupiter.MockitoExtension;
|
|
||||||
|
|
||||||
import pro.taskana.TaskanaEngineConfiguration;
|
|
||||||
import pro.taskana.common.api.TaskanaEngine;
|
|
||||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
|
||||||
import pro.taskana.monitor.api.SelectedItem;
|
|
||||||
import pro.taskana.monitor.api.TaskTimestamp;
|
|
||||||
import pro.taskana.monitor.api.reports.ClassificationCategoryReport;
|
|
||||||
import pro.taskana.monitor.api.reports.header.TimeIntervalColumnHeader;
|
|
||||||
import pro.taskana.monitor.api.reports.item.MonitorQueryItem;
|
|
||||||
import pro.taskana.task.api.TaskCustomField;
|
|
||||||
import pro.taskana.task.api.TaskState;
|
|
||||||
|
|
||||||
/** Unit Test for CategoryBuilderImpl. */
|
|
||||||
@ExtendWith(MockitoExtension.class)
|
|
||||||
class ClassificationClassificationCategoryReportBuilderImplTest {
|
|
||||||
|
|
||||||
@InjectMocks private MonitorServiceImpl cut;
|
|
||||||
|
|
||||||
@Mock private InternalTaskanaEngine internalTaskanaEngineMock;
|
|
||||||
|
|
||||||
@Mock private TaskanaEngine taskanaEngineMock;
|
|
||||||
|
|
||||||
@Mock private TaskanaEngineConfiguration taskanaEngineConfiguration;
|
|
||||||
|
|
||||||
@Mock private MonitorMapper monitorMapperMock;
|
|
||||||
|
|
||||||
@BeforeEach
|
|
||||||
void setup() {
|
|
||||||
when(internalTaskanaEngineMock.getEngine()).thenReturn(taskanaEngineMock);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testGetTotalNumbersOfCategoryReport() throws Exception {
|
|
||||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
|
||||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
|
||||||
final List<String> categories = List.of("EXTERN");
|
|
||||||
final List<String> domains = List.of("DOMAIN_A");
|
|
||||||
final List<String> classificationIds = List.of("L10000");
|
|
||||||
final List<String> excludedClassificationIds = List.of("L20000");
|
|
||||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
|
||||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
|
||||||
|
|
||||||
List<MonitorQueryItem> expectedResult = new ArrayList<>();
|
|
||||||
MonitorQueryItem monitorQueryItem = new MonitorQueryItem();
|
|
||||||
monitorQueryItem.setKey("EXTERN");
|
|
||||||
monitorQueryItem.setNumberOfTasks(1);
|
|
||||||
expectedResult.add(monitorQueryItem);
|
|
||||||
when(monitorMapperMock.getTaskCountOfCategories(
|
|
||||||
any(),
|
|
||||||
eq(workbasketIds),
|
|
||||||
eq(states),
|
|
||||||
eq(categories),
|
|
||||||
eq(domains),
|
|
||||||
eq(TaskTimestamp.DUE),
|
|
||||||
eq(classificationIds),
|
|
||||||
eq(excludedClassificationIds),
|
|
||||||
eq(customAttributeFilter)))
|
|
||||||
.thenReturn(expectedResult);
|
|
||||||
|
|
||||||
final ClassificationCategoryReport actualResult =
|
|
||||||
cut.createClassificationCategoryReportBuilder()
|
|
||||||
.workbasketIdIn(workbasketIds)
|
|
||||||
.stateIn(states)
|
|
||||||
.classificationCategoryIn(categories)
|
|
||||||
.domainIn(domains)
|
|
||||||
.classificationIdIn(classificationIds)
|
|
||||||
.excludedClassificationIdIn(excludedClassificationIds)
|
|
||||||
.customAttributeFilterIn(customAttributeFilter)
|
|
||||||
.buildReport();
|
|
||||||
|
|
||||||
verify(internalTaskanaEngineMock).openConnection();
|
|
||||||
verify(internalTaskanaEngineMock, times(2)).getEngine();
|
|
||||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
|
||||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
|
||||||
verify(monitorMapperMock)
|
|
||||||
.getTaskCountOfCategories(any(), any(), any(), any(), any(), any(), any(), any(), any());
|
|
||||||
verify(internalTaskanaEngineMock).returnConnection();
|
|
||||||
verifyNoMoreInteractions(
|
|
||||||
internalTaskanaEngineMock,
|
|
||||||
taskanaEngineMock,
|
|
||||||
monitorMapperMock,
|
|
||||||
taskanaEngineConfiguration);
|
|
||||||
|
|
||||||
assertThat(actualResult).isNotNull();
|
|
||||||
assertThat(actualResult.getRow("EXTERN").getTotalValue()).isOne();
|
|
||||||
assertThat(actualResult.getSumRow().getTotalValue()).isOne();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testGetCategoryReportWithReportLineItemDefinitions() throws Exception {
|
|
||||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
|
||||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
|
||||||
final List<String> categories = List.of("EXTERN");
|
|
||||||
final List<String> domains = List.of("DOMAIN_A");
|
|
||||||
final List<String> classificationIds = List.of("L10000");
|
|
||||||
final List<String> excludedClassificationIds = List.of("L20000");
|
|
||||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
|
||||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
|
||||||
final List<TimeIntervalColumnHeader> columnHeaders =
|
|
||||||
List.of(new TimeIntervalColumnHeader(0, 0));
|
|
||||||
|
|
||||||
final List<MonitorQueryItem> expectedResult = new ArrayList<>();
|
|
||||||
MonitorQueryItem monitorQueryItem = new MonitorQueryItem();
|
|
||||||
monitorQueryItem.setKey("EXTERN");
|
|
||||||
monitorQueryItem.setAgeInDays(0);
|
|
||||||
monitorQueryItem.setNumberOfTasks(1);
|
|
||||||
expectedResult.add(monitorQueryItem);
|
|
||||||
when(monitorMapperMock.getTaskCountOfCategories(
|
|
||||||
any(),
|
|
||||||
eq(workbasketIds),
|
|
||||||
eq(states),
|
|
||||||
eq(categories),
|
|
||||||
eq(domains),
|
|
||||||
eq(TaskTimestamp.DUE),
|
|
||||||
eq(classificationIds),
|
|
||||||
eq(excludedClassificationIds),
|
|
||||||
eq(customAttributeFilter)))
|
|
||||||
.thenReturn(expectedResult);
|
|
||||||
|
|
||||||
final ClassificationCategoryReport actualResult =
|
|
||||||
cut.createClassificationCategoryReportBuilder()
|
|
||||||
.workbasketIdIn(workbasketIds)
|
|
||||||
.stateIn(states)
|
|
||||||
.classificationCategoryIn(categories)
|
|
||||||
.domainIn(domains)
|
|
||||||
.classificationIdIn(classificationIds)
|
|
||||||
.excludedClassificationIdIn(excludedClassificationIds)
|
|
||||||
.customAttributeFilterIn(customAttributeFilter)
|
|
||||||
.withColumnHeaders(columnHeaders)
|
|
||||||
.buildReport();
|
|
||||||
|
|
||||||
verify(internalTaskanaEngineMock).openConnection();
|
|
||||||
verify(internalTaskanaEngineMock, times(2)).getEngine();
|
|
||||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
|
||||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
|
||||||
verify(monitorMapperMock)
|
|
||||||
.getTaskCountOfCategories(any(), any(), any(), any(), any(), any(), any(), any(), any());
|
|
||||||
verify(internalTaskanaEngineMock).returnConnection();
|
|
||||||
verifyNoMoreInteractions(
|
|
||||||
internalTaskanaEngineMock,
|
|
||||||
taskanaEngineMock,
|
|
||||||
monitorMapperMock,
|
|
||||||
taskanaEngineConfiguration);
|
|
||||||
|
|
||||||
assertThat(actualResult).isNotNull();
|
|
||||||
assertThat(actualResult.getRow("EXTERN").getTotalValue()).isOne();
|
|
||||||
assertThat(actualResult.getRow("EXTERN").getCells()[0]).isOne();
|
|
||||||
assertThat(actualResult.getSumRow().getTotalValue()).isOne();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testListTaskIdsOfCategoryReportForSelectedItems() throws Exception {
|
|
||||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
|
||||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
|
||||||
final List<String> categories = List.of("EXTERN");
|
|
||||||
final List<String> domains = List.of("DOMAIN_A");
|
|
||||||
final List<String> classificationIds = List.of("L10000");
|
|
||||||
final List<String> excludedClassificationIds = List.of("L20000");
|
|
||||||
final Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
|
||||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
|
||||||
final List<TimeIntervalColumnHeader> columnHeaders =
|
|
||||||
List.of(new TimeIntervalColumnHeader(0, 0));
|
|
||||||
|
|
||||||
List<SelectedItem> selectedItems = List.of(new SelectedItem("EXTERN", null, 1, 5));
|
|
||||||
|
|
||||||
List<String> expectedResult = List.of("TKI:000000000000000000000000000000000001");
|
|
||||||
when(monitorMapperMock.getTaskIdsForSelectedItems(
|
|
||||||
any(),
|
|
||||||
eq(workbasketIds),
|
|
||||||
eq(states),
|
|
||||||
eq(categories),
|
|
||||||
eq(domains),
|
|
||||||
eq(classificationIds),
|
|
||||||
eq(excludedClassificationIds),
|
|
||||||
eq(customAttributeFilter),
|
|
||||||
eq(null),
|
|
||||||
eq("CLASSIFICATION_CATEGORY"),
|
|
||||||
eq(TaskTimestamp.DUE),
|
|
||||||
eq(selectedItems),
|
|
||||||
eq(false)))
|
|
||||||
.thenReturn(expectedResult);
|
|
||||||
|
|
||||||
final List<String> actualResult =
|
|
||||||
cut.createClassificationCategoryReportBuilder()
|
|
||||||
.workbasketIdIn(workbasketIds)
|
|
||||||
.stateIn(states)
|
|
||||||
.classificationCategoryIn(categories)
|
|
||||||
.domainIn(domains)
|
|
||||||
.classificationIdIn(classificationIds)
|
|
||||||
.excludedClassificationIdIn(excludedClassificationIds)
|
|
||||||
.customAttributeFilterIn(customAttributeFilter)
|
|
||||||
.withColumnHeaders(columnHeaders)
|
|
||||||
.listTaskIdsForSelectedItems(selectedItems, TaskTimestamp.DUE);
|
|
||||||
|
|
||||||
verify(internalTaskanaEngineMock).openConnection();
|
|
||||||
verify(internalTaskanaEngineMock, times(2)).getEngine();
|
|
||||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
|
||||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
|
||||||
verify(monitorMapperMock)
|
|
||||||
.getTaskIdsForSelectedItems(
|
|
||||||
any(),
|
|
||||||
any(),
|
|
||||||
any(),
|
|
||||||
any(),
|
|
||||||
any(),
|
|
||||||
any(),
|
|
||||||
any(),
|
|
||||||
any(),
|
|
||||||
any(),
|
|
||||||
any(),
|
|
||||||
eq(TaskTimestamp.DUE),
|
|
||||||
any(),
|
|
||||||
eq(false));
|
|
||||||
verify(internalTaskanaEngineMock).returnConnection();
|
|
||||||
verifyNoMoreInteractions(
|
|
||||||
internalTaskanaEngineMock,
|
|
||||||
taskanaEngineMock,
|
|
||||||
monitorMapperMock,
|
|
||||||
taskanaEngineConfiguration);
|
|
||||||
|
|
||||||
assertThat(actualResult).isEqualTo(expectedResult);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testListTaskIdsForSelectedItemsIsEmptyResult() throws Exception {
|
|
||||||
List<String> result =
|
|
||||||
cut.createClassificationCategoryReportBuilder()
|
|
||||||
.listTaskIdsForSelectedItems(
|
|
||||||
List.of(new SelectedItem("BLA", null, 0, 0)), TaskTimestamp.DUE);
|
|
||||||
assertThat(result).isNotNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testListCustomAttributeValuesForCustomAttributeName() throws Exception {
|
|
||||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
|
||||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
|
||||||
final List<String> categories = List.of("EXTERN");
|
|
||||||
final List<String> domains = List.of("DOMAIN_A");
|
|
||||||
final List<String> classificationIds = List.of("L10000");
|
|
||||||
final List<String> excludedClassificationIds = List.of("L20000");
|
|
||||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
|
||||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
|
||||||
final List<TimeIntervalColumnHeader> columnHeaders =
|
|
||||||
List.of(new TimeIntervalColumnHeader(0, 0));
|
|
||||||
|
|
||||||
List<String> expectedResult = List.of("Geschaeftsstelle A");
|
|
||||||
when(monitorMapperMock.getCustomAttributeValuesForReport(
|
|
||||||
workbasketIds,
|
|
||||||
states,
|
|
||||||
categories,
|
|
||||||
domains,
|
|
||||||
classificationIds,
|
|
||||||
excludedClassificationIds,
|
|
||||||
customAttributeFilter,
|
|
||||||
null,
|
|
||||||
TaskCustomField.CUSTOM_1))
|
|
||||||
.thenReturn(expectedResult);
|
|
||||||
|
|
||||||
final List<String> actualResult =
|
|
||||||
cut.createClassificationCategoryReportBuilder()
|
|
||||||
.workbasketIdIn(workbasketIds)
|
|
||||||
.stateIn(states)
|
|
||||||
.classificationCategoryIn(categories)
|
|
||||||
.domainIn(domains)
|
|
||||||
.classificationIdIn(classificationIds)
|
|
||||||
.excludedClassificationIdIn(excludedClassificationIds)
|
|
||||||
.customAttributeFilterIn(customAttributeFilter)
|
|
||||||
.withColumnHeaders(columnHeaders)
|
|
||||||
.listCustomAttributeValuesForCustomAttributeName(TaskCustomField.CUSTOM_1);
|
|
||||||
|
|
||||||
verify(internalTaskanaEngineMock).openConnection();
|
|
||||||
verify(internalTaskanaEngineMock, times(2)).getEngine();
|
|
||||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
|
||||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
|
||||||
verify(monitorMapperMock)
|
|
||||||
.getCustomAttributeValuesForReport(
|
|
||||||
any(), any(), any(), any(), any(), any(), any(), any(), any());
|
|
||||||
verify(internalTaskanaEngineMock).returnConnection();
|
|
||||||
verifyNoMoreInteractions(
|
|
||||||
internalTaskanaEngineMock,
|
|
||||||
taskanaEngineMock,
|
|
||||||
monitorMapperMock,
|
|
||||||
taskanaEngineConfiguration);
|
|
||||||
|
|
||||||
assertThat(actualResult).isEqualTo(expectedResult);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testListCustomAttributeValuesForCustomAttributeNameIsEmptyResult() throws Exception {
|
|
||||||
List<String> result =
|
|
||||||
cut.createClassificationCategoryReportBuilder()
|
|
||||||
.workbasketIdIn(List.of("DieGibtsSicherNed"))
|
|
||||||
.listCustomAttributeValuesForCustomAttributeName(TaskCustomField.CUSTOM_1);
|
|
||||||
assertThat(result).isNotNull();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,486 +0,0 @@
|
||||||
package pro.taskana.monitor.internal;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
|
||||||
import static org.mockito.Mockito.mock;
|
|
||||||
import static org.mockito.Mockito.times;
|
|
||||||
import static org.mockito.Mockito.verify;
|
|
||||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
|
||||||
import org.mockito.InjectMocks;
|
|
||||||
import org.mockito.Mock;
|
|
||||||
import org.mockito.junit.jupiter.MockitoExtension;
|
|
||||||
|
|
||||||
import pro.taskana.TaskanaEngineConfiguration;
|
|
||||||
import pro.taskana.classification.api.ClassificationQuery;
|
|
||||||
import pro.taskana.classification.api.ClassificationService;
|
|
||||||
import pro.taskana.common.api.TaskanaEngine;
|
|
||||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
|
||||||
import pro.taskana.monitor.api.SelectedItem;
|
|
||||||
import pro.taskana.monitor.api.TaskTimestamp;
|
|
||||||
import pro.taskana.monitor.api.reports.ClassificationReport;
|
|
||||||
import pro.taskana.monitor.api.reports.ClassificationReport.DetailedClassificationReport;
|
|
||||||
import pro.taskana.monitor.api.reports.header.TimeIntervalColumnHeader;
|
|
||||||
import pro.taskana.monitor.api.reports.item.DetailedMonitorQueryItem;
|
|
||||||
import pro.taskana.monitor.api.reports.item.MonitorQueryItem;
|
|
||||||
import pro.taskana.monitor.api.reports.row.FoldableRow;
|
|
||||||
import pro.taskana.task.api.TaskCustomField;
|
|
||||||
import pro.taskana.task.api.TaskState;
|
|
||||||
|
|
||||||
/** Unit Test for ClassificationReportBuilderImpl. */
|
|
||||||
@ExtendWith(MockitoExtension.class)
|
|
||||||
class ClassificationReportBuilderImplTest {
|
|
||||||
|
|
||||||
@InjectMocks private MonitorServiceImpl cut;
|
|
||||||
@Mock private InternalTaskanaEngine internalTaskanaEngineMock;
|
|
||||||
@Mock private TaskanaEngine taskanaEngineMock;
|
|
||||||
@Mock private TaskanaEngineConfiguration taskanaEngineConfiguration;
|
|
||||||
@Mock private MonitorMapper monitorMapperMock;
|
|
||||||
@Mock private ClassificationService classificationService;
|
|
||||||
|
|
||||||
private Object[] mocks;
|
|
||||||
|
|
||||||
@BeforeEach
|
|
||||||
void setup() {
|
|
||||||
when(internalTaskanaEngineMock.getEngine()).thenReturn(taskanaEngineMock);
|
|
||||||
when(taskanaEngineMock.getClassificationService()).thenReturn(classificationService);
|
|
||||||
mocks =
|
|
||||||
new Object[] {
|
|
||||||
internalTaskanaEngineMock,
|
|
||||||
taskanaEngineMock,
|
|
||||||
monitorMapperMock,
|
|
||||||
taskanaEngineConfiguration,
|
|
||||||
classificationService
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testGetTotalNumbersOfClassificationReport() throws Exception {
|
|
||||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
|
||||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
|
||||||
final List<String> categories = List.of("EXTERN");
|
|
||||||
final List<String> domains = List.of("DOMAIN_A");
|
|
||||||
final List<String> classificationIds = List.of("L10000");
|
|
||||||
final List<String> excludedClassificationIds = List.of("L20000");
|
|
||||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
|
||||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
|
||||||
|
|
||||||
final List<MonitorQueryItem> expectedResult = new ArrayList<>();
|
|
||||||
MonitorQueryItem monitorQueryItem = new MonitorQueryItem();
|
|
||||||
monitorQueryItem.setKey("CLI:000000000000000000000000000000000001");
|
|
||||||
monitorQueryItem.setNumberOfTasks(1);
|
|
||||||
expectedResult.add(monitorQueryItem);
|
|
||||||
when(monitorMapperMock.getTaskCountOfClassifications(
|
|
||||||
any(),
|
|
||||||
eq(workbasketIds),
|
|
||||||
eq(states),
|
|
||||||
eq(categories),
|
|
||||||
eq(domains),
|
|
||||||
eq(TaskTimestamp.DUE),
|
|
||||||
eq(classificationIds),
|
|
||||||
eq(excludedClassificationIds),
|
|
||||||
eq(customAttributeFilter)))
|
|
||||||
.thenReturn(expectedResult);
|
|
||||||
|
|
||||||
ClassificationQuery queryMock = mock(ClassificationQuery.class);
|
|
||||||
when(classificationService.createClassificationQuery()).thenReturn(queryMock);
|
|
||||||
when(queryMock.keyIn(any())).thenReturn(queryMock);
|
|
||||||
when(queryMock.domainIn(any())).thenReturn(queryMock);
|
|
||||||
when(queryMock.list()).thenReturn(List.of());
|
|
||||||
|
|
||||||
final ClassificationReport actualResult =
|
|
||||||
cut.createClassificationReportBuilder()
|
|
||||||
.workbasketIdIn(workbasketIds)
|
|
||||||
.stateIn(states)
|
|
||||||
.classificationCategoryIn(categories)
|
|
||||||
.domainIn(domains)
|
|
||||||
.classificationIdIn(classificationIds)
|
|
||||||
.excludedClassificationIdIn(excludedClassificationIds)
|
|
||||||
.customAttributeFilterIn(customAttributeFilter)
|
|
||||||
.buildReport();
|
|
||||||
|
|
||||||
verify(internalTaskanaEngineMock).openConnection();
|
|
||||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
|
||||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
|
||||||
verify(taskanaEngineMock).getClassificationService();
|
|
||||||
verify(internalTaskanaEngineMock, times(3)).getEngine();
|
|
||||||
|
|
||||||
verify(monitorMapperMock)
|
|
||||||
.getTaskCountOfClassifications(
|
|
||||||
any(), any(), any(), any(), any(), any(), any(), any(), any());
|
|
||||||
verify(internalTaskanaEngineMock).returnConnection();
|
|
||||||
|
|
||||||
verifyNoMoreInteractions(queryMock);
|
|
||||||
verifyNoMoreInteractions(mocks);
|
|
||||||
|
|
||||||
assertThat(actualResult).isNotNull();
|
|
||||||
assertThat(actualResult.getRow("CLI:000000000000000000000000000000000001").getTotalValue())
|
|
||||||
.isEqualTo(1);
|
|
||||||
assertThat(actualResult.getSumRow().getTotalValue()).isOne();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testGetClassificationReportWithReportLineItemDefinitions() throws Exception {
|
|
||||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
|
||||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
|
||||||
final List<String> categories = List.of("EXTERN");
|
|
||||||
final List<String> domains = List.of("DOMAIN_A");
|
|
||||||
final List<String> classificationIds = List.of("L10000");
|
|
||||||
final List<String> excludedClassificationIds = List.of("L20000");
|
|
||||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
|
||||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
|
||||||
|
|
||||||
final List<TimeIntervalColumnHeader> columnHeaders =
|
|
||||||
List.of(new TimeIntervalColumnHeader(0, 0));
|
|
||||||
|
|
||||||
final List<MonitorQueryItem> expectedResult = new ArrayList<>();
|
|
||||||
MonitorQueryItem monitorQueryItem = new MonitorQueryItem();
|
|
||||||
monitorQueryItem.setKey("CLI:000000000000000000000000000000000001");
|
|
||||||
monitorQueryItem.setAgeInDays(0);
|
|
||||||
monitorQueryItem.setNumberOfTasks(1);
|
|
||||||
expectedResult.add(monitorQueryItem);
|
|
||||||
when(monitorMapperMock.getTaskCountOfClassifications(
|
|
||||||
any(),
|
|
||||||
eq(workbasketIds),
|
|
||||||
eq(states),
|
|
||||||
eq(categories),
|
|
||||||
eq(domains),
|
|
||||||
eq(TaskTimestamp.DUE),
|
|
||||||
eq(classificationIds),
|
|
||||||
eq(excludedClassificationIds),
|
|
||||||
eq(customAttributeFilter)))
|
|
||||||
.thenReturn(expectedResult);
|
|
||||||
ClassificationQuery queryMock = mock(ClassificationQuery.class);
|
|
||||||
when(classificationService.createClassificationQuery()).thenReturn(queryMock);
|
|
||||||
when(queryMock.keyIn(any())).thenReturn(queryMock);
|
|
||||||
when(queryMock.domainIn(any())).thenReturn(queryMock);
|
|
||||||
when(queryMock.list()).thenReturn(List.of());
|
|
||||||
|
|
||||||
final ClassificationReport actualResult =
|
|
||||||
cut.createClassificationReportBuilder()
|
|
||||||
.workbasketIdIn(workbasketIds)
|
|
||||||
.stateIn(states)
|
|
||||||
.classificationCategoryIn(categories)
|
|
||||||
.domainIn(domains)
|
|
||||||
.classificationIdIn(classificationIds)
|
|
||||||
.excludedClassificationIdIn(excludedClassificationIds)
|
|
||||||
.customAttributeFilterIn(customAttributeFilter)
|
|
||||||
.withColumnHeaders(columnHeaders)
|
|
||||||
.buildReport();
|
|
||||||
|
|
||||||
verify(internalTaskanaEngineMock).openConnection();
|
|
||||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
|
||||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
|
||||||
verify(taskanaEngineMock).getClassificationService();
|
|
||||||
verify(internalTaskanaEngineMock, times(3)).getEngine();
|
|
||||||
|
|
||||||
verify(monitorMapperMock)
|
|
||||||
.getTaskCountOfClassifications(
|
|
||||||
any(), any(), any(), any(), any(), any(), any(), any(), any());
|
|
||||||
verify(internalTaskanaEngineMock).returnConnection();
|
|
||||||
verifyNoMoreInteractions(queryMock);
|
|
||||||
verifyNoMoreInteractions(mocks);
|
|
||||||
|
|
||||||
assertThat(actualResult).isNotNull();
|
|
||||||
assertThat(actualResult.getRow("CLI:000000000000000000000000000000000001").getTotalValue())
|
|
||||||
.isOne();
|
|
||||||
assertThat(actualResult.getRow("CLI:000000000000000000000000000000000001").getCells())
|
|
||||||
.isEqualTo(new int[] {1});
|
|
||||||
assertThat(actualResult.getSumRow().getTotalValue()).isOne();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testGetTotalNumbersOfDetailedClassificationReport() throws Exception {
|
|
||||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
|
||||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
|
||||||
final List<String> categories = List.of("EXTERN");
|
|
||||||
final List<String> domains = List.of("DOMAIN_A");
|
|
||||||
final List<String> classificationIds = List.of("L10000");
|
|
||||||
final List<String> excludedClassificationIds = List.of("L20000");
|
|
||||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
|
||||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
|
||||||
|
|
||||||
final List<DetailedMonitorQueryItem> expectedResult = new ArrayList<>();
|
|
||||||
DetailedMonitorQueryItem detailedMonitorQueryItem = new DetailedMonitorQueryItem();
|
|
||||||
detailedMonitorQueryItem.setKey("CLI:000000000000000000000000000000000001");
|
|
||||||
detailedMonitorQueryItem.setAttachmentKey("CLI:000000000000000000000000000000000006");
|
|
||||||
detailedMonitorQueryItem.setNumberOfTasks(1);
|
|
||||||
expectedResult.add(detailedMonitorQueryItem);
|
|
||||||
when(monitorMapperMock.getTaskCountOfDetailedClassifications(
|
|
||||||
any(),
|
|
||||||
eq(workbasketIds),
|
|
||||||
eq(states),
|
|
||||||
eq(categories),
|
|
||||||
eq(domains),
|
|
||||||
eq(TaskTimestamp.DUE),
|
|
||||||
eq(classificationIds),
|
|
||||||
eq(excludedClassificationIds),
|
|
||||||
eq(customAttributeFilter)))
|
|
||||||
.thenReturn(expectedResult);
|
|
||||||
ClassificationQuery queryMock = mock(ClassificationQuery.class);
|
|
||||||
when(classificationService.createClassificationQuery()).thenReturn(queryMock);
|
|
||||||
when(queryMock.keyIn(any())).thenReturn(queryMock);
|
|
||||||
when(queryMock.domainIn(any())).thenReturn(queryMock);
|
|
||||||
when(queryMock.list()).thenReturn(List.of());
|
|
||||||
|
|
||||||
final DetailedClassificationReport actualResult =
|
|
||||||
cut.createClassificationReportBuilder()
|
|
||||||
.workbasketIdIn(workbasketIds)
|
|
||||||
.stateIn(states)
|
|
||||||
.classificationCategoryIn(categories)
|
|
||||||
.domainIn(domains)
|
|
||||||
.classificationIdIn(classificationIds)
|
|
||||||
.excludedClassificationIdIn(excludedClassificationIds)
|
|
||||||
.customAttributeFilterIn(customAttributeFilter)
|
|
||||||
.buildDetailedReport();
|
|
||||||
|
|
||||||
verify(internalTaskanaEngineMock).openConnection();
|
|
||||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
|
||||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
|
||||||
verify(taskanaEngineMock).getClassificationService();
|
|
||||||
verify(internalTaskanaEngineMock, times(3)).getEngine();
|
|
||||||
|
|
||||||
verify(monitorMapperMock)
|
|
||||||
.getTaskCountOfDetailedClassifications(
|
|
||||||
any(), any(), any(), any(), any(), any(), any(), any(), any());
|
|
||||||
verify(internalTaskanaEngineMock).returnConnection();
|
|
||||||
verifyNoMoreInteractions(queryMock);
|
|
||||||
verifyNoMoreInteractions(mocks);
|
|
||||||
|
|
||||||
FoldableRow<DetailedMonitorQueryItem> line =
|
|
||||||
actualResult.getRow("CLI:000000000000000000000000000000000001");
|
|
||||||
assertThat(actualResult).isNotNull();
|
|
||||||
assertThat(line.getTotalValue()).isOne();
|
|
||||||
assertThat(line.getFoldableRow("CLI:000000000000000000000000000000000006").getTotalValue())
|
|
||||||
.isOne();
|
|
||||||
assertThat(actualResult.getSumRow().getTotalValue()).isOne();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testGetDetailedClassificationReportWithReportLineItemDefinitions() throws Exception {
|
|
||||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
|
||||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
|
||||||
final List<String> categories = List.of("EXTERN");
|
|
||||||
final List<String> domains = List.of("DOMAIN_A");
|
|
||||||
final List<String> classificationIds = List.of("L10000");
|
|
||||||
final List<String> excludedClassificationIds = List.of("L20000");
|
|
||||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
|
||||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
|
||||||
final List<TimeIntervalColumnHeader> columnHeaders =
|
|
||||||
List.of(new TimeIntervalColumnHeader(0, 0));
|
|
||||||
|
|
||||||
final List<DetailedMonitorQueryItem> expectedResult = new ArrayList<>();
|
|
||||||
DetailedMonitorQueryItem detailedMonitorQueryItem = new DetailedMonitorQueryItem();
|
|
||||||
detailedMonitorQueryItem.setKey("CLI:000000000000000000000000000000000001");
|
|
||||||
detailedMonitorQueryItem.setAttachmentKey("CLI:000000000000000000000000000000000006");
|
|
||||||
detailedMonitorQueryItem.setAgeInDays(0);
|
|
||||||
detailedMonitorQueryItem.setNumberOfTasks(1);
|
|
||||||
expectedResult.add(detailedMonitorQueryItem);
|
|
||||||
when(monitorMapperMock.getTaskCountOfDetailedClassifications(
|
|
||||||
any(),
|
|
||||||
eq(workbasketIds),
|
|
||||||
eq(states),
|
|
||||||
eq(categories),
|
|
||||||
eq(domains),
|
|
||||||
eq(TaskTimestamp.DUE),
|
|
||||||
eq(classificationIds),
|
|
||||||
eq(excludedClassificationIds),
|
|
||||||
eq(customAttributeFilter)))
|
|
||||||
.thenReturn(expectedResult);
|
|
||||||
ClassificationQuery queryMock = mock(ClassificationQuery.class);
|
|
||||||
when(classificationService.createClassificationQuery()).thenReturn(queryMock);
|
|
||||||
when(queryMock.keyIn(any())).thenReturn(queryMock);
|
|
||||||
when(queryMock.domainIn(any())).thenReturn(queryMock);
|
|
||||||
when(queryMock.list()).thenReturn(List.of());
|
|
||||||
|
|
||||||
final DetailedClassificationReport actualResult =
|
|
||||||
cut.createClassificationReportBuilder()
|
|
||||||
.workbasketIdIn(workbasketIds)
|
|
||||||
.stateIn(states)
|
|
||||||
.classificationCategoryIn(categories)
|
|
||||||
.domainIn(domains)
|
|
||||||
.classificationIdIn(classificationIds)
|
|
||||||
.excludedClassificationIdIn(excludedClassificationIds)
|
|
||||||
.customAttributeFilterIn(customAttributeFilter)
|
|
||||||
.withColumnHeaders(columnHeaders)
|
|
||||||
.buildDetailedReport();
|
|
||||||
|
|
||||||
verify(internalTaskanaEngineMock).openConnection();
|
|
||||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
|
||||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
|
||||||
verify(taskanaEngineMock).getClassificationService();
|
|
||||||
verify(internalTaskanaEngineMock, times(3)).getEngine();
|
|
||||||
|
|
||||||
verify(monitorMapperMock)
|
|
||||||
.getTaskCountOfDetailedClassifications(
|
|
||||||
any(), any(), any(), any(), any(), any(), any(), any(), any());
|
|
||||||
verify(internalTaskanaEngineMock).returnConnection();
|
|
||||||
verifyNoMoreInteractions(queryMock);
|
|
||||||
verifyNoMoreInteractions(mocks);
|
|
||||||
|
|
||||||
FoldableRow<DetailedMonitorQueryItem> line =
|
|
||||||
actualResult.getRow("CLI:000000000000000000000000000000000001");
|
|
||||||
assertThat(actualResult).isNotNull();
|
|
||||||
assertThat(line.getTotalValue()).isOne();
|
|
||||||
assertThat(line.getFoldableRow("CLI:000000000000000000000000000000000006").getTotalValue())
|
|
||||||
.isOne();
|
|
||||||
assertThat(line.getCells()).isEqualTo(new int[] {1});
|
|
||||||
assertThat(line.getFoldableRow("CLI:000000000000000000000000000000000006").getCells())
|
|
||||||
.isEqualTo(new int[] {1});
|
|
||||||
assertThat(actualResult.getSumRow().getTotalValue()).isOne();
|
|
||||||
assertThat(actualResult.getSumRow().getCells()).isEqualTo(new int[] {1});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testGetTaskIdsForSelectedItems() throws Exception {
|
|
||||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
|
||||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
|
||||||
final List<String> categories = List.of("EXTERN");
|
|
||||||
final List<String> domains = List.of("DOMAIN_A");
|
|
||||||
final List<String> classificationIds = List.of("L10000");
|
|
||||||
final List<String> excludedClassificationIds = List.of("L20000");
|
|
||||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
|
||||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
|
||||||
final List<TimeIntervalColumnHeader> columnHeaders =
|
|
||||||
List.of(new TimeIntervalColumnHeader(0, 0));
|
|
||||||
|
|
||||||
final List<SelectedItem> selectedItems = List.of(new SelectedItem("EXTERN", null, 1, 5));
|
|
||||||
|
|
||||||
final List<String> expectedResult = List.of("TKI:000000000000000000000000000000000001");
|
|
||||||
when(monitorMapperMock.getTaskIdsForSelectedItems(
|
|
||||||
any(),
|
|
||||||
eq(workbasketIds),
|
|
||||||
eq(states),
|
|
||||||
eq(categories),
|
|
||||||
eq(domains),
|
|
||||||
eq(classificationIds),
|
|
||||||
eq(excludedClassificationIds),
|
|
||||||
eq(customAttributeFilter),
|
|
||||||
eq(null),
|
|
||||||
eq("CLASSIFICATION_KEY"),
|
|
||||||
eq(TaskTimestamp.DUE),
|
|
||||||
eq(selectedItems),
|
|
||||||
eq(false)))
|
|
||||||
.thenReturn(expectedResult);
|
|
||||||
|
|
||||||
final List<String> actualResult =
|
|
||||||
cut.createClassificationReportBuilder()
|
|
||||||
.workbasketIdIn(workbasketIds)
|
|
||||||
.stateIn(states)
|
|
||||||
.classificationCategoryIn(categories)
|
|
||||||
.domainIn(domains)
|
|
||||||
.classificationIdIn(classificationIds)
|
|
||||||
.excludedClassificationIdIn(excludedClassificationIds)
|
|
||||||
.customAttributeFilterIn(customAttributeFilter)
|
|
||||||
.withColumnHeaders(columnHeaders)
|
|
||||||
.listTaskIdsForSelectedItems(selectedItems, TaskTimestamp.DUE);
|
|
||||||
|
|
||||||
verify(internalTaskanaEngineMock).openConnection();
|
|
||||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
|
||||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
|
||||||
verify(internalTaskanaEngineMock, times(3)).getEngine();
|
|
||||||
|
|
||||||
verify(monitorMapperMock)
|
|
||||||
.getTaskIdsForSelectedItems(
|
|
||||||
any(),
|
|
||||||
any(),
|
|
||||||
any(),
|
|
||||||
any(),
|
|
||||||
any(),
|
|
||||||
any(),
|
|
||||||
any(),
|
|
||||||
any(),
|
|
||||||
any(),
|
|
||||||
any(),
|
|
||||||
eq(TaskTimestamp.DUE),
|
|
||||||
any(),
|
|
||||||
eq(false));
|
|
||||||
verify(internalTaskanaEngineMock).returnConnection();
|
|
||||||
verify(taskanaEngineMock).getClassificationService();
|
|
||||||
verifyNoMoreInteractions(mocks);
|
|
||||||
|
|
||||||
assertThat(actualResult).isEqualTo(expectedResult);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testGetTaskIdsForSelectedItemsIsEmptyResult() throws Exception {
|
|
||||||
List<SelectedItem> selectedItems = List.of(new SelectedItem("GIBTSNED", null, 0, 0));
|
|
||||||
List<String> result =
|
|
||||||
cut.createClassificationReportBuilder()
|
|
||||||
.workbasketIdIn(List.of("DieGibtsEhNed"))
|
|
||||||
.listTaskIdsForSelectedItems(selectedItems, TaskTimestamp.DUE);
|
|
||||||
assertThat(result).isNotNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testListCustomAttributeValuesForCustomAttributeName() throws Exception {
|
|
||||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
|
||||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
|
||||||
final List<String> categories = List.of("EXTERN");
|
|
||||||
final List<String> domains = List.of("DOMAIN_A");
|
|
||||||
final List<String> classificationIds = List.of("L10000");
|
|
||||||
final List<String> excludedClassificationIds = List.of("L20000");
|
|
||||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
|
||||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
|
||||||
final List<TimeIntervalColumnHeader> columnHeaders =
|
|
||||||
List.of(new TimeIntervalColumnHeader(0, 0));
|
|
||||||
|
|
||||||
final List<String> expectedResult = List.of("Geschaeftsstelle A");
|
|
||||||
when(monitorMapperMock.getCustomAttributeValuesForReport(
|
|
||||||
workbasketIds,
|
|
||||||
states,
|
|
||||||
categories,
|
|
||||||
domains,
|
|
||||||
classificationIds,
|
|
||||||
excludedClassificationIds,
|
|
||||||
customAttributeFilter,
|
|
||||||
null,
|
|
||||||
TaskCustomField.CUSTOM_1))
|
|
||||||
.thenReturn(expectedResult);
|
|
||||||
|
|
||||||
final List<String> actualResult =
|
|
||||||
cut.createClassificationReportBuilder()
|
|
||||||
.workbasketIdIn(workbasketIds)
|
|
||||||
.stateIn(states)
|
|
||||||
.classificationCategoryIn(categories)
|
|
||||||
.domainIn(domains)
|
|
||||||
.classificationIdIn(classificationIds)
|
|
||||||
.excludedClassificationIdIn(excludedClassificationIds)
|
|
||||||
.customAttributeFilterIn(customAttributeFilter)
|
|
||||||
.withColumnHeaders(columnHeaders)
|
|
||||||
.listCustomAttributeValuesForCustomAttributeName(TaskCustomField.CUSTOM_1);
|
|
||||||
|
|
||||||
verify(internalTaskanaEngineMock).openConnection();
|
|
||||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
|
||||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
|
||||||
verify(internalTaskanaEngineMock, times(3)).getEngine();
|
|
||||||
|
|
||||||
verify(monitorMapperMock)
|
|
||||||
.getCustomAttributeValuesForReport(
|
|
||||||
any(), any(), any(), any(), any(), any(), any(), any(), any());
|
|
||||||
verify(internalTaskanaEngineMock).returnConnection();
|
|
||||||
verify(taskanaEngineMock).getClassificationService();
|
|
||||||
verifyNoMoreInteractions(mocks);
|
|
||||||
|
|
||||||
assertThat(actualResult).isNotNull();
|
|
||||||
assertThat(actualResult).isEqualTo(expectedResult);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testListCustomAttributeValuesForCustomAttributeNameIsEmptyResult() throws Exception {
|
|
||||||
List<String> result =
|
|
||||||
cut.createClassificationReportBuilder()
|
|
||||||
.workbasketIdIn(List.of("DieGibtsGarantiertNed"))
|
|
||||||
.listCustomAttributeValuesForCustomAttributeName(TaskCustomField.CUSTOM_10);
|
|
||||||
assertThat(result).isNotNull();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,228 +0,0 @@
|
||||||
package pro.taskana.monitor.internal;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
|
||||||
import static org.mockito.Mockito.times;
|
|
||||||
import static org.mockito.Mockito.verify;
|
|
||||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
|
||||||
import org.mockito.InjectMocks;
|
|
||||||
import org.mockito.Mock;
|
|
||||||
import org.mockito.junit.jupiter.MockitoExtension;
|
|
||||||
|
|
||||||
import pro.taskana.TaskanaEngineConfiguration;
|
|
||||||
import pro.taskana.common.api.TaskanaEngine;
|
|
||||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
|
||||||
import pro.taskana.monitor.api.TaskTimestamp;
|
|
||||||
import pro.taskana.monitor.api.reports.TaskCustomFieldValueReport;
|
|
||||||
import pro.taskana.monitor.api.reports.header.TimeIntervalColumnHeader;
|
|
||||||
import pro.taskana.monitor.api.reports.item.MonitorQueryItem;
|
|
||||||
import pro.taskana.task.api.TaskCustomField;
|
|
||||||
import pro.taskana.task.api.TaskState;
|
|
||||||
|
|
||||||
/** Unit Test for CustomFieldValueReportBuilderImpl. */
|
|
||||||
@ExtendWith(MockitoExtension.class)
|
|
||||||
class TaskCustomFieldValueReportBuilderImplTest {
|
|
||||||
|
|
||||||
@InjectMocks private MonitorServiceImpl cut;
|
|
||||||
|
|
||||||
@Mock private InternalTaskanaEngine internalTaskanaEngineMock;
|
|
||||||
|
|
||||||
@Mock private TaskanaEngine taskanaEngineMock;
|
|
||||||
|
|
||||||
@Mock private TaskanaEngineConfiguration taskanaEngineConfigurationMock;
|
|
||||||
|
|
||||||
@Mock private MonitorMapper monitorMapperMock;
|
|
||||||
|
|
||||||
@BeforeEach
|
|
||||||
void setup() {
|
|
||||||
when(internalTaskanaEngineMock.getEngine()).thenReturn(taskanaEngineMock);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testGetTotalNumbersOfCustomFieldValueReport() throws Exception {
|
|
||||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
|
||||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
|
||||||
final List<String> categories = List.of("EXTERN");
|
|
||||||
final List<String> domains = List.of("DOMAIN_A");
|
|
||||||
final List<String> classificationIds = List.of("L10000");
|
|
||||||
final List<String> excludedClassificationIds = List.of("L20000");
|
|
||||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
|
||||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
|
||||||
|
|
||||||
final List<MonitorQueryItem> expectedResult = new ArrayList<>();
|
|
||||||
MonitorQueryItem monitorQueryItem = new MonitorQueryItem();
|
|
||||||
monitorQueryItem.setKey("Geschaeftsstelle A");
|
|
||||||
monitorQueryItem.setNumberOfTasks(1);
|
|
||||||
expectedResult.add(monitorQueryItem);
|
|
||||||
when(monitorMapperMock.getTaskCountOfTaskCustomFieldValues(
|
|
||||||
any(),
|
|
||||||
eq(TaskCustomField.CUSTOM_1),
|
|
||||||
eq(workbasketIds),
|
|
||||||
eq(states),
|
|
||||||
eq(categories),
|
|
||||||
eq(domains),
|
|
||||||
eq(TaskTimestamp.DUE),
|
|
||||||
eq(classificationIds),
|
|
||||||
eq(excludedClassificationIds),
|
|
||||||
eq(customAttributeFilter)))
|
|
||||||
.thenReturn(expectedResult);
|
|
||||||
|
|
||||||
final TaskCustomFieldValueReport actualResult =
|
|
||||||
cut.createTaskCustomFieldValueReportBuilder(TaskCustomField.CUSTOM_1)
|
|
||||||
.workbasketIdIn(workbasketIds)
|
|
||||||
.stateIn(states)
|
|
||||||
.classificationCategoryIn(categories)
|
|
||||||
.domainIn(domains)
|
|
||||||
.classificationIdIn(classificationIds)
|
|
||||||
.excludedClassificationIdIn(excludedClassificationIds)
|
|
||||||
.customAttributeFilterIn(customAttributeFilter)
|
|
||||||
.buildReport();
|
|
||||||
|
|
||||||
verify(internalTaskanaEngineMock).openConnection();
|
|
||||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
|
||||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
|
||||||
verify(internalTaskanaEngineMock, times(2)).getEngine();
|
|
||||||
verify(monitorMapperMock)
|
|
||||||
.getTaskCountOfTaskCustomFieldValues(
|
|
||||||
any(), any(), any(), any(), any(), any(), any(), any(), any(), any());
|
|
||||||
verify(internalTaskanaEngineMock).returnConnection();
|
|
||||||
verifyNoMoreInteractions(
|
|
||||||
internalTaskanaEngineMock,
|
|
||||||
taskanaEngineMock,
|
|
||||||
monitorMapperMock,
|
|
||||||
taskanaEngineConfigurationMock);
|
|
||||||
|
|
||||||
assertThat(actualResult).isNotNull();
|
|
||||||
assertThat(actualResult.getRow("Geschaeftsstelle A").getTotalValue()).isOne();
|
|
||||||
assertThat(actualResult.getSumRow().getTotalValue()).isOne();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testGetCustomFieldValueReportWithReportLineItemDefinitions() throws Exception {
|
|
||||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
|
||||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
|
||||||
final List<String> categories = List.of("EXTERN");
|
|
||||||
final List<String> domains = List.of("DOMAIN_A");
|
|
||||||
final List<String> classificationIds = List.of("L10000");
|
|
||||||
final List<String> excludedClassificationIds = List.of("L20000");
|
|
||||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
|
||||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
|
||||||
final List<TimeIntervalColumnHeader> columnHeaders =
|
|
||||||
List.of(new TimeIntervalColumnHeader(0, 0));
|
|
||||||
|
|
||||||
final List<MonitorQueryItem> expectedResult = new ArrayList<>();
|
|
||||||
MonitorQueryItem monitorQueryItem = new MonitorQueryItem();
|
|
||||||
monitorQueryItem.setKey("Geschaeftsstelle A");
|
|
||||||
monitorQueryItem.setAgeInDays(0);
|
|
||||||
monitorQueryItem.setNumberOfTasks(1);
|
|
||||||
expectedResult.add(monitorQueryItem);
|
|
||||||
when(monitorMapperMock.getTaskCountOfTaskCustomFieldValues(
|
|
||||||
any(),
|
|
||||||
eq(TaskCustomField.CUSTOM_1),
|
|
||||||
eq(workbasketIds),
|
|
||||||
eq(states),
|
|
||||||
eq(categories),
|
|
||||||
eq(domains),
|
|
||||||
eq(TaskTimestamp.DUE),
|
|
||||||
eq(classificationIds),
|
|
||||||
eq(excludedClassificationIds),
|
|
||||||
eq(customAttributeFilter)))
|
|
||||||
.thenReturn(expectedResult);
|
|
||||||
|
|
||||||
final TaskCustomFieldValueReport actualResult =
|
|
||||||
cut.createTaskCustomFieldValueReportBuilder(TaskCustomField.CUSTOM_1)
|
|
||||||
.workbasketIdIn(workbasketIds)
|
|
||||||
.stateIn(states)
|
|
||||||
.classificationCategoryIn(categories)
|
|
||||||
.domainIn(domains)
|
|
||||||
.classificationIdIn(classificationIds)
|
|
||||||
.excludedClassificationIdIn(excludedClassificationIds)
|
|
||||||
.customAttributeFilterIn(customAttributeFilter)
|
|
||||||
.withColumnHeaders(columnHeaders)
|
|
||||||
.buildReport();
|
|
||||||
|
|
||||||
verify(internalTaskanaEngineMock).openConnection();
|
|
||||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
|
||||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
|
||||||
verify(internalTaskanaEngineMock, times(2)).getEngine();
|
|
||||||
verify(monitorMapperMock)
|
|
||||||
.getTaskCountOfTaskCustomFieldValues(
|
|
||||||
any(), any(), any(), any(), any(), any(), any(), any(), any(), any());
|
|
||||||
verify(internalTaskanaEngineMock).returnConnection();
|
|
||||||
verifyNoMoreInteractions(
|
|
||||||
internalTaskanaEngineMock,
|
|
||||||
taskanaEngineMock,
|
|
||||||
monitorMapperMock,
|
|
||||||
taskanaEngineConfigurationMock);
|
|
||||||
|
|
||||||
assertThat(actualResult).isNotNull();
|
|
||||||
assertThat(actualResult.getRow("Geschaeftsstelle A").getTotalValue()).isOne();
|
|
||||||
assertThat(actualResult.getRow("Geschaeftsstelle A").getCells()[0]).isOne();
|
|
||||||
assertThat(actualResult.getSumRow().getTotalValue()).isOne();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testListCustomAttributeValuesForCustomAttributeName() throws Exception {
|
|
||||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
|
||||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
|
||||||
final List<String> categories = List.of("EXTERN");
|
|
||||||
final List<String> domains = List.of("DOMAIN_A");
|
|
||||||
final List<String> classificationIds = List.of("L10000");
|
|
||||||
final List<String> excludedClassificationIds = List.of("L20000");
|
|
||||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
|
||||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
|
||||||
final List<TimeIntervalColumnHeader> columnHeaders =
|
|
||||||
List.of(new TimeIntervalColumnHeader(0, 0));
|
|
||||||
|
|
||||||
List<String> expectedResult = List.of("Geschaeftsstelle A");
|
|
||||||
when(monitorMapperMock.getCustomAttributeValuesForReport(
|
|
||||||
workbasketIds,
|
|
||||||
states,
|
|
||||||
categories,
|
|
||||||
domains,
|
|
||||||
classificationIds,
|
|
||||||
excludedClassificationIds,
|
|
||||||
customAttributeFilter,
|
|
||||||
null,
|
|
||||||
TaskCustomField.CUSTOM_1))
|
|
||||||
.thenReturn(expectedResult);
|
|
||||||
|
|
||||||
final List<String> actualResult =
|
|
||||||
cut.createTaskCustomFieldValueReportBuilder(TaskCustomField.CUSTOM_1)
|
|
||||||
.workbasketIdIn(workbasketIds)
|
|
||||||
.stateIn(states)
|
|
||||||
.classificationCategoryIn(categories)
|
|
||||||
.domainIn(domains)
|
|
||||||
.classificationIdIn(classificationIds)
|
|
||||||
.excludedClassificationIdIn(excludedClassificationIds)
|
|
||||||
.customAttributeFilterIn(customAttributeFilter)
|
|
||||||
.withColumnHeaders(columnHeaders)
|
|
||||||
.listCustomAttributeValuesForCustomAttributeName(TaskCustomField.CUSTOM_1);
|
|
||||||
|
|
||||||
verify(internalTaskanaEngineMock).openConnection();
|
|
||||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
|
||||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
|
||||||
verify(internalTaskanaEngineMock, times(2)).getEngine();
|
|
||||||
verify(monitorMapperMock)
|
|
||||||
.getCustomAttributeValuesForReport(
|
|
||||||
any(), any(), any(), any(), any(), any(), any(), any(), any());
|
|
||||||
verify(internalTaskanaEngineMock).returnConnection();
|
|
||||||
verifyNoMoreInteractions(
|
|
||||||
internalTaskanaEngineMock,
|
|
||||||
taskanaEngineMock,
|
|
||||||
monitorMapperMock,
|
|
||||||
taskanaEngineConfigurationMock);
|
|
||||||
|
|
||||||
assertThat(actualResult).isEqualTo(expectedResult);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,129 +0,0 @@
|
||||||
package pro.taskana.monitor.internal;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
|
||||||
import static org.mockito.Mockito.inOrder;
|
|
||||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
|
||||||
import org.mockito.InOrder;
|
|
||||||
import org.mockito.InjectMocks;
|
|
||||||
import org.mockito.Mock;
|
|
||||||
import org.mockito.junit.jupiter.MockitoExtension;
|
|
||||||
|
|
||||||
import pro.taskana.common.api.TaskanaEngine;
|
|
||||||
import pro.taskana.common.api.TaskanaRole;
|
|
||||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
|
||||||
import pro.taskana.monitor.api.reports.TaskStatusReport;
|
|
||||||
import pro.taskana.monitor.api.reports.item.TaskQueryItem;
|
|
||||||
import pro.taskana.task.api.TaskState;
|
|
||||||
import pro.taskana.workbasket.api.WorkbasketService;
|
|
||||||
|
|
||||||
/** Unit Test for TaskStatusReportBuilderImpl. */
|
|
||||||
@ExtendWith(MockitoExtension.class)
|
|
||||||
class TaskStatusReportBuilderImplTest {
|
|
||||||
|
|
||||||
@InjectMocks private MonitorServiceImpl cut;
|
|
||||||
|
|
||||||
@Mock private InternalTaskanaEngine internalTaskanaEngineMock;
|
|
||||||
|
|
||||||
@Mock private TaskanaEngine taskanaEngineMock;
|
|
||||||
|
|
||||||
@Mock private MonitorMapper monitorMapperMock;
|
|
||||||
|
|
||||||
@Mock private WorkbasketService workbasketService;
|
|
||||||
|
|
||||||
private Object[] mocks;
|
|
||||||
|
|
||||||
@BeforeEach
|
|
||||||
void setup() {
|
|
||||||
when(internalTaskanaEngineMock.getEngine()).thenReturn(taskanaEngineMock);
|
|
||||||
when(taskanaEngineMock.getWorkbasketService()).thenReturn(workbasketService);
|
|
||||||
mocks =
|
|
||||||
new Object[] {
|
|
||||||
internalTaskanaEngineMock, taskanaEngineMock, monitorMapperMock, workbasketService
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testGetTaskStateReportWithoutFilters() throws Exception {
|
|
||||||
// given
|
|
||||||
TaskQueryItem queryItem1 = new TaskQueryItem();
|
|
||||||
queryItem1.setCount(50);
|
|
||||||
queryItem1.setState(TaskState.READY);
|
|
||||||
queryItem1.setWorkbasketKey("KEY_1");
|
|
||||||
TaskQueryItem queryItem2 = new TaskQueryItem();
|
|
||||||
queryItem2.setCount(30);
|
|
||||||
queryItem2.setState(TaskState.COMPLETED);
|
|
||||||
queryItem2.setWorkbasketKey("KEY_1");
|
|
||||||
List<TaskQueryItem> queryItems = List.of(queryItem1, queryItem2);
|
|
||||||
when(monitorMapperMock.getTasksCountByState(null, null, null)).thenReturn(queryItems);
|
|
||||||
when(internalTaskanaEngineMock.runAsAdmin(any())).thenReturn(Map.of());
|
|
||||||
|
|
||||||
// when
|
|
||||||
final TaskStatusReport report = cut.createTaskStatusReportBuilder().buildReport();
|
|
||||||
|
|
||||||
// then
|
|
||||||
InOrder inOrder = inOrder(mocks);
|
|
||||||
inOrder.verify(internalTaskanaEngineMock).getEngine();
|
|
||||||
inOrder.verify(taskanaEngineMock).checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN);
|
|
||||||
inOrder.verify(internalTaskanaEngineMock).openConnection();
|
|
||||||
inOrder.verify(monitorMapperMock).getTasksCountByState(eq(null), eq(null), eq(null));
|
|
||||||
inOrder.verify(internalTaskanaEngineMock).runAsAdmin(any());
|
|
||||||
inOrder.verify(internalTaskanaEngineMock).returnConnection();
|
|
||||||
inOrder.verifyNoMoreInteractions();
|
|
||||||
verifyNoMoreInteractions(mocks);
|
|
||||||
|
|
||||||
assertThat(report).isNotNull();
|
|
||||||
assertThat(report.rowSize()).isEqualTo(1);
|
|
||||||
assertThat(report.getRow("KEY_1").getCells()).isEqualTo(new int[] {50, 0, 30, 0, 0});
|
|
||||||
assertThat(report.getSumRow().getCells()).isEqualTo(new int[] {50, 0, 30, 0, 0});
|
|
||||||
assertThat(report.getRow("KEY_1").getTotalValue()).isEqualTo(80);
|
|
||||||
assertThat(report.getSumRow().getTotalValue()).isEqualTo(80);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testGetTotalNumberOfTaskStateReport() throws Exception {
|
|
||||||
// given
|
|
||||||
TaskQueryItem queryItem1 = new TaskQueryItem();
|
|
||||||
queryItem1.setCount(50);
|
|
||||||
queryItem1.setState(TaskState.READY);
|
|
||||||
queryItem1.setWorkbasketKey("KEY_1");
|
|
||||||
TaskQueryItem queryItem2 = new TaskQueryItem();
|
|
||||||
queryItem2.setCount(30);
|
|
||||||
queryItem2.setState(TaskState.COMPLETED);
|
|
||||||
queryItem2.setWorkbasketKey("KEY_1");
|
|
||||||
List<TaskQueryItem> queryItems = List.of(queryItem1, queryItem2);
|
|
||||||
when(monitorMapperMock.getTasksCountByState(eq(null), eq(List.of()), eq(null)))
|
|
||||||
.thenReturn(queryItems);
|
|
||||||
when(internalTaskanaEngineMock.runAsAdmin(any())).thenReturn(Map.of());
|
|
||||||
|
|
||||||
// when
|
|
||||||
final TaskStatusReport report =
|
|
||||||
cut.createTaskStatusReportBuilder().stateIn(List.of()).buildReport();
|
|
||||||
|
|
||||||
// then
|
|
||||||
InOrder inOrder = inOrder(mocks);
|
|
||||||
inOrder.verify(internalTaskanaEngineMock).getEngine();
|
|
||||||
inOrder.verify(taskanaEngineMock).checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN);
|
|
||||||
inOrder.verify(internalTaskanaEngineMock).openConnection();
|
|
||||||
inOrder.verify(monitorMapperMock).getTasksCountByState(eq(null), eq(List.of()), eq(null));
|
|
||||||
inOrder.verify(internalTaskanaEngineMock).runAsAdmin(any());
|
|
||||||
inOrder.verify(internalTaskanaEngineMock).returnConnection();
|
|
||||||
inOrder.verifyNoMoreInteractions();
|
|
||||||
verifyNoMoreInteractions(mocks);
|
|
||||||
|
|
||||||
assertThat(report).isNotNull();
|
|
||||||
assertThat(report.rowSize()).isEqualTo(1);
|
|
||||||
assertThat(report.getRow("KEY_1").getCells()).isEqualTo(new int[0]);
|
|
||||||
assertThat(report.getSumRow().getCells()).isEqualTo(new int[0]);
|
|
||||||
assertThat(report.getRow("KEY_1").getTotalValue()).isEqualTo(80);
|
|
||||||
assertThat(report.getSumRow().getTotalValue()).isEqualTo(80);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,409 +0,0 @@
|
||||||
package pro.taskana.monitor.internal;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
|
||||||
import static org.mockito.Mockito.times;
|
|
||||||
import static org.mockito.Mockito.verify;
|
|
||||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import org.assertj.core.api.ThrowableAssert.ThrowingCallable;
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
|
||||||
import org.mockito.InjectMocks;
|
|
||||||
import org.mockito.Mock;
|
|
||||||
import org.mockito.junit.jupiter.MockitoExtension;
|
|
||||||
|
|
||||||
import pro.taskana.common.api.TaskanaEngine;
|
|
||||||
import pro.taskana.common.api.TaskanaRole;
|
|
||||||
import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
|
||||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
|
||||||
import pro.taskana.monitor.api.CombinedClassificationFilter;
|
|
||||||
import pro.taskana.monitor.api.SelectedItem;
|
|
||||||
import pro.taskana.monitor.api.TaskTimestamp;
|
|
||||||
import pro.taskana.monitor.api.reports.WorkbasketReport;
|
|
||||||
import pro.taskana.monitor.api.reports.header.TimeIntervalColumnHeader;
|
|
||||||
import pro.taskana.monitor.api.reports.item.MonitorQueryItem;
|
|
||||||
import pro.taskana.task.api.TaskCustomField;
|
|
||||||
import pro.taskana.task.api.TaskState;
|
|
||||||
|
|
||||||
/** Unit Test for WorkbasketReportBuilderImpl. */
|
|
||||||
@ExtendWith(MockitoExtension.class)
|
|
||||||
class WorkbasketReportBuilderImplTest {
|
|
||||||
|
|
||||||
@InjectMocks private MonitorServiceImpl cut;
|
|
||||||
|
|
||||||
@Mock private InternalTaskanaEngine internalTaskanaEngineMock;
|
|
||||||
|
|
||||||
@Mock private TaskanaEngine taskanaEngineMock;
|
|
||||||
|
|
||||||
@Mock private MonitorMapper monitorMapperMock;
|
|
||||||
|
|
||||||
@BeforeEach
|
|
||||||
void setup() {
|
|
||||||
when(internalTaskanaEngineMock.getEngine()).thenReturn(taskanaEngineMock);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testGetTotalNumbersOfWorkbasketReportBasedOnDueDate() throws Exception {
|
|
||||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
|
||||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
|
||||||
final List<String> categories = List.of("EXTERN");
|
|
||||||
final List<String> domains = List.of("DOMAIN_A");
|
|
||||||
final List<String> classificationIds = List.of("L10000");
|
|
||||||
final List<String> excludedClassificationIds = List.of("L20000");
|
|
||||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
|
||||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
|
||||||
final List<CombinedClassificationFilter> combinedClassificationFilter =
|
|
||||||
List.of(
|
|
||||||
new CombinedClassificationFilter(
|
|
||||||
"CLI:000000000000000000000000000000000003",
|
|
||||||
"CLI:000000000000000000000000000000000008"));
|
|
||||||
|
|
||||||
List<MonitorQueryItem> expectedResult = new ArrayList<>();
|
|
||||||
MonitorQueryItem monitorQueryItem = new MonitorQueryItem();
|
|
||||||
monitorQueryItem.setKey("WBI:000000000000000000000000000000000001");
|
|
||||||
monitorQueryItem.setNumberOfTasks(1);
|
|
||||||
expectedResult.add(monitorQueryItem);
|
|
||||||
when(monitorMapperMock.getTaskCountOfWorkbaskets(
|
|
||||||
any(),
|
|
||||||
eq(workbasketIds),
|
|
||||||
eq(states),
|
|
||||||
eq(categories),
|
|
||||||
eq(domains),
|
|
||||||
eq(TaskTimestamp.DUE),
|
|
||||||
eq(classificationIds),
|
|
||||||
eq(excludedClassificationIds),
|
|
||||||
eq(customAttributeFilter),
|
|
||||||
eq(combinedClassificationFilter)))
|
|
||||||
.thenReturn(expectedResult);
|
|
||||||
when(internalTaskanaEngineMock.runAsAdmin(any())).thenReturn(Map.of());
|
|
||||||
|
|
||||||
final WorkbasketReport actualResult =
|
|
||||||
cut.createWorkbasketReportBuilder()
|
|
||||||
.workbasketIdIn(workbasketIds)
|
|
||||||
.stateIn(states)
|
|
||||||
.classificationCategoryIn(categories)
|
|
||||||
.domainIn(domains)
|
|
||||||
.classificationIdIn(classificationIds)
|
|
||||||
.excludedClassificationIdIn(excludedClassificationIds)
|
|
||||||
.customAttributeFilterIn(customAttributeFilter)
|
|
||||||
.combinedClassificationFilterIn(combinedClassificationFilter)
|
|
||||||
.buildReport();
|
|
||||||
|
|
||||||
verify(internalTaskanaEngineMock).openConnection();
|
|
||||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
|
||||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
|
||||||
verify(internalTaskanaEngineMock, times(3)).getEngine();
|
|
||||||
verify(monitorMapperMock)
|
|
||||||
.getTaskCountOfWorkbaskets(
|
|
||||||
any(), any(), any(), any(), any(), any(), any(), any(), any(), any());
|
|
||||||
verify(internalTaskanaEngineMock).returnConnection();
|
|
||||||
verify(internalTaskanaEngineMock).runAsAdmin(any());
|
|
||||||
verify(taskanaEngineMock).getWorkbasketService();
|
|
||||||
verifyNoMoreInteractions(internalTaskanaEngineMock, taskanaEngineMock, monitorMapperMock);
|
|
||||||
|
|
||||||
assertThat(actualResult).isNotNull();
|
|
||||||
assertThat(actualResult.getRow("WBI:000000000000000000000000000000000001").getTotalValue())
|
|
||||||
.isOne();
|
|
||||||
assertThat(actualResult.getSumRow().getTotalValue()).isOne();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testGetWorkbasketReportWithReportLineItemDefinitions() throws Exception {
|
|
||||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
|
||||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
|
||||||
final List<String> categories = List.of("EXTERN");
|
|
||||||
final List<String> domains = List.of("DOMAIN_A");
|
|
||||||
final List<String> classificationIds = List.of("L10000");
|
|
||||||
final List<String> excludedClassificationIds = List.of("L20000");
|
|
||||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
|
||||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
|
||||||
final List<CombinedClassificationFilter> combinedClassificationFilter =
|
|
||||||
List.of(
|
|
||||||
new CombinedClassificationFilter(
|
|
||||||
"CLI:000000000000000000000000000000000003",
|
|
||||||
"CLI:000000000000000000000000000000000008"));
|
|
||||||
final List<TimeIntervalColumnHeader> columnHeaders =
|
|
||||||
List.of(new TimeIntervalColumnHeader(0, 0));
|
|
||||||
|
|
||||||
final List<MonitorQueryItem> expectedResult = new ArrayList<>();
|
|
||||||
MonitorQueryItem monitorQueryItem = new MonitorQueryItem();
|
|
||||||
monitorQueryItem.setKey("WBI:000000000000000000000000000000000001");
|
|
||||||
monitorQueryItem.setAgeInDays(0);
|
|
||||||
monitorQueryItem.setNumberOfTasks(1);
|
|
||||||
expectedResult.add(monitorQueryItem);
|
|
||||||
when(monitorMapperMock.getTaskCountOfWorkbaskets(
|
|
||||||
any(),
|
|
||||||
eq(workbasketIds),
|
|
||||||
eq(states),
|
|
||||||
eq(categories),
|
|
||||||
eq(domains),
|
|
||||||
eq(TaskTimestamp.DUE),
|
|
||||||
eq(classificationIds),
|
|
||||||
eq(excludedClassificationIds),
|
|
||||||
eq(customAttributeFilter),
|
|
||||||
eq(combinedClassificationFilter)))
|
|
||||||
.thenReturn(expectedResult);
|
|
||||||
when(internalTaskanaEngineMock.runAsAdmin(any())).thenReturn(Map.of());
|
|
||||||
|
|
||||||
final WorkbasketReport actualResult =
|
|
||||||
cut.createWorkbasketReportBuilder()
|
|
||||||
.workbasketIdIn(workbasketIds)
|
|
||||||
.stateIn(states)
|
|
||||||
.classificationCategoryIn(categories)
|
|
||||||
.domainIn(domains)
|
|
||||||
.classificationIdIn(classificationIds)
|
|
||||||
.excludedClassificationIdIn(excludedClassificationIds)
|
|
||||||
.customAttributeFilterIn(customAttributeFilter)
|
|
||||||
.combinedClassificationFilterIn(combinedClassificationFilter)
|
|
||||||
.withColumnHeaders(columnHeaders)
|
|
||||||
.buildReport();
|
|
||||||
|
|
||||||
verify(internalTaskanaEngineMock).openConnection();
|
|
||||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
|
||||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
|
||||||
verify(internalTaskanaEngineMock, times(3)).getEngine();
|
|
||||||
verify(monitorMapperMock)
|
|
||||||
.getTaskCountOfWorkbaskets(
|
|
||||||
any(), any(), any(), any(), any(), any(), any(), any(), any(), any());
|
|
||||||
verify(internalTaskanaEngineMock).returnConnection();
|
|
||||||
verify(taskanaEngineMock).getWorkbasketService();
|
|
||||||
verifyNoMoreInteractions(internalTaskanaEngineMock, taskanaEngineMock, monitorMapperMock);
|
|
||||||
|
|
||||||
assertThat(actualResult).isNotNull();
|
|
||||||
assertThat(actualResult.getRow("WBI:000000000000000000000000000000000001").getTotalValue())
|
|
||||||
.isEqualTo(1);
|
|
||||||
assertThat(actualResult.getRow("WBI:000000000000000000000000000000000001").getCells()[0])
|
|
||||||
.isEqualTo(1);
|
|
||||||
assertThat(actualResult.getSumRow().getTotalValue()).isEqualTo(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testGetTaskIdsOfCategoryReportForSelectedItems() throws Exception {
|
|
||||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
|
||||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
|
||||||
final List<String> categories = List.of("EXTERN");
|
|
||||||
final List<String> domains = List.of("DOMAIN_A");
|
|
||||||
final List<String> classificationIds = List.of("L10000");
|
|
||||||
final List<String> excludedClassificationIds = List.of("L20000");
|
|
||||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
|
||||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
|
||||||
final List<TimeIntervalColumnHeader> columnHeaders =
|
|
||||||
List.of(new TimeIntervalColumnHeader(0, 0));
|
|
||||||
|
|
||||||
List<SelectedItem> selectedItems = List.of(new SelectedItem("EXTERN", null, 1, 5));
|
|
||||||
|
|
||||||
List<String> expectedResult = List.of("TKI:000000000000000000000000000000000001");
|
|
||||||
when(monitorMapperMock.getTaskIdsForSelectedItems(
|
|
||||||
any(),
|
|
||||||
eq(workbasketIds),
|
|
||||||
eq(states),
|
|
||||||
eq(categories),
|
|
||||||
eq(domains),
|
|
||||||
eq(classificationIds),
|
|
||||||
eq(excludedClassificationIds),
|
|
||||||
eq(customAttributeFilter),
|
|
||||||
eq(null),
|
|
||||||
eq("WORKBASKET_KEY"),
|
|
||||||
eq(TaskTimestamp.DUE),
|
|
||||||
eq(selectedItems),
|
|
||||||
eq(false)))
|
|
||||||
.thenReturn(expectedResult);
|
|
||||||
|
|
||||||
final List<String> actualResult =
|
|
||||||
cut.createWorkbasketReportBuilder()
|
|
||||||
.workbasketIdIn(workbasketIds)
|
|
||||||
.stateIn(states)
|
|
||||||
.classificationCategoryIn(categories)
|
|
||||||
.domainIn(domains)
|
|
||||||
.classificationIdIn(classificationIds)
|
|
||||||
.excludedClassificationIdIn(excludedClassificationIds)
|
|
||||||
.customAttributeFilterIn(customAttributeFilter)
|
|
||||||
.withColumnHeaders(columnHeaders)
|
|
||||||
.listTaskIdsForSelectedItems(selectedItems, TaskTimestamp.DUE);
|
|
||||||
|
|
||||||
verify(internalTaskanaEngineMock).openConnection();
|
|
||||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
|
||||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
|
||||||
verify(internalTaskanaEngineMock, times(3)).getEngine();
|
|
||||||
verify(monitorMapperMock)
|
|
||||||
.getTaskIdsForSelectedItems(
|
|
||||||
any(),
|
|
||||||
any(),
|
|
||||||
any(),
|
|
||||||
any(),
|
|
||||||
any(),
|
|
||||||
any(),
|
|
||||||
any(),
|
|
||||||
any(),
|
|
||||||
any(),
|
|
||||||
any(),
|
|
||||||
eq(TaskTimestamp.DUE),
|
|
||||||
any(),
|
|
||||||
eq(false));
|
|
||||||
verify(internalTaskanaEngineMock).returnConnection();
|
|
||||||
verify(taskanaEngineMock).getWorkbasketService();
|
|
||||||
verifyNoMoreInteractions(internalTaskanaEngineMock, taskanaEngineMock, monitorMapperMock);
|
|
||||||
|
|
||||||
assertThat(actualResult).isNotNull();
|
|
||||||
assertThat(actualResult).isEqualTo(expectedResult);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testListTaskIdsForSelectedItemsIsEmptyResult() {
|
|
||||||
List<SelectedItem> selectedItems = new ArrayList<>();
|
|
||||||
ThrowingCallable call =
|
|
||||||
() -> {
|
|
||||||
List<String> result =
|
|
||||||
cut.createWorkbasketReportBuilder()
|
|
||||||
.workbasketIdIn(List.of("DieGibtsGarantiertNed"))
|
|
||||||
.listTaskIdsForSelectedItems(selectedItems, TaskTimestamp.DUE);
|
|
||||||
assertThat(result).isNotNull();
|
|
||||||
};
|
|
||||||
assertThatThrownBy(call).isInstanceOf(InvalidArgumentException.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testListCustomAttributeValuesForCustomAttributeName() throws Exception {
|
|
||||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
|
||||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
|
||||||
final List<String> categories = List.of("EXTERN");
|
|
||||||
final List<String> domains = List.of("DOMAIN_A");
|
|
||||||
final List<String> classificationIds = List.of("L10000");
|
|
||||||
final List<String> excludedClassificationIds = List.of("L20000");
|
|
||||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
|
||||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
|
||||||
final List<TimeIntervalColumnHeader> columnHeaders =
|
|
||||||
List.of(new TimeIntervalColumnHeader(0, 0));
|
|
||||||
|
|
||||||
List<String> expectedResult = List.of("Geschaeftsstelle A");
|
|
||||||
when(monitorMapperMock.getCustomAttributeValuesForReport(
|
|
||||||
workbasketIds,
|
|
||||||
states,
|
|
||||||
categories,
|
|
||||||
domains,
|
|
||||||
classificationIds,
|
|
||||||
excludedClassificationIds,
|
|
||||||
customAttributeFilter,
|
|
||||||
null,
|
|
||||||
TaskCustomField.CUSTOM_1))
|
|
||||||
.thenReturn(expectedResult);
|
|
||||||
|
|
||||||
final List<String> actualResult =
|
|
||||||
cut.createWorkbasketReportBuilder()
|
|
||||||
.workbasketIdIn(workbasketIds)
|
|
||||||
.stateIn(states)
|
|
||||||
.classificationCategoryIn(categories)
|
|
||||||
.domainIn(domains)
|
|
||||||
.classificationIdIn(classificationIds)
|
|
||||||
.excludedClassificationIdIn(excludedClassificationIds)
|
|
||||||
.customAttributeFilterIn(customAttributeFilter)
|
|
||||||
.withColumnHeaders(columnHeaders)
|
|
||||||
.listCustomAttributeValuesForCustomAttributeName(TaskCustomField.CUSTOM_1);
|
|
||||||
|
|
||||||
verify(internalTaskanaEngineMock).openConnection();
|
|
||||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
|
||||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
|
||||||
verify(internalTaskanaEngineMock, times(3)).getEngine();
|
|
||||||
verify(monitorMapperMock)
|
|
||||||
.getCustomAttributeValuesForReport(
|
|
||||||
any(), any(), any(), any(), any(), any(), any(), any(), any());
|
|
||||||
verify(internalTaskanaEngineMock).returnConnection();
|
|
||||||
verify(taskanaEngineMock).getWorkbasketService();
|
|
||||||
verifyNoMoreInteractions(internalTaskanaEngineMock, taskanaEngineMock, monitorMapperMock);
|
|
||||||
|
|
||||||
assertThat(actualResult).isNotNull();
|
|
||||||
assertThat(actualResult).isEqualTo(expectedResult);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testListCustomAttributeValuesForCustomAttributeNameIsEmptyResult() throws Exception {
|
|
||||||
List<String> result =
|
|
||||||
cut.createWorkbasketReportBuilder()
|
|
||||||
.workbasketIdIn(List.of("GibtsSicherNed"))
|
|
||||||
.listCustomAttributeValuesForCustomAttributeName(TaskCustomField.CUSTOM_14);
|
|
||||||
assertThat(result).isNotNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testGetTotalNumbersOfWorkbasketReportBasedOnCreatedDate() throws Exception {
|
|
||||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
|
||||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
|
||||||
final List<String> categories = List.of("EXTERN");
|
|
||||||
final List<String> domains = List.of("DOMAIN_A");
|
|
||||||
final List<String> classificationIds = List.of("L10000");
|
|
||||||
final List<String> excludedClassificationIds = List.of("L20000");
|
|
||||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
|
||||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
|
||||||
final List<CombinedClassificationFilter> combinedClassificationFilter =
|
|
||||||
List.of(
|
|
||||||
new CombinedClassificationFilter(
|
|
||||||
"CLI:000000000000000000000000000000000003",
|
|
||||||
"CLI:000000000000000000000000000000000008"));
|
|
||||||
|
|
||||||
List<MonitorQueryItem> expectedResult = new ArrayList<>();
|
|
||||||
MonitorQueryItem monitorQueryItem = new MonitorQueryItem();
|
|
||||||
monitorQueryItem.setKey("WBI:000000000000000000000000000000000001");
|
|
||||||
monitorQueryItem.setNumberOfTasks(1);
|
|
||||||
expectedResult.add(monitorQueryItem);
|
|
||||||
when(monitorMapperMock.getTaskCountOfWorkbaskets(
|
|
||||||
any(),
|
|
||||||
eq(workbasketIds),
|
|
||||||
eq(states),
|
|
||||||
eq(categories),
|
|
||||||
eq(domains),
|
|
||||||
eq(TaskTimestamp.PLANNED),
|
|
||||||
eq(classificationIds),
|
|
||||||
eq(excludedClassificationIds),
|
|
||||||
eq(customAttributeFilter),
|
|
||||||
eq(combinedClassificationFilter)))
|
|
||||||
.thenReturn(expectedResult);
|
|
||||||
|
|
||||||
when(internalTaskanaEngineMock.runAsAdmin(any())).thenReturn(Map.of());
|
|
||||||
|
|
||||||
final WorkbasketReport actualResult =
|
|
||||||
cut.createWorkbasketReportBuilder()
|
|
||||||
.workbasketIdIn(workbasketIds)
|
|
||||||
.stateIn(states)
|
|
||||||
.classificationCategoryIn(categories)
|
|
||||||
.domainIn(domains)
|
|
||||||
.classificationIdIn(classificationIds)
|
|
||||||
.excludedClassificationIdIn(excludedClassificationIds)
|
|
||||||
.customAttributeFilterIn(customAttributeFilter)
|
|
||||||
.combinedClassificationFilterIn(combinedClassificationFilter)
|
|
||||||
.buildReport(TaskTimestamp.PLANNED);
|
|
||||||
|
|
||||||
verify(internalTaskanaEngineMock).openConnection();
|
|
||||||
verify(taskanaEngineMock).checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN);
|
|
||||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
|
||||||
verify(internalTaskanaEngineMock, times(3)).getEngine();
|
|
||||||
verify(monitorMapperMock)
|
|
||||||
.getTaskCountOfWorkbaskets(
|
|
||||||
any(),
|
|
||||||
eq(workbasketIds),
|
|
||||||
eq(states),
|
|
||||||
eq(categories),
|
|
||||||
eq(domains),
|
|
||||||
eq(TaskTimestamp.PLANNED),
|
|
||||||
eq(classificationIds),
|
|
||||||
eq(excludedClassificationIds),
|
|
||||||
eq(customAttributeFilter),
|
|
||||||
eq(combinedClassificationFilter));
|
|
||||||
verify(internalTaskanaEngineMock).returnConnection();
|
|
||||||
verify(taskanaEngineMock).getWorkbasketService();
|
|
||||||
verifyNoMoreInteractions(internalTaskanaEngineMock, taskanaEngineMock, monitorMapperMock);
|
|
||||||
|
|
||||||
assertThat(actualResult).isNotNull();
|
|
||||||
assertThat(actualResult.getRow("WBI:000000000000000000000000000000000001").getTotalValue())
|
|
||||||
.isEqualTo(1);
|
|
||||||
assertThat(actualResult.getSumRow().getTotalValue()).isEqualTo(1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,39 +0,0 @@
|
||||||
package pro.taskana.task.internal;
|
|
||||||
|
|
||||||
import pro.taskana.task.api.models.Attachment;
|
|
||||||
import pro.taskana.task.api.models.ObjectReference;
|
|
||||||
import pro.taskana.task.internal.models.AttachmentImpl;
|
|
||||||
|
|
||||||
/** This class contains helper methods for Junit Tests. */
|
|
||||||
public final class JunitHelper {
|
|
||||||
|
|
||||||
private JunitHelper() {}
|
|
||||||
|
|
||||||
public static ObjectReference createDefaultObjRef() {
|
|
||||||
return createObjRef("company", "system", "instance", "type", "value");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ObjectReference createObjRef(
|
|
||||||
String company, String system, String instance, String type, String value) {
|
|
||||||
ObjectReference objRef = new ObjectReference();
|
|
||||||
objRef.setCompany(company);
|
|
||||||
objRef.setSystem(system);
|
|
||||||
objRef.setSystemInstance(instance);
|
|
||||||
objRef.setType(type);
|
|
||||||
objRef.setValue(value);
|
|
||||||
return objRef;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Attachment createDefaultAttachment() {
|
|
||||||
return createAttachment("TAI:000", "CHANNEL", createDefaultObjRef());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Attachment createAttachment(
|
|
||||||
String id, String channel, ObjectReference objectReference) {
|
|
||||||
AttachmentImpl attachment = new AttachmentImpl();
|
|
||||||
attachment.setChannel(channel);
|
|
||||||
attachment.setId(id);
|
|
||||||
attachment.setObjectReference(objectReference);
|
|
||||||
return attachment;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,78 +0,0 @@
|
||||||
package pro.taskana.task.internal;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import org.apache.ibatis.session.SqlSession;
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
|
||||||
import org.mockito.Mock;
|
|
||||||
import org.mockito.junit.jupiter.MockitoExtension;
|
|
||||||
|
|
||||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
|
||||||
import pro.taskana.task.api.models.ObjectReference;
|
|
||||||
|
|
||||||
/** Test for ObjectReferenceQueryImpl. */
|
|
||||||
@ExtendWith(MockitoExtension.class)
|
|
||||||
class ObjectReferenceQueryImplTest {
|
|
||||||
|
|
||||||
ObjectReferenceQueryImpl objectReferenceQueryImpl;
|
|
||||||
|
|
||||||
@Mock InternalTaskanaEngine taskanaEngine;
|
|
||||||
|
|
||||||
@Mock SqlSession sqlSession;
|
|
||||||
|
|
||||||
@BeforeEach
|
|
||||||
void setup() {
|
|
||||||
objectReferenceQueryImpl = new ObjectReferenceQueryImpl(taskanaEngine);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void should_ReturnList_When_BuilderIsUsed() {
|
|
||||||
when(taskanaEngine.getSqlSession()).thenReturn(sqlSession);
|
|
||||||
when(sqlSession.selectList(any(), any())).thenReturn(new ArrayList<>());
|
|
||||||
|
|
||||||
List<ObjectReference> result =
|
|
||||||
objectReferenceQueryImpl
|
|
||||||
.valueIn("test", "asd", "blubber")
|
|
||||||
.typeIn("cool", "bla")
|
|
||||||
.systemInstanceIn("1", "2")
|
|
||||||
.systemIn("superId")
|
|
||||||
.list();
|
|
||||||
assertThat(result).isNotNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void should_ReturnListWithOffset_When_BuilderIsUsed() {
|
|
||||||
when(taskanaEngine.getSqlSession()).thenReturn(sqlSession);
|
|
||||||
when(sqlSession.selectList(any(), any(), any())).thenReturn(new ArrayList<>());
|
|
||||||
|
|
||||||
List<ObjectReference> result =
|
|
||||||
objectReferenceQueryImpl
|
|
||||||
.valueIn("test", "asd", "blubber")
|
|
||||||
.typeIn("cool", "bla")
|
|
||||||
.systemInstanceIn("1", "2")
|
|
||||||
.systemIn("superId")
|
|
||||||
.list(1, 1);
|
|
||||||
assertThat(result).isNotNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void should_ReturnOneItem_When_BuilderIsUsed() {
|
|
||||||
when(taskanaEngine.getSqlSession()).thenReturn(sqlSession);
|
|
||||||
when(sqlSession.selectOne(any(), any())).thenReturn(new ObjectReference());
|
|
||||||
|
|
||||||
ObjectReference result =
|
|
||||||
objectReferenceQueryImpl
|
|
||||||
.valueIn("test", "asd", "blubber")
|
|
||||||
.typeIn("cool", "bla")
|
|
||||||
.systemInstanceIn("1", "2")
|
|
||||||
.systemIn("superId")
|
|
||||||
.single();
|
|
||||||
assertThat(result).isNotNull();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,137 +0,0 @@
|
||||||
package pro.taskana.task.internal;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
|
|
||||||
import java.time.Instant;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
|
|
||||||
import pro.taskana.classification.internal.models.ClassificationImpl;
|
|
||||||
import pro.taskana.task.api.models.Attachment;
|
|
||||||
import pro.taskana.task.api.models.AttachmentSummary;
|
|
||||||
import pro.taskana.task.api.models.ObjectReference;
|
|
||||||
import pro.taskana.task.internal.models.TaskImpl;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Unit Test for methods needed fot attachment at TaskImpl.<br>
|
|
||||||
* This test should test every interaction with Attachments, which means adding, removing, nulling
|
|
||||||
* them.
|
|
||||||
*/
|
|
||||||
class TaskAttachmentTest {
|
|
||||||
|
|
||||||
private TaskImpl cut = new TaskImpl();
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testAddAttachmentWithValidValue() {
|
|
||||||
Attachment attachment1 = CreateTaskModelHelper.createAttachment("ID1", "taskId1");
|
|
||||||
Attachment attachment2 = CreateTaskModelHelper.createAttachment("ID2", "taskId1");
|
|
||||||
Attachment attachment3 = CreateTaskModelHelper.createAttachment("ID3", "taskId1");
|
|
||||||
|
|
||||||
cut.addAttachment(attachment1);
|
|
||||||
cut.addAttachment(attachment2);
|
|
||||||
cut.addAttachment(attachment3);
|
|
||||||
|
|
||||||
assertThat(cut.getAttachments()).hasSize(3);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testAddNullValue() {
|
|
||||||
Attachment attachment1 = CreateTaskModelHelper.createAttachment("ID1", "taskId1");
|
|
||||||
|
|
||||||
cut.addAttachment(attachment1);
|
|
||||||
cut.addAttachment(null);
|
|
||||||
|
|
||||||
assertThat(cut.getAttachments()).hasSize(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testAddSameTwice() {
|
|
||||||
// Same values, not same REF. Important.
|
|
||||||
Attachment attachment1 = CreateTaskModelHelper.createAttachment("ID1", "taskId1");
|
|
||||||
Attachment attachment2 = CreateTaskModelHelper.createAttachment("ID1", "taskId1");
|
|
||||||
|
|
||||||
cut.addAttachment(attachment1);
|
|
||||||
cut.addAttachment(attachment2);
|
|
||||||
|
|
||||||
assertThat(cut.getAttachments()).hasSize(1);
|
|
||||||
|
|
||||||
// Check with not same vlaues (same ID)
|
|
||||||
String newChannel = "I will overwrite the other!";
|
|
||||||
attachment1.setChannel(newChannel);
|
|
||||||
cut.addAttachment(attachment1);
|
|
||||||
assertThat(cut.getAttachments()).hasSize(1);
|
|
||||||
assertThat(cut.getAttachments().get(0).getChannel()).isEqualTo(newChannel);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testRemoveAttachment() {
|
|
||||||
// Testing normal way
|
|
||||||
Attachment attachment1 = CreateTaskModelHelper.createAttachment("ID1", "taskId1");
|
|
||||||
Attachment attachment2 = CreateTaskModelHelper.createAttachment("ID2", "taskId1");
|
|
||||||
cut.addAttachment(attachment1);
|
|
||||||
cut.addAttachment(attachment2);
|
|
||||||
|
|
||||||
Attachment actual = cut.removeAttachment(attachment2.getId());
|
|
||||||
|
|
||||||
assertThat(cut.getAttachments()).hasSize(1);
|
|
||||||
assertThat(actual).isEqualTo(attachment2);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testRemoveLoopStopsAtResult() {
|
|
||||||
Attachment attachment1 = CreateTaskModelHelper.createAttachment("ID2", "taskId1");
|
|
||||||
// adding same uncommon way to test that the loop will stop.
|
|
||||||
cut.getAttachments().add(attachment1);
|
|
||||||
cut.getAttachments().add(attachment1);
|
|
||||||
cut.getAttachments().add(attachment1);
|
|
||||||
assertThat(cut.getAttachments()).hasSize(3);
|
|
||||||
|
|
||||||
Attachment actual = cut.removeAttachment(attachment1.getId());
|
|
||||||
|
|
||||||
assertThat(cut.getAttachments()).hasSize(2);
|
|
||||||
assertThat(actual).isEqualTo(attachment1);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testGetAttachmentSummaries() {
|
|
||||||
ObjectReference objRef = new ObjectReference();
|
|
||||||
objRef.setId("ObjRefId");
|
|
||||||
objRef.setCompany("company");
|
|
||||||
|
|
||||||
Map<String, String> customAttr = new HashMap<>();
|
|
||||||
customAttr.put("key", "value");
|
|
||||||
|
|
||||||
Attachment attachment1 = CreateTaskModelHelper.createAttachment("ID1", "taskId1");
|
|
||||||
attachment1.setChannel("channel");
|
|
||||||
attachment1.setClassificationSummary(new ClassificationImpl().asSummary());
|
|
||||||
attachment1.setReceived(Instant.now());
|
|
||||||
attachment1.setObjectReference(objRef);
|
|
||||||
// attachment1.setCustomAttributes(customAttr);
|
|
||||||
|
|
||||||
cut.addAttachment(attachment1);
|
|
||||||
|
|
||||||
List<AttachmentSummary> summaries = cut.asSummary().getAttachmentSummaries();
|
|
||||||
AttachmentSummary attachmentSummary = summaries.get(0);
|
|
||||||
|
|
||||||
assertThat(attachmentSummary).isEqualTo(attachment1.asSummary());
|
|
||||||
assertThat(attachmentSummary.getId()).isEqualTo(attachment1.getId());
|
|
||||||
assertThat(attachmentSummary.getTaskId()).isEqualTo(attachment1.getTaskId());
|
|
||||||
assertThat(attachmentSummary.getChannel()).isEqualTo(attachment1.getChannel());
|
|
||||||
assertThat(attachmentSummary.getClassificationSummary())
|
|
||||||
.isEqualTo(attachment1.getClassificationSummary());
|
|
||||||
assertThat(attachmentSummary.getObjectReference()).isEqualTo(attachment1.getObjectReference());
|
|
||||||
assertThat(attachmentSummary.getCreated()).isEqualTo(attachment1.getCreated());
|
|
||||||
assertThat(attachmentSummary.getReceived()).isEqualTo(attachment1.getReceived());
|
|
||||||
assertThat(attachmentSummary.getModified()).isEqualTo(attachment1.getModified());
|
|
||||||
|
|
||||||
// Must be different
|
|
||||||
assertThat(attachment1.hashCode()).isNotEqualTo(attachmentSummary.hashCode());
|
|
||||||
|
|
||||||
cut.removeAttachment("ID1");
|
|
||||||
assertThat(summaries).hasSize(1);
|
|
||||||
summaries = cut.asSummary().getAttachmentSummaries();
|
|
||||||
assertThat(summaries).isEmpty();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,103 +0,0 @@
|
||||||
package pro.taskana.task.internal;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import org.apache.ibatis.session.Configuration;
|
|
||||||
import org.apache.ibatis.session.SqlSession;
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
|
||||||
import org.mockito.Mock;
|
|
||||||
import org.mockito.junit.jupiter.MockitoExtension;
|
|
||||||
|
|
||||||
import pro.taskana.common.api.TaskanaEngine;
|
|
||||||
import pro.taskana.common.api.security.CurrentUserContext;
|
|
||||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
|
||||||
import pro.taskana.common.internal.configuration.DB;
|
|
||||||
import pro.taskana.task.api.TaskState;
|
|
||||||
import pro.taskana.task.api.models.TaskSummary;
|
|
||||||
import pro.taskana.task.internal.models.TaskSummaryImpl;
|
|
||||||
|
|
||||||
/** Test for TaskQueryImpl. */
|
|
||||||
@ExtendWith(MockitoExtension.class)
|
|
||||||
class TaskQueryImplTest {
|
|
||||||
|
|
||||||
@Mock TaskServiceImpl taskServiceMock;
|
|
||||||
|
|
||||||
@Mock private InternalTaskanaEngine internalTaskanaEngine;
|
|
||||||
@Mock private TaskanaEngine taskanaEngine;
|
|
||||||
@Mock private SqlSession sqlSession;
|
|
||||||
@Mock private CurrentUserContext currentUserContext;
|
|
||||||
|
|
||||||
private TaskQueryImpl taskQueryImpl;
|
|
||||||
|
|
||||||
@BeforeEach
|
|
||||||
void setup() {
|
|
||||||
when(internalTaskanaEngine.getEngine()).thenReturn(taskanaEngine);
|
|
||||||
when(taskanaEngine.getTaskService()).thenReturn(taskServiceMock);
|
|
||||||
when(taskanaEngine.getCurrentUserContext()).thenReturn(currentUserContext);
|
|
||||||
|
|
||||||
Configuration configuration = new org.apache.ibatis.session.Configuration();
|
|
||||||
configuration.setDatabaseId(DB.H2.dbProductId);
|
|
||||||
when(internalTaskanaEngine.getSqlSession()).thenReturn(sqlSession);
|
|
||||||
when(sqlSession.getConfiguration()).thenReturn(configuration);
|
|
||||||
|
|
||||||
taskQueryImpl = new TaskQueryImpl(internalTaskanaEngine);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void should_ReturnList_When_BuilderIsUsed() {
|
|
||||||
when(sqlSession.selectList(any(), any())).thenReturn(new ArrayList<>());
|
|
||||||
List<TaskSummary> intermediate = new ArrayList<>();
|
|
||||||
intermediate.add(new TaskSummaryImpl());
|
|
||||||
when(taskServiceMock.augmentTaskSummariesByContainedSummariesWithPartitioning(any()))
|
|
||||||
.thenReturn(intermediate);
|
|
||||||
|
|
||||||
List<TaskSummary> result =
|
|
||||||
taskQueryImpl
|
|
||||||
.nameIn("test", "asd", "blubber")
|
|
||||||
.priorityIn(1, 2)
|
|
||||||
.stateIn(TaskState.CLAIMED, TaskState.COMPLETED)
|
|
||||||
.list();
|
|
||||||
assertThat(result).isNotNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void should_ReturnListWithOffset_When_BuilderIsUsed() {
|
|
||||||
when(sqlSession.selectList(any(), any(), any())).thenReturn(new ArrayList<>());
|
|
||||||
List<TaskSummary> intermediate = new ArrayList<>();
|
|
||||||
intermediate.add(new TaskSummaryImpl());
|
|
||||||
when(taskServiceMock.augmentTaskSummariesByContainedSummariesWithPartitioning(any()))
|
|
||||||
.thenReturn(intermediate);
|
|
||||||
|
|
||||||
List<TaskSummary> result =
|
|
||||||
taskQueryImpl
|
|
||||||
.nameIn("test", "asd", "blubber")
|
|
||||||
.priorityIn(1, 2)
|
|
||||||
.stateIn(TaskState.CLAIMED, TaskState.COMPLETED)
|
|
||||||
.list(1, 1);
|
|
||||||
assertThat(result).isNotNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void should_ReturnOneItem_When_BuilderIsUsed() {
|
|
||||||
when(sqlSession.selectOne(any(), any())).thenReturn(new TaskSummaryImpl());
|
|
||||||
List<TaskSummary> intermediate = new ArrayList<>();
|
|
||||||
intermediate.add(new TaskSummaryImpl());
|
|
||||||
|
|
||||||
when(taskServiceMock.augmentTaskSummariesByContainedSummariesWithPartitioning(any()))
|
|
||||||
.thenReturn(intermediate);
|
|
||||||
|
|
||||||
TaskSummary result =
|
|
||||||
taskQueryImpl
|
|
||||||
.nameIn("test", "asd", "blubber")
|
|
||||||
.priorityIn(1, 2)
|
|
||||||
.stateIn(TaskState.CLAIMED, TaskState.COMPLETED)
|
|
||||||
.single();
|
|
||||||
assertThat(result).isNotNull();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,369 +0,0 @@
|
||||||
package pro.taskana.task.internal;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.UUID;
|
|
||||||
import javax.sql.DataSource;
|
|
||||||
import org.assertj.core.api.ThrowableAssert.ThrowingCallable;
|
|
||||||
import org.junit.jupiter.api.BeforeAll;
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
|
||||||
|
|
||||||
import pro.taskana.TaskanaEngineConfiguration;
|
|
||||||
import pro.taskana.classification.api.ClassificationService;
|
|
||||||
import pro.taskana.classification.api.models.Classification;
|
|
||||||
import pro.taskana.classification.internal.models.ClassificationImpl;
|
|
||||||
import pro.taskana.common.api.KeyDomain;
|
|
||||||
import pro.taskana.common.api.TaskanaEngine;
|
|
||||||
import pro.taskana.common.api.TaskanaEngine.ConnectionManagementMode;
|
|
||||||
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
|
||||||
import pro.taskana.common.internal.TaskanaEngineImpl;
|
|
||||||
import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
|
|
||||||
import pro.taskana.common.internal.util.IdGenerator;
|
|
||||||
import pro.taskana.common.test.security.JaasExtension;
|
|
||||||
import pro.taskana.common.test.security.WithAccessId;
|
|
||||||
import pro.taskana.sampledata.SampleDataGenerator;
|
|
||||||
import pro.taskana.task.api.TaskCustomField;
|
|
||||||
import pro.taskana.task.api.TaskState;
|
|
||||||
import pro.taskana.task.api.exceptions.TaskNotFoundException;
|
|
||||||
import pro.taskana.task.api.models.ObjectReference;
|
|
||||||
import pro.taskana.task.api.models.Task;
|
|
||||||
import pro.taskana.task.api.models.TaskSummary;
|
|
||||||
import pro.taskana.task.internal.models.TaskImpl;
|
|
||||||
import pro.taskana.workbasket.api.WorkbasketPermission;
|
|
||||||
import pro.taskana.workbasket.api.WorkbasketService;
|
|
||||||
import pro.taskana.workbasket.api.WorkbasketType;
|
|
||||||
import pro.taskana.workbasket.api.models.Workbasket;
|
|
||||||
import pro.taskana.workbasket.api.models.WorkbasketAccessItem;
|
|
||||||
import pro.taskana.workbasket.internal.models.WorkbasketImpl;
|
|
||||||
|
|
||||||
/** Integration Test for TaskServiceImpl transactions with connection management mode AUTOCOMMIT. */
|
|
||||||
@ExtendWith(JaasExtension.class)
|
|
||||||
class TaskServiceImplIntAutocommitTest {
|
|
||||||
|
|
||||||
private static SampleDataGenerator sampleDataGenerator;
|
|
||||||
private static TaskanaEngineConfiguration taskanaEngineConfiguration;
|
|
||||||
private TaskServiceImpl taskServiceImpl;
|
|
||||||
private TaskanaEngine taskanaEngine;
|
|
||||||
private TaskanaEngineImpl taskanaEngineImpl;
|
|
||||||
private ClassificationService classificationService;
|
|
||||||
private WorkbasketService workbasketService;
|
|
||||||
|
|
||||||
@BeforeAll
|
|
||||||
static void beforeAll() {
|
|
||||||
DataSource dataSource = TaskanaEngineTestConfiguration.getDataSource();
|
|
||||||
String schemaName = TaskanaEngineTestConfiguration.getSchemaName();
|
|
||||||
sampleDataGenerator = new SampleDataGenerator(dataSource, schemaName);
|
|
||||||
taskanaEngineConfiguration =
|
|
||||||
new TaskanaEngineConfiguration(dataSource, false, false, schemaName);
|
|
||||||
}
|
|
||||||
|
|
||||||
@BeforeEach
|
|
||||||
void setup() throws Exception {
|
|
||||||
sampleDataGenerator.clearDb();
|
|
||||||
taskanaEngine = taskanaEngineConfiguration.buildTaskanaEngine();
|
|
||||||
taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine;
|
|
||||||
taskanaEngineImpl.setConnectionManagementMode(ConnectionManagementMode.AUTOCOMMIT);
|
|
||||||
taskServiceImpl = (TaskServiceImpl) taskanaEngine.getTaskService();
|
|
||||||
classificationService = taskanaEngine.getClassificationService();
|
|
||||||
workbasketService = taskanaEngine.getWorkbasketService();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testStart() throws Exception {
|
|
||||||
|
|
||||||
Workbasket wb = workbasketService.newWorkbasket("workbasket", "DOMAIN_A");
|
|
||||||
wb.setName("workbasket");
|
|
||||||
wb.setType(WorkbasketType.GROUP);
|
|
||||||
taskanaEngine.getWorkbasketService().createWorkbasket(wb);
|
|
||||||
|
|
||||||
Classification classification =
|
|
||||||
classificationService.newClassification("TEST", "DOMAIN_A", "TASK");
|
|
||||||
classification.setServiceLevel("P1D");
|
|
||||||
taskanaEngine.getClassificationService().createClassification(classification);
|
|
||||||
|
|
||||||
Task task = taskServiceImpl.newTask(wb.getId());
|
|
||||||
task.setName("Unit Test Task");
|
|
||||||
|
|
||||||
task.setClassificationKey(classification.getKey());
|
|
||||||
task.setPrimaryObjRef(JunitHelper.createDefaultObjRef());
|
|
||||||
task = taskServiceImpl.createTask(task);
|
|
||||||
|
|
||||||
TaskanaEngine te2 = taskanaEngineConfiguration.buildTaskanaEngine();
|
|
||||||
TaskServiceImpl taskServiceImpl2 = (TaskServiceImpl) te2.getTaskService();
|
|
||||||
Task resultTask = taskServiceImpl2.getTask(task.getId());
|
|
||||||
assertThat(resultTask).isNotNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testStartTransactionFail() throws Exception {
|
|
||||||
|
|
||||||
Workbasket wb = workbasketService.newWorkbasket("wb1k1", "DOMAIN_A");
|
|
||||||
wb.setName("sdf");
|
|
||||||
wb.setType(WorkbasketType.GROUP);
|
|
||||||
taskanaEngine.getWorkbasketService().createWorkbasket(wb);
|
|
||||||
|
|
||||||
Classification classification =
|
|
||||||
classificationService.newClassification("TEST", "DOMAIN_A", "TASK");
|
|
||||||
classification.setServiceLevel("P1D");
|
|
||||||
classification = taskanaEngine.getClassificationService().createClassification(classification);
|
|
||||||
classification =
|
|
||||||
taskanaEngine
|
|
||||||
.getClassificationService()
|
|
||||||
.getClassification(classification.getKey(), classification.getDomain());
|
|
||||||
|
|
||||||
TaskImpl task = (TaskImpl) taskServiceImpl.newTask(wb.getKey(), "DOMAIN_A");
|
|
||||||
task.setName("Unit Test Task");
|
|
||||||
task.setClassificationKey(classification.getKey());
|
|
||||||
task.setPrimaryObjRef(JunitHelper.createDefaultObjRef());
|
|
||||||
taskServiceImpl.createTask(task);
|
|
||||||
taskServiceImpl.getTask(task.getId());
|
|
||||||
|
|
||||||
TaskanaEngineImpl te2 = (TaskanaEngineImpl) taskanaEngineConfiguration.buildTaskanaEngine();
|
|
||||||
TaskServiceImpl taskServiceImpl2 = (TaskServiceImpl) te2.getTaskService();
|
|
||||||
|
|
||||||
assertThatThrownBy(() -> taskServiceImpl2.getTask(wb.getId()))
|
|
||||||
.isInstanceOf(TaskNotFoundException.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void should_ReturnList_When_BuilderIsUsed() throws Exception {
|
|
||||||
Workbasket wb = workbasketService.newWorkbasket("key", "DOMAIN_A");
|
|
||||||
wb.setName("workbasket");
|
|
||||||
wb.setType(WorkbasketType.GROUP);
|
|
||||||
taskanaEngine.getWorkbasketService().createWorkbasket(wb);
|
|
||||||
Classification classification =
|
|
||||||
classificationService.newClassification("TEST", "DOMAIN_A", "TASK");
|
|
||||||
classification.setServiceLevel("P1D");
|
|
||||||
taskanaEngine.getClassificationService().createClassification(classification);
|
|
||||||
|
|
||||||
Task task = taskServiceImpl.newTask(wb.getKey(), wb.getDomain());
|
|
||||||
task.setName("Unit Test Task");
|
|
||||||
task.setClassificationKey(classification.getKey());
|
|
||||||
task.setPrimaryObjRef(JunitHelper.createDefaultObjRef());
|
|
||||||
taskServiceImpl.createTask(task);
|
|
||||||
|
|
||||||
List<TaskSummary> results =
|
|
||||||
taskServiceImpl
|
|
||||||
.createTaskQuery()
|
|
||||||
.nameIn("bla", "test")
|
|
||||||
.descriptionLike("test")
|
|
||||||
.priorityIn(1, 2, 2)
|
|
||||||
.stateIn(TaskState.CLAIMED)
|
|
||||||
.workbasketKeyDomainIn(
|
|
||||||
new KeyDomain("asd", "novatec"), new KeyDomain("asdasdasd", "DOMAIN_A"))
|
|
||||||
.ownerIn("test", "test2", "bla")
|
|
||||||
.customAttributeIn(TaskCustomField.CUSTOM_16, "test")
|
|
||||||
.classificationKeyIn("pId1", "pId2")
|
|
||||||
.primaryObjectReferenceCompanyIn("first comp", "sonstwo gmbh")
|
|
||||||
.primaryObjectReferenceSystemIn("sys")
|
|
||||||
.primaryObjectReferenceTypeIn("type1", "type2")
|
|
||||||
.primaryObjectReferenceSystemInstanceIn("sysInst1", "sysInst2")
|
|
||||||
.primaryObjectReferenceValueIn("val1", "val2", "val3")
|
|
||||||
.list();
|
|
||||||
|
|
||||||
assertThat(results).isEmpty();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void shouldTransferTaskToOtherWorkbasket() throws Exception {
|
|
||||||
final int sleepTime = 100;
|
|
||||||
|
|
||||||
// Source Workbasket
|
|
||||||
WorkbasketImpl wb = (WorkbasketImpl) workbasketService.newWorkbasket("key1", "DOMAIN_A");
|
|
||||||
wb.setName("Basic-Workbasket");
|
|
||||||
wb.setDescription("Just used as base WB for Task here");
|
|
||||||
wb.setType(WorkbasketType.GROUP);
|
|
||||||
wb.setOwner("The Tester ID");
|
|
||||||
final Workbasket sourceWB = workbasketService.createWorkbasket(wb);
|
|
||||||
|
|
||||||
// Destination Workbasket
|
|
||||||
wb = (WorkbasketImpl) workbasketService.newWorkbasket("k1", "DOMAIN_A");
|
|
||||||
wb.setName("Desination-WorkBasket");
|
|
||||||
|
|
||||||
wb.setType(WorkbasketType.CLEARANCE);
|
|
||||||
wb.setDescription("Destination WB where Task should be transfered to");
|
|
||||||
wb.setOwner("The Tester ID");
|
|
||||||
final Workbasket destinationWB = workbasketService.createWorkbasket(wb);
|
|
||||||
|
|
||||||
// Classification required for Task
|
|
||||||
ClassificationImpl classification =
|
|
||||||
(ClassificationImpl) classificationService.newClassification("KEY", "DOMAIN_A", "TASK");
|
|
||||||
classification.setCategory("EXTERNAL");
|
|
||||||
classification.setName("Transfert-Task Classification");
|
|
||||||
classification.setServiceLevel("P1D");
|
|
||||||
classificationService.createClassification(classification);
|
|
||||||
|
|
||||||
// Task which should be transfered
|
|
||||||
TaskImpl task = (TaskImpl) taskServiceImpl.newTask(sourceWB.getId());
|
|
||||||
task.setName("Task Name");
|
|
||||||
task.setDescription("Task used for transfer Test");
|
|
||||||
task.setRead(true);
|
|
||||||
task.setTransferred(false);
|
|
||||||
task.setModified(null);
|
|
||||||
task.setClassificationKey(classification.getKey());
|
|
||||||
task.setPrimaryObjRef(JunitHelper.createDefaultObjRef());
|
|
||||||
task = (TaskImpl) taskServiceImpl.createTask(task);
|
|
||||||
Thread.sleep(sleepTime); // Sleep for modification-timestamp
|
|
||||||
|
|
||||||
Task resultTask = taskServiceImpl.transfer(task.getId(), destinationWB.getId());
|
|
||||||
assertThat(resultTask.isRead()).isFalse();
|
|
||||||
assertThat(resultTask.isTransferred()).isTrue();
|
|
||||||
assertThat(resultTask.getWorkbasketSummary().getId()).isEqualTo(destinationWB.getId());
|
|
||||||
assertThat(resultTask.getModified()).isNotNull();
|
|
||||||
assertThat(resultTask.getModified()).isNotEqualTo(task.getModified());
|
|
||||||
assertThat(resultTask.getCreated()).isNotNull();
|
|
||||||
assertThat(resultTask.getCreated()).isEqualTo(task.getCreated());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void shouldNotTransferAnyTask() {
|
|
||||||
assertThatThrownBy(() -> taskServiceImpl.transfer(UUID.randomUUID() + "_X", "1"))
|
|
||||||
.isInstanceOf(TaskNotFoundException.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
@WithAccessId(user = "user-1-1", groups = "businessadmin")
|
|
||||||
@Test
|
|
||||||
void shouldNotTransferByFailingSecurity() throws Exception {
|
|
||||||
final String user = taskanaEngine.getCurrentUserContext().getUserid();
|
|
||||||
|
|
||||||
// Set up Security for this Test
|
|
||||||
DataSource dataSource = TaskanaEngineTestConfiguration.getDataSource();
|
|
||||||
taskanaEngineConfiguration =
|
|
||||||
new TaskanaEngineConfiguration(
|
|
||||||
dataSource, false, true, TaskanaEngineTestConfiguration.getSchemaName());
|
|
||||||
taskanaEngine = taskanaEngineConfiguration.buildTaskanaEngine();
|
|
||||||
taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine;
|
|
||||||
taskanaEngineImpl.setConnectionManagementMode(ConnectionManagementMode.AUTOCOMMIT);
|
|
||||||
taskServiceImpl = (TaskServiceImpl) taskanaEngine.getTaskService();
|
|
||||||
classificationService = taskanaEngine.getClassificationService();
|
|
||||||
workbasketService = taskanaEngine.getWorkbasketService();
|
|
||||||
|
|
||||||
ClassificationImpl classification =
|
|
||||||
(ClassificationImpl) classificationService.newClassification("KEY", "DOMAIN_A", "TASK");
|
|
||||||
classification.setCategory("EXTERNAL");
|
|
||||||
classification.setName("Transfert-Task Classification");
|
|
||||||
classification.setServiceLevel("P1D");
|
|
||||||
classificationService.createClassification(classification);
|
|
||||||
|
|
||||||
WorkbasketImpl wb = (WorkbasketImpl) workbasketService.newWorkbasket("k5", "DOMAIN_A");
|
|
||||||
wb.setName("BASE WB");
|
|
||||||
wb.setDescription("Normal base WB");
|
|
||||||
wb.setOwner(user);
|
|
||||||
wb.setType(WorkbasketType.TOPIC);
|
|
||||||
WorkbasketImpl wbCreated = (WorkbasketImpl) workbasketService.createWorkbasket(wb);
|
|
||||||
createWorkbasketWithSecurity(wbCreated, wbCreated.getOwner(), true, true, true, true);
|
|
||||||
|
|
||||||
WorkbasketImpl wbNoAppend =
|
|
||||||
(WorkbasketImpl) workbasketService.newWorkbasket("key77", "DOMAIN_A");
|
|
||||||
wbNoAppend.setName("Test-Security-WorkBasket-APPEND");
|
|
||||||
wbNoAppend.setDescription("Workbasket without permission APPEND on Task");
|
|
||||||
wbNoAppend.setOwner(user);
|
|
||||||
wbNoAppend.setType(WorkbasketType.PERSONAL);
|
|
||||||
|
|
||||||
WorkbasketImpl wbNoAppendCreated =
|
|
||||||
(WorkbasketImpl) workbasketService.createWorkbasket(wbNoAppend);
|
|
||||||
createWorkbasketWithSecurity(
|
|
||||||
wbNoAppendCreated, wbNoAppendCreated.getOwner(), true, true, false, true);
|
|
||||||
|
|
||||||
WorkbasketImpl wbNoTransfer =
|
|
||||||
(WorkbasketImpl) workbasketService.newWorkbasket("k99", "DOMAIN_B");
|
|
||||||
wbNoTransfer.setName("Test-Security-WorkBasket-TRANSFER");
|
|
||||||
wbNoTransfer.setDescription("Workbasket without permission TRANSFER on Task");
|
|
||||||
wbNoTransfer.setOwner(user);
|
|
||||||
wbNoTransfer.setType(WorkbasketType.CLEARANCE);
|
|
||||||
|
|
||||||
wbNoTransfer = (WorkbasketImpl) workbasketService.createWorkbasket(wbNoTransfer);
|
|
||||||
createWorkbasketWithSecurity(wbNoTransfer, wbNoTransfer.getOwner(), true, true, true, false);
|
|
||||||
|
|
||||||
TaskImpl task = (TaskImpl) taskServiceImpl.newTask(wbCreated.getId());
|
|
||||||
task.setName("Task Name");
|
|
||||||
task.setDescription("Task used for transfer Test");
|
|
||||||
task.setOwner(user);
|
|
||||||
task.setClassificationKey(classification.getKey());
|
|
||||||
task.setPrimaryObjRef(JunitHelper.createDefaultObjRef());
|
|
||||||
TaskImpl taskCreated = (TaskImpl) taskServiceImpl.createTask(task);
|
|
||||||
|
|
||||||
ThrowingCallable call =
|
|
||||||
() -> taskServiceImpl.transfer(taskCreated.getId(), wbNoAppendCreated.getId());
|
|
||||||
assertThatThrownBy(call)
|
|
||||||
.describedAs(
|
|
||||||
"Transfer Task should be FAILD, because there are no APPEND-Rights on destination WB.")
|
|
||||||
.isInstanceOf(NotAuthorizedException.class)
|
|
||||||
.hasMessageContaining("APPEND");
|
|
||||||
|
|
||||||
assertThat(taskCreated.isTransferred()).isFalse();
|
|
||||||
assertThat(taskCreated.getWorkbasketKey()).isNotEqualTo(wbNoAppendCreated.getKey());
|
|
||||||
assertThat(taskCreated.getWorkbasketKey()).isEqualTo(wbCreated.getKey());
|
|
||||||
|
|
||||||
// Check failing with missing TRANSFER
|
|
||||||
taskCreated.setId("");
|
|
||||||
taskCreated.getWorkbasketSummaryImpl().setId(wbNoTransfer.getId());
|
|
||||||
taskCreated.setWorkbasketKey(null);
|
|
||||||
taskCreated.setExternalId(IdGenerator.generateWithPrefix("TST"));
|
|
||||||
|
|
||||||
TaskImpl taskCreated2 = (TaskImpl) taskServiceImpl.createTask(taskCreated);
|
|
||||||
|
|
||||||
assertThatThrownBy(() -> taskServiceImpl.transfer(taskCreated2.getId(), wbCreated.getId()))
|
|
||||||
.describedAs(
|
|
||||||
"Transfer Task should be FAILED, because there are no TRANSFER-Rights on current WB.")
|
|
||||||
.isInstanceOf(NotAuthorizedException.class)
|
|
||||||
.hasMessageContaining("TRANSFER");
|
|
||||||
|
|
||||||
assertThat(taskCreated2.isTransferred()).isFalse();
|
|
||||||
assertThat(taskCreated2.getWorkbasketKey()).isNotEqualTo(wbNoAppendCreated.getKey());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testWithPrimaryObjectRef() throws Exception {
|
|
||||||
Workbasket wb = workbasketService.newWorkbasket("workbasket", "DOMAIN_A");
|
|
||||||
wb.setName("workbasket");
|
|
||||||
wb.setType(WorkbasketType.GROUP);
|
|
||||||
taskanaEngine.getWorkbasketService().createWorkbasket(wb);
|
|
||||||
Classification classification =
|
|
||||||
classificationService.newClassification("TEST", "DOMAIN_A", "TASK");
|
|
||||||
classification.setServiceLevel("P1D");
|
|
||||||
taskanaEngine.getClassificationService().createClassification(classification);
|
|
||||||
|
|
||||||
Task task = taskServiceImpl.newTask(wb.getId());
|
|
||||||
task.setName("Unit Test Task");
|
|
||||||
|
|
||||||
task.setClassificationKey(classification.getKey());
|
|
||||||
|
|
||||||
ObjectReference objRef = new ObjectReference();
|
|
||||||
objRef.setCompany("novatec");
|
|
||||||
objRef.setSystem("linux");
|
|
||||||
objRef.setSystemInstance("inst1");
|
|
||||||
objRef.setType("fast");
|
|
||||||
objRef.setValue("4711");
|
|
||||||
task.setPrimaryObjRef(objRef);
|
|
||||||
|
|
||||||
task = taskServiceImpl.createTask(task);
|
|
||||||
|
|
||||||
Task task2 = taskServiceImpl.getTask(task.getId());
|
|
||||||
// skanaEngineImpl.getSqlSession().commit(); // needed so that the change is visible in the
|
|
||||||
// other session
|
|
||||||
|
|
||||||
assertThat(task2).isNotNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void createWorkbasketWithSecurity(
|
|
||||||
Workbasket wb,
|
|
||||||
String accessId,
|
|
||||||
boolean permOpen,
|
|
||||||
boolean permRead,
|
|
||||||
boolean permAppend,
|
|
||||||
boolean permTransfer)
|
|
||||||
throws Exception {
|
|
||||||
WorkbasketAccessItem accessItem =
|
|
||||||
workbasketService.newWorkbasketAccessItem(wb.getId(), accessId);
|
|
||||||
accessItem.setPermission(WorkbasketPermission.OPEN, permOpen);
|
|
||||||
accessItem.setPermission(WorkbasketPermission.READ, permRead);
|
|
||||||
accessItem.setPermission(WorkbasketPermission.APPEND, permAppend);
|
|
||||||
accessItem.setPermission(WorkbasketPermission.TRANSFER, permTransfer);
|
|
||||||
workbasketService.createWorkbasketAccessItem(accessItem);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,477 +0,0 @@
|
||||||
package pro.taskana.task.internal;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.sql.Connection;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.UUID;
|
|
||||||
import javax.sql.DataSource;
|
|
||||||
import org.assertj.core.api.ThrowableAssert.ThrowingCallable;
|
|
||||||
import org.junit.jupiter.api.AfterEach;
|
|
||||||
import org.junit.jupiter.api.BeforeAll;
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
|
||||||
|
|
||||||
import pro.taskana.TaskanaEngineConfiguration;
|
|
||||||
import pro.taskana.classification.api.ClassificationService;
|
|
||||||
import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
|
|
||||||
import pro.taskana.classification.api.models.Classification;
|
|
||||||
import pro.taskana.classification.internal.models.ClassificationImpl;
|
|
||||||
import pro.taskana.common.api.KeyDomain;
|
|
||||||
import pro.taskana.common.api.TaskanaEngine;
|
|
||||||
import pro.taskana.common.api.TaskanaEngine.ConnectionManagementMode;
|
|
||||||
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
|
||||||
import pro.taskana.common.internal.TaskanaEngineImpl;
|
|
||||||
import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
|
|
||||||
import pro.taskana.common.internal.configuration.DbSchemaCreator;
|
|
||||||
import pro.taskana.common.internal.util.IdGenerator;
|
|
||||||
import pro.taskana.common.test.security.JaasExtension;
|
|
||||||
import pro.taskana.common.test.security.WithAccessId;
|
|
||||||
import pro.taskana.sampledata.SampleDataGenerator;
|
|
||||||
import pro.taskana.task.api.TaskCustomField;
|
|
||||||
import pro.taskana.task.api.TaskState;
|
|
||||||
import pro.taskana.task.api.exceptions.TaskNotFoundException;
|
|
||||||
import pro.taskana.task.api.models.Task;
|
|
||||||
import pro.taskana.task.api.models.TaskSummary;
|
|
||||||
import pro.taskana.task.internal.models.TaskImpl;
|
|
||||||
import pro.taskana.workbasket.api.WorkbasketPermission;
|
|
||||||
import pro.taskana.workbasket.api.WorkbasketService;
|
|
||||||
import pro.taskana.workbasket.api.WorkbasketType;
|
|
||||||
import pro.taskana.workbasket.api.exceptions.WorkbasketAccessItemAlreadyExistException;
|
|
||||||
import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
|
|
||||||
import pro.taskana.workbasket.api.models.Workbasket;
|
|
||||||
import pro.taskana.workbasket.api.models.WorkbasketAccessItem;
|
|
||||||
import pro.taskana.workbasket.internal.models.WorkbasketImpl;
|
|
||||||
import pro.taskana.workbasket.internal.models.WorkbasketSummaryImpl;
|
|
||||||
|
|
||||||
/** Integration Test for TaskServiceImpl transactions with connection management mode EXPLICIT. */
|
|
||||||
@ExtendWith(JaasExtension.class)
|
|
||||||
class TaskServiceImplIntExplicitTest {
|
|
||||||
|
|
||||||
private static DataSource dataSource;
|
|
||||||
private static SampleDataGenerator sampleDataGenerator;
|
|
||||||
private static TaskanaEngineConfiguration taskanaEngineConfiguration;
|
|
||||||
private TaskServiceImpl taskServiceImpl;
|
|
||||||
private TaskanaEngine taskanaEngine;
|
|
||||||
private TaskanaEngineImpl taskanaEngineImpl;
|
|
||||||
private ClassificationService classificationService;
|
|
||||||
private WorkbasketService workbasketService;
|
|
||||||
|
|
||||||
@BeforeAll
|
|
||||||
static void beforeAll() throws Exception {
|
|
||||||
String userHomeDirectory = System.getProperty("user.home");
|
|
||||||
String propertiesFileName = userHomeDirectory + "/taskanaUnitTest.properties";
|
|
||||||
|
|
||||||
dataSource =
|
|
||||||
new File(propertiesFileName).exists()
|
|
||||||
? TaskanaEngineTestConfiguration.createDataSourceFromProperties(propertiesFileName)
|
|
||||||
: TaskanaEngineConfiguration.createDefaultDataSource();
|
|
||||||
taskanaEngineConfiguration =
|
|
||||||
new TaskanaEngineConfiguration(
|
|
||||||
dataSource, false, TaskanaEngineTestConfiguration.getSchemaName());
|
|
||||||
sampleDataGenerator =
|
|
||||||
new SampleDataGenerator(dataSource, TaskanaEngineTestConfiguration.getSchemaName());
|
|
||||||
}
|
|
||||||
|
|
||||||
@BeforeEach
|
|
||||||
void setup() throws Exception {
|
|
||||||
taskanaEngine = taskanaEngineConfiguration.buildTaskanaEngine();
|
|
||||||
taskServiceImpl = (TaskServiceImpl) taskanaEngine.getTaskService();
|
|
||||||
taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine;
|
|
||||||
classificationService = taskanaEngine.getClassificationService();
|
|
||||||
taskanaEngineImpl.setConnectionManagementMode(ConnectionManagementMode.EXPLICIT);
|
|
||||||
workbasketService = taskanaEngine.getWorkbasketService();
|
|
||||||
try (Connection connection = dataSource.getConnection()) {
|
|
||||||
sampleDataGenerator.clearDb();
|
|
||||||
DbSchemaCreator creator = new DbSchemaCreator(dataSource, connection.getSchema());
|
|
||||||
creator.run();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@AfterEach
|
|
||||||
void tearDown() {
|
|
||||||
sampleDataGenerator.clearDb();
|
|
||||||
}
|
|
||||||
|
|
||||||
@WithAccessId(user = "user-1-1", groups = "businessadmin")
|
|
||||||
@Test
|
|
||||||
void testStartTransactionFail() throws Exception {
|
|
||||||
try (Connection connection = dataSource.getConnection()) {
|
|
||||||
taskanaEngineImpl.setConnection(connection);
|
|
||||||
|
|
||||||
WorkbasketImpl workbasket =
|
|
||||||
(WorkbasketImpl) workbasketService.newWorkbasket("k1", "DOMAIN_A");
|
|
||||||
workbasket.setName("workbasket");
|
|
||||||
workbasket.setId("1"); // set id manually for authorization tests
|
|
||||||
|
|
||||||
workbasket.setType(WorkbasketType.GROUP);
|
|
||||||
final Classification classification =
|
|
||||||
classificationService.newClassification("TEST", "DOMAIN_A", "TASK");
|
|
||||||
classification.setServiceLevel("P1D");
|
|
||||||
taskanaEngineImpl.getWorkbasketService().createWorkbasket(workbasket);
|
|
||||||
|
|
||||||
WorkbasketAccessItem accessItem = workbasketService.newWorkbasketAccessItem("1", "user-1-1");
|
|
||||||
accessItem.setPermission(WorkbasketPermission.APPEND, true);
|
|
||||||
accessItem.setPermission(WorkbasketPermission.READ, true);
|
|
||||||
accessItem.setPermission(WorkbasketPermission.OPEN, true);
|
|
||||||
workbasketService.createWorkbasketAccessItem(accessItem);
|
|
||||||
|
|
||||||
taskanaEngineImpl.getClassificationService().createClassification(classification);
|
|
||||||
connection.commit();
|
|
||||||
Task task = taskServiceImpl.newTask(workbasket.getId());
|
|
||||||
task.setName("Unit Test Task");
|
|
||||||
task.setClassificationKey(classification.getKey());
|
|
||||||
task.setPrimaryObjRef(JunitHelper.createDefaultObjRef());
|
|
||||||
task = taskServiceImpl.createTask(task);
|
|
||||||
connection.commit();
|
|
||||||
taskServiceImpl.getTask(task.getId());
|
|
||||||
|
|
||||||
TaskanaEngineImpl te2 = (TaskanaEngineImpl) taskanaEngineConfiguration.buildTaskanaEngine();
|
|
||||||
TaskServiceImpl taskServiceImpl2 = (TaskServiceImpl) te2.getTaskService();
|
|
||||||
assertThatThrownBy(() -> taskServiceImpl2.getTask(workbasket.getId()))
|
|
||||||
.isInstanceOf(TaskNotFoundException.class);
|
|
||||||
connection.commit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@WithAccessId(user = "user-1-1", groups = "businessadmin")
|
|
||||||
@Test
|
|
||||||
void testCreateTask() throws Exception {
|
|
||||||
try (Connection connection = dataSource.getConnection()) {
|
|
||||||
taskanaEngineImpl.setConnection(connection);
|
|
||||||
|
|
||||||
final Task task = this.generateDummyTask();
|
|
||||||
connection.commit();
|
|
||||||
|
|
||||||
WorkbasketAccessItem accessItem = workbasketService.newWorkbasketAccessItem("1", "user-1-1");
|
|
||||||
accessItem.setPermission(WorkbasketPermission.APPEND, true);
|
|
||||||
accessItem.setPermission(WorkbasketPermission.READ, true);
|
|
||||||
accessItem.setPermission(WorkbasketPermission.OPEN, true);
|
|
||||||
workbasketService.createWorkbasketAccessItem(accessItem);
|
|
||||||
|
|
||||||
task.setPrimaryObjRef(JunitHelper.createDefaultObjRef());
|
|
||||||
final Task task2 = taskServiceImpl.createTask(task);
|
|
||||||
connection.commit(); // needed so that the change is visible in the other session
|
|
||||||
|
|
||||||
TaskanaEngine te2 = taskanaEngineConfiguration.buildTaskanaEngine();
|
|
||||||
TaskServiceImpl taskServiceImpl2 = (TaskServiceImpl) te2.getTaskService();
|
|
||||||
Task resultTask = taskServiceImpl2.getTask(task2.getId());
|
|
||||||
assertThat(resultTask).isNotNull();
|
|
||||||
connection.commit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@WithAccessId(user = "user-1-1", groups = "businessadmin")
|
|
||||||
@Test
|
|
||||||
void createTaskShouldThrowWorkbasketNotFoundException() throws Exception {
|
|
||||||
try (Connection connection = dataSource.getConnection()) {
|
|
||||||
taskanaEngineImpl.setConnection(connection);
|
|
||||||
Task test = this.generateDummyTask();
|
|
||||||
((WorkbasketSummaryImpl) (test.getWorkbasketSummary())).setId("2");
|
|
||||||
|
|
||||||
assertThatThrownBy(() -> taskServiceImpl.createTask(test))
|
|
||||||
.isInstanceOf(WorkbasketNotFoundException.class);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@WithAccessId(user = "user-1-1", groups = "businessadmin")
|
|
||||||
@Test
|
|
||||||
void createManualTaskShouldThrowClassificationNotFoundException() throws Exception {
|
|
||||||
try (Connection connection = dataSource.getConnection()) {
|
|
||||||
taskanaEngineImpl.setConnection(connection);
|
|
||||||
|
|
||||||
Workbasket wb = workbasketService.newWorkbasket("WB NR.1", "DOMAIN_A");
|
|
||||||
wb.setName("dummy-WB");
|
|
||||||
wb.setType(WorkbasketType.PERSONAL);
|
|
||||||
wb = workbasketService.createWorkbasket(wb);
|
|
||||||
workbasketService.createWorkbasketAccessItem(
|
|
||||||
this.createWorkbasketWithSecurity(
|
|
||||||
wb, taskanaEngine.getCurrentUserContext().getUserid(), true, true, true, false));
|
|
||||||
Classification classification =
|
|
||||||
classificationService.newClassification(
|
|
||||||
UUID.randomUUID().toString(), wb.getDomain(), "t1"); // not persisted,
|
|
||||||
// not found.
|
|
||||||
classification.setName("not persisted - so not found.");
|
|
||||||
|
|
||||||
Task task = this.generateDummyTask();
|
|
||||||
((TaskImpl) task).setWorkbasketSummary(wb.asSummary());
|
|
||||||
task.setClassificationKey(classification.getKey());
|
|
||||||
|
|
||||||
assertThatThrownBy(() -> taskServiceImpl.createTask(task))
|
|
||||||
.isInstanceOf(ClassificationNotFoundException.class);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@WithAccessId(user = "user-1-1", groups = "businessadmin")
|
|
||||||
@Test
|
|
||||||
void should_ReturnList_When_BuilderIsUsed() throws Exception {
|
|
||||||
try (Connection connection = dataSource.getConnection()) {
|
|
||||||
taskanaEngineImpl.setConnection(connection);
|
|
||||||
WorkbasketImpl workbasket =
|
|
||||||
(WorkbasketImpl) workbasketService.newWorkbasket("k1", "DOMAIN_A");
|
|
||||||
workbasket.setName("workbasket");
|
|
||||||
Classification classification =
|
|
||||||
classificationService.newClassification("TEST", "DOMAIN_A", "TASK");
|
|
||||||
classification.setServiceLevel("P1D");
|
|
||||||
classificationService.createClassification(classification);
|
|
||||||
workbasket.setId("1"); // set id manually for authorization tests
|
|
||||||
workbasket.setType(WorkbasketType.GROUP);
|
|
||||||
workbasket = (WorkbasketImpl) workbasketService.createWorkbasket(workbasket);
|
|
||||||
|
|
||||||
WorkbasketAccessItem accessItem = workbasketService.newWorkbasketAccessItem("1", "user-1-1");
|
|
||||||
accessItem.setPermission(WorkbasketPermission.APPEND, true);
|
|
||||||
accessItem.setPermission(WorkbasketPermission.READ, true);
|
|
||||||
accessItem.setPermission(WorkbasketPermission.OPEN, true);
|
|
||||||
workbasketService.createWorkbasketAccessItem(accessItem);
|
|
||||||
|
|
||||||
Task task = taskServiceImpl.newTask(workbasket.getId());
|
|
||||||
task.setName("Unit Test Task");
|
|
||||||
task.setClassificationKey(classification.getKey());
|
|
||||||
task.setPrimaryObjRef(JunitHelper.createDefaultObjRef());
|
|
||||||
taskServiceImpl.createTask(task);
|
|
||||||
|
|
||||||
List<TaskSummary> results =
|
|
||||||
taskServiceImpl
|
|
||||||
.createTaskQuery()
|
|
||||||
.nameIn("bla", "test")
|
|
||||||
.descriptionLike("test")
|
|
||||||
.priorityIn(1, 2, 2)
|
|
||||||
.stateIn(TaskState.CLAIMED)
|
|
||||||
.workbasketKeyDomainIn(new KeyDomain("k1", "DOMAIN_A"))
|
|
||||||
.ownerIn("test", "test2", "bla")
|
|
||||||
.customAttributeLike(TaskCustomField.CUSTOM_13, "test")
|
|
||||||
.classificationKeyIn("pId1", "pId2")
|
|
||||||
.primaryObjectReferenceCompanyIn("first comp", "sonstwo gmbh")
|
|
||||||
.primaryObjectReferenceSystemIn("sys")
|
|
||||||
.primaryObjectReferenceTypeIn("type1", "type2")
|
|
||||||
.primaryObjectReferenceSystemInstanceIn("sysInst1", "sysInst2")
|
|
||||||
.primaryObjectReferenceValueIn("val1", "val2", "val3")
|
|
||||||
.list();
|
|
||||||
|
|
||||||
assertThat(results).isEmpty();
|
|
||||||
connection.commit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@WithAccessId(user = "user-1-1", groups = "businessadmin")
|
|
||||||
@Test
|
|
||||||
void shouldTransferTaskToOtherWorkbasket() throws Exception {
|
|
||||||
final int sleepTime = 100;
|
|
||||||
final String user = taskanaEngine.getCurrentUserContext().getUserid();
|
|
||||||
try (Connection connection = dataSource.getConnection()) {
|
|
||||||
taskanaEngineImpl.setConnection(connection);
|
|
||||||
|
|
||||||
// Source Workbasket
|
|
||||||
WorkbasketImpl wb =
|
|
||||||
(WorkbasketImpl) workbasketService.newWorkbasket("sourceWbKey", "DOMAIN_A");
|
|
||||||
wb.setName("Basic-Workbasket");
|
|
||||||
wb.setDescription("Just used as base WB for Task here");
|
|
||||||
wb.setOwner(user);
|
|
||||||
wb.setType(WorkbasketType.PERSONAL);
|
|
||||||
Workbasket sourceWB = workbasketService.createWorkbasket(wb);
|
|
||||||
|
|
||||||
workbasketService.createWorkbasketAccessItem(
|
|
||||||
createWorkbasketWithSecurity(wb, wb.getOwner(), true, true, true, true));
|
|
||||||
connection.commit();
|
|
||||||
ThrowingCallable call =
|
|
||||||
() ->
|
|
||||||
workbasketService.createWorkbasketAccessItem(
|
|
||||||
createWorkbasketWithSecurity(
|
|
||||||
sourceWB, sourceWB.getOwner(), false, false, false, false));
|
|
||||||
assertThatThrownBy(call).isInstanceOf(WorkbasketAccessItemAlreadyExistException.class);
|
|
||||||
connection.rollback();
|
|
||||||
|
|
||||||
// Destination Workbasket
|
|
||||||
wb = (WorkbasketImpl) workbasketService.newWorkbasket("wb2Key", "DOMAIN_A");
|
|
||||||
wb.setName("Desination-WorkBasket");
|
|
||||||
wb.setDescription("Destination WB where Task should be transfered to");
|
|
||||||
wb.setOwner(user);
|
|
||||||
wb.setType(WorkbasketType.TOPIC);
|
|
||||||
|
|
||||||
Workbasket destinationWB = workbasketService.createWorkbasket(wb);
|
|
||||||
workbasketService.createWorkbasketAccessItem(
|
|
||||||
createWorkbasketWithSecurity(
|
|
||||||
destinationWB, destinationWB.getOwner(), false, true, true, true));
|
|
||||||
|
|
||||||
// Classification required for Task
|
|
||||||
ClassificationImpl classification =
|
|
||||||
(ClassificationImpl) classificationService.newClassification("KEY", "DOMAIN_A", "TASK");
|
|
||||||
classification.setCategory("EXTERNAL");
|
|
||||||
classification.setName("Transfert-Task Classification");
|
|
||||||
classification.setServiceLevel("P1D");
|
|
||||||
classificationService.createClassification(classification);
|
|
||||||
|
|
||||||
// Task which should be transfered
|
|
||||||
TaskImpl task = (TaskImpl) taskServiceImpl.newTask(sourceWB.getId());
|
|
||||||
task.setName("Task Name");
|
|
||||||
task.setDescription("Task used for transfer Test");
|
|
||||||
task.setRead(true);
|
|
||||||
task.setTransferred(false);
|
|
||||||
task.setModified(null);
|
|
||||||
task.setClassificationKey("KEY");
|
|
||||||
task.setOwner(user);
|
|
||||||
task.setPrimaryObjRef(JunitHelper.createDefaultObjRef());
|
|
||||||
task = (TaskImpl) taskServiceImpl.createTask(task);
|
|
||||||
Thread.sleep(sleepTime); // Sleep for modification-timestamp
|
|
||||||
connection.commit();
|
|
||||||
|
|
||||||
Task resultTask = taskServiceImpl.transfer(task.getId(), destinationWB.getId());
|
|
||||||
connection.commit();
|
|
||||||
assertThat(resultTask.isRead()).isFalse();
|
|
||||||
assertThat(resultTask.isTransferred()).isTrue();
|
|
||||||
assertThat(resultTask.getWorkbasketKey()).isEqualTo(destinationWB.getKey());
|
|
||||||
assertThat(resultTask.getModified()).isNotNull();
|
|
||||||
assertThat(resultTask.getModified()).isNotEqualTo(task.getModified());
|
|
||||||
assertThat(resultTask.getCreated()).isNotNull();
|
|
||||||
assertThat(resultTask.getCreated()).isEqualTo(task.getCreated());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void shouldNotTransferAnyTask() throws Exception {
|
|
||||||
try (Connection connection = dataSource.getConnection()) {
|
|
||||||
taskanaEngineImpl.setConnection(connection);
|
|
||||||
|
|
||||||
assertThatThrownBy(() -> taskServiceImpl.transfer(UUID.randomUUID() + "_X", "1"))
|
|
||||||
.isInstanceOf(TaskNotFoundException.class);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@WithAccessId(user = "user-1-1", groups = "businessadmin")
|
|
||||||
@Test
|
|
||||||
void shouldNotTransferByFailingSecurity() throws Exception {
|
|
||||||
final String user = "user-1-1";
|
|
||||||
|
|
||||||
// Set up Security for this Test
|
|
||||||
final DataSource dataSource = TaskanaEngineTestConfiguration.getDataSource();
|
|
||||||
final TaskanaEngineConfiguration taskanaEngineConfiguration =
|
|
||||||
new TaskanaEngineConfiguration(
|
|
||||||
dataSource, false, true, TaskanaEngineTestConfiguration.getSchemaName());
|
|
||||||
final TaskanaEngine taskanaEngine = taskanaEngineConfiguration.buildTaskanaEngine();
|
|
||||||
final TaskanaEngineImpl taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine;
|
|
||||||
taskanaEngineImpl.setConnectionManagementMode(ConnectionManagementMode.AUTOCOMMIT);
|
|
||||||
final TaskServiceImpl taskServiceImpl = (TaskServiceImpl) taskanaEngine.getTaskService();
|
|
||||||
final ClassificationService classificationService = taskanaEngine.getClassificationService();
|
|
||||||
final WorkbasketService workbasketService = taskanaEngine.getWorkbasketService();
|
|
||||||
|
|
||||||
ClassificationImpl classification =
|
|
||||||
(ClassificationImpl) classificationService.newClassification("KEY", "DOMAIN_A", "TASK");
|
|
||||||
classification.setCategory("EXTERNAL");
|
|
||||||
classification.setName("Transfert-Task Classification");
|
|
||||||
classification.setServiceLevel("P1D");
|
|
||||||
classificationService.createClassification(classification);
|
|
||||||
|
|
||||||
WorkbasketImpl wb = (WorkbasketImpl) workbasketService.newWorkbasket("wbKey1", "DOMAIN_A");
|
|
||||||
wb.setName("BASE WB");
|
|
||||||
wb.setDescription("Normal base WB");
|
|
||||||
wb.setOwner(user);
|
|
||||||
wb.setType(WorkbasketType.GROUP);
|
|
||||||
WorkbasketImpl wbCreated = (WorkbasketImpl) workbasketService.createWorkbasket(wb);
|
|
||||||
workbasketService.createWorkbasketAccessItem(
|
|
||||||
createWorkbasketWithSecurity(wbCreated, wbCreated.getOwner(), true, true, true, true));
|
|
||||||
|
|
||||||
WorkbasketImpl wbNoAppend =
|
|
||||||
(WorkbasketImpl) workbasketService.newWorkbasket("keyNoAppend", "DOMAIN_B");
|
|
||||||
wbNoAppend.setName("Test-Security-WorkBasket-APPEND");
|
|
||||||
wbNoAppend.setDescription("Workbasket without permission APPEND on Task");
|
|
||||||
wbNoAppend.setOwner(user);
|
|
||||||
|
|
||||||
wbNoAppend.setType(WorkbasketType.CLEARANCE);
|
|
||||||
WorkbasketImpl wbNoAppendCreated =
|
|
||||||
(WorkbasketImpl) workbasketService.createWorkbasket(wbNoAppend);
|
|
||||||
workbasketService.createWorkbasketAccessItem(
|
|
||||||
createWorkbasketWithSecurity(
|
|
||||||
wbNoAppendCreated, wbNoAppendCreated.getOwner(), true, true, false, true));
|
|
||||||
|
|
||||||
WorkbasketImpl wbNoTransfer =
|
|
||||||
(WorkbasketImpl) workbasketService.newWorkbasket("keyNoTransfer", "DOMAIN_A");
|
|
||||||
wbNoTransfer.setName("Test-Security-WorkBasket-TRANSFER");
|
|
||||||
wbNoTransfer.setDescription("Workbasket without permission TRANSFER on Task");
|
|
||||||
wbNoTransfer.setOwner(user);
|
|
||||||
wbNoTransfer.setType(WorkbasketType.GROUP);
|
|
||||||
wbNoTransfer = (WorkbasketImpl) workbasketService.createWorkbasket(wbNoTransfer);
|
|
||||||
workbasketService.createWorkbasketAccessItem(
|
|
||||||
createWorkbasketWithSecurity(
|
|
||||||
wbNoTransfer, wbNoTransfer.getOwner(), true, true, true, false));
|
|
||||||
|
|
||||||
TaskImpl task = (TaskImpl) taskServiceImpl.newTask(wbCreated.getId());
|
|
||||||
task.setName("Task Name");
|
|
||||||
task.setDescription("Task used for transfer Test");
|
|
||||||
task.setOwner(user);
|
|
||||||
task.setClassificationKey(classification.getKey());
|
|
||||||
task.setPrimaryObjRef(JunitHelper.createDefaultObjRef());
|
|
||||||
TaskImpl taskCreated = (TaskImpl) taskServiceImpl.createTask(task);
|
|
||||||
|
|
||||||
// Check failing with missing APPEND
|
|
||||||
ThrowingCallable call =
|
|
||||||
() -> taskServiceImpl.transfer(taskCreated.getId(), wbNoAppendCreated.getId());
|
|
||||||
assertThatThrownBy(call)
|
|
||||||
.describedAs(
|
|
||||||
"Transfer Task should be FAILED, "
|
|
||||||
+ "because there are no APPEND-Rights on destination WB.")
|
|
||||||
.isInstanceOf(NotAuthorizedException.class)
|
|
||||||
.hasMessageContaining("APPEND");
|
|
||||||
|
|
||||||
assertThat(taskCreated.isTransferred()).isFalse();
|
|
||||||
assertThat(taskCreated.getWorkbasketKey()).isNotEqualTo(wbNoAppendCreated.getKey());
|
|
||||||
assertThat(taskCreated.getWorkbasketKey()).isEqualTo(wbCreated.getKey());
|
|
||||||
|
|
||||||
// Check failing with missing TRANSFER
|
|
||||||
taskCreated.setId("");
|
|
||||||
taskCreated.setWorkbasketKey(wbNoTransfer.getKey());
|
|
||||||
taskCreated.getWorkbasketSummaryImpl().setId(wbNoTransfer.getId());
|
|
||||||
taskCreated.setExternalId(IdGenerator.generateWithPrefix("TST"));
|
|
||||||
TaskImpl taskCreated2 = (TaskImpl) taskServiceImpl.createTask(taskCreated);
|
|
||||||
assertThatThrownBy(() -> taskServiceImpl.transfer(taskCreated2.getId(), wbCreated.getId()))
|
|
||||||
.describedAs(
|
|
||||||
"Transfer Task should be FAILED, because there are no TRANSFER-Rights on current WB.")
|
|
||||||
.isInstanceOf(NotAuthorizedException.class)
|
|
||||||
.hasMessageContaining("TRANSFER");
|
|
||||||
|
|
||||||
assertThat(taskCreated2.isTransferred()).isFalse();
|
|
||||||
assertThat(taskCreated2.getWorkbasketKey()).isNotEqualTo(wbNoAppendCreated.getKey());
|
|
||||||
assertThat(taskCreated2.isTransferred()).isFalse();
|
|
||||||
assertThat(taskCreated2.getWorkbasketKey()).isNotEqualTo(wbNoAppendCreated.getKey());
|
|
||||||
}
|
|
||||||
|
|
||||||
@AfterEach
|
|
||||||
void cleanUp() throws Exception {
|
|
||||||
taskanaEngineImpl.setConnection(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Task generateDummyTask() throws Exception {
|
|
||||||
WorkbasketImpl workbasket = (WorkbasketImpl) workbasketService.newWorkbasket("wb", "DOMAIN_A");
|
|
||||||
workbasket.setName("wb");
|
|
||||||
workbasket.setId("1"); // set id manually for authorization tests
|
|
||||||
workbasket.setType(WorkbasketType.GROUP);
|
|
||||||
taskanaEngine.getWorkbasketService().createWorkbasket(workbasket);
|
|
||||||
|
|
||||||
Classification classification =
|
|
||||||
classificationService.newClassification("TEST", "DOMAIN_A", "TASK");
|
|
||||||
classification.setServiceLevel("P1D");
|
|
||||||
taskanaEngine.getClassificationService().createClassification(classification);
|
|
||||||
|
|
||||||
Task task = taskServiceImpl.newTask(workbasket.getId());
|
|
||||||
task.setClassificationKey(classification.getKey());
|
|
||||||
return task;
|
|
||||||
}
|
|
||||||
|
|
||||||
private WorkbasketAccessItem createWorkbasketWithSecurity(
|
|
||||||
Workbasket wb,
|
|
||||||
String accessId,
|
|
||||||
boolean permOpen,
|
|
||||||
boolean permRead,
|
|
||||||
boolean permAppend,
|
|
||||||
boolean permTransfer) {
|
|
||||||
WorkbasketAccessItem accessItem =
|
|
||||||
workbasketService.newWorkbasketAccessItem(wb.getId(), accessId);
|
|
||||||
accessItem.setPermission(WorkbasketPermission.OPEN, permOpen);
|
|
||||||
accessItem.setPermission(WorkbasketPermission.READ, permRead);
|
|
||||||
accessItem.setPermission(WorkbasketPermission.APPEND, permAppend);
|
|
||||||
accessItem.setPermission(WorkbasketPermission.TRANSFER, permTransfer);
|
|
||||||
return accessItem;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,86 +0,0 @@
|
||||||
package pro.taskana.task.internal;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
|
||||||
import org.mockito.Mock;
|
|
||||||
import org.mockito.junit.jupiter.MockitoExtension;
|
|
||||||
|
|
||||||
import pro.taskana.classification.api.models.Classification;
|
|
||||||
import pro.taskana.classification.internal.ClassificationServiceImpl;
|
|
||||||
import pro.taskana.common.api.TaskanaEngine;
|
|
||||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
|
||||||
import pro.taskana.task.api.models.ObjectReference;
|
|
||||||
import pro.taskana.task.api.models.TaskSummary;
|
|
||||||
import pro.taskana.task.internal.models.TaskImpl;
|
|
||||||
import pro.taskana.workbasket.api.WorkbasketService;
|
|
||||||
import pro.taskana.workbasket.api.models.Workbasket;
|
|
||||||
|
|
||||||
/** Unit Test for TaskServiceImpl. */
|
|
||||||
@ExtendWith(MockitoExtension.class)
|
|
||||||
class TaskServiceImplTest {
|
|
||||||
|
|
||||||
private TaskServiceImpl cut;
|
|
||||||
|
|
||||||
@Mock private InternalTaskanaEngine internalTaskanaEngineMock;
|
|
||||||
|
|
||||||
@Mock private TaskanaEngine taskanaEngineMock;
|
|
||||||
|
|
||||||
@Mock private TaskMapper taskMapperMock;
|
|
||||||
|
|
||||||
@Mock private TaskCommentMapper taskCommentMapperMock;
|
|
||||||
|
|
||||||
@Mock private AttachmentMapper attachmentMapperMock;
|
|
||||||
|
|
||||||
@Mock private WorkbasketService workbasketServiceMock;
|
|
||||||
|
|
||||||
@Mock private ClassificationServiceImpl classificationServiceImplMock;
|
|
||||||
|
|
||||||
@BeforeEach
|
|
||||||
void setup() {
|
|
||||||
when(internalTaskanaEngineMock.getEngine()).thenReturn(taskanaEngineMock);
|
|
||||||
when(taskanaEngineMock.getWorkbasketService()).thenReturn(workbasketServiceMock);
|
|
||||||
when(taskanaEngineMock.getClassificationService()).thenReturn(classificationServiceImplMock);
|
|
||||||
cut =
|
|
||||||
new TaskServiceImpl(
|
|
||||||
internalTaskanaEngineMock, taskMapperMock, taskCommentMapperMock, attachmentMapperMock);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testTaskSummaryEqualsHashCode() throws Exception {
|
|
||||||
Classification classification = CreateTaskModelHelper.createDummyClassification();
|
|
||||||
Workbasket wb = CreateTaskModelHelper.createWorkbasket("WB-ID", "WB-Key");
|
|
||||||
ObjectReference objectReference = JunitHelper.createDefaultObjRef();
|
|
||||||
TaskImpl taskBefore =
|
|
||||||
CreateTaskModelHelper.createUnitTestTask("ID", "taskName", wb.getKey(), classification);
|
|
||||||
taskBefore.setPrimaryObjRef(objectReference);
|
|
||||||
Thread.sleep(10);
|
|
||||||
TaskImpl taskAfter =
|
|
||||||
CreateTaskModelHelper.createUnitTestTask("ID", "taskName", wb.getKey(), classification);
|
|
||||||
taskAfter.setPrimaryObjRef(objectReference);
|
|
||||||
TaskSummary summaryBefore = taskBefore.asSummary();
|
|
||||||
TaskSummary summaryAfter = taskAfter.asSummary();
|
|
||||||
|
|
||||||
assertThat(summaryAfter).isNotEqualTo(summaryBefore);
|
|
||||||
assertThat(summaryAfter.hashCode()).isNotEqualTo(summaryBefore.hashCode());
|
|
||||||
|
|
||||||
taskAfter.setCreated(taskBefore.getCreated());
|
|
||||||
taskAfter.setModified(taskBefore.getModified());
|
|
||||||
summaryAfter = taskAfter.asSummary();
|
|
||||||
assertThat(summaryAfter).isEqualTo(summaryBefore);
|
|
||||||
assertThat(summaryAfter.hashCode()).isEqualTo(summaryBefore.hashCode());
|
|
||||||
|
|
||||||
taskBefore.setModified(null);
|
|
||||||
summaryBefore = taskBefore.asSummary();
|
|
||||||
assertThat(summaryAfter).isNotEqualTo(summaryBefore);
|
|
||||||
assertThat(summaryAfter.hashCode()).isNotEqualTo(summaryBefore.hashCode());
|
|
||||||
|
|
||||||
taskAfter.setModified(null);
|
|
||||||
summaryAfter = taskAfter.asSummary();
|
|
||||||
assertThat(summaryAfter).isEqualTo(summaryBefore);
|
|
||||||
assertThat(summaryAfter.hashCode()).isEqualTo(summaryBefore.hashCode());
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,72 +0,0 @@
|
||||||
package pro.taskana.task.internal;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import org.apache.ibatis.annotations.Param;
|
|
||||||
import org.apache.ibatis.annotations.Result;
|
|
||||||
import org.apache.ibatis.annotations.Select;
|
|
||||||
import org.apache.ibatis.type.ClobTypeHandler;
|
|
||||||
|
|
||||||
import pro.taskana.common.internal.persistence.MapTypeHandler;
|
|
||||||
import pro.taskana.task.internal.models.TaskImpl;
|
|
||||||
|
|
||||||
/** This class contains specific mybatis mappings for task tests. */
|
|
||||||
@SuppressWarnings({"checkstyle:LineLength"})
|
|
||||||
public interface TaskTestMapper {
|
|
||||||
|
|
||||||
@Select("select CUSTOM_ATTRIBUTES from TASK where id = #{taskId}")
|
|
||||||
@Result(
|
|
||||||
property = "customAttributes",
|
|
||||||
column = "CUSTOM_ATTRIBUTES",
|
|
||||||
javaType = String.class,
|
|
||||||
typeHandler = ClobTypeHandler.class)
|
|
||||||
String getCustomAttributesAsString(@Param("taskId") String taskId);
|
|
||||||
|
|
||||||
@Select(
|
|
||||||
"SELECT ID, CREATED, CLAIMED, COMPLETED, MODIFIED, PLANNED, DUE, NAME, CREATOR, DESCRIPTION, NOTE, PRIORITY, STATE, CLASSIFICATION_CATEGORY, CLASSIFICATION_KEY, CLASSIFICATION_ID, WORKBASKET_ID, WORKBASKET_KEY, DOMAIN, BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID, OWNER, POR_COMPANY, POR_SYSTEM, POR_INSTANCE, POR_TYPE, POR_VALUE, IS_READ, IS_TRANSFERRED, CUSTOM_ATTRIBUTES, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, CUSTOM_5, CUSTOM_6, CUSTOM_7, CUSTOM_8, CUSTOM_9, CUSTOM_10 "
|
|
||||||
+ "FROM TASK "
|
|
||||||
+ "WHERE CUSTOM_ATTRIBUTES like #{searchText}")
|
|
||||||
@Result(property = "id", column = "ID")
|
|
||||||
@Result(property = "created", column = "CREATED")
|
|
||||||
@Result(property = "claimed", column = "CLAIMED")
|
|
||||||
@Result(property = "completed", column = "COMPLETED")
|
|
||||||
@Result(property = "modified", column = "MODIFIED")
|
|
||||||
@Result(property = "planned", column = "PLANNED")
|
|
||||||
@Result(property = "due", column = "DUE")
|
|
||||||
@Result(property = "name", column = "NAME")
|
|
||||||
@Result(property = "creator", column = "CREATOR")
|
|
||||||
@Result(property = "description", column = "DESCRIPTION")
|
|
||||||
@Result(property = "note", column = "NOTE")
|
|
||||||
@Result(property = "priority", column = "PRIORITY")
|
|
||||||
@Result(property = "state", column = "STATE")
|
|
||||||
@Result(property = "classificationSummaryImpl.category", column = "CLASSIFICATION_CATEGORY")
|
|
||||||
@Result(property = "classificationSummaryImpl.id", column = "CLASSIFICATION_ID")
|
|
||||||
@Result(property = "classificationSummaryImpl.key", column = "CLASSIFICATION_KEY")
|
|
||||||
@Result(property = "domain", column = "DOMAIN")
|
|
||||||
@Result(property = "businessProcessId", column = "BUSINESS_PROCESS_ID")
|
|
||||||
@Result(property = "parentBusinessProcessId", column = "PARENT_BUSINESS_PROCESS_ID")
|
|
||||||
@Result(property = "owner", column = "OWNER")
|
|
||||||
@Result(property = "primaryObjRef.company", column = "POR_COMPANY")
|
|
||||||
@Result(property = "primaryObjRef.system", column = "POR_SYSTEM")
|
|
||||||
@Result(property = "primaryObjRef.systemInstance", column = "POR_INSTANCE")
|
|
||||||
@Result(property = "primaryObjRef.type", column = "POR_TYPE")
|
|
||||||
@Result(property = "primaryObjRef.value", column = "POR_VALUE")
|
|
||||||
@Result(property = "isRead", column = "IS_READ")
|
|
||||||
@Result(property = "isTransferred", column = "IS_TRANSFERRED")
|
|
||||||
@Result(
|
|
||||||
property = "customAttributes",
|
|
||||||
column = "CUSTOM_ATTRIBUTES",
|
|
||||||
javaType = Map.class,
|
|
||||||
typeHandler = MapTypeHandler.class)
|
|
||||||
@Result(property = "custom1", column = "CUSTOM_1")
|
|
||||||
@Result(property = "custom2", column = "CUSTOM_2")
|
|
||||||
@Result(property = "custom3", column = "CUSTOM_3")
|
|
||||||
@Result(property = "custom4", column = "CUSTOM_4")
|
|
||||||
@Result(property = "custom5", column = "CUSTOM_5")
|
|
||||||
@Result(property = "custom6", column = "CUSTOM_6")
|
|
||||||
@Result(property = "custom7", column = "CUSTOM_7")
|
|
||||||
@Result(property = "custom8", column = "CUSTOM_8")
|
|
||||||
@Result(property = "custom9", column = "CUSTOM_9")
|
|
||||||
@Result(property = "custom10", column = "CUSTOM_10")
|
|
||||||
List<TaskImpl> selectTasksByCustomAttributeLike(@Param("searchText") String searchText);
|
|
||||||
}
|
|
|
@ -1,106 +0,0 @@
|
||||||
package pro.taskana.task.internal;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
|
||||||
import static org.mockito.Mockito.doReturn;
|
|
||||||
import static org.mockito.Mockito.times;
|
|
||||||
import static org.mockito.Mockito.verify;
|
|
||||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
|
||||||
|
|
||||||
import org.apache.ibatis.session.SqlSession;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
|
||||||
import org.mockito.Mock;
|
|
||||||
import org.mockito.Mockito;
|
|
||||||
import org.mockito.junit.jupiter.MockitoExtension;
|
|
||||||
|
|
||||||
import pro.taskana.TaskanaEngineConfiguration;
|
|
||||||
import pro.taskana.classification.api.models.Classification;
|
|
||||||
import pro.taskana.classification.internal.ClassificationQueryImpl;
|
|
||||||
import pro.taskana.classification.internal.ClassificationServiceImpl;
|
|
||||||
import pro.taskana.common.api.TaskanaEngine;
|
|
||||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
|
||||||
import pro.taskana.task.api.TaskState;
|
|
||||||
import pro.taskana.task.api.models.Task;
|
|
||||||
import pro.taskana.task.internal.models.TaskImpl;
|
|
||||||
import pro.taskana.workbasket.api.WorkbasketPermission;
|
|
||||||
import pro.taskana.workbasket.api.WorkbasketService;
|
|
||||||
import pro.taskana.workbasket.api.models.Workbasket;
|
|
||||||
|
|
||||||
/** Unit Test for TaskServiceImpl. */
|
|
||||||
@ExtendWith(MockitoExtension.class)
|
|
||||||
class TaskTransferrerTest {
|
|
||||||
|
|
||||||
private TaskTransferrer cut;
|
|
||||||
@Mock private TaskServiceImpl taskServiceImplMock;
|
|
||||||
|
|
||||||
@Mock private TaskanaEngineConfiguration taskanaEngineConfigurationMock;
|
|
||||||
|
|
||||||
@Mock private InternalTaskanaEngine internalTaskanaEngineMock;
|
|
||||||
|
|
||||||
@Mock private TaskanaEngine taskanaEngineMock;
|
|
||||||
|
|
||||||
@Mock private TaskMapper taskMapperMock;
|
|
||||||
|
|
||||||
@Mock private ObjectReferenceMapper objectReferenceMapperMock;
|
|
||||||
|
|
||||||
@Mock private WorkbasketService workbasketServiceMock;
|
|
||||||
|
|
||||||
@Mock private ClassificationServiceImpl classificationServiceImplMock;
|
|
||||||
|
|
||||||
@Mock private AttachmentMapper attachmentMapperMock;
|
|
||||||
|
|
||||||
@Mock private ClassificationQueryImpl classificationQueryImplMock;
|
|
||||||
|
|
||||||
@Mock private SqlSession sqlSessionMock;
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testTransferTaskToDestinationWorkbasketWithoutSecurity() throws Exception {
|
|
||||||
doReturn(taskanaEngineMock).when(internalTaskanaEngineMock).getEngine();
|
|
||||||
doReturn(workbasketServiceMock).when(taskanaEngineMock).getWorkbasketService();
|
|
||||||
cut = new TaskTransferrer(internalTaskanaEngineMock, taskMapperMock, taskServiceImplMock);
|
|
||||||
|
|
||||||
final TaskTransferrer cutSpy = Mockito.spy(cut);
|
|
||||||
Workbasket destinationWorkbasket = CreateTaskModelHelper.createWorkbasket("2", "k1");
|
|
||||||
Workbasket sourceWorkbasket = CreateTaskModelHelper.createWorkbasket("47", "key47");
|
|
||||||
Classification dummyClassification = CreateTaskModelHelper.createDummyClassification();
|
|
||||||
TaskImpl task =
|
|
||||||
CreateTaskModelHelper.createUnitTestTask(
|
|
||||||
"1", "Unit Test Task 1", "key47", dummyClassification);
|
|
||||||
task.setWorkbasketSummary(sourceWorkbasket.asSummary());
|
|
||||||
task.setRead(true);
|
|
||||||
doReturn(destinationWorkbasket)
|
|
||||||
.when(workbasketServiceMock)
|
|
||||||
.getWorkbasket(destinationWorkbasket.getId());
|
|
||||||
doReturn(task).when(taskServiceImplMock).getTask(task.getId());
|
|
||||||
|
|
||||||
final Task actualTask = cutSpy.transfer(task.getId(), destinationWorkbasket.getId());
|
|
||||||
|
|
||||||
verify(internalTaskanaEngineMock, times(1)).openConnection();
|
|
||||||
verify(workbasketServiceMock, times(1))
|
|
||||||
.checkAuthorization(destinationWorkbasket.getId(), WorkbasketPermission.APPEND);
|
|
||||||
verify(workbasketServiceMock, times(1))
|
|
||||||
.checkAuthorization(sourceWorkbasket.getId(), WorkbasketPermission.TRANSFER);
|
|
||||||
verify(workbasketServiceMock, times(1)).getWorkbasket(destinationWorkbasket.getId());
|
|
||||||
verify(taskMapperMock, times(1)).update(any());
|
|
||||||
verify(internalTaskanaEngineMock, times(1)).returnConnection();
|
|
||||||
verify(internalTaskanaEngineMock, times(1)).getEngine();
|
|
||||||
verify(internalTaskanaEngineMock).getHistoryEventManager();
|
|
||||||
verify(taskanaEngineMock).getWorkbasketService();
|
|
||||||
verifyNoMoreInteractions(
|
|
||||||
attachmentMapperMock,
|
|
||||||
taskanaEngineConfigurationMock,
|
|
||||||
taskanaEngineMock,
|
|
||||||
internalTaskanaEngineMock,
|
|
||||||
taskMapperMock,
|
|
||||||
objectReferenceMapperMock,
|
|
||||||
workbasketServiceMock,
|
|
||||||
sqlSessionMock,
|
|
||||||
classificationQueryImplMock);
|
|
||||||
|
|
||||||
assertThat(actualTask.isRead()).isFalse();
|
|
||||||
assertThat(actualTask.getState()).isEqualTo(TaskState.READY);
|
|
||||||
assertThat(actualTask.isTransferred()).isTrue();
|
|
||||||
assertThat(actualTask.getWorkbasketKey()).isEqualTo(destinationWorkbasket.getKey());
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,57 +0,0 @@
|
||||||
package pro.taskana.workbasket.internal;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import org.apache.ibatis.session.SqlSession;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
|
||||||
import org.mockito.InjectMocks;
|
|
||||||
import org.mockito.Mock;
|
|
||||||
import org.mockito.junit.jupiter.MockitoExtension;
|
|
||||||
|
|
||||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
|
||||||
import pro.taskana.workbasket.api.models.WorkbasketAccessItem;
|
|
||||||
import pro.taskana.workbasket.internal.models.WorkbasketAccessItemImpl;
|
|
||||||
|
|
||||||
/** Test for WorkbasketAccessItemQueryImpl. */
|
|
||||||
@ExtendWith(MockitoExtension.class)
|
|
||||||
class WorkbasketAccessItemQueryImplTest {
|
|
||||||
|
|
||||||
@InjectMocks private WorkbasketAccessItemQueryImpl workbasketAccessItemQueryImpl;
|
|
||||||
|
|
||||||
@Mock private InternalTaskanaEngine internalTaskanaEngine;
|
|
||||||
|
|
||||||
@Mock private SqlSession sqlSession;
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void should_ReturnList_When_BuilderIsUsed() {
|
|
||||||
when(internalTaskanaEngine.openAndReturnConnection(any())).thenReturn(new ArrayList<>());
|
|
||||||
|
|
||||||
List<WorkbasketAccessItem> result =
|
|
||||||
workbasketAccessItemQueryImpl.accessIdIn("test", "asd").list();
|
|
||||||
assertThat(result).isNotNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void should_ReturnListWithOffset_When_BuilderIsUsed() {
|
|
||||||
when(internalTaskanaEngine.getSqlSession()).thenReturn(sqlSession);
|
|
||||||
when(sqlSession.selectList(any(), any(), any())).thenReturn(new ArrayList<>());
|
|
||||||
|
|
||||||
List<WorkbasketAccessItem> result =
|
|
||||||
workbasketAccessItemQueryImpl.accessIdIn("test", "asd").list(1, 1);
|
|
||||||
assertThat(result).isNotNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void should_ReturnOneItem_When_BuilderIsUsed() {
|
|
||||||
when(internalTaskanaEngine.getSqlSession()).thenReturn(sqlSession);
|
|
||||||
when(sqlSession.selectOne(any(), any())).thenReturn(new WorkbasketAccessItemImpl());
|
|
||||||
|
|
||||||
WorkbasketAccessItem result = workbasketAccessItemQueryImpl.accessIdIn("test", "asd").single();
|
|
||||||
assertThat(result).isNotNull();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,81 +0,0 @@
|
||||||
package pro.taskana.workbasket.internal;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import org.apache.ibatis.session.SqlSession;
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
|
||||||
import org.mockito.InjectMocks;
|
|
||||||
import org.mockito.Mock;
|
|
||||||
import org.mockito.junit.jupiter.MockitoExtension;
|
|
||||||
|
|
||||||
import pro.taskana.common.api.TaskanaEngine;
|
|
||||||
import pro.taskana.common.api.security.CurrentUserContext;
|
|
||||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
|
||||||
import pro.taskana.workbasket.api.models.WorkbasketSummary;
|
|
||||||
import pro.taskana.workbasket.internal.models.WorkbasketSummaryImpl;
|
|
||||||
|
|
||||||
/** Test for WorkbasketQueryImpl. */
|
|
||||||
@ExtendWith(MockitoExtension.class)
|
|
||||||
class WorkbasketQueryImplTest {
|
|
||||||
|
|
||||||
@InjectMocks private WorkbasketQueryImpl workbasketQueryImpl;
|
|
||||||
|
|
||||||
@Mock private InternalTaskanaEngine internalTaskanaEngine;
|
|
||||||
|
|
||||||
@Mock private TaskanaEngine taskanaEngine;
|
|
||||||
|
|
||||||
@Mock private SqlSession sqlSession;
|
|
||||||
|
|
||||||
@Mock private CurrentUserContext currentUserContext;
|
|
||||||
|
|
||||||
@BeforeEach
|
|
||||||
void setup() {
|
|
||||||
when(internalTaskanaEngine.getEngine()).thenReturn(taskanaEngine);
|
|
||||||
when(taskanaEngine.getCurrentUserContext()).thenReturn(currentUserContext);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void should_ReturnList_When_BuilderIsUsed() {
|
|
||||||
when(internalTaskanaEngine.getSqlSession()).thenReturn(sqlSession);
|
|
||||||
when(sqlSession.selectList(any(), any())).thenReturn(new ArrayList<>());
|
|
||||||
|
|
||||||
List<WorkbasketSummary> result =
|
|
||||||
workbasketQueryImpl
|
|
||||||
.nameIn("Gruppenpostkorb KSC 1", "Gruppenpostkorb KSC 2")
|
|
||||||
.keyLike("GPK_%")
|
|
||||||
.list();
|
|
||||||
assertThat(result).isNotNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void should_ReturnListWithOffset_When_BuilderIsUsed() {
|
|
||||||
when(internalTaskanaEngine.getSqlSession()).thenReturn(sqlSession);
|
|
||||||
when(sqlSession.selectList(any(), any(), any())).thenReturn(new ArrayList<>());
|
|
||||||
|
|
||||||
List<WorkbasketSummary> result =
|
|
||||||
workbasketQueryImpl
|
|
||||||
.nameIn("Gruppenpostkorb KSC 1", "Gruppenpostkorb KSC 2")
|
|
||||||
.keyLike("GPK_%")
|
|
||||||
.list(1, 1);
|
|
||||||
assertThat(result).isNotNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void should_ReturnOneItem_When_BuilderIsUsed() {
|
|
||||||
when(internalTaskanaEngine.getSqlSession()).thenReturn(sqlSession);
|
|
||||||
when(sqlSession.selectOne(any(), any())).thenReturn(new WorkbasketSummaryImpl());
|
|
||||||
|
|
||||||
WorkbasketSummary result =
|
|
||||||
workbasketQueryImpl
|
|
||||||
.nameIn("Gruppenpostkorb KSC 1", "Gruppenpostkorb KSC 2")
|
|
||||||
.keyLike("GPK_%")
|
|
||||||
.single();
|
|
||||||
assertThat(result).isNotNull();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,194 +0,0 @@
|
||||||
package pro.taskana.workbasket.internal;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import javax.sql.DataSource;
|
|
||||||
import org.junit.jupiter.api.BeforeAll;
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
|
||||||
|
|
||||||
import pro.taskana.TaskanaEngineConfiguration;
|
|
||||||
import pro.taskana.common.api.TaskanaEngine;
|
|
||||||
import pro.taskana.common.api.TaskanaEngine.ConnectionManagementMode;
|
|
||||||
import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
|
|
||||||
import pro.taskana.common.internal.util.IdGenerator;
|
|
||||||
import pro.taskana.common.test.security.JaasExtension;
|
|
||||||
import pro.taskana.common.test.security.WithAccessId;
|
|
||||||
import pro.taskana.sampledata.SampleDataGenerator;
|
|
||||||
import pro.taskana.workbasket.api.WorkbasketPermission;
|
|
||||||
import pro.taskana.workbasket.api.WorkbasketService;
|
|
||||||
import pro.taskana.workbasket.api.WorkbasketType;
|
|
||||||
import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
|
|
||||||
import pro.taskana.workbasket.api.models.Workbasket;
|
|
||||||
import pro.taskana.workbasket.api.models.WorkbasketAccessItem;
|
|
||||||
import pro.taskana.workbasket.api.models.WorkbasketSummary;
|
|
||||||
import pro.taskana.workbasket.internal.models.WorkbasketImpl;
|
|
||||||
|
|
||||||
/** Integration Test for workbasketServiceImpl with connection management mode AUTOCOMMIT. */
|
|
||||||
@ExtendWith(JaasExtension.class)
|
|
||||||
class WorkbasketServiceImplIntAutocommitTest {
|
|
||||||
|
|
||||||
private static final int SLEEP_TIME = 100;
|
|
||||||
private WorkbasketService workBasketService;
|
|
||||||
|
|
||||||
@BeforeAll
|
|
||||||
static void resetDb() {
|
|
||||||
DataSource ds = TaskanaEngineTestConfiguration.getDataSource();
|
|
||||||
String schemaName = TaskanaEngineTestConfiguration.getSchemaName();
|
|
||||||
new SampleDataGenerator(ds, schemaName).dropDb();
|
|
||||||
}
|
|
||||||
|
|
||||||
@BeforeEach
|
|
||||||
void setup() throws Exception {
|
|
||||||
DataSource dataSource = TaskanaEngineTestConfiguration.getDataSource();
|
|
||||||
String schemaName = TaskanaEngineTestConfiguration.getSchemaName();
|
|
||||||
TaskanaEngineConfiguration taskanaEngineConfiguration =
|
|
||||||
new TaskanaEngineConfiguration(dataSource, false, schemaName);
|
|
||||||
TaskanaEngine taskanaEngine = taskanaEngineConfiguration.buildTaskanaEngine();
|
|
||||||
taskanaEngine.setConnectionManagementMode(ConnectionManagementMode.AUTOCOMMIT);
|
|
||||||
workBasketService = taskanaEngine.getWorkbasketService();
|
|
||||||
SampleDataGenerator sampleDataGenerator = new SampleDataGenerator(dataSource, schemaName);
|
|
||||||
sampleDataGenerator.clearDb();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testGetWorkbasketFail() {
|
|
||||||
assertThatThrownBy(() -> workBasketService.getWorkbasket("fail"))
|
|
||||||
.isInstanceOf(WorkbasketNotFoundException.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
@WithAccessId(user = "user-1-1", groups = "businessadmin")
|
|
||||||
@Test
|
|
||||||
void testUpdateWorkbasket() throws Exception {
|
|
||||||
String id0 = IdGenerator.generateWithPrefix("TWB");
|
|
||||||
Workbasket workbasket0 =
|
|
||||||
createTestWorkbasket(id0, "key0", "DOMAIN_A", "Superbasket", WorkbasketType.GROUP);
|
|
||||||
workbasket0 = workBasketService.createWorkbasket(workbasket0);
|
|
||||||
createWorkbasketWithSecurity(workbasket0, "user-1-1", true, true, false, false);
|
|
||||||
|
|
||||||
String id1 = IdGenerator.generateWithPrefix("TWB");
|
|
||||||
Workbasket workbasket1 =
|
|
||||||
createTestWorkbasket(id1, "key1", "DOMAIN_A", "Megabasket", WorkbasketType.GROUP);
|
|
||||||
workbasket1 = workBasketService.createWorkbasket(workbasket1);
|
|
||||||
createWorkbasketWithSecurity(workbasket1, "user-1-1", true, true, false, false);
|
|
||||||
|
|
||||||
String id2 = IdGenerator.generateWithPrefix("TWB");
|
|
||||||
Workbasket workbasket2 =
|
|
||||||
createTestWorkbasket(id2, "key2", "DOMAIN_A", "Hyperbasket", WorkbasketType.GROUP);
|
|
||||||
workbasket2 = workBasketService.createWorkbasket(workbasket2);
|
|
||||||
createWorkbasketWithSecurity(workbasket2, "user-1-1", true, true, false, false);
|
|
||||||
List<String> distTargets = List.of(workbasket0.getId(), workbasket1.getId());
|
|
||||||
Thread.sleep(SLEEP_TIME);
|
|
||||||
workBasketService.setDistributionTargets(workbasket2.getId(), distTargets);
|
|
||||||
|
|
||||||
String id3 = IdGenerator.generateWithPrefix("TWB");
|
|
||||||
Workbasket workbasket3 =
|
|
||||||
createTestWorkbasket(
|
|
||||||
id3, "key3", "DOMAIN_A", "hm ... irgend ein basket", WorkbasketType.GROUP);
|
|
||||||
workbasket3 = workBasketService.createWorkbasket(workbasket3);
|
|
||||||
createWorkbasketWithSecurity(workbasket3, "user-1-1", true, true, false, false);
|
|
||||||
|
|
||||||
List<String> newDistTargets = List.of(workbasket3.getId());
|
|
||||||
Thread.sleep(SLEEP_TIME);
|
|
||||||
workBasketService.setDistributionTargets(workbasket2.getId(), newDistTargets);
|
|
||||||
|
|
||||||
Workbasket foundBasket = workBasketService.getWorkbasket(workbasket2.getId());
|
|
||||||
|
|
||||||
List<WorkbasketSummary> distributionTargets =
|
|
||||||
workBasketService.getDistributionTargets(foundBasket.getId());
|
|
||||||
|
|
||||||
assertThat(distributionTargets).hasSize(1);
|
|
||||||
assertThat(distributionTargets.get(0).getId()).isEqualTo(id3);
|
|
||||||
assertThat(workBasketService.getWorkbasket(id2).getCreated())
|
|
||||||
.isNotEqualTo(workBasketService.getWorkbasket(id2).getModified());
|
|
||||||
assertThat(workBasketService.getWorkbasket(id1).getCreated())
|
|
||||||
.isEqualTo(workBasketService.getWorkbasket(id1).getModified());
|
|
||||||
assertThat(workBasketService.getWorkbasket(id3).getCreated())
|
|
||||||
.isEqualTo(workBasketService.getWorkbasket(id3).getModified());
|
|
||||||
}
|
|
||||||
|
|
||||||
@WithAccessId(user = "user-1-1", groups = "businessadmin")
|
|
||||||
@Test
|
|
||||||
void testInsertWorkbasketAccessUser() throws Exception {
|
|
||||||
|
|
||||||
Workbasket wb =
|
|
||||||
createTestWorkbasket(
|
|
||||||
"k100000000000000000000000000000000000000",
|
|
||||||
"key1",
|
|
||||||
"DOMAIN_A",
|
|
||||||
"name",
|
|
||||||
WorkbasketType.PERSONAL);
|
|
||||||
workBasketService.createWorkbasket(wb);
|
|
||||||
WorkbasketAccessItem accessItem =
|
|
||||||
workBasketService.newWorkbasketAccessItem(
|
|
||||||
"k100000000000000000000000000000000000000", "Arthur Dent");
|
|
||||||
accessItem.setPermission(WorkbasketPermission.OPEN, true);
|
|
||||||
accessItem.setPermission(WorkbasketPermission.READ, true);
|
|
||||||
workBasketService.createWorkbasketAccessItem(accessItem);
|
|
||||||
|
|
||||||
assertThat(
|
|
||||||
workBasketService.getWorkbasketAccessItems("k100000000000000000000000000000000000000"))
|
|
||||||
.hasSize(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
@WithAccessId(user = "user-1-1", groups = "businessadmin")
|
|
||||||
@Test
|
|
||||||
void testUpdateWorkbasketAccessUser() throws Exception {
|
|
||||||
WorkbasketImpl wb = (WorkbasketImpl) workBasketService.newWorkbasket("key", "DOMAIN_A");
|
|
||||||
wb.setId("k200000000000000000000000000000000000000");
|
|
||||||
wb.setName("name");
|
|
||||||
wb.setDescription("Description of a Workbasket...");
|
|
||||||
wb.setType(WorkbasketType.GROUP);
|
|
||||||
workBasketService.createWorkbasket(wb);
|
|
||||||
|
|
||||||
WorkbasketAccessItem accessItem =
|
|
||||||
workBasketService.newWorkbasketAccessItem(
|
|
||||||
"k200000000000000000000000000000000000000", "Zaphod Beeblebrox");
|
|
||||||
accessItem.setPermission(WorkbasketPermission.OPEN, true);
|
|
||||||
accessItem.setPermission(WorkbasketPermission.READ, true);
|
|
||||||
workBasketService.createWorkbasketAccessItem(accessItem);
|
|
||||||
|
|
||||||
assertThat(
|
|
||||||
workBasketService.getWorkbasketAccessItems("k200000000000000000000000000000000000000"))
|
|
||||||
.hasSize(1);
|
|
||||||
|
|
||||||
accessItem.setPermission(WorkbasketPermission.APPEND, true);
|
|
||||||
workBasketService.updateWorkbasketAccessItem(accessItem);
|
|
||||||
|
|
||||||
if (TaskanaEngineConfiguration.shouldUseLowerCaseForAccessIds()) {
|
|
||||||
assertThat(accessItem.getAccessId()).isEqualTo("zaphod beeblebrox");
|
|
||||||
} else {
|
|
||||||
assertThat(accessItem.getAccessId()).isEqualTo("Zaphod Beeblebrox");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void createWorkbasketWithSecurity(
|
|
||||||
Workbasket wb,
|
|
||||||
String accessId,
|
|
||||||
boolean permOpen,
|
|
||||||
boolean permRead,
|
|
||||||
boolean permAppend,
|
|
||||||
boolean permTransfer)
|
|
||||||
throws Exception {
|
|
||||||
WorkbasketAccessItem accessItem =
|
|
||||||
workBasketService.newWorkbasketAccessItem(wb.getId(), accessId);
|
|
||||||
accessItem.setPermission(WorkbasketPermission.OPEN, permOpen);
|
|
||||||
accessItem.setPermission(WorkbasketPermission.READ, permRead);
|
|
||||||
accessItem.setPermission(WorkbasketPermission.APPEND, permAppend);
|
|
||||||
accessItem.setPermission(WorkbasketPermission.TRANSFER, permTransfer);
|
|
||||||
workBasketService.createWorkbasketAccessItem(accessItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Workbasket createTestWorkbasket(
|
|
||||||
String id, String key, String domain, String name, WorkbasketType type) {
|
|
||||||
WorkbasketImpl wb = (WorkbasketImpl) workBasketService.newWorkbasket(key, domain);
|
|
||||||
wb.setId(id);
|
|
||||||
wb.setName(name);
|
|
||||||
wb.setDescription("Description of a Workbasket...");
|
|
||||||
wb.setType(type);
|
|
||||||
return wb;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,190 +0,0 @@
|
||||||
package pro.taskana.workbasket.internal;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
|
|
||||||
import java.sql.Connection;
|
|
||||||
import java.util.List;
|
|
||||||
import javax.sql.DataSource;
|
|
||||||
import org.junit.jupiter.api.AfterEach;
|
|
||||||
import org.junit.jupiter.api.BeforeAll;
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
|
||||||
|
|
||||||
import pro.taskana.TaskanaEngineConfiguration;
|
|
||||||
import pro.taskana.common.api.TaskanaEngine;
|
|
||||||
import pro.taskana.common.api.TaskanaEngine.ConnectionManagementMode;
|
|
||||||
import pro.taskana.common.internal.TaskanaEngineImpl;
|
|
||||||
import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
|
|
||||||
import pro.taskana.common.internal.util.IdGenerator;
|
|
||||||
import pro.taskana.common.test.security.JaasExtension;
|
|
||||||
import pro.taskana.common.test.security.WithAccessId;
|
|
||||||
import pro.taskana.sampledata.SampleDataGenerator;
|
|
||||||
import pro.taskana.workbasket.api.WorkbasketPermission;
|
|
||||||
import pro.taskana.workbasket.api.WorkbasketService;
|
|
||||||
import pro.taskana.workbasket.api.WorkbasketType;
|
|
||||||
import pro.taskana.workbasket.api.models.Workbasket;
|
|
||||||
import pro.taskana.workbasket.api.models.WorkbasketAccessItem;
|
|
||||||
import pro.taskana.workbasket.api.models.WorkbasketSummary;
|
|
||||||
import pro.taskana.workbasket.internal.models.WorkbasketImpl;
|
|
||||||
|
|
||||||
/** Integration Test for workbasketServiceImpl with connection mode EXPLICIT. */
|
|
||||||
@ExtendWith(JaasExtension.class)
|
|
||||||
class WorkbasketServiceImplIntExplicitTest {
|
|
||||||
|
|
||||||
private static final int SLEEP_TIME = 100;
|
|
||||||
|
|
||||||
private DataSource dataSource;
|
|
||||||
private TaskanaEngine taskanaEngine;
|
|
||||||
private TaskanaEngineImpl taskanaEngineImpl;
|
|
||||||
private WorkbasketService workBasketService;
|
|
||||||
|
|
||||||
@BeforeAll
|
|
||||||
static void resetDb() {
|
|
||||||
DataSource ds = TaskanaEngineTestConfiguration.getDataSource();
|
|
||||||
String schemaName = TaskanaEngineTestConfiguration.getSchemaName();
|
|
||||||
new SampleDataGenerator(ds, schemaName).dropDb();
|
|
||||||
}
|
|
||||||
|
|
||||||
@BeforeEach
|
|
||||||
void setup() throws Exception {
|
|
||||||
dataSource = TaskanaEngineTestConfiguration.getDataSource();
|
|
||||||
String schemaName = TaskanaEngineTestConfiguration.getSchemaName();
|
|
||||||
TaskanaEngineConfiguration taskanaEngineConfiguration =
|
|
||||||
new TaskanaEngineConfiguration(dataSource, false, schemaName);
|
|
||||||
taskanaEngine = taskanaEngineConfiguration.buildTaskanaEngine();
|
|
||||||
taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine;
|
|
||||||
taskanaEngineImpl.setConnectionManagementMode(ConnectionManagementMode.EXPLICIT);
|
|
||||||
SampleDataGenerator sampleDataGenerator = new SampleDataGenerator(dataSource, schemaName);
|
|
||||||
sampleDataGenerator.clearDb();
|
|
||||||
}
|
|
||||||
|
|
||||||
@WithAccessId(user = "user-1-1", groups = "businessadmin")
|
|
||||||
@Test
|
|
||||||
void testUpdateWorkbasket() throws Exception {
|
|
||||||
try (Connection connection = dataSource.getConnection()) {
|
|
||||||
taskanaEngineImpl.setConnection(connection);
|
|
||||||
workBasketService = taskanaEngine.getWorkbasketService();
|
|
||||||
String id0 = IdGenerator.generateWithPrefix("TWB");
|
|
||||||
Workbasket workbasket0 =
|
|
||||||
createTestWorkbasket(id0, "key0", "DOMAIN_A", "Superbasket", WorkbasketType.GROUP);
|
|
||||||
workbasket0 = workBasketService.createWorkbasket(workbasket0);
|
|
||||||
createWorkbasketWithSecurity(workbasket0, "user-1-1", true, true, false, false);
|
|
||||||
|
|
||||||
String id1 = IdGenerator.generateWithPrefix("TWB");
|
|
||||||
Workbasket workbasket1 =
|
|
||||||
createTestWorkbasket(id1, "key1", "DOMAIN_A", "Megabasket", WorkbasketType.GROUP);
|
|
||||||
workbasket1 = workBasketService.createWorkbasket(workbasket1);
|
|
||||||
createWorkbasketWithSecurity(workbasket1, "user-1-1", true, true, false, false);
|
|
||||||
|
|
||||||
String id2 = IdGenerator.generateWithPrefix("TWB");
|
|
||||||
Workbasket workbasket2 =
|
|
||||||
createTestWorkbasket(id2, "key2", "DOMAIN_A", "Hyperbasket", WorkbasketType.GROUP);
|
|
||||||
workbasket2 = workBasketService.createWorkbasket(workbasket2);
|
|
||||||
createWorkbasketWithSecurity(workbasket2, "user-1-1", true, true, false, false);
|
|
||||||
|
|
||||||
List<String> distTargets = List.of(workbasket0.getId(), workbasket1.getId());
|
|
||||||
Thread.sleep(SLEEP_TIME);
|
|
||||||
workBasketService.setDistributionTargets(workbasket2.getId(), distTargets);
|
|
||||||
|
|
||||||
String id3 = IdGenerator.generateWithPrefix("TWB");
|
|
||||||
Workbasket workbasket3 =
|
|
||||||
createTestWorkbasket(
|
|
||||||
id3, "key3", "DOMAIN_A", "hm ... irgend ein basket", WorkbasketType.GROUP);
|
|
||||||
workbasket3 = workBasketService.createWorkbasket(workbasket3);
|
|
||||||
createWorkbasketWithSecurity(workbasket3, "user-1-1", true, true, false, false);
|
|
||||||
|
|
||||||
List<String> newDistTargets = List.of(workbasket3.getId());
|
|
||||||
Thread.sleep(SLEEP_TIME);
|
|
||||||
workBasketService.setDistributionTargets(workbasket2.getId(), newDistTargets);
|
|
||||||
|
|
||||||
Workbasket foundBasket = workBasketService.getWorkbasket(workbasket2.getId());
|
|
||||||
|
|
||||||
List<WorkbasketSummary> distributionTargets =
|
|
||||||
workBasketService.getDistributionTargets(foundBasket.getId());
|
|
||||||
assertThat(distributionTargets).hasSize(1);
|
|
||||||
assertThat(distributionTargets.get(0).getId()).isEqualTo(workbasket3.getId());
|
|
||||||
assertThat(workBasketService.getWorkbasket(id2).getCreated())
|
|
||||||
.isNotEqualTo(workBasketService.getWorkbasket(id2).getModified());
|
|
||||||
assertThat(workBasketService.getWorkbasket(id1).getCreated())
|
|
||||||
.isEqualTo(workBasketService.getWorkbasket(id1).getModified());
|
|
||||||
assertThat(workBasketService.getWorkbasket(id3).getCreated())
|
|
||||||
.isEqualTo(workBasketService.getWorkbasket(id3).getModified());
|
|
||||||
connection.commit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@WithAccessId(user = "user-1-1", groups = "businessadmin")
|
|
||||||
@Test
|
|
||||||
void testInsertWorkbasketAccessUser() throws Exception {
|
|
||||||
try (Connection connection = dataSource.getConnection()) {
|
|
||||||
taskanaEngineImpl.setConnection(connection);
|
|
||||||
workBasketService = taskanaEngine.getWorkbasketService();
|
|
||||||
Workbasket wb =
|
|
||||||
createTestWorkbasket("id1", "key1", "DOMAIN_A", "name", WorkbasketType.CLEARANCE);
|
|
||||||
workBasketService.createWorkbasket(wb);
|
|
||||||
WorkbasketAccessItem accessItem =
|
|
||||||
workBasketService.newWorkbasketAccessItem("id1", "Arthur Dent");
|
|
||||||
accessItem.setPermission(WorkbasketPermission.OPEN, true);
|
|
||||||
accessItem.setPermission(WorkbasketPermission.READ, true);
|
|
||||||
workBasketService.createWorkbasketAccessItem(accessItem);
|
|
||||||
|
|
||||||
assertThat(workBasketService.getWorkbasketAccessItems("id1")).hasSize(1);
|
|
||||||
connection.commit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@WithAccessId(user = "user-1-1", groups = "businessadmin")
|
|
||||||
@Test
|
|
||||||
void testUpdateWorkbasketAccessUser() throws Exception {
|
|
||||||
try (Connection connection = dataSource.getConnection()) {
|
|
||||||
taskanaEngineImpl.setConnection(connection);
|
|
||||||
workBasketService = taskanaEngine.getWorkbasketService();
|
|
||||||
|
|
||||||
Workbasket wb =
|
|
||||||
createTestWorkbasket("key2", "kkey2", "DOMAIN_A", "name", WorkbasketType.CLEARANCE);
|
|
||||||
workBasketService.createWorkbasket(wb);
|
|
||||||
WorkbasketAccessItem accessItem =
|
|
||||||
workBasketService.newWorkbasketAccessItem("key2", "Zaphod Beeblebrox");
|
|
||||||
accessItem.setPermission(WorkbasketPermission.OPEN, true);
|
|
||||||
accessItem.setPermission(WorkbasketPermission.READ, true);
|
|
||||||
workBasketService.createWorkbasketAccessItem(accessItem);
|
|
||||||
|
|
||||||
assertThat(workBasketService.getWorkbasketAccessItems("key2")).hasSize(1);
|
|
||||||
assertThat(accessItem.getAccessId()).isEqualTo("zaphod beeblebrox");
|
|
||||||
connection.commit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@AfterEach
|
|
||||||
void cleanUp() throws Exception {
|
|
||||||
taskanaEngineImpl.setConnection(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void createWorkbasketWithSecurity(
|
|
||||||
Workbasket wb,
|
|
||||||
String accessId,
|
|
||||||
boolean permOpen,
|
|
||||||
boolean permRead,
|
|
||||||
boolean permAppend,
|
|
||||||
boolean permTransfer)
|
|
||||||
throws Exception {
|
|
||||||
WorkbasketAccessItem accessItem =
|
|
||||||
workBasketService.newWorkbasketAccessItem(wb.getId(), accessId);
|
|
||||||
accessItem.setPermission(WorkbasketPermission.OPEN, permOpen);
|
|
||||||
accessItem.setPermission(WorkbasketPermission.READ, permRead);
|
|
||||||
accessItem.setPermission(WorkbasketPermission.APPEND, permAppend);
|
|
||||||
accessItem.setPermission(WorkbasketPermission.TRANSFER, permTransfer);
|
|
||||||
workBasketService.createWorkbasketAccessItem(accessItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Workbasket createTestWorkbasket(
|
|
||||||
String id, String key, String domain, String name, WorkbasketType type) {
|
|
||||||
WorkbasketImpl wb = (WorkbasketImpl) workBasketService.newWorkbasket(key, domain);
|
|
||||||
wb.setId(id);
|
|
||||||
wb.setName(name);
|
|
||||||
wb.setDescription("Description of a Workbasket...");
|
|
||||||
wb.setType(type);
|
|
||||||
return wb;
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue