TSK-1344: introduced displayName for Row

This commit is contained in:
Mustapha Zorgati 2020-07-21 20:50:14 +02:00
parent 278d17ecfe
commit f5e3d449b6
32 changed files with 388 additions and 123 deletions

View File

@ -26,7 +26,7 @@ public interface MonitorService {
*
* @return a {@link ClassificationCategoryReport.Builder}
*/
ClassificationCategoryReport.Builder createCategoryReportBuilder();
ClassificationCategoryReport.Builder createClassificationCategoryReportBuilder();
/**
* Provides a {@link ClassificationReport.Builder} for creating a {@link ClassificationReport} or

View File

@ -19,7 +19,7 @@ import pro.taskana.monitor.api.reports.row.Row;
public class ClassificationReport extends Report<MonitorQueryItem, TimeIntervalColumnHeader> {
public ClassificationReport(List<TimeIntervalColumnHeader> timeIntervalColumnHeaders) {
super(timeIntervalColumnHeaders, new String[] {"CLASSIFICATION KEYS"});
super(timeIntervalColumnHeaders, new String[] {"CLASSIFICATION"});
}
/** Builder for {@link ClassificationReport}. */
@ -62,7 +62,7 @@ public class ClassificationReport extends Report<MonitorQueryItem, TimeIntervalC
List<TimeIntervalColumnHeader> workbasketLevelReportColumnHeaders) {
super(
workbasketLevelReportColumnHeaders,
new String[] {"TASK CLASSIFICATION KEYS", "ATTACHMENT"});
new String[] {"TASK CLASSIFICATION", "ATTACHMENT"});
}
@Override

View File

@ -99,6 +99,11 @@ public abstract class Report<I extends QueryItem, H extends ColumnHeader<? super
items.forEach(this::addItem);
}
public final void augmentDisplayNames(Map<String, String> displayMap) {
reportRows.values().forEach(row -> row.setDisplayName(displayMap));
sumRow.setDisplayName(displayMap);
}
protected Row<I> createRow(String key, int columnSize) {
return new SingleRow<>(key, columnSize);
}

View File

@ -21,7 +21,7 @@ import pro.taskana.monitor.api.reports.item.MonitorQueryItem;
public class WorkbasketReport extends Report<MonitorQueryItem, TimeIntervalColumnHeader> {
public WorkbasketReport(List<TimeIntervalColumnHeader> timeIntervalColumnHeaders) {
super(timeIntervalColumnHeaders, new String[] {"WORKBASKET KEYS"});
super(timeIntervalColumnHeaders, new String[] {"WORKBASKET"});
}
/** Builder for {@link WorkbasketReport}. */

View File

@ -13,7 +13,7 @@ public class DetailedClassificationRow extends FoldableRow<DetailedMonitorQueryI
super(
key,
columnSize,
(item) -> item.getAttachmentKey() != null ? item.getAttachmentKey() : "N/A");
item -> item.getAttachmentKey() != null ? item.getAttachmentKey() : "N/A");
}
@Override

View File

@ -52,10 +52,20 @@ public abstract class FoldableRow<I extends QueryItem> extends SingleRow<I> {
.updateTotalValue(item);
}
@Override
public void setDisplayName(Map<String, String> displayMap) {
super.setDisplayName(displayMap);
foldableRows.values().forEach(row -> row.setDisplayName(displayMap));
}
public Row<I> getFoldableRow(String key) {
return foldableRows.get(key);
}
public Map<String, Row<I>> getFoldableRows() {
return foldableRows;
}
protected abstract Row<I> buildRow(String key, int columnSize);
@Override

View File

@ -1,5 +1,7 @@
package pro.taskana.monitor.api.reports.row;
import java.util.Map;
import pro.taskana.monitor.api.reports.Report;
import pro.taskana.monitor.api.reports.header.ColumnHeader;
import pro.taskana.monitor.api.reports.item.QueryItem;
@ -30,6 +32,10 @@ public interface Row<I extends QueryItem> {
String getKey();
String getDisplayName();
void setDisplayName(Map<String, String> displayMap);
int getTotalValue();
int[] getCells();

View File

@ -1,5 +1,7 @@
package pro.taskana.monitor.api.reports.row;
import java.util.Map;
import pro.taskana.monitor.api.reports.Report;
import pro.taskana.monitor.api.reports.header.ColumnHeader;
import pro.taskana.monitor.api.reports.item.QueryItem;
@ -13,11 +15,13 @@ import pro.taskana.monitor.api.reports.item.QueryItem;
public class SingleRow<I extends QueryItem> implements Row<I> {
private final int[] cells;
private int total = 0;
private final String key;
private int total = 0;
private String displayName;
public SingleRow(String key, int columnCount) {
this.key = key;
this.displayName = key;
cells = new int[columnCount];
}
@ -37,6 +41,16 @@ public class SingleRow<I extends QueryItem> implements Row<I> {
return key;
}
@Override
public String getDisplayName() {
return displayName;
}
@Override
public void setDisplayName(Map<String, String> displayMap) {
displayName = displayMap.getOrDefault(key, key);
}
@Override
public final int getTotalValue() {
return total;

View File

@ -19,8 +19,8 @@ import pro.taskana.task.api.CustomField;
/** This is the implementation of MonitorService. */
public class MonitorServiceImpl implements MonitorService {
private InternalTaskanaEngine taskanaEngine;
private MonitorMapper monitorMapper;
private final InternalTaskanaEngine taskanaEngine;
private final MonitorMapper monitorMapper;
public MonitorServiceImpl(InternalTaskanaEngine taskanaEngine, MonitorMapper monitorMapper) {
super();
@ -34,7 +34,7 @@ public class MonitorServiceImpl implements MonitorService {
}
@Override
public ClassificationCategoryReport.Builder createCategoryReportBuilder() {
public ClassificationCategoryReport.Builder createClassificationCategoryReportBuilder() {
return new ClassificationCategoryReportBuilderImpl(taskanaEngine, monitorMapper);
}

View File

@ -1,9 +1,14 @@
package pro.taskana.monitor.internal.reports;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import pro.taskana.classification.api.ClassificationService;
import pro.taskana.classification.api.models.ClassificationSummary;
import pro.taskana.common.api.TaskanaRole;
import pro.taskana.common.api.exceptions.InvalidArgumentException;
import pro.taskana.common.api.exceptions.NotAuthorizedException;
@ -15,6 +20,7 @@ import pro.taskana.monitor.api.reports.ClassificationReport.DetailedClassificati
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.Row;
import pro.taskana.monitor.internal.MonitorMapper;
import pro.taskana.monitor.internal.preprocessor.DaysToWorkingDaysReportPreProcessor;
@ -25,10 +31,12 @@ public class ClassificationReportBuilderImpl
private static final Logger LOGGER =
LoggerFactory.getLogger(ClassificationReportBuilderImpl.class);
private final ClassificationService classificationService;
public ClassificationReportBuilderImpl(
InternalTaskanaEngine taskanaEngine, MonitorMapper monitorMapper) {
super(taskanaEngine, monitorMapper);
classificationService = taskanaEngine.getEngine().getClassificationService();
}
@Override
@ -59,6 +67,17 @@ public class ClassificationReportBuilderImpl
monitorQueryItems,
new DaysToWorkingDaysReportPreProcessor<>(
this.columnHeaders, converter, this.inWorkingDays));
Map<String, String> displayMap =
classificationService
.createClassificationQuery()
.keyIn(report.getRows().keySet().toArray(new String[0]))
.domainIn(domains != null ? domains.toArray(new String[0]) : null)
.list()
.stream()
.collect(
Collectors.toMap(
ClassificationSummary::getKey, ClassificationSummary::getName, (a, b) -> a));
report.augmentDisplayNames(displayMap);
return report;
} finally {
this.taskanaEngine.returnConnection();
@ -95,7 +114,24 @@ public class ClassificationReportBuilderImpl
detailedMonitorQueryItems,
new DaysToWorkingDaysReportPreProcessor<>(
this.columnHeaders, converter, this.inWorkingDays));
Stream<String> attachmentKeys =
report.getRows().keySet().stream()
.map(report::getRow)
.flatMap(row -> row.getFoldableRows().values().stream())
.map(Row::getKey);
Map<String, String> displayMap =
classificationService
.createClassificationQuery()
.keyIn(
Stream.concat(attachmentKeys, report.getRows().keySet().stream())
.toArray(String[]::new))
.domainIn(domains != null ? domains.toArray(new String[0]) : null)
.list()
.stream()
.collect(
Collectors.toMap(
ClassificationSummary::getKey, ClassificationSummary::getName, (a, b) -> a));
report.augmentDisplayNames(displayMap);
return report;
} finally {
this.taskanaEngine.returnConnection();

View File

@ -16,8 +16,8 @@ import pro.taskana.task.api.TaskState;
public class TaskStatusReportBuilderImpl implements TaskStatusReport.Builder {
private static final Logger LOGGER = LoggerFactory.getLogger(TaskStatusReportBuilderImpl.class);
private InternalTaskanaEngine taskanaEngine;
private MonitorMapper monitorMapper;
private final InternalTaskanaEngine taskanaEngine;
private final MonitorMapper monitorMapper;
private List<String> domains;
private List<TaskState> states;

View File

@ -1,6 +1,8 @@
package pro.taskana.monitor.internal.reports;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -16,6 +18,8 @@ import pro.taskana.monitor.api.reports.header.TimeIntervalColumnHeader;
import pro.taskana.monitor.api.reports.item.MonitorQueryItem;
import pro.taskana.monitor.internal.MonitorMapper;
import pro.taskana.monitor.internal.preprocessor.DaysToWorkingDaysReportPreProcessor;
import pro.taskana.workbasket.api.WorkbasketService;
import pro.taskana.workbasket.api.models.WorkbasketSummary;
/** The implementation of WorkbasketReportBuilder. */
public class WorkbasketReportBuilderImpl
@ -23,11 +27,13 @@ public class WorkbasketReportBuilderImpl
implements WorkbasketReport.Builder {
private static final Logger LOGGER = LoggerFactory.getLogger(WorkbasketReportBuilderImpl.class);
private final WorkbasketService workbasketService;
private List<CombinedClassificationFilter> combinedClassificationFilter;
public WorkbasketReportBuilderImpl(
InternalTaskanaEngine taskanaEngine, MonitorMapper monitorMapper) {
super(taskanaEngine, monitorMapper);
workbasketService = taskanaEngine.getEngine().getWorkbasketService();
}
@Override
@ -58,6 +64,20 @@ public class WorkbasketReportBuilderImpl
monitorQueryItems,
new DaysToWorkingDaysReportPreProcessor<>(
this.columnHeaders, converter, this.inWorkingDays));
Map<String, String> displayMap =
taskanaEngine.runAsAdmin(
() ->
workbasketService
.createWorkbasketQuery()
.keyIn(report.getRows().keySet().toArray(new String[0]))
.domainIn(domains != null ? domains.toArray(new String[0]) : null)
.list()
.stream()
.collect(
Collectors.toMap(
WorkbasketSummary::getKey, WorkbasketSummary::getName, (a, b) -> a)));
report.augmentDisplayNames(displayMap);
return report;
} finally {
this.taskanaEngine.returnConnection();

View File

@ -72,7 +72,7 @@ class GetCustomAttributeValuesForReportAccTest extends AbstractReportAccTest {
List<String> values =
monitorService
.createCategoryReportBuilder()
.createClassificationCategoryReportBuilder()
.customAttributeFilterIn(customAttributeFilter)
.listCustomAttributeValuesForCustomAttributeName(CustomField.CUSTOM_16);
@ -88,7 +88,7 @@ class GetCustomAttributeValuesForReportAccTest extends AbstractReportAccTest {
List<String> values =
monitorService
.createCategoryReportBuilder()
.createClassificationCategoryReportBuilder()
.domainIn(domains)
.excludedClassificationIdIn(
Collections.singletonList("CLI:000000000000000000000000000000000003"))

View File

@ -34,7 +34,9 @@ class GetTaskIdsOfClassificationCategoryReportAccTest extends AbstractReportAccT
List<SelectedItem> selectedItems = new ArrayList<>();
ThrowingCallable call =
() -> {
monitorService.createCategoryReportBuilder().listTaskIdsForSelectedItems(selectedItems);
monitorService
.createClassificationCategoryReportBuilder()
.listTaskIdsForSelectedItems(selectedItems);
};
assertThatThrownBy(call).isInstanceOf(NotAuthorizedException.class);
}
@ -68,7 +70,7 @@ class GetTaskIdsOfClassificationCategoryReportAccTest extends AbstractReportAccT
List<String> ids =
monitorService
.createCategoryReportBuilder()
.createClassificationCategoryReportBuilder()
.withColumnHeaders(columnHeaders)
.inWorkingDays()
.listTaskIdsForSelectedItems(selectedItems);
@ -119,7 +121,7 @@ class GetTaskIdsOfClassificationCategoryReportAccTest extends AbstractReportAccT
List<String> ids =
monitorService
.createCategoryReportBuilder()
.createClassificationCategoryReportBuilder()
.withColumnHeaders(columnHeaders)
.inWorkingDays()
.workbasketIdIn(workbasketIds)
@ -163,7 +165,7 @@ class GetTaskIdsOfClassificationCategoryReportAccTest extends AbstractReportAccT
List<String> ids =
monitorService
.createCategoryReportBuilder()
.createClassificationCategoryReportBuilder()
.withColumnHeaders(columnHeaders)
.inWorkingDays()
.stateIn(states)
@ -208,7 +210,7 @@ class GetTaskIdsOfClassificationCategoryReportAccTest extends AbstractReportAccT
List<String> ids =
monitorService
.createCategoryReportBuilder()
.createClassificationCategoryReportBuilder()
.withColumnHeaders(columnHeaders)
.inWorkingDays()
.classificationCategoryIn(categories)
@ -251,7 +253,7 @@ class GetTaskIdsOfClassificationCategoryReportAccTest extends AbstractReportAccT
List<String> ids =
monitorService
.createCategoryReportBuilder()
.createClassificationCategoryReportBuilder()
.withColumnHeaders(columnHeaders)
.inWorkingDays()
.domainIn(domains)
@ -296,7 +298,7 @@ class GetTaskIdsOfClassificationCategoryReportAccTest extends AbstractReportAccT
List<String> ids =
monitorService
.createCategoryReportBuilder()
.createClassificationCategoryReportBuilder()
.withColumnHeaders(columnHeaders)
.inWorkingDays()
.customAttributeFilterIn(customAttributeFilter)
@ -330,7 +332,7 @@ class GetTaskIdsOfClassificationCategoryReportAccTest extends AbstractReportAccT
ThrowingCallable call =
() -> {
monitorService
.createCategoryReportBuilder()
.createClassificationCategoryReportBuilder()
.withColumnHeaders(columnHeaders)
.listTaskIdsForSelectedItems(selectedItems);
};

View File

@ -324,7 +324,7 @@ class GetTaskIdsOfCustomFieldValueReportAccTest extends AbstractReportAccTest {
ThrowingCallable call =
() -> {
monitorService
.createCategoryReportBuilder()
.createClassificationCategoryReportBuilder()
.withColumnHeaders(columnHeaders)
.listTaskIdsForSelectedItems(selectedItems);
};

View File

@ -37,15 +37,28 @@ class ProvideClassificationCategoryReportAccTest extends AbstractReportAccTest {
@Test
void testRoleCheck() {
assertThatThrownBy(() -> MONITOR_SERVICE.createCategoryReportBuilder().buildReport())
.isInstanceOf(NotAuthorizedException.class);
ThrowingCallable call =
() -> MONITOR_SERVICE.createClassificationCategoryReportBuilder().buildReport();
assertThatThrownBy(call).isInstanceOf(NotAuthorizedException.class);
}
@WithAccessId(user = "monitor")
@Test
void should_augmentDisplayNames_When_ReportIsBuild() throws Exception {
ClassificationCategoryReport report =
MONITOR_SERVICE.createClassificationCategoryReportBuilder().buildReport();
assertThat(report.getRows()).hasSize(3);
assertThat(report.getRow("AUTOMATIC").getDisplayName()).isEqualTo("AUTOMATIC");
assertThat(report.getRow("EXTERN").getDisplayName()).isEqualTo("EXTERN");
assertThat(report.getRow("MANUAL").getDisplayName()).isEqualTo("MANUAL");
}
@WithAccessId(user = "monitor")
@Test
void testGetTotalNumbersOfTasksOfCategoryReport() throws Exception {
ClassificationCategoryReport report =
MONITOR_SERVICE.createCategoryReportBuilder().buildReport();
MONITOR_SERVICE.createClassificationCategoryReportBuilder().buildReport();
assertThat(report).isNotNull();
assertThat(report.rowSize()).isEqualTo(3);
@ -66,7 +79,7 @@ class ProvideClassificationCategoryReportAccTest extends AbstractReportAccTest {
ClassificationCategoryReport report =
MONITOR_SERVICE
.createCategoryReportBuilder()
.createClassificationCategoryReportBuilder()
.withColumnHeaders(columnHeaders)
.inWorkingDays()
.buildReport();
@ -90,7 +103,7 @@ class ProvideClassificationCategoryReportAccTest extends AbstractReportAccTest {
ClassificationCategoryReport report =
MONITOR_SERVICE
.createCategoryReportBuilder()
.createClassificationCategoryReportBuilder()
.withColumnHeaders(columnHeaders)
.inWorkingDays()
.buildReport();
@ -115,7 +128,10 @@ class ProvideClassificationCategoryReportAccTest extends AbstractReportAccTest {
ThrowingConsumer<TaskTimestamp> test =
timestamp -> {
ThrowingCallable callable =
() -> MONITOR_SERVICE.createCategoryReportBuilder().buildReport(timestamp);
() ->
MONITOR_SERVICE
.createClassificationCategoryReportBuilder()
.buildReport(timestamp);
assertThatCode(callable).doesNotThrowAnyException();
};
return DynamicTest.stream(iterator, t -> "for TaskState " + t, test);
@ -128,7 +144,7 @@ class ProvideClassificationCategoryReportAccTest extends AbstractReportAccTest {
ClassificationCategoryReport report =
MONITOR_SERVICE
.createCategoryReportBuilder()
.createClassificationCategoryReportBuilder()
.withColumnHeaders(columnHeaders)
.inWorkingDays()
.buildReport(TaskTimestamp.PLANNED);
@ -153,7 +169,7 @@ class ProvideClassificationCategoryReportAccTest extends AbstractReportAccTest {
ClassificationCategoryReport report =
MONITOR_SERVICE
.createCategoryReportBuilder()
.createClassificationCategoryReportBuilder()
.withColumnHeaders(columnHeaders)
.buildReport();
@ -179,7 +195,7 @@ class ProvideClassificationCategoryReportAccTest extends AbstractReportAccTest {
ClassificationCategoryReport report =
MONITOR_SERVICE
.createCategoryReportBuilder()
.createClassificationCategoryReportBuilder()
.withColumnHeaders(columnHeaders)
.inWorkingDays()
.workbasketIdIn(workbasketIds)
@ -206,7 +222,7 @@ class ProvideClassificationCategoryReportAccTest extends AbstractReportAccTest {
ClassificationCategoryReport report =
MONITOR_SERVICE
.createCategoryReportBuilder()
.createClassificationCategoryReportBuilder()
.withColumnHeaders(columnHeaders)
.stateIn(states)
.inWorkingDays()
@ -233,7 +249,7 @@ class ProvideClassificationCategoryReportAccTest extends AbstractReportAccTest {
ClassificationCategoryReport report =
MONITOR_SERVICE
.createCategoryReportBuilder()
.createClassificationCategoryReportBuilder()
.withColumnHeaders(columnHeaders)
.classificationCategoryIn(categories)
.inWorkingDays()
@ -257,7 +273,7 @@ class ProvideClassificationCategoryReportAccTest extends AbstractReportAccTest {
ClassificationCategoryReport report =
MONITOR_SERVICE
.createCategoryReportBuilder()
.createClassificationCategoryReportBuilder()
.withColumnHeaders(columnHeaders)
.domainIn(domains)
.inWorkingDays()
@ -285,7 +301,7 @@ class ProvideClassificationCategoryReportAccTest extends AbstractReportAccTest {
ClassificationCategoryReport report =
MONITOR_SERVICE
.createCategoryReportBuilder()
.createClassificationCategoryReportBuilder()
.withColumnHeaders(columnHeaders)
.customAttributeFilterIn(customAttributeFilter)
.inWorkingDays()

View File

@ -41,6 +41,19 @@ class ProvideClassificationReportAccTest extends AbstractReportAccTest {
.isInstanceOf(NotAuthorizedException.class);
}
@WithAccessId(user = "monitor")
@Test
void should_augmentDisplayNames_When_ReportIsBuild() throws Exception {
ClassificationReport report = MONITOR_SERVICE.createClassificationReportBuilder().buildReport();
assertThat(report.getRows()).hasSize(5);
assertThat(report.getRow("L10000").getDisplayName()).isEqualTo("OLD-Leistungsfall");
assertThat(report.getRow("L20000").getDisplayName()).isEqualTo("Beratungsprotokoll");
assertThat(report.getRow("L30000").getDisplayName()).isEqualTo("Widerruf");
assertThat(report.getRow("L40000").getDisplayName()).isEqualTo("Dynamikaenderung");
assertThat(report.getRow("L50000").getDisplayName()).isEqualTo("Dynamik-Ablehnung");
}
@WithAccessId(user = "monitor")
@Test
void testGetTotalNumbersOfTasksOfClassificationReport() throws Exception {

View File

@ -44,6 +44,21 @@ class ProvideCustomFieldValueReportAccTest extends AbstractReportAccTest {
assertThatThrownBy(call).isInstanceOf(NotAuthorizedException.class);
}
@WithAccessId(user = "monitor")
@Test
void should_augmentDisplayNames_When_ReportIsBuild() throws Exception {
CustomFieldValueReport report =
MONITOR_SERVICE.createCustomFieldValueReportBuilder(CustomField.CUSTOM_1).buildReport();
assertThat(report.getRows()).hasSize(3);
assertThat(report.getRow("Geschaeftsstelle A").getDisplayName())
.isEqualTo("Geschaeftsstelle A");
assertThat(report.getRow("Geschaeftsstelle B").getDisplayName())
.isEqualTo("Geschaeftsstelle B");
assertThat(report.getRow("Geschaeftsstelle C").getDisplayName())
.isEqualTo("Geschaeftsstelle C");
}
@WithAccessId(user = "monitor")
@Test
void testGetTotalNumbersOfTasksOfCustomFieldValueReportForCustom1() throws Exception {

View File

@ -27,6 +27,7 @@ import pro.taskana.monitor.api.TaskTimestamp;
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.row.DetailedClassificationRow;
import pro.taskana.monitor.api.reports.row.FoldableRow;
import pro.taskana.monitor.api.reports.row.Row;
import pro.taskana.task.api.CustomField;
@ -45,6 +46,44 @@ class ProvideDetailedClassificationReportAccTest extends AbstractReportAccTest {
assertThatThrownBy(call).isInstanceOf(NotAuthorizedException.class);
}
@WithAccessId(user = "monitor")
@Test
void should_augmentDisplayNames_When_ReportIsBuild() throws Exception {
DetailedClassificationReport report =
MONITOR_SERVICE.createClassificationReportBuilder().buildDetailedReport();
assertThat(report.getRows()).hasSize(5);
DetailedClassificationRow row = report.getRow("L10000");
assertThat(row.getDisplayName()).isEqualTo("OLD-Leistungsfall");
assertThat(row.getFoldableRowCount()).isEqualTo(2);
assertThat(row.getFoldableRow("L11000").getDisplayName()).isEqualTo("Anhang 1");
assertThat(row.getFoldableRow("N/A").getDisplayName()).isEqualTo("N/A");
row = report.getRow("L20000");
assertThat(row.getDisplayName()).isEqualTo("Beratungsprotokoll");
assertThat(row.getFoldableRowCount()).isEqualTo(2);
assertThat(row.getFoldableRow("L22000").getDisplayName()).isEqualTo("Anhang 2");
assertThat(row.getFoldableRow("N/A").getDisplayName()).isEqualTo("N/A");
row = report.getRow("L30000");
assertThat(row.getDisplayName()).isEqualTo("Widerruf");
assertThat(row.getFoldableRowCount()).isEqualTo(3);
assertThat(row.getFoldableRow("L33000").getDisplayName()).isEqualTo("Anhang 3");
assertThat(row.getFoldableRow("L99000").getDisplayName()).isEqualTo("Anhang 9");
assertThat(row.getFoldableRow("N/A").getDisplayName()).isEqualTo("N/A");
row = report.getRow("L40000");
assertThat(row.getDisplayName()).isEqualTo("Dynamikaenderung");
assertThat(row.getFoldableRowCount()).isOne();
assertThat(row.getFoldableRow("N/A").getDisplayName()).isEqualTo("N/A");
row = report.getRow("L50000");
assertThat(row.getDisplayName()).isEqualTo("Dynamik-Ablehnung");
assertThat(row.getFoldableRowCount()).isOne();
assertThat(row.getFoldableRow("N/A").getDisplayName()).isEqualTo("N/A");
}
@WithAccessId(user = "monitor")
@Test
void testGetTotalNumbersOfTasksOfDetailedClassificationReport() throws Exception {

View File

@ -26,7 +26,7 @@ import pro.taskana.task.api.TaskState;
@ExtendWith(JaasExtension.class)
class ProvideTaskStatusReportAccTest extends AbstractReportAccTest {
MonitorService monitorService = taskanaEngine.getMonitorService();
private static final MonitorService MONITOR_SERVICE = taskanaEngine.getMonitorService();
@BeforeEach
void reset() throws Exception {
@ -35,7 +35,7 @@ class ProvideTaskStatusReportAccTest extends AbstractReportAccTest {
@Test
void should_ThrowException_IfUserIsNotAuthorized() {
assertThatThrownBy(() -> monitorService.createTaskStatusReportBuilder().buildReport())
assertThatThrownBy(() -> MONITOR_SERVICE.createTaskStatusReportBuilder().buildReport())
.isInstanceOf(NotAuthorizedException.class);
}
@ -45,7 +45,7 @@ class ProvideTaskStatusReportAccTest extends AbstractReportAccTest {
@WithAccessId(user = "taskadmin")
@TestTemplate
void should_ThrowException_IfUserIsNotAdminOrMonitor() {
assertThatThrownBy(() -> monitorService.createTaskStatusReportBuilder().buildReport())
assertThatThrownBy(() -> MONITOR_SERVICE.createTaskStatusReportBuilder().buildReport())
.isInstanceOf(NotAuthorizedException.class);
}
@ -53,14 +53,25 @@ class ProvideTaskStatusReportAccTest extends AbstractReportAccTest {
@WithAccessId(user = "monitor")
@TestTemplate
void should_BuildReport_IfUserIsAdminOrMonitor() {
assertThatCode(() -> monitorService.createTaskStatusReportBuilder().buildReport())
assertThatCode(() -> MONITOR_SERVICE.createTaskStatusReportBuilder().buildReport())
.doesNotThrowAnyException();
}
@WithAccessId(user = "monitor")
@Test
void should_augmentDisplayNames_When_ReportIsBuild() throws Exception {
TaskStatusReport report = MONITOR_SERVICE.createTaskStatusReportBuilder().buildReport();
assertThat(report.getRows()).hasSize(3);
assertThat(report.getRow("DOMAIN_A").getDisplayName()).isEqualTo("DOMAIN_A");
assertThat(report.getRow("DOMAIN_B").getDisplayName()).isEqualTo("DOMAIN_B");
assertThat(report.getRow("DOMAIN_C").getDisplayName()).isEqualTo("DOMAIN_C");
}
@WithAccessId(user = "monitor")
@Test
void testCompleteTaskStatusReport() throws Exception {
TaskStatusReport report = monitorService.createTaskStatusReportBuilder().buildReport();
TaskStatusReport report = MONITOR_SERVICE.createTaskStatusReportBuilder().buildReport();
assertThat(report).isNotNull();
assertThat(report.rowSize()).isEqualTo(3);
@ -86,7 +97,7 @@ class ProvideTaskStatusReportAccTest extends AbstractReportAccTest {
@Test
void testCompleteTaskStatusReportWithDomainFilter() throws Exception {
TaskStatusReport report =
monitorService
MONITOR_SERVICE
.createTaskStatusReportBuilder()
.domainIn(asList("DOMAIN_C", "DOMAIN_A"))
.buildReport();
@ -111,7 +122,7 @@ class ProvideTaskStatusReportAccTest extends AbstractReportAccTest {
@Test
void testCompleteTaskStatusReportWithStateFilter() throws Exception {
TaskStatusReport report =
monitorService
MONITOR_SERVICE
.createTaskStatusReportBuilder()
.stateIn(Collections.singletonList(TaskState.READY))
.buildReport();
@ -146,7 +157,7 @@ class ProvideTaskStatusReportAccTest extends AbstractReportAccTest {
taskService.cancelTask("TKI:000000000000000000000000000000000013");
taskService.cancelTask("TKI:000000000000000000000000000000000014");
TaskStatusReport report =
monitorService
MONITOR_SERVICE
.createTaskStatusReportBuilder()
.stateIn(
Arrays.asList(

View File

@ -24,6 +24,17 @@ import pro.taskana.monitor.api.reports.row.TimestampRow;
@ExtendWith(JaasExtension.class)
class ProvideTimestampReportAccTest extends AbstractReportAccTest {
private static final MonitorService MONITOR_SERVICE = taskanaEngine.getMonitorService();
@WithAccessId(user = "monitor")
@Test
void should_augmentDisplayNames_When_ReportIsBuild() throws Exception {
TimestampReport report = MONITOR_SERVICE.createTimestampReportBuilder().buildReport();
assertThat(report.getRows()).hasSize(2);
assertThat(report.getRow("CREATED").getDisplayName()).isEqualTo("CREATED");
assertThat(report.getRow("COMPLETED").getDisplayName()).isEqualTo("COMPLETED");
}
/**
* This test covers every insert operation of the TimestampReport. We have two definitions for org
* level 1: 'org1' and 'N/A'. All other org levels only contain 'N/A'. Thus this test only tests
@ -35,7 +46,6 @@ class ProvideTimestampReportAccTest extends AbstractReportAccTest {
@WithAccessId(user = "monitor")
@Test
void testProperInsertionOfQueryItems() throws Exception {
MonitorService monitorService = taskanaEngine.getMonitorService();
// last 14 days. Today excluded.
List<TimeIntervalColumnHeader> headers =
@ -43,7 +53,7 @@ class ProvideTimestampReportAccTest extends AbstractReportAccTest {
.mapToObj(TimeIntervalColumnHeader.Date::new)
.collect(Collectors.toList());
TimestampReport timestampReport =
monitorService.createTimestampReportBuilder().withColumnHeaders(headers).buildReport();
MONITOR_SERVICE.createTimestampReportBuilder().withColumnHeaders(headers).buildReport();
final HashSet<String> org1Set = new HashSet<>(Arrays.asList("N/A", "org1"));
final HashSet<String> allOtherOrgLevelSet = new HashSet<>(Collections.singletonList("N/A"));

View File

@ -11,7 +11,6 @@ import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.stream.IntStream;
import java.util.stream.Stream;
import org.assertj.core.api.ThrowableAssert.ThrowingCallable;
import org.junit.jupiter.api.DynamicTest;
@ -43,6 +42,16 @@ class ProvideWorkbasketReportAccTest extends AbstractReportAccTest {
.isInstanceOf(NotAuthorizedException.class);
}
@WithAccessId(user = "monitor")
@Test
void should_augmentDisplayNames_When_ReportIsBuild() throws Exception {
WorkbasketReport report = MONITOR_SERVICE.createWorkbasketReportBuilder().buildReport();
assertThat(report.getRows()).hasSize(3);
assertThat(report.getRow("USER-1-1").getDisplayName()).isEqualTo("PPK User 1 KSC 1");
assertThat(report.getRow("USER-1-2").getDisplayName()).isEqualTo("PPK User 1 KSC 2");
assertThat(report.getRow("USER-1-3").getDisplayName()).isEqualTo("PPK User 1 KSC 3");
}
@WithAccessId(user = "monitor")
@Test
void testGetTotalNumbersOfTasksOfWorkbasketReportBasedOnDueDate() throws Exception {
@ -70,8 +79,6 @@ class ProvideWorkbasketReportAccTest extends AbstractReportAccTest {
.inWorkingDays()
.buildReport();
final int sumLineCount = IntStream.of(report.getSumRow().getCells()).sum();
assertThat(report).isNotNull();
assertThat(report.rowSize()).isEqualTo(3);
@ -81,9 +88,7 @@ class ProvideWorkbasketReportAccTest extends AbstractReportAccTest {
int[] sumRow = report.getSumRow().getCells();
assertThat(sumRow).isEqualTo(new int[] {10, 9, 11, 0, 4, 0, 7, 4, 5});
assertThat(report.getSumRow().getTotalValue()).isEqualTo(50);
assertThat(sumLineCount).isEqualTo(50);
}
@WithAccessId(user = "monitor")

View File

@ -80,7 +80,7 @@ class ClassificationClassificationCategoryReportBuilderImplTest {
.thenReturn(expectedResult);
final ClassificationCategoryReport actualResult =
cut.createCategoryReportBuilder()
cut.createClassificationCategoryReportBuilder()
.workbasketIdIn(workbasketIds)
.stateIn(states)
.classificationCategoryIn(categories)
@ -140,7 +140,7 @@ class ClassificationClassificationCategoryReportBuilderImplTest {
.thenReturn(expectedResult);
final ClassificationCategoryReport actualResult =
cut.createCategoryReportBuilder()
cut.createClassificationCategoryReportBuilder()
.workbasketIdIn(workbasketIds)
.stateIn(states)
.classificationCategoryIn(categories)
@ -206,7 +206,7 @@ class ClassificationClassificationCategoryReportBuilderImplTest {
.thenReturn(expectedResult);
final List<String> actualResult =
cut.createCategoryReportBuilder()
cut.createClassificationCategoryReportBuilder()
.workbasketIdIn(workbasketIds)
.stateIn(states)
.classificationCategoryIn(categories)
@ -239,7 +239,7 @@ class ClassificationClassificationCategoryReportBuilderImplTest {
SelectedItem selectedItem = new SelectedItem();
List<SelectedItem> selectedItems = Collections.singletonList(selectedItem);
List<String> result =
cut.createCategoryReportBuilder().listTaskIdsForSelectedItems(selectedItems);
cut.createClassificationCategoryReportBuilder().listTaskIdsForSelectedItems(selectedItems);
assertThat(result).isNotNull();
}
@ -275,7 +275,7 @@ class ClassificationClassificationCategoryReportBuilderImplTest {
.thenReturn(expectedResult);
final List<String> actualResult =
cut.createCategoryReportBuilder()
cut.createClassificationCategoryReportBuilder()
.workbasketIdIn(workbasketIds)
.stateIn(states)
.classificationCategoryIn(categories)
@ -305,7 +305,7 @@ class ClassificationClassificationCategoryReportBuilderImplTest {
@Test
void testListCustomAttributeValuesForCustomAttributeNameIsEmptyResult() throws Exception {
List<String> result =
cut.createCategoryReportBuilder()
cut.createClassificationCategoryReportBuilder()
.workbasketIdIn(Collections.singletonList("DieGibtsSicherNed"))
.listCustomAttributeValuesForCustomAttributeName(CustomField.CUSTOM_1);
assertThat(result).isNotNull();

View File

@ -3,6 +3,7 @@ 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;
@ -22,6 +23,8 @@ 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;
@ -40,18 +43,26 @@ import pro.taskana.task.api.TaskState;
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
@ -82,6 +93,12 @@ class ClassificationReportBuilderImplTest {
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(Collections.emptyList());
final ClassificationReport actualResult =
cut.createClassificationReportBuilder()
.workbasketIdIn(workbasketIds)
@ -96,16 +113,15 @@ class ClassificationReportBuilderImplTest {
verify(internalTaskanaEngineMock).openConnection();
verify(taskanaEngineMock).checkRoleMembership(any());
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
verify(internalTaskanaEngineMock, times(2)).getEngine();
verify(taskanaEngineMock).getClassificationService();
verify(internalTaskanaEngineMock, times(3)).getEngine();
verify(monitorMapperMock)
.getTaskCountOfClassifications(any(), any(), any(), any(), any(), any(), any(), any());
verify(internalTaskanaEngineMock).returnConnection();
verifyNoMoreInteractions(
internalTaskanaEngineMock,
taskanaEngineMock,
monitorMapperMock,
taskanaEngineConfiguration);
verifyNoMoreInteractions(queryMock);
verifyNoMoreInteractions(mocks);
assertThat(actualResult).isNotNull();
assertThat(actualResult.getRow("CLI:000000000000000000000000000000000001").getTotalValue())
@ -144,6 +160,11 @@ class ClassificationReportBuilderImplTest {
excludedClassificationIds,
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(Collections.emptyList());
final ClassificationReport actualResult =
cut.createClassificationReportBuilder()
@ -160,16 +181,14 @@ class ClassificationReportBuilderImplTest {
verify(internalTaskanaEngineMock).openConnection();
verify(taskanaEngineMock).checkRoleMembership(any());
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
verify(internalTaskanaEngineMock, times(2)).getEngine();
verify(taskanaEngineMock).getClassificationService();
verify(internalTaskanaEngineMock, times(3)).getEngine();
verify(monitorMapperMock)
.getTaskCountOfClassifications(any(), any(), any(), any(), any(), any(), any(), any());
verify(internalTaskanaEngineMock).returnConnection();
verifyNoMoreInteractions(
internalTaskanaEngineMock,
taskanaEngineMock,
monitorMapperMock,
taskanaEngineConfiguration);
verifyNoMoreInteractions(queryMock);
verifyNoMoreInteractions(mocks);
assertThat(actualResult).isNotNull();
assertThat(actualResult.getRow("CLI:000000000000000000000000000000000001").getTotalValue())
@ -207,6 +226,11 @@ class ClassificationReportBuilderImplTest {
excludedClassificationIds,
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(Collections.emptyList());
final DetailedClassificationReport actualResult =
cut.createClassificationReportBuilder()
@ -222,17 +246,15 @@ class ClassificationReportBuilderImplTest {
verify(internalTaskanaEngineMock).openConnection();
verify(taskanaEngineMock).checkRoleMembership(any());
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
verify(internalTaskanaEngineMock, times(2)).getEngine();
verify(taskanaEngineMock).getClassificationService();
verify(internalTaskanaEngineMock, times(3)).getEngine();
verify(monitorMapperMock)
.getTaskCountOfDetailedClassifications(
any(), any(), any(), any(), any(), any(), any(), any());
verify(internalTaskanaEngineMock).returnConnection();
verifyNoMoreInteractions(
internalTaskanaEngineMock,
taskanaEngineMock,
monitorMapperMock,
taskanaEngineConfiguration);
verifyNoMoreInteractions(queryMock);
verifyNoMoreInteractions(mocks);
FoldableRow<DetailedMonitorQueryItem> line =
actualResult.getRow("CLI:000000000000000000000000000000000001");
@ -274,6 +296,11 @@ class ClassificationReportBuilderImplTest {
excludedClassificationIds,
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(Collections.emptyList());
final DetailedClassificationReport actualResult =
cut.createClassificationReportBuilder()
@ -290,17 +317,15 @@ class ClassificationReportBuilderImplTest {
verify(internalTaskanaEngineMock).openConnection();
verify(taskanaEngineMock).checkRoleMembership(any());
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
verify(internalTaskanaEngineMock, times(2)).getEngine();
verify(taskanaEngineMock).getClassificationService();
verify(internalTaskanaEngineMock, times(3)).getEngine();
verify(monitorMapperMock)
.getTaskCountOfDetailedClassifications(
any(), any(), any(), any(), any(), any(), any(), any());
verify(internalTaskanaEngineMock).returnConnection();
verifyNoMoreInteractions(
internalTaskanaEngineMock,
taskanaEngineMock,
monitorMapperMock,
taskanaEngineConfiguration);
verifyNoMoreInteractions(queryMock);
verifyNoMoreInteractions(mocks);
FoldableRow<DetailedMonitorQueryItem> line =
actualResult.getRow("CLI:000000000000000000000000000000000001");
@ -365,17 +390,14 @@ class ClassificationReportBuilderImplTest {
verify(internalTaskanaEngineMock).openConnection();
verify(taskanaEngineMock).checkRoleMembership(any());
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
verify(internalTaskanaEngineMock, times(2)).getEngine();
verify(internalTaskanaEngineMock, times(3)).getEngine();
verify(monitorMapperMock)
.getTaskIdsForSelectedItems(
any(), any(), any(), any(), any(), any(), any(), any(), any(), eq(false));
verify(internalTaskanaEngineMock).returnConnection();
verifyNoMoreInteractions(
internalTaskanaEngineMock,
taskanaEngineMock,
monitorMapperMock,
taskanaEngineConfiguration);
verify(taskanaEngineMock).getClassificationService();
verifyNoMoreInteractions(mocks);
assertThat(actualResult).isNotNull();
assertThat(actualResult).isEqualTo(expectedResult);
@ -439,16 +461,13 @@ class ClassificationReportBuilderImplTest {
verify(internalTaskanaEngineMock).openConnection();
verify(taskanaEngineMock).checkRoleMembership(any());
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
verify(internalTaskanaEngineMock, times(2)).getEngine();
verify(internalTaskanaEngineMock, times(3)).getEngine();
verify(monitorMapperMock)
.getCustomAttributeValuesForReport(any(), any(), any(), any(), any(), any(), any(), any());
verify(internalTaskanaEngineMock).returnConnection();
verifyNoMoreInteractions(
internalTaskanaEngineMock,
taskanaEngineMock,
monitorMapperMock,
taskanaEngineConfiguration);
verify(taskanaEngineMock).getClassificationService();
verifyNoMoreInteractions(mocks);
assertThat(actualResult).isNotNull();
assertThat(actualResult).isEqualTo(expectedResult);

View File

@ -5,6 +5,7 @@ import static org.assertj.core.api.Assertions.assertThat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
@ -235,6 +236,38 @@ class ReportTest {
assertThat(sumRow.getTotalValue()).isEqualTo(2 * item.getValue());
}
@Test
void should_FallBackToKey_When_DisplayMapDoesNotContainName() {
report.augmentDisplayNames(new HashMap<>());
assertThat(report.getSumRow().getDisplayName()).isEqualTo(report.getSumRow().getKey());
}
@Test
void should_SetDisplayName_When_DisplayMapContainsName() {
HashMap<String, String> displayMap = new HashMap<>();
displayMap.put(report.getSumRow().getKey(), "BLA BLA");
report.augmentDisplayNames(displayMap);
assertThat(report.getSumRow().getDisplayName()).isEqualTo("BLA BLA");
}
@Test
void should_SetDisplayNameForFoldableRows_When_DisplayMapContainsNames() {
ReportWithFoldableRow report =
new ReportWithFoldableRow(HEADERS, new String[] {"totalDesc", "foldalbeRowDesc"});
report.addItem(item);
HashMap<String, String> displayMap = new HashMap<>();
displayMap.put("key", "displayname for key");
displayMap.put("KEY", "displayname for KEY");
report.augmentDisplayNames(displayMap);
FoldableTestRow row = report.getRow("key");
assertThat(row.getDisplayName()).isEqualTo("displayname for key");
assertThat(row.getFoldableRow("KEY").getDisplayName()).isEqualTo("displayname for KEY");
}
private static class MonitorQueryItemTimeIntervalColumnHeaderReport
extends Report<MonitorQueryItem, TimeIntervalColumnHeader> {

View File

@ -86,6 +86,7 @@ class WorkbasketReportBuilderImplTest {
customAttributeFilter,
combinedClassificationFilter))
.thenReturn(expectedResult);
when(internalTaskanaEngineMock.runAsAdmin(any())).thenReturn(Collections.emptyMap());
final WorkbasketReport actualResult =
cut.createWorkbasketReportBuilder()
@ -102,10 +103,12 @@ class WorkbasketReportBuilderImplTest {
verify(internalTaskanaEngineMock).openConnection();
verify(taskanaEngineMock).checkRoleMembership(any());
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
verify(internalTaskanaEngineMock, times(2)).getEngine();
verify(internalTaskanaEngineMock, times(3)).getEngine();
verify(monitorMapperMock)
.getTaskCountOfWorkbaskets(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();
@ -150,6 +153,7 @@ class WorkbasketReportBuilderImplTest {
customAttributeFilter,
combinedClassificationFilter))
.thenReturn(expectedResult);
when(internalTaskanaEngineMock.runAsAdmin(any())).thenReturn(Collections.emptyMap());
final WorkbasketReport actualResult =
cut.createWorkbasketReportBuilder()
@ -167,10 +171,11 @@ class WorkbasketReportBuilderImplTest {
verify(internalTaskanaEngineMock).openConnection();
verify(taskanaEngineMock).checkRoleMembership(any());
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
verify(internalTaskanaEngineMock, times(2)).getEngine();
verify(internalTaskanaEngineMock, times(3)).getEngine();
verify(monitorMapperMock)
.getTaskCountOfWorkbaskets(any(), any(), any(), any(), any(), any(), any(), any(), any());
verify(internalTaskanaEngineMock).returnConnection();
verify(taskanaEngineMock).getWorkbasketService();
verifyNoMoreInteractions(internalTaskanaEngineMock, taskanaEngineMock, monitorMapperMock);
assertThat(actualResult).isNotNull();
@ -231,11 +236,12 @@ class WorkbasketReportBuilderImplTest {
verify(internalTaskanaEngineMock).openConnection();
verify(taskanaEngineMock).checkRoleMembership(any());
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
verify(internalTaskanaEngineMock, times(2)).getEngine();
verify(internalTaskanaEngineMock, times(3)).getEngine();
verify(monitorMapperMock)
.getTaskIdsForSelectedItems(
any(), any(), any(), any(), any(), any(), any(), any(), any(), eq(false));
verify(internalTaskanaEngineMock).returnConnection();
verify(taskanaEngineMock).getWorkbasketService();
verifyNoMoreInteractions(internalTaskanaEngineMock, taskanaEngineMock, monitorMapperMock);
assertThat(actualResult).isNotNull();
@ -302,10 +308,11 @@ class WorkbasketReportBuilderImplTest {
verify(internalTaskanaEngineMock).openConnection();
verify(taskanaEngineMock).checkRoleMembership(any());
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
verify(internalTaskanaEngineMock, times(2)).getEngine();
verify(internalTaskanaEngineMock, times(3)).getEngine();
verify(monitorMapperMock)
.getCustomAttributeValuesForReport(any(), any(), any(), any(), any(), any(), any(), any());
verify(internalTaskanaEngineMock).returnConnection();
verify(taskanaEngineMock).getWorkbasketService();
verifyNoMoreInteractions(internalTaskanaEngineMock, taskanaEngineMock, monitorMapperMock);
assertThat(actualResult).isNotNull();
@ -333,7 +340,7 @@ class WorkbasketReportBuilderImplTest {
Map<CustomField, String> customAttributeFilter = new HashMap<>();
customAttributeFilter.put(CustomField.CUSTOM_1, "Geschaeftsstelle A");
final List<CombinedClassificationFilter> combinedClassificationFilter =
Arrays.asList(
Collections.singletonList(
new CombinedClassificationFilter(
"CLI:000000000000000000000000000000000003",
"CLI:000000000000000000000000000000000008"));
@ -355,6 +362,8 @@ class WorkbasketReportBuilderImplTest {
combinedClassificationFilter))
.thenReturn(expectedResult);
when(internalTaskanaEngineMock.runAsAdmin(any())).thenReturn(Collections.emptyMap());
final WorkbasketReport actualResult =
cut.createWorkbasketReportBuilder()
.workbasketIdIn(workbasketIds)
@ -370,7 +379,7 @@ class WorkbasketReportBuilderImplTest {
verify(internalTaskanaEngineMock).openConnection();
verify(taskanaEngineMock).checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN);
verify(taskanaEngineMock).getWorkingDaysToDaysConverter();
verify(internalTaskanaEngineMock, times(2)).getEngine();
verify(internalTaskanaEngineMock, times(3)).getEngine();
verify(monitorMapperMock)
.getTaskCountOfWorkbaskets(
workbasketIds,
@ -383,6 +392,7 @@ class WorkbasketReportBuilderImplTest {
customAttributeFilter,
combinedClassificationFilter);
verify(internalTaskanaEngineMock).returnConnection();
verify(taskanaEngineMock).getWorkbasketService();
verifyNoMoreInteractions(internalTaskanaEngineMock, taskanaEngineMock, monitorMapperMock);
assertThat(actualResult).isNotNull();

View File

@ -107,18 +107,18 @@ public class ReportRepresentationModelAssembler {
// iterate over each Row and transform it to a RowResource while keeping the domain key.
List<ReportRepresentationModel.RowResource> rows =
report.getRows().entrySet().stream()
report.getRows().values().stream()
.sorted(Comparator.comparing(e -> e.getKey().toLowerCase()))
.map(
i ->
transformRow(
i.getValue(), i.getKey(), new String[report.getRowDesc().length], 0))
i, new String[report.getRowDesc().length], 0))
.flatMap(Collection::stream)
.collect(Collectors.toList());
List<ReportRepresentationModel.RowResource> sumRow =
transformRow(
report.getSumRow(), meta.getTotalDesc(), new String[report.getRowDesc().length], 0);
report.getSumRow(), new String[report.getRowDesc().length], 0);
return new ReportRepresentationModel(meta, rows, sumRow);
}
@ -129,36 +129,36 @@ public class ReportRepresentationModelAssembler {
}
private <I extends QueryItem> List<ReportRepresentationModel.RowResource> transformRow(
Row<I> row, String currentDesc, String[] desc, int depth) {
Row<I> row, String[] desc, int depth) {
// This is a very dirty solution.. Personally I'd prefer to use a visitor-like pattern here.
// The issue with that: Addition of the visitor code within taskana-core - and having clean code
// is not
// a reason to append code somewhere where it doesn't belong.
if (row.getClass() == SingleRow.class) {
return Collections.singletonList(
transformSingleRow((SingleRow<I>) row, currentDesc, desc, depth));
transformSingleRow((SingleRow<I>) row, desc, depth));
}
return transformFoldableRow((FoldableRow<I>) row, currentDesc, desc, depth);
return transformFoldableRow((FoldableRow<I>) row, desc, depth);
}
private <I extends QueryItem> ReportRepresentationModel.RowResource transformSingleRow(
SingleRow<I> row, String currentDesc, String[] previousRowDesc, int depth) {
SingleRow<I> row, String[] previousRowDesc, int depth) {
String[] rowDesc = new String[previousRowDesc.length];
System.arraycopy(previousRowDesc, 0, rowDesc, 0, depth);
rowDesc[depth] = currentDesc;
rowDesc[depth] = row.getDisplayName();
return new ReportRepresentationModel.RowResource(
row.getCells(), row.getTotalValue(), depth, rowDesc, depth == 0);
}
private <I extends QueryItem> List<ReportRepresentationModel.RowResource> transformFoldableRow(
FoldableRow<I> row, String currentDesc, String[] previousRowDesc, int depth) {
FoldableRow<I> row, String[] previousRowDesc, int depth) {
ReportRepresentationModel.RowResource baseRow =
transformSingleRow(row, currentDesc, previousRowDesc, depth);
transformSingleRow(row, previousRowDesc, depth);
List<ReportRepresentationModel.RowResource> rowList = new LinkedList<>();
rowList.add(baseRow);
row.getFoldableRowKeySet().stream()
.sorted(String.CASE_INSENSITIVE_ORDER)
.map(s -> transformRow(row.getFoldableRow(s), s, baseRow.getDesc(), depth + 1))
.map(s -> transformRow(row.getFoldableRow(s), baseRow.getDesc(), depth + 1))
.flatMap(Collection::stream)
.forEachOrdered(rowList::add);
return rowList;

View File

@ -94,7 +94,8 @@ public class ReportRepresentationModel extends RepresentationModel<ReportReprese
private final String[] rowDesc;
private final String totalDesc;
public MetaInformation(String name, String date, String[] header, String[] rowDesc, String totalDesc) {
public MetaInformation(
String name, String date, String[] header, String[] rowDesc, String totalDesc) {
this.name = name;
this.date = date;
this.header = header;

View File

@ -62,7 +62,7 @@ class ReportRepresentationModelTest {
ReportRepresentationModel.MetaInformation meta = resource.getMeta();
assertEquals("WorkbasketReport", meta.getName());
assertEquals("2019-01-02T00:00:00Z", meta.getDate());
assertArrayEquals(new String[] {"WORKBASKET KEYS"}, meta.getRowDesc());
assertArrayEquals(new String[] {"WORKBASKET"}, meta.getRowDesc());
assertArrayEquals(
headers.stream().map(TimeIntervalColumnHeader::getDisplayName).toArray(), meta.getHeader());
assertEquals("Total", meta.getTotalDesc());
@ -98,7 +98,7 @@ class ReportRepresentationModelTest {
ReportRepresentationModel.MetaInformation meta = resource.getMeta();
assertEquals("ClassificationReport", meta.getName());
assertEquals("2019-01-02T00:00:00Z", meta.getDate());
assertArrayEquals(new String[] {"CLASSIFICATION KEYS"}, meta.getRowDesc());
assertArrayEquals(new String[] {"CLASSIFICATION"}, meta.getRowDesc());
assertArrayEquals(
headers.stream().map(TimeIntervalColumnHeader::getDisplayName).toArray(), meta.getHeader());
assertEquals("Total", meta.getTotalDesc());
@ -144,7 +144,7 @@ class ReportRepresentationModelTest {
ReportRepresentationModel.MetaInformation meta = resource.getMeta();
assertEquals("ClassificationReport", meta.getName());
assertEquals("2019-01-02T00:00:00Z", meta.getDate());
assertArrayEquals(new String[] {"CLASSIFICATION KEYS"}, meta.getRowDesc());
assertArrayEquals(new String[] {"CLASSIFICATION"}, meta.getRowDesc());
assertArrayEquals(
headers.stream().map(TimeIntervalColumnHeader::getDisplayName).toArray(), meta.getHeader());
assertEquals("Total", meta.getTotalDesc());
@ -199,7 +199,7 @@ class ReportRepresentationModelTest {
ReportRepresentationModel.MetaInformation meta = resource.getMeta();
assertEquals("DetailedClassificationReport", meta.getName());
assertEquals("2019-01-02T00:00:00Z", meta.getDate());
assertArrayEquals(new String[] {"TASK CLASSIFICATION KEYS", "ATTACHMENT"}, meta.getRowDesc());
assertArrayEquals(new String[] {"TASK CLASSIFICATION", "ATTACHMENT"}, meta.getRowDesc());
assertArrayEquals(
headers.stream().map(TimeIntervalColumnHeader::getDisplayName).toArray(), meta.getHeader());
assertEquals("Total", meta.getTotalDesc());
@ -279,7 +279,7 @@ class ReportRepresentationModelTest {
ReportRepresentationModel.MetaInformation meta = resource.getMeta();
assertEquals("DetailedClassificationReport", meta.getName());
assertEquals("2019-01-02T00:00:00Z", meta.getDate());
assertArrayEquals(new String[] {"TASK CLASSIFICATION KEYS", "ATTACHMENT"}, meta.getRowDesc());
assertArrayEquals(new String[] {"TASK CLASSIFICATION", "ATTACHMENT"}, meta.getRowDesc());
assertArrayEquals(
headers.stream().map(TimeIntervalColumnHeader::getDisplayName).toArray(), meta.getHeader());
assertEquals("Total", meta.getTotalDesc());