TSK-1486: Deleted unnecessary UnitTests of taskana-core (#1383)
* TSK-1486: Deleted unnecessary UnitTests of taskana-core * TSK-1486: Improvements after review * TSK-1486: fixed checkstyle issues * TSK-1486: restored tests which were deleted by previous commits * TSK-1486: moved helper package into acceptance package * TSK-1486: fixed some code smells Co-authored-by: Mustapha Zorgati <15628173+mustaphazorgati@users.noreply.github.com>
This commit is contained in:
parent
8e9d1e66c9
commit
b02dea9291
|
@ -1044,8 +1044,8 @@ public class WorkbasketServiceImpl implements WorkbasketService {
|
|||
* @param workbasketImplToUpdate the workbasket to update
|
||||
* @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())) {
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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()) {
|
|
@ -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);
|
|
@ -1,4 +1,4 @@
|
|||
package pro.taskana;
|
||||
package acceptance;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
|
@ -0,0 +1,82 @@
|
|||
package acceptance;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Result;
|
||||
import org.apache.ibatis.annotations.Results;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
import org.apache.ibatis.type.ClobTypeHandler;
|
||||
|
||||
import pro.taskana.common.internal.persistence.MapTypeHandler;
|
||||
import pro.taskana.task.internal.models.TaskImpl;
|
||||
|
||||
/** This class contains specific mybatis mappings for task tests. */
|
||||
|
||||
@SuppressWarnings({"checkstyle:LineLength"})
|
||||
public interface TaskTestMapper {
|
||||
|
||||
@Select("select CUSTOM_ATTRIBUTES from TASK where id = #{taskId}")
|
||||
@Results(
|
||||
value = {
|
||||
@Result(
|
||||
property = "customAttributes",
|
||||
column = "CUSTOM_ATTRIBUTES",
|
||||
javaType = String.class,
|
||||
typeHandler = ClobTypeHandler.class)
|
||||
})
|
||||
String getCustomAttributesAsString(@Param("taskId") String taskId);
|
||||
|
||||
@Select(
|
||||
"SELECT ID, CREATED, CLAIMED, COMPLETED, MODIFIED, PLANNED, DUE, NAME, CREATOR, DESCRIPTION, NOTE, PRIORITY, STATE, CLASSIFICATION_CATEGORY, CLASSIFICATION_KEY, CLASSIFICATION_ID, WORKBASKET_ID, WORKBASKET_KEY, DOMAIN, BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID, OWNER, POR_COMPANY, POR_SYSTEM, POR_INSTANCE, POR_TYPE, POR_VALUE, IS_READ, IS_TRANSFERRED, CUSTOM_ATTRIBUTES, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, CUSTOM_5, CUSTOM_6, CUSTOM_7, CUSTOM_8, CUSTOM_9, CUSTOM_10 "
|
||||
+ "FROM TASK "
|
||||
+ "WHERE CUSTOM_ATTRIBUTES like #{searchText}")
|
||||
@Results(
|
||||
value = {
|
||||
@Result(property = "id", column = "ID"),
|
||||
@Result(property = "created", column = "CREATED"),
|
||||
@Result(property = "claimed", column = "CLAIMED"),
|
||||
@Result(property = "completed", column = "COMPLETED"),
|
||||
@Result(property = "modified", column = "MODIFIED"),
|
||||
@Result(property = "planned", column = "PLANNED"),
|
||||
@Result(property = "due", column = "DUE"),
|
||||
@Result(property = "name", column = "NAME"),
|
||||
@Result(property = "creator", column = "CREATOR"),
|
||||
@Result(property = "description", column = "DESCRIPTION"),
|
||||
@Result(property = "note", column = "NOTE"),
|
||||
@Result(property = "priority", column = "PRIORITY"),
|
||||
@Result(property = "state", column = "STATE"),
|
||||
@Result(
|
||||
property = "classificationSummaryImpl.category",
|
||||
column = "CLASSIFICATION_CATEGORY"),
|
||||
@Result(property = "classificationSummaryImpl.id", column = "CLASSIFICATION_ID"),
|
||||
@Result(property = "classificationSummaryImpl.key", column = "CLASSIFICATION_KEY"),
|
||||
@Result(property = "domain", column = "DOMAIN"),
|
||||
@Result(property = "businessProcessId", column = "BUSINESS_PROCESS_ID"),
|
||||
@Result(property = "parentBusinessProcessId", column = "PARENT_BUSINESS_PROCESS_ID"),
|
||||
@Result(property = "owner", column = "OWNER"),
|
||||
@Result(property = "primaryObjRef.company", column = "POR_COMPANY"),
|
||||
@Result(property = "primaryObjRef.system", column = "POR_SYSTEM"),
|
||||
@Result(property = "primaryObjRef.systemInstance", column = "POR_INSTANCE"),
|
||||
@Result(property = "primaryObjRef.type", column = "POR_TYPE"),
|
||||
@Result(property = "primaryObjRef.value", column = "POR_VALUE"),
|
||||
@Result(property = "isRead", column = "IS_READ"),
|
||||
@Result(property = "isTransferred", column = "IS_TRANSFERRED"),
|
||||
@Result(
|
||||
property = "customAttributes",
|
||||
column = "CUSTOM_ATTRIBUTES",
|
||||
javaType = Map.class,
|
||||
typeHandler = MapTypeHandler.class),
|
||||
@Result(property = "custom1", column = "CUSTOM_1"),
|
||||
@Result(property = "custom2", column = "CUSTOM_2"),
|
||||
@Result(property = "custom3", column = "CUSTOM_3"),
|
||||
@Result(property = "custom4", column = "CUSTOM_4"),
|
||||
@Result(property = "custom5", column = "CUSTOM_5"),
|
||||
@Result(property = "custom6", column = "CUSTOM_6"),
|
||||
@Result(property = "custom7", column = "CUSTOM_7"),
|
||||
@Result(property = "custom8", column = "CUSTOM_8"),
|
||||
@Result(property = "custom9", column = "CUSTOM_9"),
|
||||
@Result(property = "custom10", column = "CUSTOM_10")
|
||||
})
|
||||
List<TaskImpl> selectTasksByCustomAttributeLike(@Param("searchText") String searchText);
|
||||
}
|
|
@ -1,9 +1,11 @@
|
|||
package pro.taskana.common.internal;
|
||||
package acceptance;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import 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 {
|
|
@ -1,4 +1,4 @@
|
|||
package pro.taskana.common.internal;
|
||||
package acceptance;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
|
@ -1,4 +1,4 @@
|
|||
package pro.taskana.classification.internal.models;
|
||||
package acceptance.classification;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static 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);
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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());
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
|
@ -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. */
|
||||
|
|
|
@ -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
|
|
@ -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);
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
|
@ -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 =
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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(
|
|
@ -1,74 +0,0 @@
|
|||
package pro.taskana.classification.internal;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import org.apache.ibatis.session.SqlSession;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import pro.taskana.classification.api.models.ClassificationSummary;
|
||||
import pro.taskana.classification.internal.models.ClassificationSummaryImpl;
|
||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
||||
|
||||
/** Test for ClassificationQueryImpl. */
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class ClassificationQueryImplTest {
|
||||
|
||||
@InjectMocks private ClassificationQueryImpl classificationQueryImpl;
|
||||
|
||||
@Mock private InternalTaskanaEngine internalTaskanaEngine;
|
||||
|
||||
@Mock private SqlSession sqlSession;
|
||||
|
||||
@Test
|
||||
void should_ReturnList_When_BuilderIsUsed() {
|
||||
when(internalTaskanaEngine.getSqlSession()).thenReturn(sqlSession);
|
||||
when(sqlSession.selectList(any(), any())).thenReturn(new ArrayList<>());
|
||||
|
||||
List<ClassificationSummary> result =
|
||||
classificationQueryImpl
|
||||
.nameIn("test", "asd", "blubber")
|
||||
.typeIn("cool", "bla")
|
||||
.priorityIn(1, 2)
|
||||
.parentIdIn("superId")
|
||||
.list();
|
||||
assertThat(result).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
void should_ReturnListWithOffset_When_BuilderIsUsed() {
|
||||
when(internalTaskanaEngine.getSqlSession()).thenReturn(sqlSession);
|
||||
when(sqlSession.selectList(any(), any(), any())).thenReturn(new ArrayList<>());
|
||||
|
||||
List<ClassificationSummary> result =
|
||||
classificationQueryImpl
|
||||
.nameIn("test", "asd", "blubber")
|
||||
.typeIn("cool", "bla")
|
||||
.priorityIn(1, 2)
|
||||
.parentIdIn("superId")
|
||||
.list(1, 1);
|
||||
assertThat(result).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
void should_ReturnOneItem_When_BuilderIsUsed() {
|
||||
when(internalTaskanaEngine.getSqlSession()).thenReturn(sqlSession);
|
||||
when(sqlSession.selectOne(any(), any())).thenReturn(new ClassificationSummaryImpl());
|
||||
|
||||
ClassificationSummary result =
|
||||
classificationQueryImpl
|
||||
.nameIn("test", "asd", "blubber")
|
||||
.typeIn("cool", "bla")
|
||||
.priorityIn(1, 2)
|
||||
.parentIdIn("superId")
|
||||
.single();
|
||||
assertThat(result).isNotNull();
|
||||
}
|
||||
}
|
|
@ -1,174 +0,0 @@
|
|||
package pro.taskana.classification.internal;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalTime;
|
||||
import java.time.ZoneId;
|
||||
import java.util.List;
|
||||
import javax.sql.DataSource;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import pro.taskana.TaskanaEngineConfiguration;
|
||||
import pro.taskana.classification.api.ClassificationService;
|
||||
import pro.taskana.classification.api.models.Classification;
|
||||
import pro.taskana.classification.api.models.ClassificationSummary;
|
||||
import pro.taskana.common.api.TaskanaEngine;
|
||||
import pro.taskana.common.api.TaskanaEngine.ConnectionManagementMode;
|
||||
import pro.taskana.common.api.TimeInterval;
|
||||
import pro.taskana.common.internal.TaskanaEngineImpl;
|
||||
import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
|
||||
import pro.taskana.sampledata.SampleDataGenerator;
|
||||
|
||||
/** Integration Test for ClassificationServiceImpl with connection management mode AUTOCOMMIT. */
|
||||
class ClassificationServiceImplIntAutoCommitTest {
|
||||
|
||||
private static SampleDataGenerator sampleDataGenerator;
|
||||
private static TaskanaEngineConfiguration taskanaEngineConfiguration;
|
||||
private ClassificationService classificationService;
|
||||
|
||||
@BeforeAll
|
||||
static void beforeAll() {
|
||||
DataSource dataSource = TaskanaEngineTestConfiguration.getDataSource();
|
||||
String schemaName = TaskanaEngineTestConfiguration.getSchemaName();
|
||||
sampleDataGenerator = new SampleDataGenerator(dataSource, schemaName);
|
||||
taskanaEngineConfiguration =
|
||||
new TaskanaEngineConfiguration(dataSource, false, false, schemaName);
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void setup() throws Exception {
|
||||
sampleDataGenerator.clearDb();
|
||||
TaskanaEngine taskanaEngine = taskanaEngineConfiguration.buildTaskanaEngine();
|
||||
classificationService = taskanaEngine.getClassificationService();
|
||||
TaskanaEngineImpl taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine;
|
||||
taskanaEngineImpl.setConnectionManagementMode(ConnectionManagementMode.AUTOCOMMIT);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testFindAllClassifications() throws Exception {
|
||||
Classification classification0 = classificationService.newClassification("TEST1", "", "TASK");
|
||||
classification0.setServiceLevel("P1D");
|
||||
classificationService.createClassification(classification0);
|
||||
Classification classification1 = classificationService.newClassification("TEST2", "", "TASK");
|
||||
classification1.setServiceLevel("P1D");
|
||||
classificationService.createClassification(classification1);
|
||||
Classification classification2 = classificationService.newClassification("TEST3", "", "TASK");
|
||||
classification2.setParentId(classification0.getId());
|
||||
classification2.setServiceLevel("P1D");
|
||||
classificationService.createClassification(classification2);
|
||||
|
||||
assertThat(classificationService.createClassificationQuery().list()).hasSize(2 + 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testModifiedClassification() throws Exception {
|
||||
final String description = "TEST SOMETHING";
|
||||
Classification classification =
|
||||
classificationService.newClassification("TEST434", "DOMAIN_A", "TASK");
|
||||
classification.setDescription("");
|
||||
classification.setServiceLevel("P1D");
|
||||
classification = classificationService.createClassification(classification);
|
||||
classification.setDescription("TEST SOMETHING");
|
||||
classificationService.updateClassification(classification);
|
||||
|
||||
classification =
|
||||
classificationService.getClassification(
|
||||
classification.getKey(), classification.getDomain());
|
||||
assertThat(classification.getDescription()).isEqualTo(description);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testInsertClassification() throws Exception {
|
||||
Classification classification =
|
||||
classificationService.newClassification("TEST1333", "DOMAIN_A", "TASK");
|
||||
classification.setServiceLevel("P1D");
|
||||
classificationService.createClassification(classification);
|
||||
|
||||
List<ClassificationSummary> list =
|
||||
classificationService
|
||||
.createClassificationQuery()
|
||||
.validInDomainEquals(Boolean.TRUE)
|
||||
.createdWithin(today())
|
||||
.list();
|
||||
|
||||
assertThat(list).hasSize(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testUpdateClassification() throws Exception {
|
||||
Classification classification =
|
||||
classificationService.newClassification("TEST32451", "DOMAIN_A", "TASK");
|
||||
classification.setServiceLevel("P1D");
|
||||
classification = classificationService.createClassification(classification);
|
||||
classification.setDescription("description");
|
||||
classification = classificationService.updateClassification(classification);
|
||||
|
||||
List<ClassificationSummary> list =
|
||||
classificationService.createClassificationQuery().validInDomainEquals(true).list();
|
||||
assertThat(list).hasSize(1);
|
||||
|
||||
classificationService.updateClassification(classification);
|
||||
list = classificationService.createClassificationQuery().list();
|
||||
assertThat(list).hasSize(2);
|
||||
|
||||
List<ClassificationSummary> allClassifications =
|
||||
classificationService.createClassificationQuery().list();
|
||||
assertThat(allClassifications).hasSize(2);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testDefaultSettings() throws Exception {
|
||||
Classification classification =
|
||||
classificationService.newClassification("TEST7771", "DOMAIN_A", "TASK");
|
||||
classification.setServiceLevel("P1D");
|
||||
classification = classificationService.createClassification(classification);
|
||||
|
||||
Classification classification1 =
|
||||
classificationService.newClassification("TEST1865", "DOMAIN_A", "TASK");
|
||||
classification1.setServiceLevel("P1D");
|
||||
classification1 = classificationService.createClassification(classification1);
|
||||
|
||||
classification1.setParentId(classification.getId());
|
||||
classificationService.updateClassification(classification1);
|
||||
|
||||
List<ClassificationSummary> list =
|
||||
classificationService.createClassificationQuery().parentIdIn("").list();
|
||||
assertThat(list).hasSize(3);
|
||||
list = classificationService.createClassificationQuery().list();
|
||||
assertThat(list).hasSize(4);
|
||||
|
||||
List<ClassificationSummary> listAll = classificationService.createClassificationQuery().list();
|
||||
list = classificationService.createClassificationQuery().list();
|
||||
assertThat(list).hasSize(listAll.size());
|
||||
|
||||
list = classificationService.createClassificationQuery().validInDomainEquals(true).list();
|
||||
assertThat(list).hasSize(2);
|
||||
|
||||
list = classificationService.createClassificationQuery().createdWithin(today()).list();
|
||||
assertThat(list).hasSize(4);
|
||||
|
||||
list =
|
||||
classificationService
|
||||
.createClassificationQuery()
|
||||
.domainIn("DOMAIN_C")
|
||||
.validInDomainEquals(false)
|
||||
.list();
|
||||
assertThat(list).isEmpty();
|
||||
|
||||
list = classificationService.createClassificationQuery().list();
|
||||
assertThat(list).hasSize(4);
|
||||
}
|
||||
|
||||
private TimeInterval today() {
|
||||
Instant begin =
|
||||
LocalDateTime.of(LocalDate.now(), LocalTime.MIN).atZone(ZoneId.systemDefault()).toInstant();
|
||||
Instant end =
|
||||
LocalDateTime.of(LocalDate.now(), LocalTime.MAX).atZone(ZoneId.systemDefault()).toInstant();
|
||||
return new TimeInterval(begin, end);
|
||||
}
|
||||
}
|
|
@ -1,258 +0,0 @@
|
|||
package pro.taskana.classification.internal;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalTime;
|
||||
import java.time.ZoneId;
|
||||
import java.util.List;
|
||||
import javax.sql.DataSource;
|
||||
import org.assertj.core.api.ThrowableAssert.ThrowingCallable;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import pro.taskana.TaskanaEngineConfiguration;
|
||||
import pro.taskana.classification.api.ClassificationService;
|
||||
import pro.taskana.classification.api.models.Classification;
|
||||
import pro.taskana.classification.api.models.ClassificationSummary;
|
||||
import pro.taskana.classification.internal.models.ClassificationImpl;
|
||||
import pro.taskana.common.api.TaskanaEngine.ConnectionManagementMode;
|
||||
import pro.taskana.common.api.TimeInterval;
|
||||
import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
||||
import pro.taskana.common.internal.TaskanaEngineImpl;
|
||||
import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
|
||||
import pro.taskana.common.internal.util.IdGenerator;
|
||||
import pro.taskana.sampledata.SampleDataGenerator;
|
||||
|
||||
/** Integration Test for ClassificationServiceImpl with connection management mode EXPLICIT. */
|
||||
class ClassificationServiceImplIntExplicitTest {
|
||||
|
||||
static int counter = 0;
|
||||
|
||||
private DataSource dataSource;
|
||||
private ClassificationService classificationService;
|
||||
private TaskanaEngineImpl taskanaEngine;
|
||||
|
||||
@BeforeEach
|
||||
void setup() throws Exception {
|
||||
dataSource = TaskanaEngineTestConfiguration.getDataSource();
|
||||
String schemaName = TaskanaEngineTestConfiguration.getSchemaName();
|
||||
SampleDataGenerator sampleDataGenerator = new SampleDataGenerator(dataSource, schemaName);
|
||||
sampleDataGenerator.clearDb();
|
||||
TaskanaEngineConfiguration taskanaEngineConfiguration =
|
||||
new TaskanaEngineConfiguration(dataSource, false, false, schemaName);
|
||||
taskanaEngine = (TaskanaEngineImpl) taskanaEngineConfiguration.buildTaskanaEngine();
|
||||
taskanaEngine.setConnectionManagementMode(ConnectionManagementMode.EXPLICIT);
|
||||
classificationService = taskanaEngine.getClassificationService();
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
void cleanUp() throws Exception {
|
||||
taskanaEngine.setConnection(null);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testInsertClassification() throws Exception {
|
||||
try (Connection connection = dataSource.getConnection()) {
|
||||
taskanaEngine.setConnection(connection);
|
||||
|
||||
final String domain = "DOMAIN_A";
|
||||
final String key = "dummy-key";
|
||||
ClassificationImpl expectedClassification;
|
||||
|
||||
// new classification but master existing
|
||||
expectedClassification =
|
||||
(ClassificationImpl) this.createNewClassificationWithUniqueKey("", "TASK");
|
||||
expectedClassification.setKey(key);
|
||||
expectedClassification.setDomain("DOMAIN_B");
|
||||
expectedClassification.setServiceLevel("P1D");
|
||||
|
||||
classificationService.createClassification(expectedClassification);
|
||||
connection.commit();
|
||||
Classification actualClassification =
|
||||
classificationService.getClassification(key, "DOMAIN_B");
|
||||
assertThat(actualClassification).isNotNull();
|
||||
assertThat(actualClassification.getCreated()).isNotNull();
|
||||
assertThat(actualClassification.getId()).isNotNull();
|
||||
assertThat(actualClassification.getKey()).isEqualTo(key);
|
||||
assertThat(actualClassification.getDomain()).isEqualTo("DOMAIN_B");
|
||||
assertThat(actualClassification.getId()).startsWith(IdGenerator.ID_PREFIX_CLASSIFICATION);
|
||||
Classification masterResult = classificationService.getClassification(key, "");
|
||||
assertThat(masterResult).isNotNull();
|
||||
|
||||
// invalid serviceLevel
|
||||
ClassificationImpl expectedClassificationCreated =
|
||||
(ClassificationImpl) this.createNewClassificationWithUniqueKey("", "TASK");
|
||||
expectedClassificationCreated.setDomain(domain);
|
||||
expectedClassificationCreated.setKey("");
|
||||
expectedClassificationCreated.setServiceLevel("ASAP");
|
||||
|
||||
ThrowingCallable call =
|
||||
() -> classificationService.createClassification(expectedClassificationCreated);
|
||||
assertThatThrownBy(call)
|
||||
.describedAs(
|
||||
"Should have thrown IllegalArgumentException, because ServiceLevel is invalid.")
|
||||
.isInstanceOf(InvalidArgumentException.class);
|
||||
|
||||
connection.commit();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testFindAllClassifications() throws Exception {
|
||||
try (Connection connection = dataSource.getConnection()) {
|
||||
taskanaEngine.setConnection(connection);
|
||||
Classification classification0 = this.createNewClassificationWithUniqueKey("", "TASK");
|
||||
classification0.setServiceLevel("P1D");
|
||||
classificationService.createClassification(classification0);
|
||||
Classification classification1 = this.createNewClassificationWithUniqueKey("", "TASK");
|
||||
classification1.setServiceLevel("P1D");
|
||||
classificationService.createClassification(classification1);
|
||||
Classification classification2 = this.createNewClassificationWithUniqueKey("", "TASK");
|
||||
classification2.setParentId(classification0.getId());
|
||||
classification2.setServiceLevel("P1D");
|
||||
classificationService.createClassification(classification2);
|
||||
|
||||
assertThat(classificationService.createClassificationQuery().list()).hasSize(2 + 1);
|
||||
connection.commit();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testModifiedClassification() throws Exception {
|
||||
|
||||
try (Connection connection = dataSource.getConnection()) {
|
||||
taskanaEngine.setConnection(connection);
|
||||
Classification classification = this.createNewClassificationWithUniqueKey("DOMAIN_A", "TASK");
|
||||
classification.setServiceLevel("P1D");
|
||||
connection.commit();
|
||||
classification = classificationService.createClassification(classification);
|
||||
|
||||
String updatedDescription = "TEST SOMETHING";
|
||||
classification.setDescription(updatedDescription);
|
||||
classification = classificationService.updateClassification(classification);
|
||||
connection.commit();
|
||||
|
||||
classification =
|
||||
classificationService.getClassification(
|
||||
classification.getKey(), classification.getDomain());
|
||||
assertThat(classification.getDescription()).isEqualTo(updatedDescription);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testInsertAndClassificationQuery() throws Exception {
|
||||
try (Connection connection = dataSource.getConnection()) {
|
||||
taskanaEngine.setConnection(connection);
|
||||
Classification classification = this.createNewClassificationWithUniqueKey("DOMAIN_A", "TASK");
|
||||
classification.setServiceLevel("P1D");
|
||||
classificationService.createClassification(classification);
|
||||
List<ClassificationSummary> list =
|
||||
classificationService
|
||||
.createClassificationQuery()
|
||||
.validInDomainEquals(Boolean.TRUE)
|
||||
.createdWithin(today())
|
||||
.list();
|
||||
assertThat(list).hasSize(1);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testUpdateAndClassificationQuery() throws Exception {
|
||||
try (Connection connection = dataSource.getConnection()) {
|
||||
taskanaEngine.setConnection(connection);
|
||||
Classification classification = this.createNewClassificationWithUniqueKey("DOMAIN_A", "TASK");
|
||||
classification.setDescription("");
|
||||
classification.setServiceLevel("P1D");
|
||||
classification = classificationService.createClassification(classification);
|
||||
classification.setDescription("description");
|
||||
classification = classificationService.updateClassification(classification);
|
||||
|
||||
List<ClassificationSummary> list = classificationService.createClassificationQuery().list();
|
||||
assertThat(list).hasSize(2);
|
||||
list = classificationService.createClassificationQuery().validInDomainEquals(true).list();
|
||||
assertThat(list).hasSize(1);
|
||||
classification =
|
||||
classificationService.getClassification(
|
||||
classification.getKey(), classification.getDomain());
|
||||
assertThat(classification.getDescription()).isEqualTo("description");
|
||||
|
||||
classificationService.updateClassification(classification);
|
||||
list = classificationService.createClassificationQuery().list();
|
||||
assertThat(list).hasSize(2);
|
||||
|
||||
List<ClassificationSummary> allClassifications =
|
||||
classificationService.createClassificationQuery().list();
|
||||
assertThat(allClassifications).hasSize(2);
|
||||
connection.commit();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testDefaultSettingsWithClassificationQuery() throws Exception {
|
||||
try (Connection connection = dataSource.getConnection()) {
|
||||
taskanaEngine.setConnection(connection);
|
||||
Classification classification = this.createNewClassificationWithUniqueKey("DOMAIN_A", "TASK");
|
||||
classification.setServiceLevel("P1D");
|
||||
classification = classificationService.createClassification(classification);
|
||||
|
||||
Classification classification1 =
|
||||
this.createNewClassificationWithUniqueKey("DOMAIN_A", "TASK");
|
||||
classification1.setServiceLevel("P1D");
|
||||
classification1 = classificationService.createClassification(classification1);
|
||||
classification1.setParentId(classification.getId());
|
||||
classification1 = classificationService.updateClassification(classification1);
|
||||
|
||||
List<ClassificationSummary> list =
|
||||
classificationService.createClassificationQuery().parentIdIn("").list();
|
||||
assertThat(list).hasSize(3);
|
||||
list = classificationService.createClassificationQuery().list();
|
||||
assertThat(list).hasSize(4);
|
||||
connection.commit();
|
||||
|
||||
list = classificationService.createClassificationQuery().validInDomainEquals(true).list();
|
||||
assertThat(list).hasSize(2);
|
||||
list = classificationService.createClassificationQuery().createdWithin(today()).list();
|
||||
assertThat(list).hasSize(4);
|
||||
list =
|
||||
classificationService
|
||||
.createClassificationQuery()
|
||||
.domainIn("DOMAIN_C")
|
||||
.validInDomainEquals(false)
|
||||
.list();
|
||||
assertThat(list).isEmpty();
|
||||
list =
|
||||
classificationService.createClassificationQuery().keyIn(classification1.getKey()).list();
|
||||
assertThat(list).hasSize(2);
|
||||
|
||||
list =
|
||||
classificationService
|
||||
.createClassificationQuery()
|
||||
.parentIdIn(classification.getId())
|
||||
.list();
|
||||
assertThat(list).hasSize(1);
|
||||
assertThat(list.get(0).getKey()).isEqualTo(classification1.getKey());
|
||||
connection.commit();
|
||||
}
|
||||
}
|
||||
|
||||
private Classification createNewClassificationWithUniqueKey(String domain, String type) {
|
||||
Classification classification =
|
||||
classificationService.newClassification("TEST" + counter, domain, type);
|
||||
counter++;
|
||||
return classification;
|
||||
}
|
||||
|
||||
private TimeInterval today() {
|
||||
Instant begin =
|
||||
LocalDateTime.of(LocalDate.now(), LocalTime.MIN).atZone(ZoneId.systemDefault()).toInstant();
|
||||
Instant end =
|
||||
LocalDateTime.of(LocalDate.now(), LocalTime.MAX).atZone(ZoneId.systemDefault()).toInstant();
|
||||
return new TimeInterval(begin, end);
|
||||
}
|
||||
}
|
|
@ -1,76 +0,0 @@
|
|||
package pro.taskana.classification.internal;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import org.assertj.core.api.ThrowableAssert.ThrowingCallable;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.Spy;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import pro.taskana.classification.api.models.Classification;
|
||||
import pro.taskana.classification.internal.models.ClassificationImpl;
|
||||
import pro.taskana.common.api.TaskanaEngine;
|
||||
import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
||||
|
||||
/** Unit Test for ClassificationServiceImpl. */
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class ClassificationServiceImplTest {
|
||||
|
||||
@Spy @InjectMocks private ClassificationServiceImpl cutSpy;
|
||||
@Mock private ClassificationMapper classificationMapperMock;
|
||||
@Mock private TaskanaEngine taskanaEngineMock;
|
||||
@Mock private InternalTaskanaEngine internalTaskanaEngineMock;
|
||||
@Mock private ClassificationQueryImpl classificationQueryImplMock;
|
||||
|
||||
@Test
|
||||
void testCreateClassificationQuery() {
|
||||
cutSpy.createClassificationQuery();
|
||||
verify(internalTaskanaEngineMock, times(1)).getHistoryEventManager();
|
||||
verifyNoMoreInteractions(
|
||||
classificationMapperMock,
|
||||
internalTaskanaEngineMock,
|
||||
taskanaEngineMock,
|
||||
classificationQueryImplMock);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testThrowExceptionIdIfClassificationIsCreatedWithAnExplicitId() {
|
||||
when(internalTaskanaEngineMock.getEngine()).thenReturn(taskanaEngineMock);
|
||||
ThrowingCallable call =
|
||||
() -> {
|
||||
Classification classification = createDummyClassification();
|
||||
when(internalTaskanaEngineMock.domainExists(any())).thenReturn(true);
|
||||
cutSpy.createClassification(classification);
|
||||
};
|
||||
assertThatThrownBy(call)
|
||||
.isInstanceOf(InvalidArgumentException.class)
|
||||
.hasMessage("ClassificationId should be null on creation");
|
||||
}
|
||||
|
||||
private Classification createDummyClassification() {
|
||||
return this.createDummyClassification("ID: 1");
|
||||
}
|
||||
|
||||
private Classification createDummyClassification(String id) {
|
||||
|
||||
ClassificationImpl classificationImpl = new ClassificationImpl();
|
||||
classificationImpl.setDescription("A DUMMY FOR TESTING A SERVICE");
|
||||
classificationImpl.setName("SERVICE-DUMMY");
|
||||
classificationImpl.setDomain("DOMAIN_A");
|
||||
classificationImpl.setServiceLevel("P2D");
|
||||
classificationImpl.setId(id);
|
||||
classificationImpl.setKey("ABC111");
|
||||
classificationImpl.setParentId("");
|
||||
classificationImpl.setParentKey("");
|
||||
return classificationImpl;
|
||||
}
|
||||
}
|
|
@ -1,316 +0,0 @@
|
|||
package pro.taskana.monitor.internal;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import pro.taskana.TaskanaEngineConfiguration;
|
||||
import pro.taskana.common.api.TaskanaEngine;
|
||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
||||
import pro.taskana.monitor.api.SelectedItem;
|
||||
import pro.taskana.monitor.api.TaskTimestamp;
|
||||
import pro.taskana.monitor.api.reports.ClassificationCategoryReport;
|
||||
import pro.taskana.monitor.api.reports.header.TimeIntervalColumnHeader;
|
||||
import pro.taskana.monitor.api.reports.item.MonitorQueryItem;
|
||||
import pro.taskana.task.api.TaskCustomField;
|
||||
import pro.taskana.task.api.TaskState;
|
||||
|
||||
/** Unit Test for CategoryBuilderImpl. */
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class ClassificationClassificationCategoryReportBuilderImplTest {
|
||||
|
||||
@InjectMocks private MonitorServiceImpl cut;
|
||||
|
||||
@Mock private InternalTaskanaEngine internalTaskanaEngineMock;
|
||||
|
||||
@Mock private TaskanaEngine taskanaEngineMock;
|
||||
|
||||
@Mock private TaskanaEngineConfiguration taskanaEngineConfiguration;
|
||||
|
||||
@Mock private MonitorMapper monitorMapperMock;
|
||||
|
||||
@BeforeEach
|
||||
void setup() {
|
||||
when(internalTaskanaEngineMock.getEngine()).thenReturn(taskanaEngineMock);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetTotalNumbersOfCategoryReport() throws Exception {
|
||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
||||
final List<String> categories = List.of("EXTERN");
|
||||
final List<String> domains = List.of("DOMAIN_A");
|
||||
final List<String> classificationIds = List.of("L10000");
|
||||
final List<String> excludedClassificationIds = List.of("L20000");
|
||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
||||
|
||||
List<MonitorQueryItem> expectedResult = new ArrayList<>();
|
||||
MonitorQueryItem monitorQueryItem = new MonitorQueryItem();
|
||||
monitorQueryItem.setKey("EXTERN");
|
||||
monitorQueryItem.setNumberOfTasks(1);
|
||||
expectedResult.add(monitorQueryItem);
|
||||
when(monitorMapperMock.getTaskCountOfCategories(
|
||||
any(),
|
||||
eq(workbasketIds),
|
||||
eq(states),
|
||||
eq(categories),
|
||||
eq(domains),
|
||||
eq(TaskTimestamp.DUE),
|
||||
eq(classificationIds),
|
||||
eq(excludedClassificationIds),
|
||||
eq(customAttributeFilter)))
|
||||
.thenReturn(expectedResult);
|
||||
|
||||
final ClassificationCategoryReport actualResult =
|
||||
cut.createClassificationCategoryReportBuilder()
|
||||
.workbasketIdIn(workbasketIds)
|
||||
.stateIn(states)
|
||||
.classificationCategoryIn(categories)
|
||||
.domainIn(domains)
|
||||
.classificationIdIn(classificationIds)
|
||||
.excludedClassificationIdIn(excludedClassificationIds)
|
||||
.customAttributeFilterIn(customAttributeFilter)
|
||||
.buildReport();
|
||||
|
||||
verify(internalTaskanaEngineMock).openConnection();
|
||||
verify(internalTaskanaEngineMock, times(2)).getEngine();
|
||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
||||
verify(monitorMapperMock)
|
||||
.getTaskCountOfCategories(any(), any(), any(), any(), any(), any(), any(), any(), any());
|
||||
verify(internalTaskanaEngineMock).returnConnection();
|
||||
verifyNoMoreInteractions(
|
||||
internalTaskanaEngineMock,
|
||||
taskanaEngineMock,
|
||||
monitorMapperMock,
|
||||
taskanaEngineConfiguration);
|
||||
|
||||
assertThat(actualResult).isNotNull();
|
||||
assertThat(actualResult.getRow("EXTERN").getTotalValue()).isOne();
|
||||
assertThat(actualResult.getSumRow().getTotalValue()).isOne();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetCategoryReportWithReportLineItemDefinitions() throws Exception {
|
||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
||||
final List<String> categories = List.of("EXTERN");
|
||||
final List<String> domains = List.of("DOMAIN_A");
|
||||
final List<String> classificationIds = List.of("L10000");
|
||||
final List<String> excludedClassificationIds = List.of("L20000");
|
||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
||||
final List<TimeIntervalColumnHeader> columnHeaders =
|
||||
List.of(new TimeIntervalColumnHeader(0, 0));
|
||||
|
||||
final List<MonitorQueryItem> expectedResult = new ArrayList<>();
|
||||
MonitorQueryItem monitorQueryItem = new MonitorQueryItem();
|
||||
monitorQueryItem.setKey("EXTERN");
|
||||
monitorQueryItem.setAgeInDays(0);
|
||||
monitorQueryItem.setNumberOfTasks(1);
|
||||
expectedResult.add(monitorQueryItem);
|
||||
when(monitorMapperMock.getTaskCountOfCategories(
|
||||
any(),
|
||||
eq(workbasketIds),
|
||||
eq(states),
|
||||
eq(categories),
|
||||
eq(domains),
|
||||
eq(TaskTimestamp.DUE),
|
||||
eq(classificationIds),
|
||||
eq(excludedClassificationIds),
|
||||
eq(customAttributeFilter)))
|
||||
.thenReturn(expectedResult);
|
||||
|
||||
final ClassificationCategoryReport actualResult =
|
||||
cut.createClassificationCategoryReportBuilder()
|
||||
.workbasketIdIn(workbasketIds)
|
||||
.stateIn(states)
|
||||
.classificationCategoryIn(categories)
|
||||
.domainIn(domains)
|
||||
.classificationIdIn(classificationIds)
|
||||
.excludedClassificationIdIn(excludedClassificationIds)
|
||||
.customAttributeFilterIn(customAttributeFilter)
|
||||
.withColumnHeaders(columnHeaders)
|
||||
.buildReport();
|
||||
|
||||
verify(internalTaskanaEngineMock).openConnection();
|
||||
verify(internalTaskanaEngineMock, times(2)).getEngine();
|
||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
||||
verify(monitorMapperMock)
|
||||
.getTaskCountOfCategories(any(), any(), any(), any(), any(), any(), any(), any(), any());
|
||||
verify(internalTaskanaEngineMock).returnConnection();
|
||||
verifyNoMoreInteractions(
|
||||
internalTaskanaEngineMock,
|
||||
taskanaEngineMock,
|
||||
monitorMapperMock,
|
||||
taskanaEngineConfiguration);
|
||||
|
||||
assertThat(actualResult).isNotNull();
|
||||
assertThat(actualResult.getRow("EXTERN").getTotalValue()).isOne();
|
||||
assertThat(actualResult.getRow("EXTERN").getCells()[0]).isOne();
|
||||
assertThat(actualResult.getSumRow().getTotalValue()).isOne();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testListTaskIdsOfCategoryReportForSelectedItems() throws Exception {
|
||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
||||
final List<String> categories = List.of("EXTERN");
|
||||
final List<String> domains = List.of("DOMAIN_A");
|
||||
final List<String> classificationIds = List.of("L10000");
|
||||
final List<String> excludedClassificationIds = List.of("L20000");
|
||||
final Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
||||
final List<TimeIntervalColumnHeader> columnHeaders =
|
||||
List.of(new TimeIntervalColumnHeader(0, 0));
|
||||
|
||||
List<SelectedItem> selectedItems = List.of(new SelectedItem("EXTERN", null, 1, 5));
|
||||
|
||||
List<String> expectedResult = List.of("TKI:000000000000000000000000000000000001");
|
||||
when(monitorMapperMock.getTaskIdsForSelectedItems(
|
||||
any(),
|
||||
eq(workbasketIds),
|
||||
eq(states),
|
||||
eq(categories),
|
||||
eq(domains),
|
||||
eq(classificationIds),
|
||||
eq(excludedClassificationIds),
|
||||
eq(customAttributeFilter),
|
||||
eq(null),
|
||||
eq("CLASSIFICATION_CATEGORY"),
|
||||
eq(TaskTimestamp.DUE),
|
||||
eq(selectedItems),
|
||||
eq(false)))
|
||||
.thenReturn(expectedResult);
|
||||
|
||||
final List<String> actualResult =
|
||||
cut.createClassificationCategoryReportBuilder()
|
||||
.workbasketIdIn(workbasketIds)
|
||||
.stateIn(states)
|
||||
.classificationCategoryIn(categories)
|
||||
.domainIn(domains)
|
||||
.classificationIdIn(classificationIds)
|
||||
.excludedClassificationIdIn(excludedClassificationIds)
|
||||
.customAttributeFilterIn(customAttributeFilter)
|
||||
.withColumnHeaders(columnHeaders)
|
||||
.listTaskIdsForSelectedItems(selectedItems, TaskTimestamp.DUE);
|
||||
|
||||
verify(internalTaskanaEngineMock).openConnection();
|
||||
verify(internalTaskanaEngineMock, times(2)).getEngine();
|
||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
||||
verify(monitorMapperMock)
|
||||
.getTaskIdsForSelectedItems(
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
eq(TaskTimestamp.DUE),
|
||||
any(),
|
||||
eq(false));
|
||||
verify(internalTaskanaEngineMock).returnConnection();
|
||||
verifyNoMoreInteractions(
|
||||
internalTaskanaEngineMock,
|
||||
taskanaEngineMock,
|
||||
monitorMapperMock,
|
||||
taskanaEngineConfiguration);
|
||||
|
||||
assertThat(actualResult).isEqualTo(expectedResult);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testListTaskIdsForSelectedItemsIsEmptyResult() throws Exception {
|
||||
List<String> result =
|
||||
cut.createClassificationCategoryReportBuilder()
|
||||
.listTaskIdsForSelectedItems(
|
||||
List.of(new SelectedItem("BLA", null, 0, 0)), TaskTimestamp.DUE);
|
||||
assertThat(result).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testListCustomAttributeValuesForCustomAttributeName() throws Exception {
|
||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
||||
final List<String> categories = List.of("EXTERN");
|
||||
final List<String> domains = List.of("DOMAIN_A");
|
||||
final List<String> classificationIds = List.of("L10000");
|
||||
final List<String> excludedClassificationIds = List.of("L20000");
|
||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
||||
final List<TimeIntervalColumnHeader> columnHeaders =
|
||||
List.of(new TimeIntervalColumnHeader(0, 0));
|
||||
|
||||
List<String> expectedResult = List.of("Geschaeftsstelle A");
|
||||
when(monitorMapperMock.getCustomAttributeValuesForReport(
|
||||
workbasketIds,
|
||||
states,
|
||||
categories,
|
||||
domains,
|
||||
classificationIds,
|
||||
excludedClassificationIds,
|
||||
customAttributeFilter,
|
||||
null,
|
||||
TaskCustomField.CUSTOM_1))
|
||||
.thenReturn(expectedResult);
|
||||
|
||||
final List<String> actualResult =
|
||||
cut.createClassificationCategoryReportBuilder()
|
||||
.workbasketIdIn(workbasketIds)
|
||||
.stateIn(states)
|
||||
.classificationCategoryIn(categories)
|
||||
.domainIn(domains)
|
||||
.classificationIdIn(classificationIds)
|
||||
.excludedClassificationIdIn(excludedClassificationIds)
|
||||
.customAttributeFilterIn(customAttributeFilter)
|
||||
.withColumnHeaders(columnHeaders)
|
||||
.listCustomAttributeValuesForCustomAttributeName(TaskCustomField.CUSTOM_1);
|
||||
|
||||
verify(internalTaskanaEngineMock).openConnection();
|
||||
verify(internalTaskanaEngineMock, times(2)).getEngine();
|
||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
||||
verify(monitorMapperMock)
|
||||
.getCustomAttributeValuesForReport(
|
||||
any(), any(), any(), any(), any(), any(), any(), any(), any());
|
||||
verify(internalTaskanaEngineMock).returnConnection();
|
||||
verifyNoMoreInteractions(
|
||||
internalTaskanaEngineMock,
|
||||
taskanaEngineMock,
|
||||
monitorMapperMock,
|
||||
taskanaEngineConfiguration);
|
||||
|
||||
assertThat(actualResult).isEqualTo(expectedResult);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testListCustomAttributeValuesForCustomAttributeNameIsEmptyResult() throws Exception {
|
||||
List<String> result =
|
||||
cut.createClassificationCategoryReportBuilder()
|
||||
.workbasketIdIn(List.of("DieGibtsSicherNed"))
|
||||
.listCustomAttributeValuesForCustomAttributeName(TaskCustomField.CUSTOM_1);
|
||||
assertThat(result).isNotNull();
|
||||
}
|
||||
}
|
|
@ -1,486 +0,0 @@
|
|||
package pro.taskana.monitor.internal;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import pro.taskana.TaskanaEngineConfiguration;
|
||||
import pro.taskana.classification.api.ClassificationQuery;
|
||||
import pro.taskana.classification.api.ClassificationService;
|
||||
import pro.taskana.common.api.TaskanaEngine;
|
||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
||||
import pro.taskana.monitor.api.SelectedItem;
|
||||
import pro.taskana.monitor.api.TaskTimestamp;
|
||||
import pro.taskana.monitor.api.reports.ClassificationReport;
|
||||
import pro.taskana.monitor.api.reports.ClassificationReport.DetailedClassificationReport;
|
||||
import pro.taskana.monitor.api.reports.header.TimeIntervalColumnHeader;
|
||||
import pro.taskana.monitor.api.reports.item.DetailedMonitorQueryItem;
|
||||
import pro.taskana.monitor.api.reports.item.MonitorQueryItem;
|
||||
import pro.taskana.monitor.api.reports.row.FoldableRow;
|
||||
import pro.taskana.task.api.TaskCustomField;
|
||||
import pro.taskana.task.api.TaskState;
|
||||
|
||||
/** Unit Test for ClassificationReportBuilderImpl. */
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class ClassificationReportBuilderImplTest {
|
||||
|
||||
@InjectMocks private MonitorServiceImpl cut;
|
||||
@Mock private InternalTaskanaEngine internalTaskanaEngineMock;
|
||||
@Mock private TaskanaEngine taskanaEngineMock;
|
||||
@Mock private TaskanaEngineConfiguration taskanaEngineConfiguration;
|
||||
@Mock private MonitorMapper monitorMapperMock;
|
||||
@Mock private ClassificationService classificationService;
|
||||
|
||||
private Object[] mocks;
|
||||
|
||||
@BeforeEach
|
||||
void setup() {
|
||||
when(internalTaskanaEngineMock.getEngine()).thenReturn(taskanaEngineMock);
|
||||
when(taskanaEngineMock.getClassificationService()).thenReturn(classificationService);
|
||||
mocks =
|
||||
new Object[] {
|
||||
internalTaskanaEngineMock,
|
||||
taskanaEngineMock,
|
||||
monitorMapperMock,
|
||||
taskanaEngineConfiguration,
|
||||
classificationService
|
||||
};
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetTotalNumbersOfClassificationReport() throws Exception {
|
||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
||||
final List<String> categories = List.of("EXTERN");
|
||||
final List<String> domains = List.of("DOMAIN_A");
|
||||
final List<String> classificationIds = List.of("L10000");
|
||||
final List<String> excludedClassificationIds = List.of("L20000");
|
||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
||||
|
||||
final List<MonitorQueryItem> expectedResult = new ArrayList<>();
|
||||
MonitorQueryItem monitorQueryItem = new MonitorQueryItem();
|
||||
monitorQueryItem.setKey("CLI:000000000000000000000000000000000001");
|
||||
monitorQueryItem.setNumberOfTasks(1);
|
||||
expectedResult.add(monitorQueryItem);
|
||||
when(monitorMapperMock.getTaskCountOfClassifications(
|
||||
any(),
|
||||
eq(workbasketIds),
|
||||
eq(states),
|
||||
eq(categories),
|
||||
eq(domains),
|
||||
eq(TaskTimestamp.DUE),
|
||||
eq(classificationIds),
|
||||
eq(excludedClassificationIds),
|
||||
eq(customAttributeFilter)))
|
||||
.thenReturn(expectedResult);
|
||||
|
||||
ClassificationQuery queryMock = mock(ClassificationQuery.class);
|
||||
when(classificationService.createClassificationQuery()).thenReturn(queryMock);
|
||||
when(queryMock.keyIn(any())).thenReturn(queryMock);
|
||||
when(queryMock.domainIn(any())).thenReturn(queryMock);
|
||||
when(queryMock.list()).thenReturn(List.of());
|
||||
|
||||
final ClassificationReport actualResult =
|
||||
cut.createClassificationReportBuilder()
|
||||
.workbasketIdIn(workbasketIds)
|
||||
.stateIn(states)
|
||||
.classificationCategoryIn(categories)
|
||||
.domainIn(domains)
|
||||
.classificationIdIn(classificationIds)
|
||||
.excludedClassificationIdIn(excludedClassificationIds)
|
||||
.customAttributeFilterIn(customAttributeFilter)
|
||||
.buildReport();
|
||||
|
||||
verify(internalTaskanaEngineMock).openConnection();
|
||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
||||
verify(taskanaEngineMock).getClassificationService();
|
||||
verify(internalTaskanaEngineMock, times(3)).getEngine();
|
||||
|
||||
verify(monitorMapperMock)
|
||||
.getTaskCountOfClassifications(
|
||||
any(), any(), any(), any(), any(), any(), any(), any(), any());
|
||||
verify(internalTaskanaEngineMock).returnConnection();
|
||||
|
||||
verifyNoMoreInteractions(queryMock);
|
||||
verifyNoMoreInteractions(mocks);
|
||||
|
||||
assertThat(actualResult).isNotNull();
|
||||
assertThat(actualResult.getRow("CLI:000000000000000000000000000000000001").getTotalValue())
|
||||
.isEqualTo(1);
|
||||
assertThat(actualResult.getSumRow().getTotalValue()).isOne();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetClassificationReportWithReportLineItemDefinitions() throws Exception {
|
||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
||||
final List<String> categories = List.of("EXTERN");
|
||||
final List<String> domains = List.of("DOMAIN_A");
|
||||
final List<String> classificationIds = List.of("L10000");
|
||||
final List<String> excludedClassificationIds = List.of("L20000");
|
||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
||||
|
||||
final List<TimeIntervalColumnHeader> columnHeaders =
|
||||
List.of(new TimeIntervalColumnHeader(0, 0));
|
||||
|
||||
final List<MonitorQueryItem> expectedResult = new ArrayList<>();
|
||||
MonitorQueryItem monitorQueryItem = new MonitorQueryItem();
|
||||
monitorQueryItem.setKey("CLI:000000000000000000000000000000000001");
|
||||
monitorQueryItem.setAgeInDays(0);
|
||||
monitorQueryItem.setNumberOfTasks(1);
|
||||
expectedResult.add(monitorQueryItem);
|
||||
when(monitorMapperMock.getTaskCountOfClassifications(
|
||||
any(),
|
||||
eq(workbasketIds),
|
||||
eq(states),
|
||||
eq(categories),
|
||||
eq(domains),
|
||||
eq(TaskTimestamp.DUE),
|
||||
eq(classificationIds),
|
||||
eq(excludedClassificationIds),
|
||||
eq(customAttributeFilter)))
|
||||
.thenReturn(expectedResult);
|
||||
ClassificationQuery queryMock = mock(ClassificationQuery.class);
|
||||
when(classificationService.createClassificationQuery()).thenReturn(queryMock);
|
||||
when(queryMock.keyIn(any())).thenReturn(queryMock);
|
||||
when(queryMock.domainIn(any())).thenReturn(queryMock);
|
||||
when(queryMock.list()).thenReturn(List.of());
|
||||
|
||||
final ClassificationReport actualResult =
|
||||
cut.createClassificationReportBuilder()
|
||||
.workbasketIdIn(workbasketIds)
|
||||
.stateIn(states)
|
||||
.classificationCategoryIn(categories)
|
||||
.domainIn(domains)
|
||||
.classificationIdIn(classificationIds)
|
||||
.excludedClassificationIdIn(excludedClassificationIds)
|
||||
.customAttributeFilterIn(customAttributeFilter)
|
||||
.withColumnHeaders(columnHeaders)
|
||||
.buildReport();
|
||||
|
||||
verify(internalTaskanaEngineMock).openConnection();
|
||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
||||
verify(taskanaEngineMock).getClassificationService();
|
||||
verify(internalTaskanaEngineMock, times(3)).getEngine();
|
||||
|
||||
verify(monitorMapperMock)
|
||||
.getTaskCountOfClassifications(
|
||||
any(), any(), any(), any(), any(), any(), any(), any(), any());
|
||||
verify(internalTaskanaEngineMock).returnConnection();
|
||||
verifyNoMoreInteractions(queryMock);
|
||||
verifyNoMoreInteractions(mocks);
|
||||
|
||||
assertThat(actualResult).isNotNull();
|
||||
assertThat(actualResult.getRow("CLI:000000000000000000000000000000000001").getTotalValue())
|
||||
.isOne();
|
||||
assertThat(actualResult.getRow("CLI:000000000000000000000000000000000001").getCells())
|
||||
.isEqualTo(new int[] {1});
|
||||
assertThat(actualResult.getSumRow().getTotalValue()).isOne();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetTotalNumbersOfDetailedClassificationReport() throws Exception {
|
||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
||||
final List<String> categories = List.of("EXTERN");
|
||||
final List<String> domains = List.of("DOMAIN_A");
|
||||
final List<String> classificationIds = List.of("L10000");
|
||||
final List<String> excludedClassificationIds = List.of("L20000");
|
||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
||||
|
||||
final List<DetailedMonitorQueryItem> expectedResult = new ArrayList<>();
|
||||
DetailedMonitorQueryItem detailedMonitorQueryItem = new DetailedMonitorQueryItem();
|
||||
detailedMonitorQueryItem.setKey("CLI:000000000000000000000000000000000001");
|
||||
detailedMonitorQueryItem.setAttachmentKey("CLI:000000000000000000000000000000000006");
|
||||
detailedMonitorQueryItem.setNumberOfTasks(1);
|
||||
expectedResult.add(detailedMonitorQueryItem);
|
||||
when(monitorMapperMock.getTaskCountOfDetailedClassifications(
|
||||
any(),
|
||||
eq(workbasketIds),
|
||||
eq(states),
|
||||
eq(categories),
|
||||
eq(domains),
|
||||
eq(TaskTimestamp.DUE),
|
||||
eq(classificationIds),
|
||||
eq(excludedClassificationIds),
|
||||
eq(customAttributeFilter)))
|
||||
.thenReturn(expectedResult);
|
||||
ClassificationQuery queryMock = mock(ClassificationQuery.class);
|
||||
when(classificationService.createClassificationQuery()).thenReturn(queryMock);
|
||||
when(queryMock.keyIn(any())).thenReturn(queryMock);
|
||||
when(queryMock.domainIn(any())).thenReturn(queryMock);
|
||||
when(queryMock.list()).thenReturn(List.of());
|
||||
|
||||
final DetailedClassificationReport actualResult =
|
||||
cut.createClassificationReportBuilder()
|
||||
.workbasketIdIn(workbasketIds)
|
||||
.stateIn(states)
|
||||
.classificationCategoryIn(categories)
|
||||
.domainIn(domains)
|
||||
.classificationIdIn(classificationIds)
|
||||
.excludedClassificationIdIn(excludedClassificationIds)
|
||||
.customAttributeFilterIn(customAttributeFilter)
|
||||
.buildDetailedReport();
|
||||
|
||||
verify(internalTaskanaEngineMock).openConnection();
|
||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
||||
verify(taskanaEngineMock).getClassificationService();
|
||||
verify(internalTaskanaEngineMock, times(3)).getEngine();
|
||||
|
||||
verify(monitorMapperMock)
|
||||
.getTaskCountOfDetailedClassifications(
|
||||
any(), any(), any(), any(), any(), any(), any(), any(), any());
|
||||
verify(internalTaskanaEngineMock).returnConnection();
|
||||
verifyNoMoreInteractions(queryMock);
|
||||
verifyNoMoreInteractions(mocks);
|
||||
|
||||
FoldableRow<DetailedMonitorQueryItem> line =
|
||||
actualResult.getRow("CLI:000000000000000000000000000000000001");
|
||||
assertThat(actualResult).isNotNull();
|
||||
assertThat(line.getTotalValue()).isOne();
|
||||
assertThat(line.getFoldableRow("CLI:000000000000000000000000000000000006").getTotalValue())
|
||||
.isOne();
|
||||
assertThat(actualResult.getSumRow().getTotalValue()).isOne();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetDetailedClassificationReportWithReportLineItemDefinitions() throws Exception {
|
||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
||||
final List<String> categories = List.of("EXTERN");
|
||||
final List<String> domains = List.of("DOMAIN_A");
|
||||
final List<String> classificationIds = List.of("L10000");
|
||||
final List<String> excludedClassificationIds = List.of("L20000");
|
||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
||||
final List<TimeIntervalColumnHeader> columnHeaders =
|
||||
List.of(new TimeIntervalColumnHeader(0, 0));
|
||||
|
||||
final List<DetailedMonitorQueryItem> expectedResult = new ArrayList<>();
|
||||
DetailedMonitorQueryItem detailedMonitorQueryItem = new DetailedMonitorQueryItem();
|
||||
detailedMonitorQueryItem.setKey("CLI:000000000000000000000000000000000001");
|
||||
detailedMonitorQueryItem.setAttachmentKey("CLI:000000000000000000000000000000000006");
|
||||
detailedMonitorQueryItem.setAgeInDays(0);
|
||||
detailedMonitorQueryItem.setNumberOfTasks(1);
|
||||
expectedResult.add(detailedMonitorQueryItem);
|
||||
when(monitorMapperMock.getTaskCountOfDetailedClassifications(
|
||||
any(),
|
||||
eq(workbasketIds),
|
||||
eq(states),
|
||||
eq(categories),
|
||||
eq(domains),
|
||||
eq(TaskTimestamp.DUE),
|
||||
eq(classificationIds),
|
||||
eq(excludedClassificationIds),
|
||||
eq(customAttributeFilter)))
|
||||
.thenReturn(expectedResult);
|
||||
ClassificationQuery queryMock = mock(ClassificationQuery.class);
|
||||
when(classificationService.createClassificationQuery()).thenReturn(queryMock);
|
||||
when(queryMock.keyIn(any())).thenReturn(queryMock);
|
||||
when(queryMock.domainIn(any())).thenReturn(queryMock);
|
||||
when(queryMock.list()).thenReturn(List.of());
|
||||
|
||||
final DetailedClassificationReport actualResult =
|
||||
cut.createClassificationReportBuilder()
|
||||
.workbasketIdIn(workbasketIds)
|
||||
.stateIn(states)
|
||||
.classificationCategoryIn(categories)
|
||||
.domainIn(domains)
|
||||
.classificationIdIn(classificationIds)
|
||||
.excludedClassificationIdIn(excludedClassificationIds)
|
||||
.customAttributeFilterIn(customAttributeFilter)
|
||||
.withColumnHeaders(columnHeaders)
|
||||
.buildDetailedReport();
|
||||
|
||||
verify(internalTaskanaEngineMock).openConnection();
|
||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
||||
verify(taskanaEngineMock).getClassificationService();
|
||||
verify(internalTaskanaEngineMock, times(3)).getEngine();
|
||||
|
||||
verify(monitorMapperMock)
|
||||
.getTaskCountOfDetailedClassifications(
|
||||
any(), any(), any(), any(), any(), any(), any(), any(), any());
|
||||
verify(internalTaskanaEngineMock).returnConnection();
|
||||
verifyNoMoreInteractions(queryMock);
|
||||
verifyNoMoreInteractions(mocks);
|
||||
|
||||
FoldableRow<DetailedMonitorQueryItem> line =
|
||||
actualResult.getRow("CLI:000000000000000000000000000000000001");
|
||||
assertThat(actualResult).isNotNull();
|
||||
assertThat(line.getTotalValue()).isOne();
|
||||
assertThat(line.getFoldableRow("CLI:000000000000000000000000000000000006").getTotalValue())
|
||||
.isOne();
|
||||
assertThat(line.getCells()).isEqualTo(new int[] {1});
|
||||
assertThat(line.getFoldableRow("CLI:000000000000000000000000000000000006").getCells())
|
||||
.isEqualTo(new int[] {1});
|
||||
assertThat(actualResult.getSumRow().getTotalValue()).isOne();
|
||||
assertThat(actualResult.getSumRow().getCells()).isEqualTo(new int[] {1});
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetTaskIdsForSelectedItems() throws Exception {
|
||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
||||
final List<String> categories = List.of("EXTERN");
|
||||
final List<String> domains = List.of("DOMAIN_A");
|
||||
final List<String> classificationIds = List.of("L10000");
|
||||
final List<String> excludedClassificationIds = List.of("L20000");
|
||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
||||
final List<TimeIntervalColumnHeader> columnHeaders =
|
||||
List.of(new TimeIntervalColumnHeader(0, 0));
|
||||
|
||||
final List<SelectedItem> selectedItems = List.of(new SelectedItem("EXTERN", null, 1, 5));
|
||||
|
||||
final List<String> expectedResult = List.of("TKI:000000000000000000000000000000000001");
|
||||
when(monitorMapperMock.getTaskIdsForSelectedItems(
|
||||
any(),
|
||||
eq(workbasketIds),
|
||||
eq(states),
|
||||
eq(categories),
|
||||
eq(domains),
|
||||
eq(classificationIds),
|
||||
eq(excludedClassificationIds),
|
||||
eq(customAttributeFilter),
|
||||
eq(null),
|
||||
eq("CLASSIFICATION_KEY"),
|
||||
eq(TaskTimestamp.DUE),
|
||||
eq(selectedItems),
|
||||
eq(false)))
|
||||
.thenReturn(expectedResult);
|
||||
|
||||
final List<String> actualResult =
|
||||
cut.createClassificationReportBuilder()
|
||||
.workbasketIdIn(workbasketIds)
|
||||
.stateIn(states)
|
||||
.classificationCategoryIn(categories)
|
||||
.domainIn(domains)
|
||||
.classificationIdIn(classificationIds)
|
||||
.excludedClassificationIdIn(excludedClassificationIds)
|
||||
.customAttributeFilterIn(customAttributeFilter)
|
||||
.withColumnHeaders(columnHeaders)
|
||||
.listTaskIdsForSelectedItems(selectedItems, TaskTimestamp.DUE);
|
||||
|
||||
verify(internalTaskanaEngineMock).openConnection();
|
||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
||||
verify(internalTaskanaEngineMock, times(3)).getEngine();
|
||||
|
||||
verify(monitorMapperMock)
|
||||
.getTaskIdsForSelectedItems(
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
eq(TaskTimestamp.DUE),
|
||||
any(),
|
||||
eq(false));
|
||||
verify(internalTaskanaEngineMock).returnConnection();
|
||||
verify(taskanaEngineMock).getClassificationService();
|
||||
verifyNoMoreInteractions(mocks);
|
||||
|
||||
assertThat(actualResult).isEqualTo(expectedResult);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetTaskIdsForSelectedItemsIsEmptyResult() throws Exception {
|
||||
List<SelectedItem> selectedItems = List.of(new SelectedItem("GIBTSNED", null, 0, 0));
|
||||
List<String> result =
|
||||
cut.createClassificationReportBuilder()
|
||||
.workbasketIdIn(List.of("DieGibtsEhNed"))
|
||||
.listTaskIdsForSelectedItems(selectedItems, TaskTimestamp.DUE);
|
||||
assertThat(result).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testListCustomAttributeValuesForCustomAttributeName() throws Exception {
|
||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
||||
final List<String> categories = List.of("EXTERN");
|
||||
final List<String> domains = List.of("DOMAIN_A");
|
||||
final List<String> classificationIds = List.of("L10000");
|
||||
final List<String> excludedClassificationIds = List.of("L20000");
|
||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
||||
final List<TimeIntervalColumnHeader> columnHeaders =
|
||||
List.of(new TimeIntervalColumnHeader(0, 0));
|
||||
|
||||
final List<String> expectedResult = List.of("Geschaeftsstelle A");
|
||||
when(monitorMapperMock.getCustomAttributeValuesForReport(
|
||||
workbasketIds,
|
||||
states,
|
||||
categories,
|
||||
domains,
|
||||
classificationIds,
|
||||
excludedClassificationIds,
|
||||
customAttributeFilter,
|
||||
null,
|
||||
TaskCustomField.CUSTOM_1))
|
||||
.thenReturn(expectedResult);
|
||||
|
||||
final List<String> actualResult =
|
||||
cut.createClassificationReportBuilder()
|
||||
.workbasketIdIn(workbasketIds)
|
||||
.stateIn(states)
|
||||
.classificationCategoryIn(categories)
|
||||
.domainIn(domains)
|
||||
.classificationIdIn(classificationIds)
|
||||
.excludedClassificationIdIn(excludedClassificationIds)
|
||||
.customAttributeFilterIn(customAttributeFilter)
|
||||
.withColumnHeaders(columnHeaders)
|
||||
.listCustomAttributeValuesForCustomAttributeName(TaskCustomField.CUSTOM_1);
|
||||
|
||||
verify(internalTaskanaEngineMock).openConnection();
|
||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
||||
verify(internalTaskanaEngineMock, times(3)).getEngine();
|
||||
|
||||
verify(monitorMapperMock)
|
||||
.getCustomAttributeValuesForReport(
|
||||
any(), any(), any(), any(), any(), any(), any(), any(), any());
|
||||
verify(internalTaskanaEngineMock).returnConnection();
|
||||
verify(taskanaEngineMock).getClassificationService();
|
||||
verifyNoMoreInteractions(mocks);
|
||||
|
||||
assertThat(actualResult).isNotNull();
|
||||
assertThat(actualResult).isEqualTo(expectedResult);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testListCustomAttributeValuesForCustomAttributeNameIsEmptyResult() throws Exception {
|
||||
List<String> result =
|
||||
cut.createClassificationReportBuilder()
|
||||
.workbasketIdIn(List.of("DieGibtsGarantiertNed"))
|
||||
.listCustomAttributeValuesForCustomAttributeName(TaskCustomField.CUSTOM_10);
|
||||
assertThat(result).isNotNull();
|
||||
}
|
||||
}
|
|
@ -1,228 +0,0 @@
|
|||
package pro.taskana.monitor.internal;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import pro.taskana.TaskanaEngineConfiguration;
|
||||
import pro.taskana.common.api.TaskanaEngine;
|
||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
||||
import pro.taskana.monitor.api.TaskTimestamp;
|
||||
import pro.taskana.monitor.api.reports.TaskCustomFieldValueReport;
|
||||
import pro.taskana.monitor.api.reports.header.TimeIntervalColumnHeader;
|
||||
import pro.taskana.monitor.api.reports.item.MonitorQueryItem;
|
||||
import pro.taskana.task.api.TaskCustomField;
|
||||
import pro.taskana.task.api.TaskState;
|
||||
|
||||
/** Unit Test for CustomFieldValueReportBuilderImpl. */
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class TaskCustomFieldValueReportBuilderImplTest {
|
||||
|
||||
@InjectMocks private MonitorServiceImpl cut;
|
||||
|
||||
@Mock private InternalTaskanaEngine internalTaskanaEngineMock;
|
||||
|
||||
@Mock private TaskanaEngine taskanaEngineMock;
|
||||
|
||||
@Mock private TaskanaEngineConfiguration taskanaEngineConfigurationMock;
|
||||
|
||||
@Mock private MonitorMapper monitorMapperMock;
|
||||
|
||||
@BeforeEach
|
||||
void setup() {
|
||||
when(internalTaskanaEngineMock.getEngine()).thenReturn(taskanaEngineMock);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetTotalNumbersOfCustomFieldValueReport() throws Exception {
|
||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
||||
final List<String> categories = List.of("EXTERN");
|
||||
final List<String> domains = List.of("DOMAIN_A");
|
||||
final List<String> classificationIds = List.of("L10000");
|
||||
final List<String> excludedClassificationIds = List.of("L20000");
|
||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
||||
|
||||
final List<MonitorQueryItem> expectedResult = new ArrayList<>();
|
||||
MonitorQueryItem monitorQueryItem = new MonitorQueryItem();
|
||||
monitorQueryItem.setKey("Geschaeftsstelle A");
|
||||
monitorQueryItem.setNumberOfTasks(1);
|
||||
expectedResult.add(monitorQueryItem);
|
||||
when(monitorMapperMock.getTaskCountOfTaskCustomFieldValues(
|
||||
any(),
|
||||
eq(TaskCustomField.CUSTOM_1),
|
||||
eq(workbasketIds),
|
||||
eq(states),
|
||||
eq(categories),
|
||||
eq(domains),
|
||||
eq(TaskTimestamp.DUE),
|
||||
eq(classificationIds),
|
||||
eq(excludedClassificationIds),
|
||||
eq(customAttributeFilter)))
|
||||
.thenReturn(expectedResult);
|
||||
|
||||
final TaskCustomFieldValueReport actualResult =
|
||||
cut.createTaskCustomFieldValueReportBuilder(TaskCustomField.CUSTOM_1)
|
||||
.workbasketIdIn(workbasketIds)
|
||||
.stateIn(states)
|
||||
.classificationCategoryIn(categories)
|
||||
.domainIn(domains)
|
||||
.classificationIdIn(classificationIds)
|
||||
.excludedClassificationIdIn(excludedClassificationIds)
|
||||
.customAttributeFilterIn(customAttributeFilter)
|
||||
.buildReport();
|
||||
|
||||
verify(internalTaskanaEngineMock).openConnection();
|
||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
||||
verify(internalTaskanaEngineMock, times(2)).getEngine();
|
||||
verify(monitorMapperMock)
|
||||
.getTaskCountOfTaskCustomFieldValues(
|
||||
any(), any(), any(), any(), any(), any(), any(), any(), any(), any());
|
||||
verify(internalTaskanaEngineMock).returnConnection();
|
||||
verifyNoMoreInteractions(
|
||||
internalTaskanaEngineMock,
|
||||
taskanaEngineMock,
|
||||
monitorMapperMock,
|
||||
taskanaEngineConfigurationMock);
|
||||
|
||||
assertThat(actualResult).isNotNull();
|
||||
assertThat(actualResult.getRow("Geschaeftsstelle A").getTotalValue()).isOne();
|
||||
assertThat(actualResult.getSumRow().getTotalValue()).isOne();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetCustomFieldValueReportWithReportLineItemDefinitions() throws Exception {
|
||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
||||
final List<String> categories = List.of("EXTERN");
|
||||
final List<String> domains = List.of("DOMAIN_A");
|
||||
final List<String> classificationIds = List.of("L10000");
|
||||
final List<String> excludedClassificationIds = List.of("L20000");
|
||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
||||
final List<TimeIntervalColumnHeader> columnHeaders =
|
||||
List.of(new TimeIntervalColumnHeader(0, 0));
|
||||
|
||||
final List<MonitorQueryItem> expectedResult = new ArrayList<>();
|
||||
MonitorQueryItem monitorQueryItem = new MonitorQueryItem();
|
||||
monitorQueryItem.setKey("Geschaeftsstelle A");
|
||||
monitorQueryItem.setAgeInDays(0);
|
||||
monitorQueryItem.setNumberOfTasks(1);
|
||||
expectedResult.add(monitorQueryItem);
|
||||
when(monitorMapperMock.getTaskCountOfTaskCustomFieldValues(
|
||||
any(),
|
||||
eq(TaskCustomField.CUSTOM_1),
|
||||
eq(workbasketIds),
|
||||
eq(states),
|
||||
eq(categories),
|
||||
eq(domains),
|
||||
eq(TaskTimestamp.DUE),
|
||||
eq(classificationIds),
|
||||
eq(excludedClassificationIds),
|
||||
eq(customAttributeFilter)))
|
||||
.thenReturn(expectedResult);
|
||||
|
||||
final TaskCustomFieldValueReport actualResult =
|
||||
cut.createTaskCustomFieldValueReportBuilder(TaskCustomField.CUSTOM_1)
|
||||
.workbasketIdIn(workbasketIds)
|
||||
.stateIn(states)
|
||||
.classificationCategoryIn(categories)
|
||||
.domainIn(domains)
|
||||
.classificationIdIn(classificationIds)
|
||||
.excludedClassificationIdIn(excludedClassificationIds)
|
||||
.customAttributeFilterIn(customAttributeFilter)
|
||||
.withColumnHeaders(columnHeaders)
|
||||
.buildReport();
|
||||
|
||||
verify(internalTaskanaEngineMock).openConnection();
|
||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
||||
verify(internalTaskanaEngineMock, times(2)).getEngine();
|
||||
verify(monitorMapperMock)
|
||||
.getTaskCountOfTaskCustomFieldValues(
|
||||
any(), any(), any(), any(), any(), any(), any(), any(), any(), any());
|
||||
verify(internalTaskanaEngineMock).returnConnection();
|
||||
verifyNoMoreInteractions(
|
||||
internalTaskanaEngineMock,
|
||||
taskanaEngineMock,
|
||||
monitorMapperMock,
|
||||
taskanaEngineConfigurationMock);
|
||||
|
||||
assertThat(actualResult).isNotNull();
|
||||
assertThat(actualResult.getRow("Geschaeftsstelle A").getTotalValue()).isOne();
|
||||
assertThat(actualResult.getRow("Geschaeftsstelle A").getCells()[0]).isOne();
|
||||
assertThat(actualResult.getSumRow().getTotalValue()).isOne();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testListCustomAttributeValuesForCustomAttributeName() throws Exception {
|
||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
||||
final List<String> categories = List.of("EXTERN");
|
||||
final List<String> domains = List.of("DOMAIN_A");
|
||||
final List<String> classificationIds = List.of("L10000");
|
||||
final List<String> excludedClassificationIds = List.of("L20000");
|
||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
||||
final List<TimeIntervalColumnHeader> columnHeaders =
|
||||
List.of(new TimeIntervalColumnHeader(0, 0));
|
||||
|
||||
List<String> expectedResult = List.of("Geschaeftsstelle A");
|
||||
when(monitorMapperMock.getCustomAttributeValuesForReport(
|
||||
workbasketIds,
|
||||
states,
|
||||
categories,
|
||||
domains,
|
||||
classificationIds,
|
||||
excludedClassificationIds,
|
||||
customAttributeFilter,
|
||||
null,
|
||||
TaskCustomField.CUSTOM_1))
|
||||
.thenReturn(expectedResult);
|
||||
|
||||
final List<String> actualResult =
|
||||
cut.createTaskCustomFieldValueReportBuilder(TaskCustomField.CUSTOM_1)
|
||||
.workbasketIdIn(workbasketIds)
|
||||
.stateIn(states)
|
||||
.classificationCategoryIn(categories)
|
||||
.domainIn(domains)
|
||||
.classificationIdIn(classificationIds)
|
||||
.excludedClassificationIdIn(excludedClassificationIds)
|
||||
.customAttributeFilterIn(customAttributeFilter)
|
||||
.withColumnHeaders(columnHeaders)
|
||||
.listCustomAttributeValuesForCustomAttributeName(TaskCustomField.CUSTOM_1);
|
||||
|
||||
verify(internalTaskanaEngineMock).openConnection();
|
||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
||||
verify(internalTaskanaEngineMock, times(2)).getEngine();
|
||||
verify(monitorMapperMock)
|
||||
.getCustomAttributeValuesForReport(
|
||||
any(), any(), any(), any(), any(), any(), any(), any(), any());
|
||||
verify(internalTaskanaEngineMock).returnConnection();
|
||||
verifyNoMoreInteractions(
|
||||
internalTaskanaEngineMock,
|
||||
taskanaEngineMock,
|
||||
monitorMapperMock,
|
||||
taskanaEngineConfigurationMock);
|
||||
|
||||
assertThat(actualResult).isEqualTo(expectedResult);
|
||||
}
|
||||
}
|
|
@ -1,129 +0,0 @@
|
|||
package pro.taskana.monitor.internal;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.inOrder;
|
||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.InOrder;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import pro.taskana.common.api.TaskanaEngine;
|
||||
import pro.taskana.common.api.TaskanaRole;
|
||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
||||
import pro.taskana.monitor.api.reports.TaskStatusReport;
|
||||
import pro.taskana.monitor.api.reports.item.TaskQueryItem;
|
||||
import pro.taskana.task.api.TaskState;
|
||||
import pro.taskana.workbasket.api.WorkbasketService;
|
||||
|
||||
/** Unit Test for TaskStatusReportBuilderImpl. */
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class TaskStatusReportBuilderImplTest {
|
||||
|
||||
@InjectMocks private MonitorServiceImpl cut;
|
||||
|
||||
@Mock private InternalTaskanaEngine internalTaskanaEngineMock;
|
||||
|
||||
@Mock private TaskanaEngine taskanaEngineMock;
|
||||
|
||||
@Mock private MonitorMapper monitorMapperMock;
|
||||
|
||||
@Mock private WorkbasketService workbasketService;
|
||||
|
||||
private Object[] mocks;
|
||||
|
||||
@BeforeEach
|
||||
void setup() {
|
||||
when(internalTaskanaEngineMock.getEngine()).thenReturn(taskanaEngineMock);
|
||||
when(taskanaEngineMock.getWorkbasketService()).thenReturn(workbasketService);
|
||||
mocks =
|
||||
new Object[] {
|
||||
internalTaskanaEngineMock, taskanaEngineMock, monitorMapperMock, workbasketService
|
||||
};
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetTaskStateReportWithoutFilters() throws Exception {
|
||||
// given
|
||||
TaskQueryItem queryItem1 = new TaskQueryItem();
|
||||
queryItem1.setCount(50);
|
||||
queryItem1.setState(TaskState.READY);
|
||||
queryItem1.setWorkbasketKey("KEY_1");
|
||||
TaskQueryItem queryItem2 = new TaskQueryItem();
|
||||
queryItem2.setCount(30);
|
||||
queryItem2.setState(TaskState.COMPLETED);
|
||||
queryItem2.setWorkbasketKey("KEY_1");
|
||||
List<TaskQueryItem> queryItems = List.of(queryItem1, queryItem2);
|
||||
when(monitorMapperMock.getTasksCountByState(null, null, null)).thenReturn(queryItems);
|
||||
when(internalTaskanaEngineMock.runAsAdmin(any())).thenReturn(Map.of());
|
||||
|
||||
// when
|
||||
final TaskStatusReport report = cut.createTaskStatusReportBuilder().buildReport();
|
||||
|
||||
// then
|
||||
InOrder inOrder = inOrder(mocks);
|
||||
inOrder.verify(internalTaskanaEngineMock).getEngine();
|
||||
inOrder.verify(taskanaEngineMock).checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN);
|
||||
inOrder.verify(internalTaskanaEngineMock).openConnection();
|
||||
inOrder.verify(monitorMapperMock).getTasksCountByState(eq(null), eq(null), eq(null));
|
||||
inOrder.verify(internalTaskanaEngineMock).runAsAdmin(any());
|
||||
inOrder.verify(internalTaskanaEngineMock).returnConnection();
|
||||
inOrder.verifyNoMoreInteractions();
|
||||
verifyNoMoreInteractions(mocks);
|
||||
|
||||
assertThat(report).isNotNull();
|
||||
assertThat(report.rowSize()).isEqualTo(1);
|
||||
assertThat(report.getRow("KEY_1").getCells()).isEqualTo(new int[] {50, 0, 30, 0, 0});
|
||||
assertThat(report.getSumRow().getCells()).isEqualTo(new int[] {50, 0, 30, 0, 0});
|
||||
assertThat(report.getRow("KEY_1").getTotalValue()).isEqualTo(80);
|
||||
assertThat(report.getSumRow().getTotalValue()).isEqualTo(80);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetTotalNumberOfTaskStateReport() throws Exception {
|
||||
// given
|
||||
TaskQueryItem queryItem1 = new TaskQueryItem();
|
||||
queryItem1.setCount(50);
|
||||
queryItem1.setState(TaskState.READY);
|
||||
queryItem1.setWorkbasketKey("KEY_1");
|
||||
TaskQueryItem queryItem2 = new TaskQueryItem();
|
||||
queryItem2.setCount(30);
|
||||
queryItem2.setState(TaskState.COMPLETED);
|
||||
queryItem2.setWorkbasketKey("KEY_1");
|
||||
List<TaskQueryItem> queryItems = List.of(queryItem1, queryItem2);
|
||||
when(monitorMapperMock.getTasksCountByState(eq(null), eq(List.of()), eq(null)))
|
||||
.thenReturn(queryItems);
|
||||
when(internalTaskanaEngineMock.runAsAdmin(any())).thenReturn(Map.of());
|
||||
|
||||
// when
|
||||
final TaskStatusReport report =
|
||||
cut.createTaskStatusReportBuilder().stateIn(List.of()).buildReport();
|
||||
|
||||
// then
|
||||
InOrder inOrder = inOrder(mocks);
|
||||
inOrder.verify(internalTaskanaEngineMock).getEngine();
|
||||
inOrder.verify(taskanaEngineMock).checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN);
|
||||
inOrder.verify(internalTaskanaEngineMock).openConnection();
|
||||
inOrder.verify(monitorMapperMock).getTasksCountByState(eq(null), eq(List.of()), eq(null));
|
||||
inOrder.verify(internalTaskanaEngineMock).runAsAdmin(any());
|
||||
inOrder.verify(internalTaskanaEngineMock).returnConnection();
|
||||
inOrder.verifyNoMoreInteractions();
|
||||
verifyNoMoreInteractions(mocks);
|
||||
|
||||
assertThat(report).isNotNull();
|
||||
assertThat(report.rowSize()).isEqualTo(1);
|
||||
assertThat(report.getRow("KEY_1").getCells()).isEqualTo(new int[0]);
|
||||
assertThat(report.getSumRow().getCells()).isEqualTo(new int[0]);
|
||||
assertThat(report.getRow("KEY_1").getTotalValue()).isEqualTo(80);
|
||||
assertThat(report.getSumRow().getTotalValue()).isEqualTo(80);
|
||||
}
|
||||
}
|
|
@ -1,409 +0,0 @@
|
|||
package pro.taskana.monitor.internal;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import org.assertj.core.api.ThrowableAssert.ThrowingCallable;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import pro.taskana.common.api.TaskanaEngine;
|
||||
import pro.taskana.common.api.TaskanaRole;
|
||||
import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
||||
import pro.taskana.monitor.api.CombinedClassificationFilter;
|
||||
import pro.taskana.monitor.api.SelectedItem;
|
||||
import pro.taskana.monitor.api.TaskTimestamp;
|
||||
import pro.taskana.monitor.api.reports.WorkbasketReport;
|
||||
import pro.taskana.monitor.api.reports.header.TimeIntervalColumnHeader;
|
||||
import pro.taskana.monitor.api.reports.item.MonitorQueryItem;
|
||||
import pro.taskana.task.api.TaskCustomField;
|
||||
import pro.taskana.task.api.TaskState;
|
||||
|
||||
/** Unit Test for WorkbasketReportBuilderImpl. */
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class WorkbasketReportBuilderImplTest {
|
||||
|
||||
@InjectMocks private MonitorServiceImpl cut;
|
||||
|
||||
@Mock private InternalTaskanaEngine internalTaskanaEngineMock;
|
||||
|
||||
@Mock private TaskanaEngine taskanaEngineMock;
|
||||
|
||||
@Mock private MonitorMapper monitorMapperMock;
|
||||
|
||||
@BeforeEach
|
||||
void setup() {
|
||||
when(internalTaskanaEngineMock.getEngine()).thenReturn(taskanaEngineMock);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetTotalNumbersOfWorkbasketReportBasedOnDueDate() throws Exception {
|
||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
||||
final List<String> categories = List.of("EXTERN");
|
||||
final List<String> domains = List.of("DOMAIN_A");
|
||||
final List<String> classificationIds = List.of("L10000");
|
||||
final List<String> excludedClassificationIds = List.of("L20000");
|
||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
||||
final List<CombinedClassificationFilter> combinedClassificationFilter =
|
||||
List.of(
|
||||
new CombinedClassificationFilter(
|
||||
"CLI:000000000000000000000000000000000003",
|
||||
"CLI:000000000000000000000000000000000008"));
|
||||
|
||||
List<MonitorQueryItem> expectedResult = new ArrayList<>();
|
||||
MonitorQueryItem monitorQueryItem = new MonitorQueryItem();
|
||||
monitorQueryItem.setKey("WBI:000000000000000000000000000000000001");
|
||||
monitorQueryItem.setNumberOfTasks(1);
|
||||
expectedResult.add(monitorQueryItem);
|
||||
when(monitorMapperMock.getTaskCountOfWorkbaskets(
|
||||
any(),
|
||||
eq(workbasketIds),
|
||||
eq(states),
|
||||
eq(categories),
|
||||
eq(domains),
|
||||
eq(TaskTimestamp.DUE),
|
||||
eq(classificationIds),
|
||||
eq(excludedClassificationIds),
|
||||
eq(customAttributeFilter),
|
||||
eq(combinedClassificationFilter)))
|
||||
.thenReturn(expectedResult);
|
||||
when(internalTaskanaEngineMock.runAsAdmin(any())).thenReturn(Map.of());
|
||||
|
||||
final WorkbasketReport actualResult =
|
||||
cut.createWorkbasketReportBuilder()
|
||||
.workbasketIdIn(workbasketIds)
|
||||
.stateIn(states)
|
||||
.classificationCategoryIn(categories)
|
||||
.domainIn(domains)
|
||||
.classificationIdIn(classificationIds)
|
||||
.excludedClassificationIdIn(excludedClassificationIds)
|
||||
.customAttributeFilterIn(customAttributeFilter)
|
||||
.combinedClassificationFilterIn(combinedClassificationFilter)
|
||||
.buildReport();
|
||||
|
||||
verify(internalTaskanaEngineMock).openConnection();
|
||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
||||
verify(internalTaskanaEngineMock, times(3)).getEngine();
|
||||
verify(monitorMapperMock)
|
||||
.getTaskCountOfWorkbaskets(
|
||||
any(), any(), any(), any(), any(), any(), any(), any(), any(), any());
|
||||
verify(internalTaskanaEngineMock).returnConnection();
|
||||
verify(internalTaskanaEngineMock).runAsAdmin(any());
|
||||
verify(taskanaEngineMock).getWorkbasketService();
|
||||
verifyNoMoreInteractions(internalTaskanaEngineMock, taskanaEngineMock, monitorMapperMock);
|
||||
|
||||
assertThat(actualResult).isNotNull();
|
||||
assertThat(actualResult.getRow("WBI:000000000000000000000000000000000001").getTotalValue())
|
||||
.isOne();
|
||||
assertThat(actualResult.getSumRow().getTotalValue()).isOne();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetWorkbasketReportWithReportLineItemDefinitions() throws Exception {
|
||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
||||
final List<String> categories = List.of("EXTERN");
|
||||
final List<String> domains = List.of("DOMAIN_A");
|
||||
final List<String> classificationIds = List.of("L10000");
|
||||
final List<String> excludedClassificationIds = List.of("L20000");
|
||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
||||
final List<CombinedClassificationFilter> combinedClassificationFilter =
|
||||
List.of(
|
||||
new CombinedClassificationFilter(
|
||||
"CLI:000000000000000000000000000000000003",
|
||||
"CLI:000000000000000000000000000000000008"));
|
||||
final List<TimeIntervalColumnHeader> columnHeaders =
|
||||
List.of(new TimeIntervalColumnHeader(0, 0));
|
||||
|
||||
final List<MonitorQueryItem> expectedResult = new ArrayList<>();
|
||||
MonitorQueryItem monitorQueryItem = new MonitorQueryItem();
|
||||
monitorQueryItem.setKey("WBI:000000000000000000000000000000000001");
|
||||
monitorQueryItem.setAgeInDays(0);
|
||||
monitorQueryItem.setNumberOfTasks(1);
|
||||
expectedResult.add(monitorQueryItem);
|
||||
when(monitorMapperMock.getTaskCountOfWorkbaskets(
|
||||
any(),
|
||||
eq(workbasketIds),
|
||||
eq(states),
|
||||
eq(categories),
|
||||
eq(domains),
|
||||
eq(TaskTimestamp.DUE),
|
||||
eq(classificationIds),
|
||||
eq(excludedClassificationIds),
|
||||
eq(customAttributeFilter),
|
||||
eq(combinedClassificationFilter)))
|
||||
.thenReturn(expectedResult);
|
||||
when(internalTaskanaEngineMock.runAsAdmin(any())).thenReturn(Map.of());
|
||||
|
||||
final WorkbasketReport actualResult =
|
||||
cut.createWorkbasketReportBuilder()
|
||||
.workbasketIdIn(workbasketIds)
|
||||
.stateIn(states)
|
||||
.classificationCategoryIn(categories)
|
||||
.domainIn(domains)
|
||||
.classificationIdIn(classificationIds)
|
||||
.excludedClassificationIdIn(excludedClassificationIds)
|
||||
.customAttributeFilterIn(customAttributeFilter)
|
||||
.combinedClassificationFilterIn(combinedClassificationFilter)
|
||||
.withColumnHeaders(columnHeaders)
|
||||
.buildReport();
|
||||
|
||||
verify(internalTaskanaEngineMock).openConnection();
|
||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
||||
verify(internalTaskanaEngineMock, times(3)).getEngine();
|
||||
verify(monitorMapperMock)
|
||||
.getTaskCountOfWorkbaskets(
|
||||
any(), any(), any(), any(), any(), any(), any(), any(), any(), any());
|
||||
verify(internalTaskanaEngineMock).returnConnection();
|
||||
verify(taskanaEngineMock).getWorkbasketService();
|
||||
verifyNoMoreInteractions(internalTaskanaEngineMock, taskanaEngineMock, monitorMapperMock);
|
||||
|
||||
assertThat(actualResult).isNotNull();
|
||||
assertThat(actualResult.getRow("WBI:000000000000000000000000000000000001").getTotalValue())
|
||||
.isEqualTo(1);
|
||||
assertThat(actualResult.getRow("WBI:000000000000000000000000000000000001").getCells()[0])
|
||||
.isEqualTo(1);
|
||||
assertThat(actualResult.getSumRow().getTotalValue()).isEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetTaskIdsOfCategoryReportForSelectedItems() throws Exception {
|
||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
||||
final List<String> categories = List.of("EXTERN");
|
||||
final List<String> domains = List.of("DOMAIN_A");
|
||||
final List<String> classificationIds = List.of("L10000");
|
||||
final List<String> excludedClassificationIds = List.of("L20000");
|
||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
||||
final List<TimeIntervalColumnHeader> columnHeaders =
|
||||
List.of(new TimeIntervalColumnHeader(0, 0));
|
||||
|
||||
List<SelectedItem> selectedItems = List.of(new SelectedItem("EXTERN", null, 1, 5));
|
||||
|
||||
List<String> expectedResult = List.of("TKI:000000000000000000000000000000000001");
|
||||
when(monitorMapperMock.getTaskIdsForSelectedItems(
|
||||
any(),
|
||||
eq(workbasketIds),
|
||||
eq(states),
|
||||
eq(categories),
|
||||
eq(domains),
|
||||
eq(classificationIds),
|
||||
eq(excludedClassificationIds),
|
||||
eq(customAttributeFilter),
|
||||
eq(null),
|
||||
eq("WORKBASKET_KEY"),
|
||||
eq(TaskTimestamp.DUE),
|
||||
eq(selectedItems),
|
||||
eq(false)))
|
||||
.thenReturn(expectedResult);
|
||||
|
||||
final List<String> actualResult =
|
||||
cut.createWorkbasketReportBuilder()
|
||||
.workbasketIdIn(workbasketIds)
|
||||
.stateIn(states)
|
||||
.classificationCategoryIn(categories)
|
||||
.domainIn(domains)
|
||||
.classificationIdIn(classificationIds)
|
||||
.excludedClassificationIdIn(excludedClassificationIds)
|
||||
.customAttributeFilterIn(customAttributeFilter)
|
||||
.withColumnHeaders(columnHeaders)
|
||||
.listTaskIdsForSelectedItems(selectedItems, TaskTimestamp.DUE);
|
||||
|
||||
verify(internalTaskanaEngineMock).openConnection();
|
||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
||||
verify(internalTaskanaEngineMock, times(3)).getEngine();
|
||||
verify(monitorMapperMock)
|
||||
.getTaskIdsForSelectedItems(
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
eq(TaskTimestamp.DUE),
|
||||
any(),
|
||||
eq(false));
|
||||
verify(internalTaskanaEngineMock).returnConnection();
|
||||
verify(taskanaEngineMock).getWorkbasketService();
|
||||
verifyNoMoreInteractions(internalTaskanaEngineMock, taskanaEngineMock, monitorMapperMock);
|
||||
|
||||
assertThat(actualResult).isNotNull();
|
||||
assertThat(actualResult).isEqualTo(expectedResult);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testListTaskIdsForSelectedItemsIsEmptyResult() {
|
||||
List<SelectedItem> selectedItems = new ArrayList<>();
|
||||
ThrowingCallable call =
|
||||
() -> {
|
||||
List<String> result =
|
||||
cut.createWorkbasketReportBuilder()
|
||||
.workbasketIdIn(List.of("DieGibtsGarantiertNed"))
|
||||
.listTaskIdsForSelectedItems(selectedItems, TaskTimestamp.DUE);
|
||||
assertThat(result).isNotNull();
|
||||
};
|
||||
assertThatThrownBy(call).isInstanceOf(InvalidArgumentException.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testListCustomAttributeValuesForCustomAttributeName() throws Exception {
|
||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
||||
final List<String> categories = List.of("EXTERN");
|
||||
final List<String> domains = List.of("DOMAIN_A");
|
||||
final List<String> classificationIds = List.of("L10000");
|
||||
final List<String> excludedClassificationIds = List.of("L20000");
|
||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
||||
final List<TimeIntervalColumnHeader> columnHeaders =
|
||||
List.of(new TimeIntervalColumnHeader(0, 0));
|
||||
|
||||
List<String> expectedResult = List.of("Geschaeftsstelle A");
|
||||
when(monitorMapperMock.getCustomAttributeValuesForReport(
|
||||
workbasketIds,
|
||||
states,
|
||||
categories,
|
||||
domains,
|
||||
classificationIds,
|
||||
excludedClassificationIds,
|
||||
customAttributeFilter,
|
||||
null,
|
||||
TaskCustomField.CUSTOM_1))
|
||||
.thenReturn(expectedResult);
|
||||
|
||||
final List<String> actualResult =
|
||||
cut.createWorkbasketReportBuilder()
|
||||
.workbasketIdIn(workbasketIds)
|
||||
.stateIn(states)
|
||||
.classificationCategoryIn(categories)
|
||||
.domainIn(domains)
|
||||
.classificationIdIn(classificationIds)
|
||||
.excludedClassificationIdIn(excludedClassificationIds)
|
||||
.customAttributeFilterIn(customAttributeFilter)
|
||||
.withColumnHeaders(columnHeaders)
|
||||
.listCustomAttributeValuesForCustomAttributeName(TaskCustomField.CUSTOM_1);
|
||||
|
||||
verify(internalTaskanaEngineMock).openConnection();
|
||||
verify(taskanaEngineMock).checkRoleMembership(any());
|
||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
||||
verify(internalTaskanaEngineMock, times(3)).getEngine();
|
||||
verify(monitorMapperMock)
|
||||
.getCustomAttributeValuesForReport(
|
||||
any(), any(), any(), any(), any(), any(), any(), any(), any());
|
||||
verify(internalTaskanaEngineMock).returnConnection();
|
||||
verify(taskanaEngineMock).getWorkbasketService();
|
||||
verifyNoMoreInteractions(internalTaskanaEngineMock, taskanaEngineMock, monitorMapperMock);
|
||||
|
||||
assertThat(actualResult).isNotNull();
|
||||
assertThat(actualResult).isEqualTo(expectedResult);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testListCustomAttributeValuesForCustomAttributeNameIsEmptyResult() throws Exception {
|
||||
List<String> result =
|
||||
cut.createWorkbasketReportBuilder()
|
||||
.workbasketIdIn(List.of("GibtsSicherNed"))
|
||||
.listCustomAttributeValuesForCustomAttributeName(TaskCustomField.CUSTOM_14);
|
||||
assertThat(result).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetTotalNumbersOfWorkbasketReportBasedOnCreatedDate() throws Exception {
|
||||
final List<String> workbasketIds = List.of("WBI:000000000000000000000000000000000001");
|
||||
final List<TaskState> states = List.of(TaskState.CLAIMED, TaskState.READY);
|
||||
final List<String> categories = List.of("EXTERN");
|
||||
final List<String> domains = List.of("DOMAIN_A");
|
||||
final List<String> classificationIds = List.of("L10000");
|
||||
final List<String> excludedClassificationIds = List.of("L20000");
|
||||
Map<TaskCustomField, String> customAttributeFilter = new HashMap<>();
|
||||
customAttributeFilter.put(TaskCustomField.CUSTOM_1, "Geschaeftsstelle A");
|
||||
final List<CombinedClassificationFilter> combinedClassificationFilter =
|
||||
List.of(
|
||||
new CombinedClassificationFilter(
|
||||
"CLI:000000000000000000000000000000000003",
|
||||
"CLI:000000000000000000000000000000000008"));
|
||||
|
||||
List<MonitorQueryItem> expectedResult = new ArrayList<>();
|
||||
MonitorQueryItem monitorQueryItem = new MonitorQueryItem();
|
||||
monitorQueryItem.setKey("WBI:000000000000000000000000000000000001");
|
||||
monitorQueryItem.setNumberOfTasks(1);
|
||||
expectedResult.add(monitorQueryItem);
|
||||
when(monitorMapperMock.getTaskCountOfWorkbaskets(
|
||||
any(),
|
||||
eq(workbasketIds),
|
||||
eq(states),
|
||||
eq(categories),
|
||||
eq(domains),
|
||||
eq(TaskTimestamp.PLANNED),
|
||||
eq(classificationIds),
|
||||
eq(excludedClassificationIds),
|
||||
eq(customAttributeFilter),
|
||||
eq(combinedClassificationFilter)))
|
||||
.thenReturn(expectedResult);
|
||||
|
||||
when(internalTaskanaEngineMock.runAsAdmin(any())).thenReturn(Map.of());
|
||||
|
||||
final WorkbasketReport actualResult =
|
||||
cut.createWorkbasketReportBuilder()
|
||||
.workbasketIdIn(workbasketIds)
|
||||
.stateIn(states)
|
||||
.classificationCategoryIn(categories)
|
||||
.domainIn(domains)
|
||||
.classificationIdIn(classificationIds)
|
||||
.excludedClassificationIdIn(excludedClassificationIds)
|
||||
.customAttributeFilterIn(customAttributeFilter)
|
||||
.combinedClassificationFilterIn(combinedClassificationFilter)
|
||||
.buildReport(TaskTimestamp.PLANNED);
|
||||
|
||||
verify(internalTaskanaEngineMock).openConnection();
|
||||
verify(taskanaEngineMock).checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN);
|
||||
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
|
||||
verify(internalTaskanaEngineMock, times(3)).getEngine();
|
||||
verify(monitorMapperMock)
|
||||
.getTaskCountOfWorkbaskets(
|
||||
any(),
|
||||
eq(workbasketIds),
|
||||
eq(states),
|
||||
eq(categories),
|
||||
eq(domains),
|
||||
eq(TaskTimestamp.PLANNED),
|
||||
eq(classificationIds),
|
||||
eq(excludedClassificationIds),
|
||||
eq(customAttributeFilter),
|
||||
eq(combinedClassificationFilter));
|
||||
verify(internalTaskanaEngineMock).returnConnection();
|
||||
verify(taskanaEngineMock).getWorkbasketService();
|
||||
verifyNoMoreInteractions(internalTaskanaEngineMock, taskanaEngineMock, monitorMapperMock);
|
||||
|
||||
assertThat(actualResult).isNotNull();
|
||||
assertThat(actualResult.getRow("WBI:000000000000000000000000000000000001").getTotalValue())
|
||||
.isEqualTo(1);
|
||||
assertThat(actualResult.getSumRow().getTotalValue()).isEqualTo(1);
|
||||
}
|
||||
}
|
|
@ -1,39 +0,0 @@
|
|||
package pro.taskana.task.internal;
|
||||
|
||||
import pro.taskana.task.api.models.Attachment;
|
||||
import pro.taskana.task.api.models.ObjectReference;
|
||||
import pro.taskana.task.internal.models.AttachmentImpl;
|
||||
|
||||
/** This class contains helper methods for Junit Tests. */
|
||||
public final class JunitHelper {
|
||||
|
||||
private JunitHelper() {}
|
||||
|
||||
public static ObjectReference createDefaultObjRef() {
|
||||
return createObjRef("company", "system", "instance", "type", "value");
|
||||
}
|
||||
|
||||
public static ObjectReference createObjRef(
|
||||
String company, String system, String instance, String type, String value) {
|
||||
ObjectReference objRef = new ObjectReference();
|
||||
objRef.setCompany(company);
|
||||
objRef.setSystem(system);
|
||||
objRef.setSystemInstance(instance);
|
||||
objRef.setType(type);
|
||||
objRef.setValue(value);
|
||||
return objRef;
|
||||
}
|
||||
|
||||
public static Attachment createDefaultAttachment() {
|
||||
return createAttachment("TAI:000", "CHANNEL", createDefaultObjRef());
|
||||
}
|
||||
|
||||
public static Attachment createAttachment(
|
||||
String id, String channel, ObjectReference objectReference) {
|
||||
AttachmentImpl attachment = new AttachmentImpl();
|
||||
attachment.setChannel(channel);
|
||||
attachment.setId(id);
|
||||
attachment.setObjectReference(objectReference);
|
||||
return attachment;
|
||||
}
|
||||
}
|
|
@ -1,78 +0,0 @@
|
|||
package pro.taskana.task.internal;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import org.apache.ibatis.session.SqlSession;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
||||
import pro.taskana.task.api.models.ObjectReference;
|
||||
|
||||
/** Test for ObjectReferenceQueryImpl. */
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class ObjectReferenceQueryImplTest {
|
||||
|
||||
ObjectReferenceQueryImpl objectReferenceQueryImpl;
|
||||
|
||||
@Mock InternalTaskanaEngine taskanaEngine;
|
||||
|
||||
@Mock SqlSession sqlSession;
|
||||
|
||||
@BeforeEach
|
||||
void setup() {
|
||||
objectReferenceQueryImpl = new ObjectReferenceQueryImpl(taskanaEngine);
|
||||
}
|
||||
|
||||
@Test
|
||||
void should_ReturnList_When_BuilderIsUsed() {
|
||||
when(taskanaEngine.getSqlSession()).thenReturn(sqlSession);
|
||||
when(sqlSession.selectList(any(), any())).thenReturn(new ArrayList<>());
|
||||
|
||||
List<ObjectReference> result =
|
||||
objectReferenceQueryImpl
|
||||
.valueIn("test", "asd", "blubber")
|
||||
.typeIn("cool", "bla")
|
||||
.systemInstanceIn("1", "2")
|
||||
.systemIn("superId")
|
||||
.list();
|
||||
assertThat(result).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
void should_ReturnListWithOffset_When_BuilderIsUsed() {
|
||||
when(taskanaEngine.getSqlSession()).thenReturn(sqlSession);
|
||||
when(sqlSession.selectList(any(), any(), any())).thenReturn(new ArrayList<>());
|
||||
|
||||
List<ObjectReference> result =
|
||||
objectReferenceQueryImpl
|
||||
.valueIn("test", "asd", "blubber")
|
||||
.typeIn("cool", "bla")
|
||||
.systemInstanceIn("1", "2")
|
||||
.systemIn("superId")
|
||||
.list(1, 1);
|
||||
assertThat(result).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
void should_ReturnOneItem_When_BuilderIsUsed() {
|
||||
when(taskanaEngine.getSqlSession()).thenReturn(sqlSession);
|
||||
when(sqlSession.selectOne(any(), any())).thenReturn(new ObjectReference());
|
||||
|
||||
ObjectReference result =
|
||||
objectReferenceQueryImpl
|
||||
.valueIn("test", "asd", "blubber")
|
||||
.typeIn("cool", "bla")
|
||||
.systemInstanceIn("1", "2")
|
||||
.systemIn("superId")
|
||||
.single();
|
||||
assertThat(result).isNotNull();
|
||||
}
|
||||
}
|
|
@ -1,137 +0,0 @@
|
|||
package pro.taskana.task.internal;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import pro.taskana.classification.internal.models.ClassificationImpl;
|
||||
import pro.taskana.task.api.models.Attachment;
|
||||
import pro.taskana.task.api.models.AttachmentSummary;
|
||||
import pro.taskana.task.api.models.ObjectReference;
|
||||
import pro.taskana.task.internal.models.TaskImpl;
|
||||
|
||||
/**
|
||||
* Unit Test for methods needed fot attachment at TaskImpl.<br>
|
||||
* This test should test every interaction with Attachments, which means adding, removing, nulling
|
||||
* them.
|
||||
*/
|
||||
class TaskAttachmentTest {
|
||||
|
||||
private TaskImpl cut = new TaskImpl();
|
||||
|
||||
@Test
|
||||
void testAddAttachmentWithValidValue() {
|
||||
Attachment attachment1 = CreateTaskModelHelper.createAttachment("ID1", "taskId1");
|
||||
Attachment attachment2 = CreateTaskModelHelper.createAttachment("ID2", "taskId1");
|
||||
Attachment attachment3 = CreateTaskModelHelper.createAttachment("ID3", "taskId1");
|
||||
|
||||
cut.addAttachment(attachment1);
|
||||
cut.addAttachment(attachment2);
|
||||
cut.addAttachment(attachment3);
|
||||
|
||||
assertThat(cut.getAttachments()).hasSize(3);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testAddNullValue() {
|
||||
Attachment attachment1 = CreateTaskModelHelper.createAttachment("ID1", "taskId1");
|
||||
|
||||
cut.addAttachment(attachment1);
|
||||
cut.addAttachment(null);
|
||||
|
||||
assertThat(cut.getAttachments()).hasSize(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testAddSameTwice() {
|
||||
// Same values, not same REF. Important.
|
||||
Attachment attachment1 = CreateTaskModelHelper.createAttachment("ID1", "taskId1");
|
||||
Attachment attachment2 = CreateTaskModelHelper.createAttachment("ID1", "taskId1");
|
||||
|
||||
cut.addAttachment(attachment1);
|
||||
cut.addAttachment(attachment2);
|
||||
|
||||
assertThat(cut.getAttachments()).hasSize(1);
|
||||
|
||||
// Check with not same vlaues (same ID)
|
||||
String newChannel = "I will overwrite the other!";
|
||||
attachment1.setChannel(newChannel);
|
||||
cut.addAttachment(attachment1);
|
||||
assertThat(cut.getAttachments()).hasSize(1);
|
||||
assertThat(cut.getAttachments().get(0).getChannel()).isEqualTo(newChannel);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testRemoveAttachment() {
|
||||
// Testing normal way
|
||||
Attachment attachment1 = CreateTaskModelHelper.createAttachment("ID1", "taskId1");
|
||||
Attachment attachment2 = CreateTaskModelHelper.createAttachment("ID2", "taskId1");
|
||||
cut.addAttachment(attachment1);
|
||||
cut.addAttachment(attachment2);
|
||||
|
||||
Attachment actual = cut.removeAttachment(attachment2.getId());
|
||||
|
||||
assertThat(cut.getAttachments()).hasSize(1);
|
||||
assertThat(actual).isEqualTo(attachment2);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testRemoveLoopStopsAtResult() {
|
||||
Attachment attachment1 = CreateTaskModelHelper.createAttachment("ID2", "taskId1");
|
||||
// adding same uncommon way to test that the loop will stop.
|
||||
cut.getAttachments().add(attachment1);
|
||||
cut.getAttachments().add(attachment1);
|
||||
cut.getAttachments().add(attachment1);
|
||||
assertThat(cut.getAttachments()).hasSize(3);
|
||||
|
||||
Attachment actual = cut.removeAttachment(attachment1.getId());
|
||||
|
||||
assertThat(cut.getAttachments()).hasSize(2);
|
||||
assertThat(actual).isEqualTo(attachment1);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetAttachmentSummaries() {
|
||||
ObjectReference objRef = new ObjectReference();
|
||||
objRef.setId("ObjRefId");
|
||||
objRef.setCompany("company");
|
||||
|
||||
Map<String, String> customAttr = new HashMap<>();
|
||||
customAttr.put("key", "value");
|
||||
|
||||
Attachment attachment1 = CreateTaskModelHelper.createAttachment("ID1", "taskId1");
|
||||
attachment1.setChannel("channel");
|
||||
attachment1.setClassificationSummary(new ClassificationImpl().asSummary());
|
||||
attachment1.setReceived(Instant.now());
|
||||
attachment1.setObjectReference(objRef);
|
||||
// attachment1.setCustomAttributes(customAttr);
|
||||
|
||||
cut.addAttachment(attachment1);
|
||||
|
||||
List<AttachmentSummary> summaries = cut.asSummary().getAttachmentSummaries();
|
||||
AttachmentSummary attachmentSummary = summaries.get(0);
|
||||
|
||||
assertThat(attachmentSummary).isEqualTo(attachment1.asSummary());
|
||||
assertThat(attachmentSummary.getId()).isEqualTo(attachment1.getId());
|
||||
assertThat(attachmentSummary.getTaskId()).isEqualTo(attachment1.getTaskId());
|
||||
assertThat(attachmentSummary.getChannel()).isEqualTo(attachment1.getChannel());
|
||||
assertThat(attachmentSummary.getClassificationSummary())
|
||||
.isEqualTo(attachment1.getClassificationSummary());
|
||||
assertThat(attachmentSummary.getObjectReference()).isEqualTo(attachment1.getObjectReference());
|
||||
assertThat(attachmentSummary.getCreated()).isEqualTo(attachment1.getCreated());
|
||||
assertThat(attachmentSummary.getReceived()).isEqualTo(attachment1.getReceived());
|
||||
assertThat(attachmentSummary.getModified()).isEqualTo(attachment1.getModified());
|
||||
|
||||
// Must be different
|
||||
assertThat(attachment1.hashCode()).isNotEqualTo(attachmentSummary.hashCode());
|
||||
|
||||
cut.removeAttachment("ID1");
|
||||
assertThat(summaries).hasSize(1);
|
||||
summaries = cut.asSummary().getAttachmentSummaries();
|
||||
assertThat(summaries).isEmpty();
|
||||
}
|
||||
}
|
|
@ -1,103 +0,0 @@
|
|||
package pro.taskana.task.internal;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import org.apache.ibatis.session.Configuration;
|
||||
import org.apache.ibatis.session.SqlSession;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import pro.taskana.common.api.TaskanaEngine;
|
||||
import pro.taskana.common.api.security.CurrentUserContext;
|
||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
||||
import pro.taskana.common.internal.configuration.DB;
|
||||
import pro.taskana.task.api.TaskState;
|
||||
import pro.taskana.task.api.models.TaskSummary;
|
||||
import pro.taskana.task.internal.models.TaskSummaryImpl;
|
||||
|
||||
/** Test for TaskQueryImpl. */
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class TaskQueryImplTest {
|
||||
|
||||
@Mock TaskServiceImpl taskServiceMock;
|
||||
|
||||
@Mock private InternalTaskanaEngine internalTaskanaEngine;
|
||||
@Mock private TaskanaEngine taskanaEngine;
|
||||
@Mock private SqlSession sqlSession;
|
||||
@Mock private CurrentUserContext currentUserContext;
|
||||
|
||||
private TaskQueryImpl taskQueryImpl;
|
||||
|
||||
@BeforeEach
|
||||
void setup() {
|
||||
when(internalTaskanaEngine.getEngine()).thenReturn(taskanaEngine);
|
||||
when(taskanaEngine.getTaskService()).thenReturn(taskServiceMock);
|
||||
when(taskanaEngine.getCurrentUserContext()).thenReturn(currentUserContext);
|
||||
|
||||
Configuration configuration = new org.apache.ibatis.session.Configuration();
|
||||
configuration.setDatabaseId(DB.H2.dbProductId);
|
||||
when(internalTaskanaEngine.getSqlSession()).thenReturn(sqlSession);
|
||||
when(sqlSession.getConfiguration()).thenReturn(configuration);
|
||||
|
||||
taskQueryImpl = new TaskQueryImpl(internalTaskanaEngine);
|
||||
}
|
||||
|
||||
@Test
|
||||
void should_ReturnList_When_BuilderIsUsed() {
|
||||
when(sqlSession.selectList(any(), any())).thenReturn(new ArrayList<>());
|
||||
List<TaskSummary> intermediate = new ArrayList<>();
|
||||
intermediate.add(new TaskSummaryImpl());
|
||||
when(taskServiceMock.augmentTaskSummariesByContainedSummariesWithPartitioning(any()))
|
||||
.thenReturn(intermediate);
|
||||
|
||||
List<TaskSummary> result =
|
||||
taskQueryImpl
|
||||
.nameIn("test", "asd", "blubber")
|
||||
.priorityIn(1, 2)
|
||||
.stateIn(TaskState.CLAIMED, TaskState.COMPLETED)
|
||||
.list();
|
||||
assertThat(result).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
void should_ReturnListWithOffset_When_BuilderIsUsed() {
|
||||
when(sqlSession.selectList(any(), any(), any())).thenReturn(new ArrayList<>());
|
||||
List<TaskSummary> intermediate = new ArrayList<>();
|
||||
intermediate.add(new TaskSummaryImpl());
|
||||
when(taskServiceMock.augmentTaskSummariesByContainedSummariesWithPartitioning(any()))
|
||||
.thenReturn(intermediate);
|
||||
|
||||
List<TaskSummary> result =
|
||||
taskQueryImpl
|
||||
.nameIn("test", "asd", "blubber")
|
||||
.priorityIn(1, 2)
|
||||
.stateIn(TaskState.CLAIMED, TaskState.COMPLETED)
|
||||
.list(1, 1);
|
||||
assertThat(result).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
void should_ReturnOneItem_When_BuilderIsUsed() {
|
||||
when(sqlSession.selectOne(any(), any())).thenReturn(new TaskSummaryImpl());
|
||||
List<TaskSummary> intermediate = new ArrayList<>();
|
||||
intermediate.add(new TaskSummaryImpl());
|
||||
|
||||
when(taskServiceMock.augmentTaskSummariesByContainedSummariesWithPartitioning(any()))
|
||||
.thenReturn(intermediate);
|
||||
|
||||
TaskSummary result =
|
||||
taskQueryImpl
|
||||
.nameIn("test", "asd", "blubber")
|
||||
.priorityIn(1, 2)
|
||||
.stateIn(TaskState.CLAIMED, TaskState.COMPLETED)
|
||||
.single();
|
||||
assertThat(result).isNotNull();
|
||||
}
|
||||
}
|
|
@ -1,369 +0,0 @@
|
|||
package pro.taskana.task.internal;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import javax.sql.DataSource;
|
||||
import org.assertj.core.api.ThrowableAssert.ThrowingCallable;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
import pro.taskana.TaskanaEngineConfiguration;
|
||||
import pro.taskana.classification.api.ClassificationService;
|
||||
import pro.taskana.classification.api.models.Classification;
|
||||
import pro.taskana.classification.internal.models.ClassificationImpl;
|
||||
import pro.taskana.common.api.KeyDomain;
|
||||
import pro.taskana.common.api.TaskanaEngine;
|
||||
import pro.taskana.common.api.TaskanaEngine.ConnectionManagementMode;
|
||||
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
||||
import pro.taskana.common.internal.TaskanaEngineImpl;
|
||||
import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
|
||||
import pro.taskana.common.internal.util.IdGenerator;
|
||||
import pro.taskana.common.test.security.JaasExtension;
|
||||
import pro.taskana.common.test.security.WithAccessId;
|
||||
import pro.taskana.sampledata.SampleDataGenerator;
|
||||
import pro.taskana.task.api.TaskCustomField;
|
||||
import pro.taskana.task.api.TaskState;
|
||||
import pro.taskana.task.api.exceptions.TaskNotFoundException;
|
||||
import pro.taskana.task.api.models.ObjectReference;
|
||||
import pro.taskana.task.api.models.Task;
|
||||
import pro.taskana.task.api.models.TaskSummary;
|
||||
import pro.taskana.task.internal.models.TaskImpl;
|
||||
import pro.taskana.workbasket.api.WorkbasketPermission;
|
||||
import pro.taskana.workbasket.api.WorkbasketService;
|
||||
import pro.taskana.workbasket.api.WorkbasketType;
|
||||
import pro.taskana.workbasket.api.models.Workbasket;
|
||||
import pro.taskana.workbasket.api.models.WorkbasketAccessItem;
|
||||
import pro.taskana.workbasket.internal.models.WorkbasketImpl;
|
||||
|
||||
/** Integration Test for TaskServiceImpl transactions with connection management mode AUTOCOMMIT. */
|
||||
@ExtendWith(JaasExtension.class)
|
||||
class TaskServiceImplIntAutocommitTest {
|
||||
|
||||
private static SampleDataGenerator sampleDataGenerator;
|
||||
private static TaskanaEngineConfiguration taskanaEngineConfiguration;
|
||||
private TaskServiceImpl taskServiceImpl;
|
||||
private TaskanaEngine taskanaEngine;
|
||||
private TaskanaEngineImpl taskanaEngineImpl;
|
||||
private ClassificationService classificationService;
|
||||
private WorkbasketService workbasketService;
|
||||
|
||||
@BeforeAll
|
||||
static void beforeAll() {
|
||||
DataSource dataSource = TaskanaEngineTestConfiguration.getDataSource();
|
||||
String schemaName = TaskanaEngineTestConfiguration.getSchemaName();
|
||||
sampleDataGenerator = new SampleDataGenerator(dataSource, schemaName);
|
||||
taskanaEngineConfiguration =
|
||||
new TaskanaEngineConfiguration(dataSource, false, false, schemaName);
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void setup() throws Exception {
|
||||
sampleDataGenerator.clearDb();
|
||||
taskanaEngine = taskanaEngineConfiguration.buildTaskanaEngine();
|
||||
taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine;
|
||||
taskanaEngineImpl.setConnectionManagementMode(ConnectionManagementMode.AUTOCOMMIT);
|
||||
taskServiceImpl = (TaskServiceImpl) taskanaEngine.getTaskService();
|
||||
classificationService = taskanaEngine.getClassificationService();
|
||||
workbasketService = taskanaEngine.getWorkbasketService();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testStart() throws Exception {
|
||||
|
||||
Workbasket wb = workbasketService.newWorkbasket("workbasket", "DOMAIN_A");
|
||||
wb.setName("workbasket");
|
||||
wb.setType(WorkbasketType.GROUP);
|
||||
taskanaEngine.getWorkbasketService().createWorkbasket(wb);
|
||||
|
||||
Classification classification =
|
||||
classificationService.newClassification("TEST", "DOMAIN_A", "TASK");
|
||||
classification.setServiceLevel("P1D");
|
||||
taskanaEngine.getClassificationService().createClassification(classification);
|
||||
|
||||
Task task = taskServiceImpl.newTask(wb.getId());
|
||||
task.setName("Unit Test Task");
|
||||
|
||||
task.setClassificationKey(classification.getKey());
|
||||
task.setPrimaryObjRef(JunitHelper.createDefaultObjRef());
|
||||
task = taskServiceImpl.createTask(task);
|
||||
|
||||
TaskanaEngine te2 = taskanaEngineConfiguration.buildTaskanaEngine();
|
||||
TaskServiceImpl taskServiceImpl2 = (TaskServiceImpl) te2.getTaskService();
|
||||
Task resultTask = taskServiceImpl2.getTask(task.getId());
|
||||
assertThat(resultTask).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testStartTransactionFail() throws Exception {
|
||||
|
||||
Workbasket wb = workbasketService.newWorkbasket("wb1k1", "DOMAIN_A");
|
||||
wb.setName("sdf");
|
||||
wb.setType(WorkbasketType.GROUP);
|
||||
taskanaEngine.getWorkbasketService().createWorkbasket(wb);
|
||||
|
||||
Classification classification =
|
||||
classificationService.newClassification("TEST", "DOMAIN_A", "TASK");
|
||||
classification.setServiceLevel("P1D");
|
||||
classification = taskanaEngine.getClassificationService().createClassification(classification);
|
||||
classification =
|
||||
taskanaEngine
|
||||
.getClassificationService()
|
||||
.getClassification(classification.getKey(), classification.getDomain());
|
||||
|
||||
TaskImpl task = (TaskImpl) taskServiceImpl.newTask(wb.getKey(), "DOMAIN_A");
|
||||
task.setName("Unit Test Task");
|
||||
task.setClassificationKey(classification.getKey());
|
||||
task.setPrimaryObjRef(JunitHelper.createDefaultObjRef());
|
||||
taskServiceImpl.createTask(task);
|
||||
taskServiceImpl.getTask(task.getId());
|
||||
|
||||
TaskanaEngineImpl te2 = (TaskanaEngineImpl) taskanaEngineConfiguration.buildTaskanaEngine();
|
||||
TaskServiceImpl taskServiceImpl2 = (TaskServiceImpl) te2.getTaskService();
|
||||
|
||||
assertThatThrownBy(() -> taskServiceImpl2.getTask(wb.getId()))
|
||||
.isInstanceOf(TaskNotFoundException.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
void should_ReturnList_When_BuilderIsUsed() throws Exception {
|
||||
Workbasket wb = workbasketService.newWorkbasket("key", "DOMAIN_A");
|
||||
wb.setName("workbasket");
|
||||
wb.setType(WorkbasketType.GROUP);
|
||||
taskanaEngine.getWorkbasketService().createWorkbasket(wb);
|
||||
Classification classification =
|
||||
classificationService.newClassification("TEST", "DOMAIN_A", "TASK");
|
||||
classification.setServiceLevel("P1D");
|
||||
taskanaEngine.getClassificationService().createClassification(classification);
|
||||
|
||||
Task task = taskServiceImpl.newTask(wb.getKey(), wb.getDomain());
|
||||
task.setName("Unit Test Task");
|
||||
task.setClassificationKey(classification.getKey());
|
||||
task.setPrimaryObjRef(JunitHelper.createDefaultObjRef());
|
||||
taskServiceImpl.createTask(task);
|
||||
|
||||
List<TaskSummary> results =
|
||||
taskServiceImpl
|
||||
.createTaskQuery()
|
||||
.nameIn("bla", "test")
|
||||
.descriptionLike("test")
|
||||
.priorityIn(1, 2, 2)
|
||||
.stateIn(TaskState.CLAIMED)
|
||||
.workbasketKeyDomainIn(
|
||||
new KeyDomain("asd", "novatec"), new KeyDomain("asdasdasd", "DOMAIN_A"))
|
||||
.ownerIn("test", "test2", "bla")
|
||||
.customAttributeIn(TaskCustomField.CUSTOM_16, "test")
|
||||
.classificationKeyIn("pId1", "pId2")
|
||||
.primaryObjectReferenceCompanyIn("first comp", "sonstwo gmbh")
|
||||
.primaryObjectReferenceSystemIn("sys")
|
||||
.primaryObjectReferenceTypeIn("type1", "type2")
|
||||
.primaryObjectReferenceSystemInstanceIn("sysInst1", "sysInst2")
|
||||
.primaryObjectReferenceValueIn("val1", "val2", "val3")
|
||||
.list();
|
||||
|
||||
assertThat(results).isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldTransferTaskToOtherWorkbasket() throws Exception {
|
||||
final int sleepTime = 100;
|
||||
|
||||
// Source Workbasket
|
||||
WorkbasketImpl wb = (WorkbasketImpl) workbasketService.newWorkbasket("key1", "DOMAIN_A");
|
||||
wb.setName("Basic-Workbasket");
|
||||
wb.setDescription("Just used as base WB for Task here");
|
||||
wb.setType(WorkbasketType.GROUP);
|
||||
wb.setOwner("The Tester ID");
|
||||
final Workbasket sourceWB = workbasketService.createWorkbasket(wb);
|
||||
|
||||
// Destination Workbasket
|
||||
wb = (WorkbasketImpl) workbasketService.newWorkbasket("k1", "DOMAIN_A");
|
||||
wb.setName("Desination-WorkBasket");
|
||||
|
||||
wb.setType(WorkbasketType.CLEARANCE);
|
||||
wb.setDescription("Destination WB where Task should be transfered to");
|
||||
wb.setOwner("The Tester ID");
|
||||
final Workbasket destinationWB = workbasketService.createWorkbasket(wb);
|
||||
|
||||
// Classification required for Task
|
||||
ClassificationImpl classification =
|
||||
(ClassificationImpl) classificationService.newClassification("KEY", "DOMAIN_A", "TASK");
|
||||
classification.setCategory("EXTERNAL");
|
||||
classification.setName("Transfert-Task Classification");
|
||||
classification.setServiceLevel("P1D");
|
||||
classificationService.createClassification(classification);
|
||||
|
||||
// Task which should be transfered
|
||||
TaskImpl task = (TaskImpl) taskServiceImpl.newTask(sourceWB.getId());
|
||||
task.setName("Task Name");
|
||||
task.setDescription("Task used for transfer Test");
|
||||
task.setRead(true);
|
||||
task.setTransferred(false);
|
||||
task.setModified(null);
|
||||
task.setClassificationKey(classification.getKey());
|
||||
task.setPrimaryObjRef(JunitHelper.createDefaultObjRef());
|
||||
task = (TaskImpl) taskServiceImpl.createTask(task);
|
||||
Thread.sleep(sleepTime); // Sleep for modification-timestamp
|
||||
|
||||
Task resultTask = taskServiceImpl.transfer(task.getId(), destinationWB.getId());
|
||||
assertThat(resultTask.isRead()).isFalse();
|
||||
assertThat(resultTask.isTransferred()).isTrue();
|
||||
assertThat(resultTask.getWorkbasketSummary().getId()).isEqualTo(destinationWB.getId());
|
||||
assertThat(resultTask.getModified()).isNotNull();
|
||||
assertThat(resultTask.getModified()).isNotEqualTo(task.getModified());
|
||||
assertThat(resultTask.getCreated()).isNotNull();
|
||||
assertThat(resultTask.getCreated()).isEqualTo(task.getCreated());
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldNotTransferAnyTask() {
|
||||
assertThatThrownBy(() -> taskServiceImpl.transfer(UUID.randomUUID() + "_X", "1"))
|
||||
.isInstanceOf(TaskNotFoundException.class);
|
||||
}
|
||||
|
||||
@WithAccessId(user = "user-1-1", groups = "businessadmin")
|
||||
@Test
|
||||
void shouldNotTransferByFailingSecurity() throws Exception {
|
||||
final String user = taskanaEngine.getCurrentUserContext().getUserid();
|
||||
|
||||
// Set up Security for this Test
|
||||
DataSource dataSource = TaskanaEngineTestConfiguration.getDataSource();
|
||||
taskanaEngineConfiguration =
|
||||
new TaskanaEngineConfiguration(
|
||||
dataSource, false, true, TaskanaEngineTestConfiguration.getSchemaName());
|
||||
taskanaEngine = taskanaEngineConfiguration.buildTaskanaEngine();
|
||||
taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine;
|
||||
taskanaEngineImpl.setConnectionManagementMode(ConnectionManagementMode.AUTOCOMMIT);
|
||||
taskServiceImpl = (TaskServiceImpl) taskanaEngine.getTaskService();
|
||||
classificationService = taskanaEngine.getClassificationService();
|
||||
workbasketService = taskanaEngine.getWorkbasketService();
|
||||
|
||||
ClassificationImpl classification =
|
||||
(ClassificationImpl) classificationService.newClassification("KEY", "DOMAIN_A", "TASK");
|
||||
classification.setCategory("EXTERNAL");
|
||||
classification.setName("Transfert-Task Classification");
|
||||
classification.setServiceLevel("P1D");
|
||||
classificationService.createClassification(classification);
|
||||
|
||||
WorkbasketImpl wb = (WorkbasketImpl) workbasketService.newWorkbasket("k5", "DOMAIN_A");
|
||||
wb.setName("BASE WB");
|
||||
wb.setDescription("Normal base WB");
|
||||
wb.setOwner(user);
|
||||
wb.setType(WorkbasketType.TOPIC);
|
||||
WorkbasketImpl wbCreated = (WorkbasketImpl) workbasketService.createWorkbasket(wb);
|
||||
createWorkbasketWithSecurity(wbCreated, wbCreated.getOwner(), true, true, true, true);
|
||||
|
||||
WorkbasketImpl wbNoAppend =
|
||||
(WorkbasketImpl) workbasketService.newWorkbasket("key77", "DOMAIN_A");
|
||||
wbNoAppend.setName("Test-Security-WorkBasket-APPEND");
|
||||
wbNoAppend.setDescription("Workbasket without permission APPEND on Task");
|
||||
wbNoAppend.setOwner(user);
|
||||
wbNoAppend.setType(WorkbasketType.PERSONAL);
|
||||
|
||||
WorkbasketImpl wbNoAppendCreated =
|
||||
(WorkbasketImpl) workbasketService.createWorkbasket(wbNoAppend);
|
||||
createWorkbasketWithSecurity(
|
||||
wbNoAppendCreated, wbNoAppendCreated.getOwner(), true, true, false, true);
|
||||
|
||||
WorkbasketImpl wbNoTransfer =
|
||||
(WorkbasketImpl) workbasketService.newWorkbasket("k99", "DOMAIN_B");
|
||||
wbNoTransfer.setName("Test-Security-WorkBasket-TRANSFER");
|
||||
wbNoTransfer.setDescription("Workbasket without permission TRANSFER on Task");
|
||||
wbNoTransfer.setOwner(user);
|
||||
wbNoTransfer.setType(WorkbasketType.CLEARANCE);
|
||||
|
||||
wbNoTransfer = (WorkbasketImpl) workbasketService.createWorkbasket(wbNoTransfer);
|
||||
createWorkbasketWithSecurity(wbNoTransfer, wbNoTransfer.getOwner(), true, true, true, false);
|
||||
|
||||
TaskImpl task = (TaskImpl) taskServiceImpl.newTask(wbCreated.getId());
|
||||
task.setName("Task Name");
|
||||
task.setDescription("Task used for transfer Test");
|
||||
task.setOwner(user);
|
||||
task.setClassificationKey(classification.getKey());
|
||||
task.setPrimaryObjRef(JunitHelper.createDefaultObjRef());
|
||||
TaskImpl taskCreated = (TaskImpl) taskServiceImpl.createTask(task);
|
||||
|
||||
ThrowingCallable call =
|
||||
() -> taskServiceImpl.transfer(taskCreated.getId(), wbNoAppendCreated.getId());
|
||||
assertThatThrownBy(call)
|
||||
.describedAs(
|
||||
"Transfer Task should be FAILD, because there are no APPEND-Rights on destination WB.")
|
||||
.isInstanceOf(NotAuthorizedException.class)
|
||||
.hasMessageContaining("APPEND");
|
||||
|
||||
assertThat(taskCreated.isTransferred()).isFalse();
|
||||
assertThat(taskCreated.getWorkbasketKey()).isNotEqualTo(wbNoAppendCreated.getKey());
|
||||
assertThat(taskCreated.getWorkbasketKey()).isEqualTo(wbCreated.getKey());
|
||||
|
||||
// Check failing with missing TRANSFER
|
||||
taskCreated.setId("");
|
||||
taskCreated.getWorkbasketSummaryImpl().setId(wbNoTransfer.getId());
|
||||
taskCreated.setWorkbasketKey(null);
|
||||
taskCreated.setExternalId(IdGenerator.generateWithPrefix("TST"));
|
||||
|
||||
TaskImpl taskCreated2 = (TaskImpl) taskServiceImpl.createTask(taskCreated);
|
||||
|
||||
assertThatThrownBy(() -> taskServiceImpl.transfer(taskCreated2.getId(), wbCreated.getId()))
|
||||
.describedAs(
|
||||
"Transfer Task should be FAILED, because there are no TRANSFER-Rights on current WB.")
|
||||
.isInstanceOf(NotAuthorizedException.class)
|
||||
.hasMessageContaining("TRANSFER");
|
||||
|
||||
assertThat(taskCreated2.isTransferred()).isFalse();
|
||||
assertThat(taskCreated2.getWorkbasketKey()).isNotEqualTo(wbNoAppendCreated.getKey());
|
||||
}
|
||||
|
||||
@Test
|
||||
void testWithPrimaryObjectRef() throws Exception {
|
||||
Workbasket wb = workbasketService.newWorkbasket("workbasket", "DOMAIN_A");
|
||||
wb.setName("workbasket");
|
||||
wb.setType(WorkbasketType.GROUP);
|
||||
taskanaEngine.getWorkbasketService().createWorkbasket(wb);
|
||||
Classification classification =
|
||||
classificationService.newClassification("TEST", "DOMAIN_A", "TASK");
|
||||
classification.setServiceLevel("P1D");
|
||||
taskanaEngine.getClassificationService().createClassification(classification);
|
||||
|
||||
Task task = taskServiceImpl.newTask(wb.getId());
|
||||
task.setName("Unit Test Task");
|
||||
|
||||
task.setClassificationKey(classification.getKey());
|
||||
|
||||
ObjectReference objRef = new ObjectReference();
|
||||
objRef.setCompany("novatec");
|
||||
objRef.setSystem("linux");
|
||||
objRef.setSystemInstance("inst1");
|
||||
objRef.setType("fast");
|
||||
objRef.setValue("4711");
|
||||
task.setPrimaryObjRef(objRef);
|
||||
|
||||
task = taskServiceImpl.createTask(task);
|
||||
|
||||
Task task2 = taskServiceImpl.getTask(task.getId());
|
||||
// skanaEngineImpl.getSqlSession().commit(); // needed so that the change is visible in the
|
||||
// other session
|
||||
|
||||
assertThat(task2).isNotNull();
|
||||
}
|
||||
|
||||
private void createWorkbasketWithSecurity(
|
||||
Workbasket wb,
|
||||
String accessId,
|
||||
boolean permOpen,
|
||||
boolean permRead,
|
||||
boolean permAppend,
|
||||
boolean permTransfer)
|
||||
throws Exception {
|
||||
WorkbasketAccessItem accessItem =
|
||||
workbasketService.newWorkbasketAccessItem(wb.getId(), accessId);
|
||||
accessItem.setPermission(WorkbasketPermission.OPEN, permOpen);
|
||||
accessItem.setPermission(WorkbasketPermission.READ, permRead);
|
||||
accessItem.setPermission(WorkbasketPermission.APPEND, permAppend);
|
||||
accessItem.setPermission(WorkbasketPermission.TRANSFER, permTransfer);
|
||||
workbasketService.createWorkbasketAccessItem(accessItem);
|
||||
}
|
||||
}
|
|
@ -1,477 +0,0 @@
|
|||
package pro.taskana.task.internal;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
|
||||
import java.io.File;
|
||||
import java.sql.Connection;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import javax.sql.DataSource;
|
||||
import org.assertj.core.api.ThrowableAssert.ThrowingCallable;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
import pro.taskana.TaskanaEngineConfiguration;
|
||||
import pro.taskana.classification.api.ClassificationService;
|
||||
import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
|
||||
import pro.taskana.classification.api.models.Classification;
|
||||
import pro.taskana.classification.internal.models.ClassificationImpl;
|
||||
import pro.taskana.common.api.KeyDomain;
|
||||
import pro.taskana.common.api.TaskanaEngine;
|
||||
import pro.taskana.common.api.TaskanaEngine.ConnectionManagementMode;
|
||||
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
||||
import pro.taskana.common.internal.TaskanaEngineImpl;
|
||||
import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
|
||||
import pro.taskana.common.internal.configuration.DbSchemaCreator;
|
||||
import pro.taskana.common.internal.util.IdGenerator;
|
||||
import pro.taskana.common.test.security.JaasExtension;
|
||||
import pro.taskana.common.test.security.WithAccessId;
|
||||
import pro.taskana.sampledata.SampleDataGenerator;
|
||||
import pro.taskana.task.api.TaskCustomField;
|
||||
import pro.taskana.task.api.TaskState;
|
||||
import pro.taskana.task.api.exceptions.TaskNotFoundException;
|
||||
import pro.taskana.task.api.models.Task;
|
||||
import pro.taskana.task.api.models.TaskSummary;
|
||||
import pro.taskana.task.internal.models.TaskImpl;
|
||||
import pro.taskana.workbasket.api.WorkbasketPermission;
|
||||
import pro.taskana.workbasket.api.WorkbasketService;
|
||||
import pro.taskana.workbasket.api.WorkbasketType;
|
||||
import pro.taskana.workbasket.api.exceptions.WorkbasketAccessItemAlreadyExistException;
|
||||
import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
|
||||
import pro.taskana.workbasket.api.models.Workbasket;
|
||||
import pro.taskana.workbasket.api.models.WorkbasketAccessItem;
|
||||
import pro.taskana.workbasket.internal.models.WorkbasketImpl;
|
||||
import pro.taskana.workbasket.internal.models.WorkbasketSummaryImpl;
|
||||
|
||||
/** Integration Test for TaskServiceImpl transactions with connection management mode EXPLICIT. */
|
||||
@ExtendWith(JaasExtension.class)
|
||||
class TaskServiceImplIntExplicitTest {
|
||||
|
||||
private static DataSource dataSource;
|
||||
private static SampleDataGenerator sampleDataGenerator;
|
||||
private static TaskanaEngineConfiguration taskanaEngineConfiguration;
|
||||
private TaskServiceImpl taskServiceImpl;
|
||||
private TaskanaEngine taskanaEngine;
|
||||
private TaskanaEngineImpl taskanaEngineImpl;
|
||||
private ClassificationService classificationService;
|
||||
private WorkbasketService workbasketService;
|
||||
|
||||
@BeforeAll
|
||||
static void beforeAll() throws Exception {
|
||||
String userHomeDirectory = System.getProperty("user.home");
|
||||
String propertiesFileName = userHomeDirectory + "/taskanaUnitTest.properties";
|
||||
|
||||
dataSource =
|
||||
new File(propertiesFileName).exists()
|
||||
? TaskanaEngineTestConfiguration.createDataSourceFromProperties(propertiesFileName)
|
||||
: TaskanaEngineConfiguration.createDefaultDataSource();
|
||||
taskanaEngineConfiguration =
|
||||
new TaskanaEngineConfiguration(
|
||||
dataSource, false, TaskanaEngineTestConfiguration.getSchemaName());
|
||||
sampleDataGenerator =
|
||||
new SampleDataGenerator(dataSource, TaskanaEngineTestConfiguration.getSchemaName());
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void setup() throws Exception {
|
||||
taskanaEngine = taskanaEngineConfiguration.buildTaskanaEngine();
|
||||
taskServiceImpl = (TaskServiceImpl) taskanaEngine.getTaskService();
|
||||
taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine;
|
||||
classificationService = taskanaEngine.getClassificationService();
|
||||
taskanaEngineImpl.setConnectionManagementMode(ConnectionManagementMode.EXPLICIT);
|
||||
workbasketService = taskanaEngine.getWorkbasketService();
|
||||
try (Connection connection = dataSource.getConnection()) {
|
||||
sampleDataGenerator.clearDb();
|
||||
DbSchemaCreator creator = new DbSchemaCreator(dataSource, connection.getSchema());
|
||||
creator.run();
|
||||
}
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
void tearDown() {
|
||||
sampleDataGenerator.clearDb();
|
||||
}
|
||||
|
||||
@WithAccessId(user = "user-1-1", groups = "businessadmin")
|
||||
@Test
|
||||
void testStartTransactionFail() throws Exception {
|
||||
try (Connection connection = dataSource.getConnection()) {
|
||||
taskanaEngineImpl.setConnection(connection);
|
||||
|
||||
WorkbasketImpl workbasket =
|
||||
(WorkbasketImpl) workbasketService.newWorkbasket("k1", "DOMAIN_A");
|
||||
workbasket.setName("workbasket");
|
||||
workbasket.setId("1"); // set id manually for authorization tests
|
||||
|
||||
workbasket.setType(WorkbasketType.GROUP);
|
||||
final Classification classification =
|
||||
classificationService.newClassification("TEST", "DOMAIN_A", "TASK");
|
||||
classification.setServiceLevel("P1D");
|
||||
taskanaEngineImpl.getWorkbasketService().createWorkbasket(workbasket);
|
||||
|
||||
WorkbasketAccessItem accessItem = workbasketService.newWorkbasketAccessItem("1", "user-1-1");
|
||||
accessItem.setPermission(WorkbasketPermission.APPEND, true);
|
||||
accessItem.setPermission(WorkbasketPermission.READ, true);
|
||||
accessItem.setPermission(WorkbasketPermission.OPEN, true);
|
||||
workbasketService.createWorkbasketAccessItem(accessItem);
|
||||
|
||||
taskanaEngineImpl.getClassificationService().createClassification(classification);
|
||||
connection.commit();
|
||||
Task task = taskServiceImpl.newTask(workbasket.getId());
|
||||
task.setName("Unit Test Task");
|
||||
task.setClassificationKey(classification.getKey());
|
||||
task.setPrimaryObjRef(JunitHelper.createDefaultObjRef());
|
||||
task = taskServiceImpl.createTask(task);
|
||||
connection.commit();
|
||||
taskServiceImpl.getTask(task.getId());
|
||||
|
||||
TaskanaEngineImpl te2 = (TaskanaEngineImpl) taskanaEngineConfiguration.buildTaskanaEngine();
|
||||
TaskServiceImpl taskServiceImpl2 = (TaskServiceImpl) te2.getTaskService();
|
||||
assertThatThrownBy(() -> taskServiceImpl2.getTask(workbasket.getId()))
|
||||
.isInstanceOf(TaskNotFoundException.class);
|
||||
connection.commit();
|
||||
}
|
||||
}
|
||||
|
||||
@WithAccessId(user = "user-1-1", groups = "businessadmin")
|
||||
@Test
|
||||
void testCreateTask() throws Exception {
|
||||
try (Connection connection = dataSource.getConnection()) {
|
||||
taskanaEngineImpl.setConnection(connection);
|
||||
|
||||
final Task task = this.generateDummyTask();
|
||||
connection.commit();
|
||||
|
||||
WorkbasketAccessItem accessItem = workbasketService.newWorkbasketAccessItem("1", "user-1-1");
|
||||
accessItem.setPermission(WorkbasketPermission.APPEND, true);
|
||||
accessItem.setPermission(WorkbasketPermission.READ, true);
|
||||
accessItem.setPermission(WorkbasketPermission.OPEN, true);
|
||||
workbasketService.createWorkbasketAccessItem(accessItem);
|
||||
|
||||
task.setPrimaryObjRef(JunitHelper.createDefaultObjRef());
|
||||
final Task task2 = taskServiceImpl.createTask(task);
|
||||
connection.commit(); // needed so that the change is visible in the other session
|
||||
|
||||
TaskanaEngine te2 = taskanaEngineConfiguration.buildTaskanaEngine();
|
||||
TaskServiceImpl taskServiceImpl2 = (TaskServiceImpl) te2.getTaskService();
|
||||
Task resultTask = taskServiceImpl2.getTask(task2.getId());
|
||||
assertThat(resultTask).isNotNull();
|
||||
connection.commit();
|
||||
}
|
||||
}
|
||||
|
||||
@WithAccessId(user = "user-1-1", groups = "businessadmin")
|
||||
@Test
|
||||
void createTaskShouldThrowWorkbasketNotFoundException() throws Exception {
|
||||
try (Connection connection = dataSource.getConnection()) {
|
||||
taskanaEngineImpl.setConnection(connection);
|
||||
Task test = this.generateDummyTask();
|
||||
((WorkbasketSummaryImpl) (test.getWorkbasketSummary())).setId("2");
|
||||
|
||||
assertThatThrownBy(() -> taskServiceImpl.createTask(test))
|
||||
.isInstanceOf(WorkbasketNotFoundException.class);
|
||||
}
|
||||
}
|
||||
|
||||
@WithAccessId(user = "user-1-1", groups = "businessadmin")
|
||||
@Test
|
||||
void createManualTaskShouldThrowClassificationNotFoundException() throws Exception {
|
||||
try (Connection connection = dataSource.getConnection()) {
|
||||
taskanaEngineImpl.setConnection(connection);
|
||||
|
||||
Workbasket wb = workbasketService.newWorkbasket("WB NR.1", "DOMAIN_A");
|
||||
wb.setName("dummy-WB");
|
||||
wb.setType(WorkbasketType.PERSONAL);
|
||||
wb = workbasketService.createWorkbasket(wb);
|
||||
workbasketService.createWorkbasketAccessItem(
|
||||
this.createWorkbasketWithSecurity(
|
||||
wb, taskanaEngine.getCurrentUserContext().getUserid(), true, true, true, false));
|
||||
Classification classification =
|
||||
classificationService.newClassification(
|
||||
UUID.randomUUID().toString(), wb.getDomain(), "t1"); // not persisted,
|
||||
// not found.
|
||||
classification.setName("not persisted - so not found.");
|
||||
|
||||
Task task = this.generateDummyTask();
|
||||
((TaskImpl) task).setWorkbasketSummary(wb.asSummary());
|
||||
task.setClassificationKey(classification.getKey());
|
||||
|
||||
assertThatThrownBy(() -> taskServiceImpl.createTask(task))
|
||||
.isInstanceOf(ClassificationNotFoundException.class);
|
||||
}
|
||||
}
|
||||
|
||||
@WithAccessId(user = "user-1-1", groups = "businessadmin")
|
||||
@Test
|
||||
void should_ReturnList_When_BuilderIsUsed() throws Exception {
|
||||
try (Connection connection = dataSource.getConnection()) {
|
||||
taskanaEngineImpl.setConnection(connection);
|
||||
WorkbasketImpl workbasket =
|
||||
(WorkbasketImpl) workbasketService.newWorkbasket("k1", "DOMAIN_A");
|
||||
workbasket.setName("workbasket");
|
||||
Classification classification =
|
||||
classificationService.newClassification("TEST", "DOMAIN_A", "TASK");
|
||||
classification.setServiceLevel("P1D");
|
||||
classificationService.createClassification(classification);
|
||||
workbasket.setId("1"); // set id manually for authorization tests
|
||||
workbasket.setType(WorkbasketType.GROUP);
|
||||
workbasket = (WorkbasketImpl) workbasketService.createWorkbasket(workbasket);
|
||||
|
||||
WorkbasketAccessItem accessItem = workbasketService.newWorkbasketAccessItem("1", "user-1-1");
|
||||
accessItem.setPermission(WorkbasketPermission.APPEND, true);
|
||||
accessItem.setPermission(WorkbasketPermission.READ, true);
|
||||
accessItem.setPermission(WorkbasketPermission.OPEN, true);
|
||||
workbasketService.createWorkbasketAccessItem(accessItem);
|
||||
|
||||
Task task = taskServiceImpl.newTask(workbasket.getId());
|
||||
task.setName("Unit Test Task");
|
||||
task.setClassificationKey(classification.getKey());
|
||||
task.setPrimaryObjRef(JunitHelper.createDefaultObjRef());
|
||||
taskServiceImpl.createTask(task);
|
||||
|
||||
List<TaskSummary> results =
|
||||
taskServiceImpl
|
||||
.createTaskQuery()
|
||||
.nameIn("bla", "test")
|
||||
.descriptionLike("test")
|
||||
.priorityIn(1, 2, 2)
|
||||
.stateIn(TaskState.CLAIMED)
|
||||
.workbasketKeyDomainIn(new KeyDomain("k1", "DOMAIN_A"))
|
||||
.ownerIn("test", "test2", "bla")
|
||||
.customAttributeLike(TaskCustomField.CUSTOM_13, "test")
|
||||
.classificationKeyIn("pId1", "pId2")
|
||||
.primaryObjectReferenceCompanyIn("first comp", "sonstwo gmbh")
|
||||
.primaryObjectReferenceSystemIn("sys")
|
||||
.primaryObjectReferenceTypeIn("type1", "type2")
|
||||
.primaryObjectReferenceSystemInstanceIn("sysInst1", "sysInst2")
|
||||
.primaryObjectReferenceValueIn("val1", "val2", "val3")
|
||||
.list();
|
||||
|
||||
assertThat(results).isEmpty();
|
||||
connection.commit();
|
||||
}
|
||||
}
|
||||
|
||||
@WithAccessId(user = "user-1-1", groups = "businessadmin")
|
||||
@Test
|
||||
void shouldTransferTaskToOtherWorkbasket() throws Exception {
|
||||
final int sleepTime = 100;
|
||||
final String user = taskanaEngine.getCurrentUserContext().getUserid();
|
||||
try (Connection connection = dataSource.getConnection()) {
|
||||
taskanaEngineImpl.setConnection(connection);
|
||||
|
||||
// Source Workbasket
|
||||
WorkbasketImpl wb =
|
||||
(WorkbasketImpl) workbasketService.newWorkbasket("sourceWbKey", "DOMAIN_A");
|
||||
wb.setName("Basic-Workbasket");
|
||||
wb.setDescription("Just used as base WB for Task here");
|
||||
wb.setOwner(user);
|
||||
wb.setType(WorkbasketType.PERSONAL);
|
||||
Workbasket sourceWB = workbasketService.createWorkbasket(wb);
|
||||
|
||||
workbasketService.createWorkbasketAccessItem(
|
||||
createWorkbasketWithSecurity(wb, wb.getOwner(), true, true, true, true));
|
||||
connection.commit();
|
||||
ThrowingCallable call =
|
||||
() ->
|
||||
workbasketService.createWorkbasketAccessItem(
|
||||
createWorkbasketWithSecurity(
|
||||
sourceWB, sourceWB.getOwner(), false, false, false, false));
|
||||
assertThatThrownBy(call).isInstanceOf(WorkbasketAccessItemAlreadyExistException.class);
|
||||
connection.rollback();
|
||||
|
||||
// Destination Workbasket
|
||||
wb = (WorkbasketImpl) workbasketService.newWorkbasket("wb2Key", "DOMAIN_A");
|
||||
wb.setName("Desination-WorkBasket");
|
||||
wb.setDescription("Destination WB where Task should be transfered to");
|
||||
wb.setOwner(user);
|
||||
wb.setType(WorkbasketType.TOPIC);
|
||||
|
||||
Workbasket destinationWB = workbasketService.createWorkbasket(wb);
|
||||
workbasketService.createWorkbasketAccessItem(
|
||||
createWorkbasketWithSecurity(
|
||||
destinationWB, destinationWB.getOwner(), false, true, true, true));
|
||||
|
||||
// Classification required for Task
|
||||
ClassificationImpl classification =
|
||||
(ClassificationImpl) classificationService.newClassification("KEY", "DOMAIN_A", "TASK");
|
||||
classification.setCategory("EXTERNAL");
|
||||
classification.setName("Transfert-Task Classification");
|
||||
classification.setServiceLevel("P1D");
|
||||
classificationService.createClassification(classification);
|
||||
|
||||
// Task which should be transfered
|
||||
TaskImpl task = (TaskImpl) taskServiceImpl.newTask(sourceWB.getId());
|
||||
task.setName("Task Name");
|
||||
task.setDescription("Task used for transfer Test");
|
||||
task.setRead(true);
|
||||
task.setTransferred(false);
|
||||
task.setModified(null);
|
||||
task.setClassificationKey("KEY");
|
||||
task.setOwner(user);
|
||||
task.setPrimaryObjRef(JunitHelper.createDefaultObjRef());
|
||||
task = (TaskImpl) taskServiceImpl.createTask(task);
|
||||
Thread.sleep(sleepTime); // Sleep for modification-timestamp
|
||||
connection.commit();
|
||||
|
||||
Task resultTask = taskServiceImpl.transfer(task.getId(), destinationWB.getId());
|
||||
connection.commit();
|
||||
assertThat(resultTask.isRead()).isFalse();
|
||||
assertThat(resultTask.isTransferred()).isTrue();
|
||||
assertThat(resultTask.getWorkbasketKey()).isEqualTo(destinationWB.getKey());
|
||||
assertThat(resultTask.getModified()).isNotNull();
|
||||
assertThat(resultTask.getModified()).isNotEqualTo(task.getModified());
|
||||
assertThat(resultTask.getCreated()).isNotNull();
|
||||
assertThat(resultTask.getCreated()).isEqualTo(task.getCreated());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldNotTransferAnyTask() throws Exception {
|
||||
try (Connection connection = dataSource.getConnection()) {
|
||||
taskanaEngineImpl.setConnection(connection);
|
||||
|
||||
assertThatThrownBy(() -> taskServiceImpl.transfer(UUID.randomUUID() + "_X", "1"))
|
||||
.isInstanceOf(TaskNotFoundException.class);
|
||||
}
|
||||
}
|
||||
|
||||
@WithAccessId(user = "user-1-1", groups = "businessadmin")
|
||||
@Test
|
||||
void shouldNotTransferByFailingSecurity() throws Exception {
|
||||
final String user = "user-1-1";
|
||||
|
||||
// Set up Security for this Test
|
||||
final DataSource dataSource = TaskanaEngineTestConfiguration.getDataSource();
|
||||
final TaskanaEngineConfiguration taskanaEngineConfiguration =
|
||||
new TaskanaEngineConfiguration(
|
||||
dataSource, false, true, TaskanaEngineTestConfiguration.getSchemaName());
|
||||
final TaskanaEngine taskanaEngine = taskanaEngineConfiguration.buildTaskanaEngine();
|
||||
final TaskanaEngineImpl taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine;
|
||||
taskanaEngineImpl.setConnectionManagementMode(ConnectionManagementMode.AUTOCOMMIT);
|
||||
final TaskServiceImpl taskServiceImpl = (TaskServiceImpl) taskanaEngine.getTaskService();
|
||||
final ClassificationService classificationService = taskanaEngine.getClassificationService();
|
||||
final WorkbasketService workbasketService = taskanaEngine.getWorkbasketService();
|
||||
|
||||
ClassificationImpl classification =
|
||||
(ClassificationImpl) classificationService.newClassification("KEY", "DOMAIN_A", "TASK");
|
||||
classification.setCategory("EXTERNAL");
|
||||
classification.setName("Transfert-Task Classification");
|
||||
classification.setServiceLevel("P1D");
|
||||
classificationService.createClassification(classification);
|
||||
|
||||
WorkbasketImpl wb = (WorkbasketImpl) workbasketService.newWorkbasket("wbKey1", "DOMAIN_A");
|
||||
wb.setName("BASE WB");
|
||||
wb.setDescription("Normal base WB");
|
||||
wb.setOwner(user);
|
||||
wb.setType(WorkbasketType.GROUP);
|
||||
WorkbasketImpl wbCreated = (WorkbasketImpl) workbasketService.createWorkbasket(wb);
|
||||
workbasketService.createWorkbasketAccessItem(
|
||||
createWorkbasketWithSecurity(wbCreated, wbCreated.getOwner(), true, true, true, true));
|
||||
|
||||
WorkbasketImpl wbNoAppend =
|
||||
(WorkbasketImpl) workbasketService.newWorkbasket("keyNoAppend", "DOMAIN_B");
|
||||
wbNoAppend.setName("Test-Security-WorkBasket-APPEND");
|
||||
wbNoAppend.setDescription("Workbasket without permission APPEND on Task");
|
||||
wbNoAppend.setOwner(user);
|
||||
|
||||
wbNoAppend.setType(WorkbasketType.CLEARANCE);
|
||||
WorkbasketImpl wbNoAppendCreated =
|
||||
(WorkbasketImpl) workbasketService.createWorkbasket(wbNoAppend);
|
||||
workbasketService.createWorkbasketAccessItem(
|
||||
createWorkbasketWithSecurity(
|
||||
wbNoAppendCreated, wbNoAppendCreated.getOwner(), true, true, false, true));
|
||||
|
||||
WorkbasketImpl wbNoTransfer =
|
||||
(WorkbasketImpl) workbasketService.newWorkbasket("keyNoTransfer", "DOMAIN_A");
|
||||
wbNoTransfer.setName("Test-Security-WorkBasket-TRANSFER");
|
||||
wbNoTransfer.setDescription("Workbasket without permission TRANSFER on Task");
|
||||
wbNoTransfer.setOwner(user);
|
||||
wbNoTransfer.setType(WorkbasketType.GROUP);
|
||||
wbNoTransfer = (WorkbasketImpl) workbasketService.createWorkbasket(wbNoTransfer);
|
||||
workbasketService.createWorkbasketAccessItem(
|
||||
createWorkbasketWithSecurity(
|
||||
wbNoTransfer, wbNoTransfer.getOwner(), true, true, true, false));
|
||||
|
||||
TaskImpl task = (TaskImpl) taskServiceImpl.newTask(wbCreated.getId());
|
||||
task.setName("Task Name");
|
||||
task.setDescription("Task used for transfer Test");
|
||||
task.setOwner(user);
|
||||
task.setClassificationKey(classification.getKey());
|
||||
task.setPrimaryObjRef(JunitHelper.createDefaultObjRef());
|
||||
TaskImpl taskCreated = (TaskImpl) taskServiceImpl.createTask(task);
|
||||
|
||||
// Check failing with missing APPEND
|
||||
ThrowingCallable call =
|
||||
() -> taskServiceImpl.transfer(taskCreated.getId(), wbNoAppendCreated.getId());
|
||||
assertThatThrownBy(call)
|
||||
.describedAs(
|
||||
"Transfer Task should be FAILED, "
|
||||
+ "because there are no APPEND-Rights on destination WB.")
|
||||
.isInstanceOf(NotAuthorizedException.class)
|
||||
.hasMessageContaining("APPEND");
|
||||
|
||||
assertThat(taskCreated.isTransferred()).isFalse();
|
||||
assertThat(taskCreated.getWorkbasketKey()).isNotEqualTo(wbNoAppendCreated.getKey());
|
||||
assertThat(taskCreated.getWorkbasketKey()).isEqualTo(wbCreated.getKey());
|
||||
|
||||
// Check failing with missing TRANSFER
|
||||
taskCreated.setId("");
|
||||
taskCreated.setWorkbasketKey(wbNoTransfer.getKey());
|
||||
taskCreated.getWorkbasketSummaryImpl().setId(wbNoTransfer.getId());
|
||||
taskCreated.setExternalId(IdGenerator.generateWithPrefix("TST"));
|
||||
TaskImpl taskCreated2 = (TaskImpl) taskServiceImpl.createTask(taskCreated);
|
||||
assertThatThrownBy(() -> taskServiceImpl.transfer(taskCreated2.getId(), wbCreated.getId()))
|
||||
.describedAs(
|
||||
"Transfer Task should be FAILED, because there are no TRANSFER-Rights on current WB.")
|
||||
.isInstanceOf(NotAuthorizedException.class)
|
||||
.hasMessageContaining("TRANSFER");
|
||||
|
||||
assertThat(taskCreated2.isTransferred()).isFalse();
|
||||
assertThat(taskCreated2.getWorkbasketKey()).isNotEqualTo(wbNoAppendCreated.getKey());
|
||||
assertThat(taskCreated2.isTransferred()).isFalse();
|
||||
assertThat(taskCreated2.getWorkbasketKey()).isNotEqualTo(wbNoAppendCreated.getKey());
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
void cleanUp() throws Exception {
|
||||
taskanaEngineImpl.setConnection(null);
|
||||
}
|
||||
|
||||
private Task generateDummyTask() throws Exception {
|
||||
WorkbasketImpl workbasket = (WorkbasketImpl) workbasketService.newWorkbasket("wb", "DOMAIN_A");
|
||||
workbasket.setName("wb");
|
||||
workbasket.setId("1"); // set id manually for authorization tests
|
||||
workbasket.setType(WorkbasketType.GROUP);
|
||||
taskanaEngine.getWorkbasketService().createWorkbasket(workbasket);
|
||||
|
||||
Classification classification =
|
||||
classificationService.newClassification("TEST", "DOMAIN_A", "TASK");
|
||||
classification.setServiceLevel("P1D");
|
||||
taskanaEngine.getClassificationService().createClassification(classification);
|
||||
|
||||
Task task = taskServiceImpl.newTask(workbasket.getId());
|
||||
task.setClassificationKey(classification.getKey());
|
||||
return task;
|
||||
}
|
||||
|
||||
private WorkbasketAccessItem createWorkbasketWithSecurity(
|
||||
Workbasket wb,
|
||||
String accessId,
|
||||
boolean permOpen,
|
||||
boolean permRead,
|
||||
boolean permAppend,
|
||||
boolean permTransfer) {
|
||||
WorkbasketAccessItem accessItem =
|
||||
workbasketService.newWorkbasketAccessItem(wb.getId(), accessId);
|
||||
accessItem.setPermission(WorkbasketPermission.OPEN, permOpen);
|
||||
accessItem.setPermission(WorkbasketPermission.READ, permRead);
|
||||
accessItem.setPermission(WorkbasketPermission.APPEND, permAppend);
|
||||
accessItem.setPermission(WorkbasketPermission.TRANSFER, permTransfer);
|
||||
return accessItem;
|
||||
}
|
||||
}
|
|
@ -1,86 +0,0 @@
|
|||
package pro.taskana.task.internal;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import pro.taskana.classification.api.models.Classification;
|
||||
import pro.taskana.classification.internal.ClassificationServiceImpl;
|
||||
import pro.taskana.common.api.TaskanaEngine;
|
||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
||||
import pro.taskana.task.api.models.ObjectReference;
|
||||
import pro.taskana.task.api.models.TaskSummary;
|
||||
import pro.taskana.task.internal.models.TaskImpl;
|
||||
import pro.taskana.workbasket.api.WorkbasketService;
|
||||
import pro.taskana.workbasket.api.models.Workbasket;
|
||||
|
||||
/** Unit Test for TaskServiceImpl. */
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class TaskServiceImplTest {
|
||||
|
||||
private TaskServiceImpl cut;
|
||||
|
||||
@Mock private InternalTaskanaEngine internalTaskanaEngineMock;
|
||||
|
||||
@Mock private TaskanaEngine taskanaEngineMock;
|
||||
|
||||
@Mock private TaskMapper taskMapperMock;
|
||||
|
||||
@Mock private TaskCommentMapper taskCommentMapperMock;
|
||||
|
||||
@Mock private AttachmentMapper attachmentMapperMock;
|
||||
|
||||
@Mock private WorkbasketService workbasketServiceMock;
|
||||
|
||||
@Mock private ClassificationServiceImpl classificationServiceImplMock;
|
||||
|
||||
@BeforeEach
|
||||
void setup() {
|
||||
when(internalTaskanaEngineMock.getEngine()).thenReturn(taskanaEngineMock);
|
||||
when(taskanaEngineMock.getWorkbasketService()).thenReturn(workbasketServiceMock);
|
||||
when(taskanaEngineMock.getClassificationService()).thenReturn(classificationServiceImplMock);
|
||||
cut =
|
||||
new TaskServiceImpl(
|
||||
internalTaskanaEngineMock, taskMapperMock, taskCommentMapperMock, attachmentMapperMock);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testTaskSummaryEqualsHashCode() throws Exception {
|
||||
Classification classification = CreateTaskModelHelper.createDummyClassification();
|
||||
Workbasket wb = CreateTaskModelHelper.createWorkbasket("WB-ID", "WB-Key");
|
||||
ObjectReference objectReference = JunitHelper.createDefaultObjRef();
|
||||
TaskImpl taskBefore =
|
||||
CreateTaskModelHelper.createUnitTestTask("ID", "taskName", wb.getKey(), classification);
|
||||
taskBefore.setPrimaryObjRef(objectReference);
|
||||
Thread.sleep(10);
|
||||
TaskImpl taskAfter =
|
||||
CreateTaskModelHelper.createUnitTestTask("ID", "taskName", wb.getKey(), classification);
|
||||
taskAfter.setPrimaryObjRef(objectReference);
|
||||
TaskSummary summaryBefore = taskBefore.asSummary();
|
||||
TaskSummary summaryAfter = taskAfter.asSummary();
|
||||
|
||||
assertThat(summaryAfter).isNotEqualTo(summaryBefore);
|
||||
assertThat(summaryAfter.hashCode()).isNotEqualTo(summaryBefore.hashCode());
|
||||
|
||||
taskAfter.setCreated(taskBefore.getCreated());
|
||||
taskAfter.setModified(taskBefore.getModified());
|
||||
summaryAfter = taskAfter.asSummary();
|
||||
assertThat(summaryAfter).isEqualTo(summaryBefore);
|
||||
assertThat(summaryAfter.hashCode()).isEqualTo(summaryBefore.hashCode());
|
||||
|
||||
taskBefore.setModified(null);
|
||||
summaryBefore = taskBefore.asSummary();
|
||||
assertThat(summaryAfter).isNotEqualTo(summaryBefore);
|
||||
assertThat(summaryAfter.hashCode()).isNotEqualTo(summaryBefore.hashCode());
|
||||
|
||||
taskAfter.setModified(null);
|
||||
summaryAfter = taskAfter.asSummary();
|
||||
assertThat(summaryAfter).isEqualTo(summaryBefore);
|
||||
assertThat(summaryAfter.hashCode()).isEqualTo(summaryBefore.hashCode());
|
||||
}
|
||||
}
|
|
@ -1,72 +0,0 @@
|
|||
package pro.taskana.task.internal;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Result;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
import org.apache.ibatis.type.ClobTypeHandler;
|
||||
|
||||
import pro.taskana.common.internal.persistence.MapTypeHandler;
|
||||
import pro.taskana.task.internal.models.TaskImpl;
|
||||
|
||||
/** This class contains specific mybatis mappings for task tests. */
|
||||
@SuppressWarnings({"checkstyle:LineLength"})
|
||||
public interface TaskTestMapper {
|
||||
|
||||
@Select("select CUSTOM_ATTRIBUTES from TASK where id = #{taskId}")
|
||||
@Result(
|
||||
property = "customAttributes",
|
||||
column = "CUSTOM_ATTRIBUTES",
|
||||
javaType = String.class,
|
||||
typeHandler = ClobTypeHandler.class)
|
||||
String getCustomAttributesAsString(@Param("taskId") String taskId);
|
||||
|
||||
@Select(
|
||||
"SELECT ID, CREATED, CLAIMED, COMPLETED, MODIFIED, PLANNED, DUE, NAME, CREATOR, DESCRIPTION, NOTE, PRIORITY, STATE, CLASSIFICATION_CATEGORY, CLASSIFICATION_KEY, CLASSIFICATION_ID, WORKBASKET_ID, WORKBASKET_KEY, DOMAIN, BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID, OWNER, POR_COMPANY, POR_SYSTEM, POR_INSTANCE, POR_TYPE, POR_VALUE, IS_READ, IS_TRANSFERRED, CUSTOM_ATTRIBUTES, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, CUSTOM_5, CUSTOM_6, CUSTOM_7, CUSTOM_8, CUSTOM_9, CUSTOM_10 "
|
||||
+ "FROM TASK "
|
||||
+ "WHERE CUSTOM_ATTRIBUTES like #{searchText}")
|
||||
@Result(property = "id", column = "ID")
|
||||
@Result(property = "created", column = "CREATED")
|
||||
@Result(property = "claimed", column = "CLAIMED")
|
||||
@Result(property = "completed", column = "COMPLETED")
|
||||
@Result(property = "modified", column = "MODIFIED")
|
||||
@Result(property = "planned", column = "PLANNED")
|
||||
@Result(property = "due", column = "DUE")
|
||||
@Result(property = "name", column = "NAME")
|
||||
@Result(property = "creator", column = "CREATOR")
|
||||
@Result(property = "description", column = "DESCRIPTION")
|
||||
@Result(property = "note", column = "NOTE")
|
||||
@Result(property = "priority", column = "PRIORITY")
|
||||
@Result(property = "state", column = "STATE")
|
||||
@Result(property = "classificationSummaryImpl.category", column = "CLASSIFICATION_CATEGORY")
|
||||
@Result(property = "classificationSummaryImpl.id", column = "CLASSIFICATION_ID")
|
||||
@Result(property = "classificationSummaryImpl.key", column = "CLASSIFICATION_KEY")
|
||||
@Result(property = "domain", column = "DOMAIN")
|
||||
@Result(property = "businessProcessId", column = "BUSINESS_PROCESS_ID")
|
||||
@Result(property = "parentBusinessProcessId", column = "PARENT_BUSINESS_PROCESS_ID")
|
||||
@Result(property = "owner", column = "OWNER")
|
||||
@Result(property = "primaryObjRef.company", column = "POR_COMPANY")
|
||||
@Result(property = "primaryObjRef.system", column = "POR_SYSTEM")
|
||||
@Result(property = "primaryObjRef.systemInstance", column = "POR_INSTANCE")
|
||||
@Result(property = "primaryObjRef.type", column = "POR_TYPE")
|
||||
@Result(property = "primaryObjRef.value", column = "POR_VALUE")
|
||||
@Result(property = "isRead", column = "IS_READ")
|
||||
@Result(property = "isTransferred", column = "IS_TRANSFERRED")
|
||||
@Result(
|
||||
property = "customAttributes",
|
||||
column = "CUSTOM_ATTRIBUTES",
|
||||
javaType = Map.class,
|
||||
typeHandler = MapTypeHandler.class)
|
||||
@Result(property = "custom1", column = "CUSTOM_1")
|
||||
@Result(property = "custom2", column = "CUSTOM_2")
|
||||
@Result(property = "custom3", column = "CUSTOM_3")
|
||||
@Result(property = "custom4", column = "CUSTOM_4")
|
||||
@Result(property = "custom5", column = "CUSTOM_5")
|
||||
@Result(property = "custom6", column = "CUSTOM_6")
|
||||
@Result(property = "custom7", column = "CUSTOM_7")
|
||||
@Result(property = "custom8", column = "CUSTOM_8")
|
||||
@Result(property = "custom9", column = "CUSTOM_9")
|
||||
@Result(property = "custom10", column = "CUSTOM_10")
|
||||
List<TaskImpl> selectTasksByCustomAttributeLike(@Param("searchText") String searchText);
|
||||
}
|
|
@ -1,106 +0,0 @@
|
|||
package pro.taskana.task.internal;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
||||
|
||||
import org.apache.ibatis.session.SqlSession;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import pro.taskana.TaskanaEngineConfiguration;
|
||||
import pro.taskana.classification.api.models.Classification;
|
||||
import pro.taskana.classification.internal.ClassificationQueryImpl;
|
||||
import pro.taskana.classification.internal.ClassificationServiceImpl;
|
||||
import pro.taskana.common.api.TaskanaEngine;
|
||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
||||
import pro.taskana.task.api.TaskState;
|
||||
import pro.taskana.task.api.models.Task;
|
||||
import pro.taskana.task.internal.models.TaskImpl;
|
||||
import pro.taskana.workbasket.api.WorkbasketPermission;
|
||||
import pro.taskana.workbasket.api.WorkbasketService;
|
||||
import pro.taskana.workbasket.api.models.Workbasket;
|
||||
|
||||
/** Unit Test for TaskServiceImpl. */
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class TaskTransferrerTest {
|
||||
|
||||
private TaskTransferrer cut;
|
||||
@Mock private TaskServiceImpl taskServiceImplMock;
|
||||
|
||||
@Mock private TaskanaEngineConfiguration taskanaEngineConfigurationMock;
|
||||
|
||||
@Mock private InternalTaskanaEngine internalTaskanaEngineMock;
|
||||
|
||||
@Mock private TaskanaEngine taskanaEngineMock;
|
||||
|
||||
@Mock private TaskMapper taskMapperMock;
|
||||
|
||||
@Mock private ObjectReferenceMapper objectReferenceMapperMock;
|
||||
|
||||
@Mock private WorkbasketService workbasketServiceMock;
|
||||
|
||||
@Mock private ClassificationServiceImpl classificationServiceImplMock;
|
||||
|
||||
@Mock private AttachmentMapper attachmentMapperMock;
|
||||
|
||||
@Mock private ClassificationQueryImpl classificationQueryImplMock;
|
||||
|
||||
@Mock private SqlSession sqlSessionMock;
|
||||
|
||||
@Test
|
||||
void testTransferTaskToDestinationWorkbasketWithoutSecurity() throws Exception {
|
||||
doReturn(taskanaEngineMock).when(internalTaskanaEngineMock).getEngine();
|
||||
doReturn(workbasketServiceMock).when(taskanaEngineMock).getWorkbasketService();
|
||||
cut = new TaskTransferrer(internalTaskanaEngineMock, taskMapperMock, taskServiceImplMock);
|
||||
|
||||
final TaskTransferrer cutSpy = Mockito.spy(cut);
|
||||
Workbasket destinationWorkbasket = CreateTaskModelHelper.createWorkbasket("2", "k1");
|
||||
Workbasket sourceWorkbasket = CreateTaskModelHelper.createWorkbasket("47", "key47");
|
||||
Classification dummyClassification = CreateTaskModelHelper.createDummyClassification();
|
||||
TaskImpl task =
|
||||
CreateTaskModelHelper.createUnitTestTask(
|
||||
"1", "Unit Test Task 1", "key47", dummyClassification);
|
||||
task.setWorkbasketSummary(sourceWorkbasket.asSummary());
|
||||
task.setRead(true);
|
||||
doReturn(destinationWorkbasket)
|
||||
.when(workbasketServiceMock)
|
||||
.getWorkbasket(destinationWorkbasket.getId());
|
||||
doReturn(task).when(taskServiceImplMock).getTask(task.getId());
|
||||
|
||||
final Task actualTask = cutSpy.transfer(task.getId(), destinationWorkbasket.getId());
|
||||
|
||||
verify(internalTaskanaEngineMock, times(1)).openConnection();
|
||||
verify(workbasketServiceMock, times(1))
|
||||
.checkAuthorization(destinationWorkbasket.getId(), WorkbasketPermission.APPEND);
|
||||
verify(workbasketServiceMock, times(1))
|
||||
.checkAuthorization(sourceWorkbasket.getId(), WorkbasketPermission.TRANSFER);
|
||||
verify(workbasketServiceMock, times(1)).getWorkbasket(destinationWorkbasket.getId());
|
||||
verify(taskMapperMock, times(1)).update(any());
|
||||
verify(internalTaskanaEngineMock, times(1)).returnConnection();
|
||||
verify(internalTaskanaEngineMock, times(1)).getEngine();
|
||||
verify(internalTaskanaEngineMock).getHistoryEventManager();
|
||||
verify(taskanaEngineMock).getWorkbasketService();
|
||||
verifyNoMoreInteractions(
|
||||
attachmentMapperMock,
|
||||
taskanaEngineConfigurationMock,
|
||||
taskanaEngineMock,
|
||||
internalTaskanaEngineMock,
|
||||
taskMapperMock,
|
||||
objectReferenceMapperMock,
|
||||
workbasketServiceMock,
|
||||
sqlSessionMock,
|
||||
classificationQueryImplMock);
|
||||
|
||||
assertThat(actualTask.isRead()).isFalse();
|
||||
assertThat(actualTask.getState()).isEqualTo(TaskState.READY);
|
||||
assertThat(actualTask.isTransferred()).isTrue();
|
||||
assertThat(actualTask.getWorkbasketKey()).isEqualTo(destinationWorkbasket.getKey());
|
||||
}
|
||||
}
|
|
@ -1,57 +0,0 @@
|
|||
package pro.taskana.workbasket.internal;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import org.apache.ibatis.session.SqlSession;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
||||
import pro.taskana.workbasket.api.models.WorkbasketAccessItem;
|
||||
import pro.taskana.workbasket.internal.models.WorkbasketAccessItemImpl;
|
||||
|
||||
/** Test for WorkbasketAccessItemQueryImpl. */
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class WorkbasketAccessItemQueryImplTest {
|
||||
|
||||
@InjectMocks private WorkbasketAccessItemQueryImpl workbasketAccessItemQueryImpl;
|
||||
|
||||
@Mock private InternalTaskanaEngine internalTaskanaEngine;
|
||||
|
||||
@Mock private SqlSession sqlSession;
|
||||
|
||||
@Test
|
||||
void should_ReturnList_When_BuilderIsUsed() {
|
||||
when(internalTaskanaEngine.openAndReturnConnection(any())).thenReturn(new ArrayList<>());
|
||||
|
||||
List<WorkbasketAccessItem> result =
|
||||
workbasketAccessItemQueryImpl.accessIdIn("test", "asd").list();
|
||||
assertThat(result).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
void should_ReturnListWithOffset_When_BuilderIsUsed() {
|
||||
when(internalTaskanaEngine.getSqlSession()).thenReturn(sqlSession);
|
||||
when(sqlSession.selectList(any(), any(), any())).thenReturn(new ArrayList<>());
|
||||
|
||||
List<WorkbasketAccessItem> result =
|
||||
workbasketAccessItemQueryImpl.accessIdIn("test", "asd").list(1, 1);
|
||||
assertThat(result).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
void should_ReturnOneItem_When_BuilderIsUsed() {
|
||||
when(internalTaskanaEngine.getSqlSession()).thenReturn(sqlSession);
|
||||
when(sqlSession.selectOne(any(), any())).thenReturn(new WorkbasketAccessItemImpl());
|
||||
|
||||
WorkbasketAccessItem result = workbasketAccessItemQueryImpl.accessIdIn("test", "asd").single();
|
||||
assertThat(result).isNotNull();
|
||||
}
|
||||
}
|
|
@ -1,81 +0,0 @@
|
|||
package pro.taskana.workbasket.internal;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import org.apache.ibatis.session.SqlSession;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import pro.taskana.common.api.TaskanaEngine;
|
||||
import pro.taskana.common.api.security.CurrentUserContext;
|
||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
||||
import pro.taskana.workbasket.api.models.WorkbasketSummary;
|
||||
import pro.taskana.workbasket.internal.models.WorkbasketSummaryImpl;
|
||||
|
||||
/** Test for WorkbasketQueryImpl. */
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class WorkbasketQueryImplTest {
|
||||
|
||||
@InjectMocks private WorkbasketQueryImpl workbasketQueryImpl;
|
||||
|
||||
@Mock private InternalTaskanaEngine internalTaskanaEngine;
|
||||
|
||||
@Mock private TaskanaEngine taskanaEngine;
|
||||
|
||||
@Mock private SqlSession sqlSession;
|
||||
|
||||
@Mock private CurrentUserContext currentUserContext;
|
||||
|
||||
@BeforeEach
|
||||
void setup() {
|
||||
when(internalTaskanaEngine.getEngine()).thenReturn(taskanaEngine);
|
||||
when(taskanaEngine.getCurrentUserContext()).thenReturn(currentUserContext);
|
||||
}
|
||||
|
||||
@Test
|
||||
void should_ReturnList_When_BuilderIsUsed() {
|
||||
when(internalTaskanaEngine.getSqlSession()).thenReturn(sqlSession);
|
||||
when(sqlSession.selectList(any(), any())).thenReturn(new ArrayList<>());
|
||||
|
||||
List<WorkbasketSummary> result =
|
||||
workbasketQueryImpl
|
||||
.nameIn("Gruppenpostkorb KSC 1", "Gruppenpostkorb KSC 2")
|
||||
.keyLike("GPK_%")
|
||||
.list();
|
||||
assertThat(result).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
void should_ReturnListWithOffset_When_BuilderIsUsed() {
|
||||
when(internalTaskanaEngine.getSqlSession()).thenReturn(sqlSession);
|
||||
when(sqlSession.selectList(any(), any(), any())).thenReturn(new ArrayList<>());
|
||||
|
||||
List<WorkbasketSummary> result =
|
||||
workbasketQueryImpl
|
||||
.nameIn("Gruppenpostkorb KSC 1", "Gruppenpostkorb KSC 2")
|
||||
.keyLike("GPK_%")
|
||||
.list(1, 1);
|
||||
assertThat(result).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
void should_ReturnOneItem_When_BuilderIsUsed() {
|
||||
when(internalTaskanaEngine.getSqlSession()).thenReturn(sqlSession);
|
||||
when(sqlSession.selectOne(any(), any())).thenReturn(new WorkbasketSummaryImpl());
|
||||
|
||||
WorkbasketSummary result =
|
||||
workbasketQueryImpl
|
||||
.nameIn("Gruppenpostkorb KSC 1", "Gruppenpostkorb KSC 2")
|
||||
.keyLike("GPK_%")
|
||||
.single();
|
||||
assertThat(result).isNotNull();
|
||||
}
|
||||
}
|
|
@ -1,194 +0,0 @@
|
|||
package pro.taskana.workbasket.internal;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
|
||||
import java.util.List;
|
||||
import javax.sql.DataSource;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
import pro.taskana.TaskanaEngineConfiguration;
|
||||
import pro.taskana.common.api.TaskanaEngine;
|
||||
import pro.taskana.common.api.TaskanaEngine.ConnectionManagementMode;
|
||||
import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
|
||||
import pro.taskana.common.internal.util.IdGenerator;
|
||||
import pro.taskana.common.test.security.JaasExtension;
|
||||
import pro.taskana.common.test.security.WithAccessId;
|
||||
import pro.taskana.sampledata.SampleDataGenerator;
|
||||
import pro.taskana.workbasket.api.WorkbasketPermission;
|
||||
import pro.taskana.workbasket.api.WorkbasketService;
|
||||
import pro.taskana.workbasket.api.WorkbasketType;
|
||||
import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
|
||||
import pro.taskana.workbasket.api.models.Workbasket;
|
||||
import pro.taskana.workbasket.api.models.WorkbasketAccessItem;
|
||||
import pro.taskana.workbasket.api.models.WorkbasketSummary;
|
||||
import pro.taskana.workbasket.internal.models.WorkbasketImpl;
|
||||
|
||||
/** Integration Test for workbasketServiceImpl with connection management mode AUTOCOMMIT. */
|
||||
@ExtendWith(JaasExtension.class)
|
||||
class WorkbasketServiceImplIntAutocommitTest {
|
||||
|
||||
private static final int SLEEP_TIME = 100;
|
||||
private WorkbasketService workBasketService;
|
||||
|
||||
@BeforeAll
|
||||
static void resetDb() {
|
||||
DataSource ds = TaskanaEngineTestConfiguration.getDataSource();
|
||||
String schemaName = TaskanaEngineTestConfiguration.getSchemaName();
|
||||
new SampleDataGenerator(ds, schemaName).dropDb();
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void setup() throws Exception {
|
||||
DataSource dataSource = TaskanaEngineTestConfiguration.getDataSource();
|
||||
String schemaName = TaskanaEngineTestConfiguration.getSchemaName();
|
||||
TaskanaEngineConfiguration taskanaEngineConfiguration =
|
||||
new TaskanaEngineConfiguration(dataSource, false, schemaName);
|
||||
TaskanaEngine taskanaEngine = taskanaEngineConfiguration.buildTaskanaEngine();
|
||||
taskanaEngine.setConnectionManagementMode(ConnectionManagementMode.AUTOCOMMIT);
|
||||
workBasketService = taskanaEngine.getWorkbasketService();
|
||||
SampleDataGenerator sampleDataGenerator = new SampleDataGenerator(dataSource, schemaName);
|
||||
sampleDataGenerator.clearDb();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetWorkbasketFail() {
|
||||
assertThatThrownBy(() -> workBasketService.getWorkbasket("fail"))
|
||||
.isInstanceOf(WorkbasketNotFoundException.class);
|
||||
}
|
||||
|
||||
@WithAccessId(user = "user-1-1", groups = "businessadmin")
|
||||
@Test
|
||||
void testUpdateWorkbasket() throws Exception {
|
||||
String id0 = IdGenerator.generateWithPrefix("TWB");
|
||||
Workbasket workbasket0 =
|
||||
createTestWorkbasket(id0, "key0", "DOMAIN_A", "Superbasket", WorkbasketType.GROUP);
|
||||
workbasket0 = workBasketService.createWorkbasket(workbasket0);
|
||||
createWorkbasketWithSecurity(workbasket0, "user-1-1", true, true, false, false);
|
||||
|
||||
String id1 = IdGenerator.generateWithPrefix("TWB");
|
||||
Workbasket workbasket1 =
|
||||
createTestWorkbasket(id1, "key1", "DOMAIN_A", "Megabasket", WorkbasketType.GROUP);
|
||||
workbasket1 = workBasketService.createWorkbasket(workbasket1);
|
||||
createWorkbasketWithSecurity(workbasket1, "user-1-1", true, true, false, false);
|
||||
|
||||
String id2 = IdGenerator.generateWithPrefix("TWB");
|
||||
Workbasket workbasket2 =
|
||||
createTestWorkbasket(id2, "key2", "DOMAIN_A", "Hyperbasket", WorkbasketType.GROUP);
|
||||
workbasket2 = workBasketService.createWorkbasket(workbasket2);
|
||||
createWorkbasketWithSecurity(workbasket2, "user-1-1", true, true, false, false);
|
||||
List<String> distTargets = List.of(workbasket0.getId(), workbasket1.getId());
|
||||
Thread.sleep(SLEEP_TIME);
|
||||
workBasketService.setDistributionTargets(workbasket2.getId(), distTargets);
|
||||
|
||||
String id3 = IdGenerator.generateWithPrefix("TWB");
|
||||
Workbasket workbasket3 =
|
||||
createTestWorkbasket(
|
||||
id3, "key3", "DOMAIN_A", "hm ... irgend ein basket", WorkbasketType.GROUP);
|
||||
workbasket3 = workBasketService.createWorkbasket(workbasket3);
|
||||
createWorkbasketWithSecurity(workbasket3, "user-1-1", true, true, false, false);
|
||||
|
||||
List<String> newDistTargets = List.of(workbasket3.getId());
|
||||
Thread.sleep(SLEEP_TIME);
|
||||
workBasketService.setDistributionTargets(workbasket2.getId(), newDistTargets);
|
||||
|
||||
Workbasket foundBasket = workBasketService.getWorkbasket(workbasket2.getId());
|
||||
|
||||
List<WorkbasketSummary> distributionTargets =
|
||||
workBasketService.getDistributionTargets(foundBasket.getId());
|
||||
|
||||
assertThat(distributionTargets).hasSize(1);
|
||||
assertThat(distributionTargets.get(0).getId()).isEqualTo(id3);
|
||||
assertThat(workBasketService.getWorkbasket(id2).getCreated())
|
||||
.isNotEqualTo(workBasketService.getWorkbasket(id2).getModified());
|
||||
assertThat(workBasketService.getWorkbasket(id1).getCreated())
|
||||
.isEqualTo(workBasketService.getWorkbasket(id1).getModified());
|
||||
assertThat(workBasketService.getWorkbasket(id3).getCreated())
|
||||
.isEqualTo(workBasketService.getWorkbasket(id3).getModified());
|
||||
}
|
||||
|
||||
@WithAccessId(user = "user-1-1", groups = "businessadmin")
|
||||
@Test
|
||||
void testInsertWorkbasketAccessUser() throws Exception {
|
||||
|
||||
Workbasket wb =
|
||||
createTestWorkbasket(
|
||||
"k100000000000000000000000000000000000000",
|
||||
"key1",
|
||||
"DOMAIN_A",
|
||||
"name",
|
||||
WorkbasketType.PERSONAL);
|
||||
workBasketService.createWorkbasket(wb);
|
||||
WorkbasketAccessItem accessItem =
|
||||
workBasketService.newWorkbasketAccessItem(
|
||||
"k100000000000000000000000000000000000000", "Arthur Dent");
|
||||
accessItem.setPermission(WorkbasketPermission.OPEN, true);
|
||||
accessItem.setPermission(WorkbasketPermission.READ, true);
|
||||
workBasketService.createWorkbasketAccessItem(accessItem);
|
||||
|
||||
assertThat(
|
||||
workBasketService.getWorkbasketAccessItems("k100000000000000000000000000000000000000"))
|
||||
.hasSize(1);
|
||||
}
|
||||
|
||||
@WithAccessId(user = "user-1-1", groups = "businessadmin")
|
||||
@Test
|
||||
void testUpdateWorkbasketAccessUser() throws Exception {
|
||||
WorkbasketImpl wb = (WorkbasketImpl) workBasketService.newWorkbasket("key", "DOMAIN_A");
|
||||
wb.setId("k200000000000000000000000000000000000000");
|
||||
wb.setName("name");
|
||||
wb.setDescription("Description of a Workbasket...");
|
||||
wb.setType(WorkbasketType.GROUP);
|
||||
workBasketService.createWorkbasket(wb);
|
||||
|
||||
WorkbasketAccessItem accessItem =
|
||||
workBasketService.newWorkbasketAccessItem(
|
||||
"k200000000000000000000000000000000000000", "Zaphod Beeblebrox");
|
||||
accessItem.setPermission(WorkbasketPermission.OPEN, true);
|
||||
accessItem.setPermission(WorkbasketPermission.READ, true);
|
||||
workBasketService.createWorkbasketAccessItem(accessItem);
|
||||
|
||||
assertThat(
|
||||
workBasketService.getWorkbasketAccessItems("k200000000000000000000000000000000000000"))
|
||||
.hasSize(1);
|
||||
|
||||
accessItem.setPermission(WorkbasketPermission.APPEND, true);
|
||||
workBasketService.updateWorkbasketAccessItem(accessItem);
|
||||
|
||||
if (TaskanaEngineConfiguration.shouldUseLowerCaseForAccessIds()) {
|
||||
assertThat(accessItem.getAccessId()).isEqualTo("zaphod beeblebrox");
|
||||
} else {
|
||||
assertThat(accessItem.getAccessId()).isEqualTo("Zaphod Beeblebrox");
|
||||
}
|
||||
}
|
||||
|
||||
private void createWorkbasketWithSecurity(
|
||||
Workbasket wb,
|
||||
String accessId,
|
||||
boolean permOpen,
|
||||
boolean permRead,
|
||||
boolean permAppend,
|
||||
boolean permTransfer)
|
||||
throws Exception {
|
||||
WorkbasketAccessItem accessItem =
|
||||
workBasketService.newWorkbasketAccessItem(wb.getId(), accessId);
|
||||
accessItem.setPermission(WorkbasketPermission.OPEN, permOpen);
|
||||
accessItem.setPermission(WorkbasketPermission.READ, permRead);
|
||||
accessItem.setPermission(WorkbasketPermission.APPEND, permAppend);
|
||||
accessItem.setPermission(WorkbasketPermission.TRANSFER, permTransfer);
|
||||
workBasketService.createWorkbasketAccessItem(accessItem);
|
||||
}
|
||||
|
||||
private Workbasket createTestWorkbasket(
|
||||
String id, String key, String domain, String name, WorkbasketType type) {
|
||||
WorkbasketImpl wb = (WorkbasketImpl) workBasketService.newWorkbasket(key, domain);
|
||||
wb.setId(id);
|
||||
wb.setName(name);
|
||||
wb.setDescription("Description of a Workbasket...");
|
||||
wb.setType(type);
|
||||
return wb;
|
||||
}
|
||||
}
|
|
@ -1,190 +0,0 @@
|
|||
package pro.taskana.workbasket.internal;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.util.List;
|
||||
import javax.sql.DataSource;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
import pro.taskana.TaskanaEngineConfiguration;
|
||||
import pro.taskana.common.api.TaskanaEngine;
|
||||
import pro.taskana.common.api.TaskanaEngine.ConnectionManagementMode;
|
||||
import pro.taskana.common.internal.TaskanaEngineImpl;
|
||||
import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
|
||||
import pro.taskana.common.internal.util.IdGenerator;
|
||||
import pro.taskana.common.test.security.JaasExtension;
|
||||
import pro.taskana.common.test.security.WithAccessId;
|
||||
import pro.taskana.sampledata.SampleDataGenerator;
|
||||
import pro.taskana.workbasket.api.WorkbasketPermission;
|
||||
import pro.taskana.workbasket.api.WorkbasketService;
|
||||
import pro.taskana.workbasket.api.WorkbasketType;
|
||||
import pro.taskana.workbasket.api.models.Workbasket;
|
||||
import pro.taskana.workbasket.api.models.WorkbasketAccessItem;
|
||||
import pro.taskana.workbasket.api.models.WorkbasketSummary;
|
||||
import pro.taskana.workbasket.internal.models.WorkbasketImpl;
|
||||
|
||||
/** Integration Test for workbasketServiceImpl with connection mode EXPLICIT. */
|
||||
@ExtendWith(JaasExtension.class)
|
||||
class WorkbasketServiceImplIntExplicitTest {
|
||||
|
||||
private static final int SLEEP_TIME = 100;
|
||||
|
||||
private DataSource dataSource;
|
||||
private TaskanaEngine taskanaEngine;
|
||||
private TaskanaEngineImpl taskanaEngineImpl;
|
||||
private WorkbasketService workBasketService;
|
||||
|
||||
@BeforeAll
|
||||
static void resetDb() {
|
||||
DataSource ds = TaskanaEngineTestConfiguration.getDataSource();
|
||||
String schemaName = TaskanaEngineTestConfiguration.getSchemaName();
|
||||
new SampleDataGenerator(ds, schemaName).dropDb();
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void setup() throws Exception {
|
||||
dataSource = TaskanaEngineTestConfiguration.getDataSource();
|
||||
String schemaName = TaskanaEngineTestConfiguration.getSchemaName();
|
||||
TaskanaEngineConfiguration taskanaEngineConfiguration =
|
||||
new TaskanaEngineConfiguration(dataSource, false, schemaName);
|
||||
taskanaEngine = taskanaEngineConfiguration.buildTaskanaEngine();
|
||||
taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine;
|
||||
taskanaEngineImpl.setConnectionManagementMode(ConnectionManagementMode.EXPLICIT);
|
||||
SampleDataGenerator sampleDataGenerator = new SampleDataGenerator(dataSource, schemaName);
|
||||
sampleDataGenerator.clearDb();
|
||||
}
|
||||
|
||||
@WithAccessId(user = "user-1-1", groups = "businessadmin")
|
||||
@Test
|
||||
void testUpdateWorkbasket() throws Exception {
|
||||
try (Connection connection = dataSource.getConnection()) {
|
||||
taskanaEngineImpl.setConnection(connection);
|
||||
workBasketService = taskanaEngine.getWorkbasketService();
|
||||
String id0 = IdGenerator.generateWithPrefix("TWB");
|
||||
Workbasket workbasket0 =
|
||||
createTestWorkbasket(id0, "key0", "DOMAIN_A", "Superbasket", WorkbasketType.GROUP);
|
||||
workbasket0 = workBasketService.createWorkbasket(workbasket0);
|
||||
createWorkbasketWithSecurity(workbasket0, "user-1-1", true, true, false, false);
|
||||
|
||||
String id1 = IdGenerator.generateWithPrefix("TWB");
|
||||
Workbasket workbasket1 =
|
||||
createTestWorkbasket(id1, "key1", "DOMAIN_A", "Megabasket", WorkbasketType.GROUP);
|
||||
workbasket1 = workBasketService.createWorkbasket(workbasket1);
|
||||
createWorkbasketWithSecurity(workbasket1, "user-1-1", true, true, false, false);
|
||||
|
||||
String id2 = IdGenerator.generateWithPrefix("TWB");
|
||||
Workbasket workbasket2 =
|
||||
createTestWorkbasket(id2, "key2", "DOMAIN_A", "Hyperbasket", WorkbasketType.GROUP);
|
||||
workbasket2 = workBasketService.createWorkbasket(workbasket2);
|
||||
createWorkbasketWithSecurity(workbasket2, "user-1-1", true, true, false, false);
|
||||
|
||||
List<String> distTargets = List.of(workbasket0.getId(), workbasket1.getId());
|
||||
Thread.sleep(SLEEP_TIME);
|
||||
workBasketService.setDistributionTargets(workbasket2.getId(), distTargets);
|
||||
|
||||
String id3 = IdGenerator.generateWithPrefix("TWB");
|
||||
Workbasket workbasket3 =
|
||||
createTestWorkbasket(
|
||||
id3, "key3", "DOMAIN_A", "hm ... irgend ein basket", WorkbasketType.GROUP);
|
||||
workbasket3 = workBasketService.createWorkbasket(workbasket3);
|
||||
createWorkbasketWithSecurity(workbasket3, "user-1-1", true, true, false, false);
|
||||
|
||||
List<String> newDistTargets = List.of(workbasket3.getId());
|
||||
Thread.sleep(SLEEP_TIME);
|
||||
workBasketService.setDistributionTargets(workbasket2.getId(), newDistTargets);
|
||||
|
||||
Workbasket foundBasket = workBasketService.getWorkbasket(workbasket2.getId());
|
||||
|
||||
List<WorkbasketSummary> distributionTargets =
|
||||
workBasketService.getDistributionTargets(foundBasket.getId());
|
||||
assertThat(distributionTargets).hasSize(1);
|
||||
assertThat(distributionTargets.get(0).getId()).isEqualTo(workbasket3.getId());
|
||||
assertThat(workBasketService.getWorkbasket(id2).getCreated())
|
||||
.isNotEqualTo(workBasketService.getWorkbasket(id2).getModified());
|
||||
assertThat(workBasketService.getWorkbasket(id1).getCreated())
|
||||
.isEqualTo(workBasketService.getWorkbasket(id1).getModified());
|
||||
assertThat(workBasketService.getWorkbasket(id3).getCreated())
|
||||
.isEqualTo(workBasketService.getWorkbasket(id3).getModified());
|
||||
connection.commit();
|
||||
}
|
||||
}
|
||||
|
||||
@WithAccessId(user = "user-1-1", groups = "businessadmin")
|
||||
@Test
|
||||
void testInsertWorkbasketAccessUser() throws Exception {
|
||||
try (Connection connection = dataSource.getConnection()) {
|
||||
taskanaEngineImpl.setConnection(connection);
|
||||
workBasketService = taskanaEngine.getWorkbasketService();
|
||||
Workbasket wb =
|
||||
createTestWorkbasket("id1", "key1", "DOMAIN_A", "name", WorkbasketType.CLEARANCE);
|
||||
workBasketService.createWorkbasket(wb);
|
||||
WorkbasketAccessItem accessItem =
|
||||
workBasketService.newWorkbasketAccessItem("id1", "Arthur Dent");
|
||||
accessItem.setPermission(WorkbasketPermission.OPEN, true);
|
||||
accessItem.setPermission(WorkbasketPermission.READ, true);
|
||||
workBasketService.createWorkbasketAccessItem(accessItem);
|
||||
|
||||
assertThat(workBasketService.getWorkbasketAccessItems("id1")).hasSize(1);
|
||||
connection.commit();
|
||||
}
|
||||
}
|
||||
|
||||
@WithAccessId(user = "user-1-1", groups = "businessadmin")
|
||||
@Test
|
||||
void testUpdateWorkbasketAccessUser() throws Exception {
|
||||
try (Connection connection = dataSource.getConnection()) {
|
||||
taskanaEngineImpl.setConnection(connection);
|
||||
workBasketService = taskanaEngine.getWorkbasketService();
|
||||
|
||||
Workbasket wb =
|
||||
createTestWorkbasket("key2", "kkey2", "DOMAIN_A", "name", WorkbasketType.CLEARANCE);
|
||||
workBasketService.createWorkbasket(wb);
|
||||
WorkbasketAccessItem accessItem =
|
||||
workBasketService.newWorkbasketAccessItem("key2", "Zaphod Beeblebrox");
|
||||
accessItem.setPermission(WorkbasketPermission.OPEN, true);
|
||||
accessItem.setPermission(WorkbasketPermission.READ, true);
|
||||
workBasketService.createWorkbasketAccessItem(accessItem);
|
||||
|
||||
assertThat(workBasketService.getWorkbasketAccessItems("key2")).hasSize(1);
|
||||
assertThat(accessItem.getAccessId()).isEqualTo("zaphod beeblebrox");
|
||||
connection.commit();
|
||||
}
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
void cleanUp() throws Exception {
|
||||
taskanaEngineImpl.setConnection(null);
|
||||
}
|
||||
|
||||
private void createWorkbasketWithSecurity(
|
||||
Workbasket wb,
|
||||
String accessId,
|
||||
boolean permOpen,
|
||||
boolean permRead,
|
||||
boolean permAppend,
|
||||
boolean permTransfer)
|
||||
throws Exception {
|
||||
WorkbasketAccessItem accessItem =
|
||||
workBasketService.newWorkbasketAccessItem(wb.getId(), accessId);
|
||||
accessItem.setPermission(WorkbasketPermission.OPEN, permOpen);
|
||||
accessItem.setPermission(WorkbasketPermission.READ, permRead);
|
||||
accessItem.setPermission(WorkbasketPermission.APPEND, permAppend);
|
||||
accessItem.setPermission(WorkbasketPermission.TRANSFER, permTransfer);
|
||||
workBasketService.createWorkbasketAccessItem(accessItem);
|
||||
}
|
||||
|
||||
private Workbasket createTestWorkbasket(
|
||||
String id, String key, String domain, String name, WorkbasketType type) {
|
||||
WorkbasketImpl wb = (WorkbasketImpl) workBasketService.newWorkbasket(key, domain);
|
||||
wb.setId(id);
|
||||
wb.setName(name);
|
||||
wb.setDescription("Description of a Workbasket...");
|
||||
wb.setType(type);
|
||||
return wb;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue