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:
tge20 2021-02-26 18:01:25 +01:00 committed by GitHub
parent 8e9d1e66c9
commit b02dea9291
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
53 changed files with 228 additions and 4332 deletions

View File

@ -1044,8 +1044,8 @@ public class WorkbasketServiceImpl implements WorkbasketService {
* @param workbasketImplToUpdate the workbasket to update
* @throws ConcurrencyException if the workbasket has been modified by some other process.
*/
void checkModifiedHasNotChanged(Workbasket oldWorkbasket, WorkbasketImpl workbasketImplToUpdate)
throws ConcurrencyException {
public void checkModifiedHasNotChanged(
Workbasket oldWorkbasket, WorkbasketImpl workbasketImplToUpdate) throws ConcurrencyException {
if (!oldWorkbasket.getModified().equals(workbasketImplToUpdate.getModified())) {

View File

@ -23,7 +23,6 @@ import pro.taskana.common.api.TimeInterval;
import pro.taskana.common.api.WorkingDaysToDaysConverter;
import pro.taskana.common.internal.JobMapper;
import pro.taskana.common.internal.TaskanaEngineImpl;
import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
import pro.taskana.sampledata.SampleDataGenerator;
import pro.taskana.task.api.models.Attachment;
import pro.taskana.task.api.models.ObjectReference;

View File

@ -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.noClasses;
@ -228,7 +228,7 @@ class ArchitectureTest {
private static ArchCondition<JavaClass> beDefinedInTaskanaSubPackages(
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
public void check(JavaClass javaClass, ConditionEvents events) {
if (TASKANA_SUB_PACKAGES.stream().noneMatch(p -> javaClass.getPackageName().startsWith(p))
@ -268,7 +268,7 @@ class ArchitectureTest {
return values;
};
return new ArchCondition<>("not use the SQL function 'CURRENT_TIMESTAMP'") {
return new ArchCondition<JavaClass>("not use the SQL function 'CURRENT_TIMESTAMP'") {
@Override
public void check(JavaClass javaClass, ConditionEvents events) {
for (JavaMethod method : javaClass.getAllMethods()) {

View File

@ -1,4 +1,4 @@
package pro.taskana.task.internal;
package acceptance;
import java.time.Duration;
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.internal.models.AttachmentImpl;
import pro.taskana.task.internal.models.TaskImpl;
import pro.taskana.workbasket.internal.models.WorkbasketImpl;
public class CreateTaskModelHelper {
@ -22,15 +21,6 @@ public class CreateTaskModelHelper {
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) {
AttachmentImpl attachment = new AttachmentImpl();
attachment.setId(id);

View File

@ -1,4 +1,4 @@
package pro.taskana;
package acceptance;
import static org.assertj.core.api.Assertions.assertThat;

View File

@ -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);
}

View File

@ -1,9 +1,11 @@
package pro.taskana.common.internal;
package acceptance;
import java.lang.reflect.Field;
import org.apache.ibatis.session.SqlSession;
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. */
public class TaskanaEngineProxy {

View File

@ -1,4 +1,4 @@
package pro.taskana.common.internal;
package acceptance;
import java.io.File;
import java.io.FileInputStream;

View File

@ -1,4 +1,4 @@
package pro.taskana.classification.internal.models;
package acceptance.classification;
import static org.assertj.core.api.Assertions.assertThat;
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 pro.taskana.classification.api.models.Classification;
import pro.taskana.classification.internal.models.ClassificationImpl;
import pro.taskana.classification.internal.models.ClassificationSummaryImpl;
class ClassificationModelsCloneTest {
@ -44,8 +46,9 @@ class ClassificationModelsCloneTest {
assertThat(dummyClassificationSummaryCloned).isNotEqualTo(dummyClassificationSummary);
dummyClassificationSummaryCloned.setId(dummyClassificationSummary.getId());
assertThat(dummyClassificationSummaryCloned).isEqualTo(dummyClassificationSummary);
assertThat(dummyClassificationSummaryCloned).isNotSameAs(dummyClassificationSummary);
assertThat(dummyClassificationSummaryCloned)
.isEqualTo(dummyClassificationSummary)
.isNotSameAs(dummyClassificationSummary);
}
@Test
@ -75,7 +78,8 @@ class ClassificationModelsCloneTest {
assertThat(dummyClassificationCloned).isNotEqualTo(dummyClassification);
dummyClassificationCloned.setId(dummyClassification.getId());
assertThat(dummyClassificationCloned).isEqualTo(dummyClassification);
assertThat(dummyClassificationCloned).isNotSameAs(dummyClassification);
assertThat(dummyClassificationCloned)
.isEqualTo(dummyClassification)
.isNotSameAs(dummyClassification);
}
}

View File

@ -5,6 +5,7 @@ import static org.assertj.core.api.Assertions.assertThat;
import acceptance.AbstractAccTest;
import java.util.List;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestTemplate;
import org.junit.jupiter.api.extension.ExtendWith;
import pro.taskana.classification.api.ClassificationService;
@ -17,17 +18,7 @@ import pro.taskana.common.test.security.WithAccessId;
class ClassificationQueryAccTest extends AbstractAccTest {
@Test
void testFindClassificationsByDomainUnauthenticated() {
ClassificationService classificationService = taskanaEngine.getClassificationService();
List<ClassificationSummary> classificationSummaryList =
classificationService.createClassificationQuery().domainIn("DOMAIN_A").list();
assertThat(classificationSummaryList).hasSize(18);
}
@WithAccessId(user = "businessadmin")
@Test
void testFindClassificationsByDomainBusinessAdmin() {
void should_FindAllAccesibleClassifications_When_UserNotAuthenticated() {
ClassificationService classificationService = taskanaEngine.getClassificationService();
List<ClassificationSummary> classificationSummaryList =
classificationService.createClassificationQuery().domainIn("DOMAIN_A").list();
@ -36,8 +27,9 @@ class ClassificationQueryAccTest extends AbstractAccTest {
}
@WithAccessId(user = "admin")
@Test
void testFindClassificationsByDomainAdmin() {
@WithAccessId(user = "businessadmin")
@TestTemplate
void should_FindAllAccessibleClassifications_When_UserInRoleAdminOrBusinessadmin() {
ClassificationService classificationService = taskanaEngine.getClassificationService();
List<ClassificationSummary> classificationSummaryList =
classificationService.createClassificationQuery().domainIn("DOMAIN_A").list();

View File

@ -2,6 +2,7 @@ package acceptance.config;
import static org.assertj.core.api.Assertions.assertThat;
import acceptance.TaskanaEngineTestConfiguration;
import java.io.File;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
@ -17,7 +18,6 @@ import org.junit.jupiter.api.Test;
import pro.taskana.TaskanaEngineConfiguration;
import pro.taskana.common.internal.TaskanaEngineImpl;
import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
/** Test taskana configuration without roles. */
class TaskanaConfigAccTest extends TaskanaEngineImpl {

View File

@ -1,7 +1,8 @@
package pro.taskana.common.internal;
package acceptance.config;
import static org.assertj.core.api.Assertions.assertThat;
import acceptance.TaskanaEngineTestConfiguration;
import javax.sql.DataSource;
import org.junit.jupiter.api.Test;
@ -10,10 +11,10 @@ import pro.taskana.common.api.CustomHoliday;
import pro.taskana.common.api.TaskanaEngine;
/** Test of configuration. */
class TaskanaEngineConfigurationTest {
class TaskanaEngineConfigTest {
@Test
void testCreateTaskanaEngine() throws Exception {
void should_ReturnTaskanaEngine_When_BuildingWithConfiguration() throws Exception {
DataSource ds = TaskanaEngineTestConfiguration.getDataSource();
TaskanaEngineConfiguration taskEngineConfiguration =
new TaskanaEngineConfiguration(ds, false, TaskanaEngineTestConfiguration.getSchemaName());
@ -30,7 +31,7 @@ class TaskanaEngineConfigurationTest {
new TaskanaEngineConfiguration(
ds,
false,
false,
true,
"/corpusChristiEnabled.properties",
"|",
TaskanaEngineTestConfiguration.getSchemaName());
@ -46,7 +47,7 @@ class TaskanaEngineConfigurationTest {
new TaskanaEngineConfiguration(
ds,
false,
false,
true,
"/custom_holiday_taskana.properties",
"|",
TaskanaEngineTestConfiguration.getSchemaName());
@ -62,7 +63,7 @@ class TaskanaEngineConfigurationTest {
new TaskanaEngineConfiguration(
ds,
false,
false,
true,
"/custom_holiday_With_Wrong_format_taskana.properties",
"|",
TaskanaEngineTestConfiguration.getSchemaName());

View File

@ -2,6 +2,7 @@ package acceptance.config;
import static org.assertj.core.api.Assertions.assertThat;
import acceptance.TaskanaEngineTestConfiguration;
import java.io.File;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
@ -15,7 +16,6 @@ import org.junit.jupiter.api.Test;
import pro.taskana.TaskanaEngineConfiguration;
import pro.taskana.common.api.TaskanaRole;
import pro.taskana.common.internal.TaskanaEngineImpl;
import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
/** Test taskana's role configuration. */
class TaskanaRoleConfigAccTest extends TaskanaEngineImpl {

View File

@ -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.assertThatThrownBy;
import acceptance.TaskanaEngineTestConfiguration;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
@ -14,7 +15,6 @@ import org.junit.jupiter.api.Test;
import pro.taskana.TaskanaEngineConfiguration;
import pro.taskana.common.api.exceptions.SystemException;
import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
import pro.taskana.common.internal.configuration.DbSchemaCreator;
import pro.taskana.sampledata.SampleDataGenerator;

View File

@ -1,4 +1,4 @@
package pro.taskana.common.internal.util;
package acceptance.history;
import static org.assertj.core.api.Assertions.assertThat;
@ -12,6 +12,7 @@ import org.json.JSONArray;
import org.json.JSONObject;
import org.junit.jupiter.api.Test;
import pro.taskana.common.internal.util.ObjectAttributeChangeDetector;
import pro.taskana.task.api.CallbackState;
import pro.taskana.task.internal.models.TaskImpl;
import pro.taskana.workbasket.api.WorkbasketType;

View File

@ -1,11 +1,11 @@
package acceptance.report;
import acceptance.TaskanaEngineTestConfiguration;
import javax.sql.DataSource;
import org.junit.jupiter.api.BeforeAll;
import pro.taskana.TaskanaEngineConfiguration;
import pro.taskana.common.api.TaskanaEngine;
import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
import pro.taskana.sampledata.SampleDataGenerator;
/** Abstract test class for all report building tests. */

View File

@ -1,4 +1,4 @@
package pro.taskana.monitor.internal;
package acceptance.report;
import static org.assertj.core.api.Assertions.assertThat;
@ -48,7 +48,7 @@ class ReportTest {
assertThat(report.getRows()).isEmpty();
Row<MonitorQueryItem> sumRow = report.getSumRow();
assertThat(sumRow.getCells()).isEqualTo(new int[] {0, 0, 0, 0});
assertThat(sumRow.getTotalValue()).isEqualTo(0);
assertThat(sumRow.getTotalValue()).isZero();
}
@Test
@ -207,7 +207,7 @@ class ReportTest {
assertThat(report.getRows()).isEmpty();
Row<MonitorQueryItem> sumRow = report.getSumRow();
assertThat(sumRow.getCells()).isEqualTo(new int[] {0, 0, 0, 0});
assertThat(sumRow.getTotalValue()).isEqualTo(0);
assertThat(sumRow.getTotalValue()).isZero();
}
@Test

View File

@ -1,4 +1,4 @@
package pro.taskana.monitor.internal;
package acceptance.report;
import static org.assertj.core.api.Assertions.assertThat;
@ -52,7 +52,7 @@ class WorkingDaysToDaysReportConverterTest {
assertThat(instance.convertDaysToWorkingDays(-3)).isEqualTo(-1);
assertThat(instance.convertDaysToWorkingDays(-2)).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(2)).isEqualTo(2);
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(3);
@ -194,7 +194,7 @@ class WorkingDaysToDaysReportConverterTest {
WorkingDaysToDaysReportConverter.initialize(
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(2)).isEqualTo(1);
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(1);
@ -210,7 +210,7 @@ class WorkingDaysToDaysReportConverterTest {
WorkingDaysToDaysReportConverter.initialize(
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(2)).isEqualTo(2);
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(2);
@ -225,7 +225,7 @@ class WorkingDaysToDaysReportConverterTest {
WorkingDaysToDaysReportConverter.initialize(
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(2)).isEqualTo(1);
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(1);
@ -241,7 +241,7 @@ class WorkingDaysToDaysReportConverterTest {
WorkingDaysToDaysReportConverter.initialize(
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(2)).isEqualTo(2);
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(2);
@ -258,7 +258,7 @@ class WorkingDaysToDaysReportConverterTest {
WorkingDaysToDaysReportConverter.initialize(
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(2)).isEqualTo(1);
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(2);
@ -275,7 +275,7 @@ class WorkingDaysToDaysReportConverterTest {
WorkingDaysToDaysReportConverter.initialize(
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(2)).isEqualTo(1);
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(1);
@ -298,9 +298,9 @@ class WorkingDaysToDaysReportConverterTest {
WorkingDaysToDaysReportConverter.initialize(
getLargeListOfColumnHeaders(), converter, Instant.parse("2018-10-26T00:00:00.000Z"));
assertThat(instance.convertDaysToWorkingDays(0)).isEqualTo(0);
assertThat(instance.convertDaysToWorkingDays(1)).isEqualTo(0);
assertThat(instance.convertDaysToWorkingDays(2)).isEqualTo(0);
assertThat(instance.convertDaysToWorkingDays(0)).isZero();
assertThat(instance.convertDaysToWorkingDays(1)).isZero();
assertThat(instance.convertDaysToWorkingDays(2)).isZero();
assertThat(instance.convertDaysToWorkingDays(3)).isEqualTo(1);
assertThat(instance.convertDaysToWorkingDays(4)).isEqualTo(2);
assertThat(instance.convertDaysToWorkingDays(5)).isEqualTo(2);

View File

@ -4,6 +4,8 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import acceptance.AbstractAccTest;
import acceptance.TaskTestMapper;
import acceptance.TaskanaEngineProxy;
import java.time.Duration;
import java.time.Instant;
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.NotAuthorizedException;
import pro.taskana.common.internal.TaskanaEngineProxy;
import pro.taskana.common.test.security.JaasExtension;
import pro.taskana.common.test.security.WithAccessId;
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.Task;
import pro.taskana.task.internal.AttachmentMapper;
import pro.taskana.task.internal.TaskTestMapper;
import pro.taskana.workbasket.api.WorkbasketService;
import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
import pro.taskana.workbasket.api.models.Workbasket;

View File

@ -4,6 +4,7 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import acceptance.AbstractAccTest;
import acceptance.TaskanaEngineProxy;
import java.util.ArrayList;
import java.util.List;
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.exceptions.NotAuthorizedException;
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.WithAccessId;
import pro.taskana.task.api.TaskService;

View File

@ -11,7 +11,6 @@ import org.junit.jupiter.api.extension.ExtendWith;
import pro.taskana.common.test.security.JaasExtension;
import pro.taskana.common.test.security.WithAccessId;
import pro.taskana.task.api.TaskCustomField;
import pro.taskana.task.api.TaskService;
import pro.taskana.task.api.models.Attachment;
import pro.taskana.task.api.models.AttachmentSummary;
@ -29,7 +28,7 @@ class QueryTaskWithAttachmentAccTest extends AbstractAccTest {
@WithAccessId(user = "user-1-1")
@Test
void testGetAttachmentSummariesFromTask() {
void should_ReturnTaskSummaryIncludingAttachments_When_QueryingTaskWithAttachments() {
TaskService taskService = taskanaEngine.getTaskService();
List<TaskSummary> tasks = taskService.createTaskQuery().classificationKeyIn("L110102").list();
assertThat(tasks).hasSize(1);
@ -40,7 +39,7 @@ class QueryTaskWithAttachmentAccTest extends AbstractAccTest {
@WithAccessId(user = "user-1-2")
@Test
void testGetNoAttachmentSummaryFromTask() {
void should_ReturnTaskSummaryWithEmptyAttachments_When_QueryingTaskWithoutAttachments() {
TaskService taskService = taskanaEngine.getTaskService();
List<TaskSummary> tasks = taskService.createTaskQuery().list();
assertThat(tasks).hasSize(30);
@ -51,7 +50,7 @@ class QueryTaskWithAttachmentAccTest extends AbstractAccTest {
@WithAccessId(user = "user-1-1")
@Test
void testIfNewTaskHasEmptyAttachmentList() {
void should_NotSetAttachmentSummariesToNull_When_CreatingNewTaskWithTaskService() {
TaskService taskService = taskanaEngine.getTaskService();
Task task = taskService.newTask("WBI:100000000000000000000000000000000006");
assertThat(task.getAttachments()).isNotNull();
@ -60,7 +59,7 @@ class QueryTaskWithAttachmentAccTest extends AbstractAccTest {
@WithAccessId(user = "user-1-1")
@Test
void should_ConfirmIfAttachmentSummariesAreCorrect_When_UsingTaskQueryAndGetTaskById()
void should_ReturnTheSameAttachmentsOfATaskSummary_When_UsingTaskQueryAndTaskService()
throws Exception {
TaskService taskService = taskanaEngine.getTaskService();
// find Task with ID TKI:00...00
@ -81,31 +80,4 @@ class QueryTaskWithAttachmentAccTest extends AbstractAccTest {
.usingElementComparator(REFERENCE_COMPARATOR)
.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
}
}

View File

@ -17,6 +17,8 @@ import static pro.taskana.task.api.TaskQueryColumnName.OWNER;
import static pro.taskana.task.api.TaskQueryColumnName.STATE;
import acceptance.AbstractAccTest;
import acceptance.TaskTestMapper;
import acceptance.TaskanaEngineProxy;
import java.util.Arrays;
import java.util.Comparator;
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.TimeInterval;
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.Triplet;
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.TaskSummary;
import pro.taskana.task.internal.TaskServiceImpl;
import pro.taskana.task.internal.TaskTestMapper;
import pro.taskana.task.internal.models.TaskImpl;
import pro.taskana.workbasket.api.models.WorkbasketSummary;

View File

@ -5,8 +5,10 @@ import static org.assertj.core.api.Assertions.assertThat;
import acceptance.AbstractAccTest;
import java.util.List;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestTemplate;
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.WithAccessId;
import pro.taskana.task.api.TaskService;
@ -26,63 +28,38 @@ class QueryTasksByRoleAccTest extends AbstractAccTest {
}
@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")
@Test
void should_ReturnAllTasks_For_TaskAdmin() {
TaskService taskService = taskanaEngine.getTaskService();
List<TaskSummary> results = taskService.createTaskQuery().list();
assertThat(results).hasSize(87);
}
@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")
@Test
void should_ReturnAllTasks_For_MonitorUser() {
TaskService taskService = taskanaEngine.getTaskService();
List<TaskSummary> results = taskService.createTaskQuery().list();
assertThat(results).isEmpty();
}
@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")
@Test
void should_ReturnAllTasks_For_User11() {
@TestTemplate
void should_FindAllAccessibleTasksDependentOnTheUser_When_MakingTaskQuery() {
TaskService taskService = taskanaEngine.getTaskService();
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);
}
}

View File

@ -4,6 +4,7 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import acceptance.AbstractAccTest;
import acceptance.TaskanaEngineProxy;
import java.util.ArrayList;
import java.util.List;
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.exceptions.NotAuthorizedException;
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.WithAccessId;
import pro.taskana.task.api.TaskService;

View File

@ -4,13 +4,13 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import acceptance.AbstractAccTest;
import acceptance.TaskanaEngineProxy;
import org.assertj.core.api.ThrowableAssert.ThrowingCallable;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import pro.taskana.common.api.TaskanaRole;
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.WithAccessId;

View File

@ -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 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.HashMap;
@ -14,6 +14,11 @@ import org.junit.jupiter.api.Test;
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.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 {
@ -33,8 +38,7 @@ class TaskModelsCloneTest {
assertThat(dummyTaskSummaryCloned).isNotEqualTo(dummyTaskSummary);
dummyTaskSummaryCloned.setId(dummyTaskSummary.getId());
dummyTaskSummaryCloned.setExternalId(dummyTaskSummary.getExternalId());
assertThat(dummyTaskSummaryCloned).isEqualTo(dummyTaskSummary);
assertThat(dummyTaskSummaryCloned).isNotSameAs(dummyTaskSummary);
assertThat(dummyTaskSummaryCloned).isEqualTo(dummyTaskSummary).isNotSameAs(dummyTaskSummary);
Attachment dummyAttachmentForSummaryTestPostClone =
createAttachment("differentIdForDeepTest", "differentTaskIdForDeepTest");
@ -59,8 +63,7 @@ class TaskModelsCloneTest {
assertThat(dummyTaskCloned).isNotEqualTo(dummyTask);
dummyTaskCloned.setId(dummyTask.getId());
dummyTaskCloned.setExternalId(dummyTask.getExternalId());
assertThat(dummyTaskCloned).isEqualTo(dummyTask);
assertThat(dummyTaskCloned).isNotSameAs(dummyTask);
assertThat(dummyTaskCloned).isEqualTo(dummyTask).isNotSameAs(dummyTask);
dummyCustomAttributesPreClone.put("deepTestAttributeKey", "deepTestAttributeValue");
dummyCallbackInfoPreClone.put("deepTestCallbackKey", "deepTestCallbackValue");
@ -108,8 +111,7 @@ class TaskModelsCloneTest {
TaskCommentImpl dummyCommentCloned = dummyComment.copy();
assertThat(dummyCommentCloned).isNotEqualTo(dummyComment);
dummyCommentCloned.setId(dummyComment.getId());
assertThat(dummyCommentCloned).isEqualTo(dummyComment);
assertThat(dummyCommentCloned).isNotSameAs(dummyComment);
assertThat(dummyCommentCloned).isEqualTo(dummyComment).isNotSameAs(dummyComment);
}
@Test
@ -126,8 +128,7 @@ class TaskModelsCloneTest {
assertThat(dummyReferenceCloned).isNotEqualTo(dummyReference);
dummyReferenceCloned.setId(dummyReference.getId());
assertThat(dummyReferenceCloned).isEqualTo(dummyReference);
assertThat(dummyReferenceCloned).isNotSameAs(dummyReference);
assertThat(dummyReferenceCloned).isEqualTo(dummyReference).isNotSameAs(dummyReference);
}
@Test
@ -141,8 +142,9 @@ class TaskModelsCloneTest {
dummyAttachmentSummaryCloned.setId(dummyAttachmentSummary.getId());
dummyAttachmentSummaryCloned.setTaskId(dummyAttachmentSummary.getTaskId());
assertThat(dummyAttachmentSummaryCloned).isEqualTo(dummyAttachmentSummary);
assertThat(dummyAttachmentSummaryCloned).isNotSameAs(dummyAttachmentSummary);
assertThat(dummyAttachmentSummaryCloned)
.isEqualTo(dummyAttachmentSummary)
.isNotSameAs(dummyAttachmentSummary);
}
@Test
@ -157,8 +159,7 @@ class TaskModelsCloneTest {
assertThat(dummyAttachmentCloned).isNotEqualTo(dummyAttachment);
dummyAttachmentCloned.setId(dummyAttachment.getId());
dummyAttachmentCloned.setTaskId(dummyAttachment.getTaskId());
assertThat(dummyAttachmentCloned).isEqualTo(dummyAttachment);
assertThat(dummyAttachmentCloned).isNotSameAs(dummyAttachment);
assertThat(dummyAttachmentCloned).isEqualTo(dummyAttachment).isNotSameAs(dummyAttachment);
dummyMapPreClone.put("deepTestString1", "deepTestString2");
assertThat(dummyAttachment).isNotEqualTo(dummyAttachmentCloned);

View File

@ -92,15 +92,15 @@ class TransferTaskAccTest extends AbstractAccTest {
@WithAccessId(user = "user-1-1", groups = GROUP_1_DN)
@Test
void should_ChangeDomain_When_TransferingTaskToWorkbasketWithDifferentDomain() throws Exception {
void should_ChangeDomain_When_TransferringTaskToWorkbasketWithDifferentDomain() throws Exception {
TaskService taskService = taskanaEngine.getTaskService();
Task task = taskService.getTask("TKI:000000000000000000000000000000000000");
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(transferedTask.getDomain()).isNotEqualTo(domain1);
assertThat(transferredTask).isNotNull();
assertThat(transferredTask.getDomain()).isNotEqualTo(domain1);
}
@WithAccessId(user = "user-1-1")
@ -308,7 +308,7 @@ class TransferTaskAccTest extends AbstractAccTest {
@WithAccessId(user = "teamlead-1", groups = GROUP_1_DN)
@Test
void should_TransferTasks_When_TransferTasksWithListNotSupportingRemove() {
void should_TransferTasks_When_TransferringTasksWithListNotSupportingRemove() {
TaskService taskService = taskanaEngine.getTaskService();
List<String> taskIds = List.of("TKI:000000000000000000000000000000000006");
@ -322,7 +322,7 @@ class TransferTaskAccTest extends AbstractAccTest {
@WithAccessId(user = "teamlead-1", groups = GROUP_1_DN)
@Test
void should_ThrowException_When_TransferTasksWithInvalidTasksIdList() {
void should_ThrowException_When_TransferredTaskListIsNull() {
TaskService taskService = taskanaEngine.getTaskService();
// test with invalid list
@ -331,9 +331,15 @@ class TransferTaskAccTest extends AbstractAccTest {
assertThatThrownBy(call)
.isInstanceOf(InvalidArgumentException.class)
.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
call =
ThrowingCallable call =
() ->
taskService.transferTasks(
"WBI:100000000000000000000000000000000006",
@ -346,7 +352,7 @@ class TransferTaskAccTest extends AbstractAccTest {
@WithAccessId(user = "teamlead-1", groups = GROUP_1_DN)
@Test
void should_ThrowException_When_TransferEmptyTaskIdList() {
void should_ThrowException_When_TransferringEmptyTaskIdList() {
TaskService taskService = taskanaEngine.getTaskService();
List<String> taskIds = new ArrayList<>();
ThrowingCallable call =

View File

@ -63,7 +63,7 @@ class UpdateTaskAttachmentsAccTest extends AbstractAccTest {
@WithAccessId(user = "user-1-1")
@Test
void testAddNewAttachment() throws Exception {
void should_UpdateTaskCorrectlyInDatabase_When_AddingAnAttachment() throws Exception {
final int attachmentCount = task.getAttachments().size();
assertThat(task.getPriority()).isEqualTo(1);
assertThat(task.getPlanned().plus(Duration.ofDays(1))).isEqualTo(task.getDue());
@ -80,7 +80,7 @@ class UpdateTaskAttachmentsAccTest extends AbstractAccTest {
@WithAccessId(user = "user-1-1")
@Test
void testAddValidAttachmentTwice() throws Exception {
void should_NotAddSameAttachmentAgain_When_AddingToTaskSummary() throws Exception {
task.getAttachments().clear();
task = taskService.updateTask(task);
task = taskService.getTask(task.getId());
@ -100,7 +100,7 @@ class UpdateTaskAttachmentsAccTest extends AbstractAccTest {
@WithAccessId(user = "user-1-1")
@Test
void testAddNewAttachmentTwiceWithoutTaskanaMethodWillThrowAttachmentPersistenceException()
void should_ThrowAttachmentPersistenceException_When_UpdatingTaskWithTwoIdenticalAttachments()
throws Exception {
final int attachmentCount = 0;
task.getAttachments().clear();
@ -118,7 +118,8 @@ class UpdateTaskAttachmentsAccTest extends AbstractAccTest {
@WithAccessId(user = "user-1-1")
@Test
void testAddExistingAttachmentAgainWillUpdateWhenNotEqual() throws Exception {
void should_UpdateExistingAttachment_When_AddingSameButNotEqualAttachmentAgain()
throws Exception {
// Add attachment before
task = taskService.getTask(task.getId());
final int attachmentCount = task.getAttachments().size();
@ -150,7 +151,7 @@ class UpdateTaskAttachmentsAccTest extends AbstractAccTest {
@WithAccessId(user = "user-1-1")
@Test
void testAddExistingAttachmentAgainWillDoNothingWhenEqual() throws Exception {
void should_NotUpdateExistingAttachment_When_AddingIdenticalAttachmentAgain() throws Exception {
// Add Attachment before
final int attachmentCount = task.getAttachments().size();
((AttachmentImpl) attachment).setId("TAI:0001");

View File

@ -1,4 +1,4 @@
package pro.taskana.workbasket.internal.models;
package acceptance.workbasket;
import static org.assertj.core.api.Assertions.assertThat;
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.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 {
@ -36,8 +39,9 @@ class WorkbasketModelsCloneTest {
assertThat(dummyWorkbasketSummaryCloned).isNotEqualTo(dummyWorkbasketSummary);
dummyWorkbasketSummaryCloned.setId(dummyWorkbasketSummary.getId());
assertThat(dummyWorkbasketSummaryCloned).isEqualTo(dummyWorkbasketSummary);
assertThat(dummyWorkbasketSummaryCloned).isNotSameAs(dummyWorkbasketSummary);
assertThat(dummyWorkbasketSummaryCloned)
.isEqualTo(dummyWorkbasketSummary)
.isNotSameAs(dummyWorkbasketSummary);
}
@Test
@ -61,8 +65,7 @@ class WorkbasketModelsCloneTest {
assertThat(dummyWorkbasketCloned).isNotEqualTo(dummyWorkbasket);
dummyWorkbasketCloned.setId(dummyWorkbasket.getId());
assertThat(dummyWorkbasketCloned).isEqualTo(dummyWorkbasket);
assertThat(dummyWorkbasketCloned).isNotSameAs(dummyWorkbasket);
assertThat(dummyWorkbasketCloned).isEqualTo(dummyWorkbasket).isNotSameAs(dummyWorkbasket);
}
@Test
@ -92,7 +95,8 @@ class WorkbasketModelsCloneTest {
assertThat(dummyWorkbasketAccessItemCloned).isNotEqualTo(dummyWorkbasketAccessItem);
dummyWorkbasketAccessItemCloned.setId(dummyWorkbasketAccessItem.getId());
assertThat(dummyWorkbasketAccessItemCloned).isEqualTo(dummyWorkbasketAccessItem);
assertThat(dummyWorkbasketAccessItemCloned).isNotSameAs(dummyWorkbasketAccessItem);
assertThat(dummyWorkbasketAccessItemCloned)
.isEqualTo(dummyWorkbasketAccessItem)
.isNotSameAs(dummyWorkbasketAccessItem);
}
}

View File

@ -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.assertThatCode;
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.doReturn;
import static org.mockito.Mockito.lenient;
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.models.Workbasket;
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.WorkbasketImpl;
@ -113,7 +116,7 @@ class WorkbasketServiceImplTest {
String otherWorkbasketId = "4711";
List<String> destinations = List.of(otherWorkbasketId);
workbasketServiceSpy.createWorkbasket(expectedWb);
doReturn(expectedWb).when(workbasketServiceSpy).getWorkbasket(eq(expectedWb.getId()));
doReturn(expectedWb).when(workbasketServiceSpy).getWorkbasket(expectedWb.getId());
ThrowingCallable call =
() -> {
@ -135,8 +138,8 @@ class WorkbasketServiceImplTest {
verify(internalTaskanaEngineMock, times(2)).getEngine();
verify(internalTaskanaEngineMock, times(1)).domainExists(any());
verify(distributionTargetMapperMock)
.deleteAllDistributionTargetsBySourceId(eq(expectedWb.getId()));
verify(workbasketMapperMock).update(eq(expectedWb));
.deleteAllDistributionTargetsBySourceId(expectedWb.getId());
verify(workbasketMapperMock).update(expectedWb);
verify(internalTaskanaEngineMock, times(1)).getHistoryEventManager();
verifyNoMoreInteractions(

View File

@ -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();
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

@ -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());
}
}

View File

@ -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);
}

View File

@ -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());
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}