TSK-1359: added workbasketIds filter for TaskStatusReport

This commit is contained in:
Mustapha Zorgati 2020-08-10 00:03:36 +02:00
parent 41973183bc
commit 588f34b468
5 changed files with 59 additions and 6 deletions

View File

@ -48,5 +48,14 @@ public class TaskStatusReport extends Report<TaskQueryItem, TaskStatusColumnHead
* @return the Builder
*/
Builder domainIn(List<String> domains);
/**
* Adds a list of workbasketIds to the builder. The created report contains only tasks from a
* workbakset in this list
*
* @param workbasketIds a list of workbasketIds
* @return the Builder
*/
Builder workbasketIdsIn(List<String> workbasketIds);
}
}

View File

@ -350,6 +350,9 @@ public interface MonitorMapper {
+ "<if test='states != null'>"
+ "AND STATE IN (<foreach collection='states' item='state' separator=','>#{state}</foreach>) "
+ "</if>"
+ "<if test='workbasketIds != null'>"
+ "AND WORKBASKET_ID IN (<foreach collection='workbasketIds' item='workbasketId' separator=','>#{workbasketId}</foreach>) "
+ "</if>"
+ "</where>"
+ "GROUP BY DOMAIN, STATE"
+ "</script>")
@ -359,7 +362,9 @@ public interface MonitorMapper {
@Result(column = "COUNT", property = "count"),
})
List<TaskQueryItem> getTasksCountByState(
@Param("domains") List<String> domains, @Param("states") List<TaskState> states);
@Param("domains") List<String> domains,
@Param("states") List<TaskState> states,
@Param("workbasketIds") List<String> workbasketIds);
@Select(
"<script>"

View File

@ -8,6 +8,7 @@ import pro.taskana.common.api.TaskanaRole;
import pro.taskana.common.api.exceptions.NotAuthorizedException;
import pro.taskana.common.internal.InternalTaskanaEngine;
import pro.taskana.monitor.api.reports.TaskStatusReport;
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;
@ -20,6 +21,7 @@ public class TaskStatusReportBuilderImpl implements TaskStatusReport.Builder {
private final MonitorMapper monitorMapper;
private List<String> domains;
private List<TaskState> states;
private List<String> workbasketIds;
public TaskStatusReportBuilderImpl(
InternalTaskanaEngine taskanaEngine, MonitorMapper monitorMapper) {
@ -34,7 +36,7 @@ public class TaskStatusReportBuilderImpl implements TaskStatusReport.Builder {
try {
this.taskanaEngine.openConnection();
List<TaskQueryItem> tasks =
this.monitorMapper.getTasksCountByState(this.domains, this.states);
this.monitorMapper.getTasksCountByState(this.domains, this.states, this.workbasketIds);
TaskStatusReport report = new TaskStatusReport(this.states);
report.addItems(tasks);
return report;
@ -55,4 +57,10 @@ public class TaskStatusReportBuilderImpl implements TaskStatusReport.Builder {
this.domains = domains;
return this;
}
@Override
public Builder workbasketIdsIn(List<String> workbasketIds) {
this.workbasketIds = workbasketIds;
return this;
}
}

View File

@ -172,4 +172,33 @@ class ProvideTaskStatusReportAccTest extends AbstractReportAccTest {
assertThat(summaryNumbers[3]).isEqualTo(2); // number of cancelled tasks
assertThat(summaryNumbers[4]).isEqualTo(3); // number of terminated tasks
}
@WithAccessId(user = "monitor")
@Test
void should_FilterTasksByWorkbasket_When_BuilderIsFilteredWithWorkbasketIds() throws Exception {
TaskStatusReport report =
MONITOR_SERVICE
.createTaskStatusReportBuilder()
.workbasketIdsIn(Collections.singletonList("WBI:000000000000000000000000000000000003"))
.buildReport();
assertThat(report).isNotNull();
assertThat(report.rowSize()).isEqualTo(3);
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> sumRow = report.getSumRow();
assertThat(sumRow.getCells()).isEqualTo(new int[] {4, 6, 0, 0, 0});
assertThat(sumRow.getTotalValue()).isEqualTo(10);
}
}

View File

@ -53,7 +53,7 @@ class TaskStatusReportBuilderImplTest {
queryItem2.setState(TaskState.COMPLETED);
queryItem2.setDomain("DOMAIN_X");
List<TaskQueryItem> queryItems = Arrays.asList(queryItem1, queryItem2);
when(monitorMapperMock.getTasksCountByState(null, null)).thenReturn(queryItems);
when(monitorMapperMock.getTasksCountByState(null, null, null)).thenReturn(queryItems);
// when
final TaskStatusReport report = cut.createTaskStatusReportBuilder().buildReport();
@ -63,7 +63,7 @@ class TaskStatusReportBuilderImplTest {
inOrder.verify(internalTaskanaEngineMock).getEngine();
inOrder.verify(taskanaEngineMock).checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN);
inOrder.verify(internalTaskanaEngineMock).openConnection();
inOrder.verify(monitorMapperMock).getTasksCountByState(eq(null), eq(null));
inOrder.verify(monitorMapperMock).getTasksCountByState(eq(null), eq(null), eq(null));
inOrder.verify(internalTaskanaEngineMock).returnConnection();
inOrder.verifyNoMoreInteractions();
verifyNoMoreInteractions(taskanaEngineMock, internalTaskanaEngineMock, monitorMapperMock);
@ -88,7 +88,7 @@ class TaskStatusReportBuilderImplTest {
queryItem2.setState(TaskState.COMPLETED);
queryItem2.setDomain("DOMAIN_X");
List<TaskQueryItem> queryItems = Arrays.asList(queryItem1, queryItem2);
when(monitorMapperMock.getTasksCountByState(eq(null), eq(Collections.emptyList())))
when(monitorMapperMock.getTasksCountByState(eq(null), eq(Collections.emptyList()), eq(null)))
.thenReturn(queryItems);
// when
@ -100,7 +100,9 @@ class TaskStatusReportBuilderImplTest {
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()));
inOrder
.verify(monitorMapperMock)
.getTasksCountByState(eq(null), eq(Collections.emptyList()), eq(null));
inOrder.verify(internalTaskanaEngineMock).returnConnection();
inOrder.verifyNoMoreInteractions();
verifyNoMoreInteractions(taskanaEngineMock, monitorMapperMock, internalTaskanaEngineMock);