TSK-1360: replaced domains with workbasketKey for TaskStatusReport

This commit is contained in:
Mustapha Zorgati 2020-08-10 00:49:26 +02:00
parent 588f34b468
commit afad58132d
5 changed files with 90 additions and 60 deletions

View File

@ -7,12 +7,12 @@ import pro.taskana.task.api.TaskState;
*/
public class TaskQueryItem implements QueryItem {
private String domain;
private String workbasketKey;
private TaskState state;
private int count;
public void setDomain(String domain) {
this.domain = domain;
public void setWorkbasketKey(String workbasketKey) {
this.workbasketKey = workbasketKey;
}
public void setCount(int count) {
@ -29,7 +29,7 @@ public class TaskQueryItem implements QueryItem {
@Override
public String getKey() {
return domain;
return workbasketKey;
}
@Override
@ -41,7 +41,7 @@ public class TaskQueryItem implements QueryItem {
public String toString() {
return "TaskQueryItem ["
+ "domain= "
+ this.domain
+ this.workbasketKey
+ ", state= "
+ this.state.name()
+ ", count= "

View File

@ -341,7 +341,7 @@ public interface MonitorMapper {
@Select(
"<script>"
+ "SELECT DOMAIN, STATE, COUNT(STATE) as COUNT "
+ "SELECT WORKBASKET_KEY, STATE, COUNT(STATE) as COUNT "
+ "FROM TASK "
+ "<where>"
+ "<if test='domains != null'>"
@ -354,10 +354,10 @@ public interface MonitorMapper {
+ "AND WORKBASKET_ID IN (<foreach collection='workbasketIds' item='workbasketId' separator=','>#{workbasketId}</foreach>) "
+ "</if>"
+ "</where>"
+ "GROUP BY DOMAIN, STATE"
+ "GROUP BY WORKBASKET_KEY, STATE"
+ "</script>")
@Results({
@Result(column = "DOMAIN", property = "domain"),
@Result(column = "WORKBASKET_KEY", property = "workbasketKey"),
@Result(column = "STATE", property = "state"),
@Result(column = "COUNT", property = "count"),
})

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;
@ -12,6 +14,8 @@ import pro.taskana.monitor.api.reports.TaskStatusReport.Builder;
import pro.taskana.monitor.api.reports.item.TaskQueryItem;
import pro.taskana.monitor.internal.MonitorMapper;
import pro.taskana.task.api.TaskState;
import pro.taskana.workbasket.api.WorkbasketService;
import pro.taskana.workbasket.api.models.WorkbasketSummary;
/** The implementation of TaskStatusReportBuilder. */
public class TaskStatusReportBuilderImpl implements TaskStatusReport.Builder {
@ -19,6 +23,7 @@ public class TaskStatusReportBuilderImpl implements TaskStatusReport.Builder {
private static final Logger LOGGER = LoggerFactory.getLogger(TaskStatusReportBuilderImpl.class);
private final InternalTaskanaEngine taskanaEngine;
private final MonitorMapper monitorMapper;
private final WorkbasketService workbasketService;
private List<String> domains;
private List<TaskState> states;
private List<String> workbasketIds;
@ -27,6 +32,7 @@ public class TaskStatusReportBuilderImpl implements TaskStatusReport.Builder {
InternalTaskanaEngine taskanaEngine, MonitorMapper monitorMapper) {
this.taskanaEngine = taskanaEngine;
this.monitorMapper = monitorMapper;
this.workbasketService = taskanaEngine.getEngine().getWorkbasketService();
}
@Override
@ -39,6 +45,19 @@ public class TaskStatusReportBuilderImpl implements TaskStatusReport.Builder {
this.monitorMapper.getTasksCountByState(this.domains, this.states, this.workbasketIds);
TaskStatusReport report = new TaskStatusReport(this.states);
report.addItems(tasks);
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

@ -63,9 +63,9 @@ class ProvideTaskStatusReportAccTest extends AbstractReportAccTest {
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");
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")
@ -76,17 +76,17 @@ class ProvideTaskStatusReportAccTest extends AbstractReportAccTest {
assertThat(report).isNotNull();
assertThat(report.rowSize()).isEqualTo(3);
Row<TaskQueryItem> row1 = report.getRow("DOMAIN_A");
assertThat(row1.getCells()).isEqualTo(new int[] {22, 4, 0, 0, 0});
assertThat(row1.getTotalValue()).isEqualTo(26);
Row<TaskQueryItem> row1 = report.getRow("USER-1-1");
assertThat(row1.getCells()).isEqualTo(new int[] {18, 2, 0, 0, 0});
assertThat(row1.getTotalValue()).isEqualTo(20);
Row<TaskQueryItem> row2 = report.getRow("DOMAIN_B");
assertThat(row2.getCells()).isEqualTo(new int[] {9, 3, 0, 0, 0});
assertThat(row2.getTotalValue()).isEqualTo(12);
Row<TaskQueryItem> row2 = report.getRow("USER-1-2");
assertThat(row2.getCells()).isEqualTo(new int[] {19, 1, 0, 0, 0});
assertThat(row2.getTotalValue()).isEqualTo(20);
Row<TaskQueryItem> row3 = report.getRow("DOMAIN_C");
assertThat(row3.getCells()).isEqualTo(new int[] {10, 2, 0, 0, 0});
assertThat(row3.getTotalValue()).isEqualTo(12);
Row<TaskQueryItem> row3 = report.getRow("USER-1-3");
assertThat(row3.getCells()).isEqualTo(new int[] {4, 6, 0, 0, 0});
assertThat(row3.getTotalValue()).isEqualTo(10);
Row<TaskQueryItem> sumRow = report.getSumRow();
assertThat(sumRow.getCells()).isEqualTo(new int[] {41, 9, 0, 0, 0});
@ -103,15 +103,19 @@ class ProvideTaskStatusReportAccTest extends AbstractReportAccTest {
.buildReport();
assertThat(report).isNotNull();
assertThat(report.rowSize()).isEqualTo(2);
assertThat(report.rowSize()).isEqualTo(3);
Row<TaskQueryItem> row1 = report.getRow("DOMAIN_A");
assertThat(row1.getCells()).isEqualTo(new int[] {22, 4, 0, 0, 0});
assertThat(row1.getTotalValue()).isEqualTo(26);
Row<TaskQueryItem> row1 = report.getRow("USER-1-1");
assertThat(row1.getCells()).isEqualTo(new int[] {15, 2, 0, 0, 0});
assertThat(row1.getTotalValue()).isEqualTo(17);
Row<TaskQueryItem> row2 = report.getRow("DOMAIN_C");
assertThat(row2.getCells()).isEqualTo(new int[] {10, 2, 0, 0, 0});
assertThat(row2.getTotalValue()).isEqualTo(12);
Row<TaskQueryItem> row2 = report.getRow("USER-1-2");
assertThat(row2.getCells()).isEqualTo(new int[] {14, 1, 0, 0, 0});
assertThat(row2.getTotalValue()).isEqualTo(15);
Row<TaskQueryItem> row3 = report.getRow("USER-1-3");
assertThat(row3.getCells()).isEqualTo(new int[] {3, 3, 0, 0, 0});
assertThat(row3.getTotalValue()).isEqualTo(6);
Row<TaskQueryItem> sumRow = report.getSumRow();
assertThat(sumRow.getCells()).isEqualTo(new int[] {32, 6, 0, 0, 0});
@ -130,17 +134,17 @@ class ProvideTaskStatusReportAccTest extends AbstractReportAccTest {
assertThat(report).isNotNull();
assertThat(report.rowSize()).isEqualTo(3);
Row<TaskQueryItem> row1 = report.getRow("DOMAIN_A");
assertThat(row1.getCells()).isEqualTo(new int[] {22});
assertThat(row1.getTotalValue()).isEqualTo(22);
Row<TaskQueryItem> row1 = report.getRow("USER-1-1");
assertThat(row1.getCells()).isEqualTo(new int[] {18});
assertThat(row1.getTotalValue()).isEqualTo(18);
Row<TaskQueryItem> row2 = report.getRow("DOMAIN_B");
assertThat(row2.getCells()).isEqualTo(new int[] {9});
assertThat(row2.getTotalValue()).isEqualTo(9);
Row<TaskQueryItem> row2 = report.getRow("USER-1-2");
assertThat(row2.getCells()).isEqualTo(new int[] {19});
assertThat(row2.getTotalValue()).isEqualTo(19);
Row<TaskQueryItem> row3 = report.getRow("DOMAIN_C");
assertThat(row3.getCells()).isEqualTo(new int[] {10});
assertThat(row3.getTotalValue()).isEqualTo(10);
Row<TaskQueryItem> row3 = report.getRow("USER-1-3");
assertThat(row3.getCells()).isEqualTo(new int[] {4});
assertThat(row3.getTotalValue()).isEqualTo(4);
Row<TaskQueryItem> sumRow = report.getSumRow();
assertThat(sumRow.getCells()).isEqualTo(new int[] {41});
@ -183,19 +187,11 @@ class ProvideTaskStatusReportAccTest extends AbstractReportAccTest {
.buildReport();
assertThat(report).isNotNull();
assertThat(report.rowSize()).isEqualTo(3);
assertThat(report.rowSize()).isEqualTo(1);
Row<TaskQueryItem> row1 = report.getRow("DOMAIN_A");
assertThat(row1.getCells()).isEqualTo(new int[] {2, 2, 0, 0, 0});
assertThat(row1.getTotalValue()).isEqualTo(4);
Row<TaskQueryItem> row2 = report.getRow("DOMAIN_B");
assertThat(row2.getCells()).isEqualTo(new int[] {1, 3, 0, 0, 0});
assertThat(row2.getTotalValue()).isEqualTo(4);
Row<TaskQueryItem> row3 = report.getRow("DOMAIN_C");
assertThat(row3.getCells()).isEqualTo(new int[] {1, 1, 0, 0, 0});
assertThat(row3.getTotalValue()).isEqualTo(2);
Row<TaskQueryItem> row1 = report.getRow("USER-1-3");
assertThat(row1.getCells()).isEqualTo(new int[] {4, 6, 0, 0, 0});
assertThat(row1.getTotalValue()).isEqualTo(10);
Row<TaskQueryItem> sumRow = report.getSumRow();
assertThat(sumRow.getCells()).isEqualTo(new int[] {4, 6, 0, 0, 0});

View File

@ -1,6 +1,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.inOrder;
import static org.mockito.Mockito.verifyNoMoreInteractions;
@ -23,6 +24,7 @@ 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)
@ -36,9 +38,18 @@ class TaskStatusReportBuilderImplTest {
@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
@ -47,32 +58,34 @@ class TaskStatusReportBuilderImplTest {
TaskQueryItem queryItem1 = new TaskQueryItem();
queryItem1.setCount(50);
queryItem1.setState(TaskState.READY);
queryItem1.setDomain("DOMAIN_X");
queryItem1.setWorkbasketKey("KEY_1");
TaskQueryItem queryItem2 = new TaskQueryItem();
queryItem2.setCount(30);
queryItem2.setState(TaskState.COMPLETED);
queryItem2.setDomain("DOMAIN_X");
queryItem2.setWorkbasketKey("KEY_1");
List<TaskQueryItem> queryItems = Arrays.asList(queryItem1, queryItem2);
when(monitorMapperMock.getTasksCountByState(null, null, null)).thenReturn(queryItems);
when(internalTaskanaEngineMock.runAsAdmin(any())).thenReturn(Collections.emptyMap());
// when
final TaskStatusReport report = cut.createTaskStatusReportBuilder().buildReport();
// then
InOrder inOrder = inOrder(taskanaEngineMock, internalTaskanaEngineMock, monitorMapperMock);
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(taskanaEngineMock, internalTaskanaEngineMock, monitorMapperMock);
verifyNoMoreInteractions(mocks);
assertThat(report).isNotNull();
assertThat(report.rowSize()).isEqualTo(1);
assertThat(report.getRow("DOMAIN_X").getCells()).isEqualTo(new int[] {50, 0, 30, 0, 0});
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("DOMAIN_X").getTotalValue()).isEqualTo(80);
assertThat(report.getRow("KEY_1").getTotalValue()).isEqualTo(80);
assertThat(report.getSumRow().getTotalValue()).isEqualTo(80);
}
@ -82,36 +95,38 @@ class TaskStatusReportBuilderImplTest {
TaskQueryItem queryItem1 = new TaskQueryItem();
queryItem1.setCount(50);
queryItem1.setState(TaskState.READY);
queryItem1.setDomain("DOMAIN_X");
queryItem1.setWorkbasketKey("KEY_1");
TaskQueryItem queryItem2 = new TaskQueryItem();
queryItem2.setCount(30);
queryItem2.setState(TaskState.COMPLETED);
queryItem2.setDomain("DOMAIN_X");
queryItem2.setWorkbasketKey("KEY_1");
List<TaskQueryItem> queryItems = Arrays.asList(queryItem1, queryItem2);
when(monitorMapperMock.getTasksCountByState(eq(null), eq(Collections.emptyList()), eq(null)))
.thenReturn(queryItems);
when(internalTaskanaEngineMock.runAsAdmin(any())).thenReturn(Collections.emptyMap());
// when
final TaskStatusReport report =
cut.createTaskStatusReportBuilder().stateIn(Collections.emptyList()).buildReport();
// then
InOrder inOrder = inOrder(taskanaEngineMock, monitorMapperMock, internalTaskanaEngineMock);
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(Collections.emptyList()), eq(null));
inOrder.verify(internalTaskanaEngineMock).runAsAdmin(any());
inOrder.verify(internalTaskanaEngineMock).returnConnection();
inOrder.verifyNoMoreInteractions();
verifyNoMoreInteractions(taskanaEngineMock, monitorMapperMock, internalTaskanaEngineMock);
verifyNoMoreInteractions(mocks);
assertThat(report).isNotNull();
assertThat(report.rowSize()).isEqualTo(1);
assertThat(report.getRow("DOMAIN_X").getCells()).isEqualTo(new int[0]);
assertThat(report.getRow("KEY_1").getCells()).isEqualTo(new int[0]);
assertThat(report.getSumRow().getCells()).isEqualTo(new int[0]);
assertThat(report.getRow("DOMAIN_X").getTotalValue()).isEqualTo(80);
assertThat(report.getRow("KEY_1").getTotalValue()).isEqualTo(80);
assertThat(report.getSumRow().getTotalValue()).isEqualTo(80);
}
}