Skip to content

Commit ea6f2a5

Browse files
committed
Add tests
1 parent 026253a commit ea6f2a5

File tree

2 files changed

+97
-0
lines changed

2 files changed

+97
-0
lines changed

Kitodo/src/test/java/org/kitodo/production/services/data/ProcessServiceIT.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@
2828
import java.util.Collections;
2929
import java.util.List;
3030
import java.util.Map;
31+
import java.util.Objects;
32+
import java.util.Set;
33+
34+
import java.util.stream.Collectors;
3135

3236
import org.apache.commons.lang3.SystemUtils;
3337
import org.junit.jupiter.api.AfterAll;
@@ -730,4 +734,21 @@ public void shouldReturnCorrectProcessExportDTOWithCorrectStats() throws Excepti
730734
// cleanup
731735
ProcessTestUtils.removeTestProcess(testProcessId);
732736
}
737+
738+
@Test
739+
public void shouldFindProcessIdsWithChildren() throws Exception {
740+
ProcessService processService = ServiceManager.getProcessService();
741+
List<Process> processes = processService.getAll();
742+
List<Integer> allIds = processes.stream()
743+
.map(Process::getId)
744+
.collect(Collectors.toList());
745+
Set<Integer> expected = processes.stream()
746+
.filter(p -> Objects.nonNull(p.getChildren()) && !p.getChildren().isEmpty())
747+
.map(Process::getId)
748+
.collect(Collectors.toSet());
749+
Set<Integer> actual = processService.findProcessIdsWithChildren(allIds);
750+
751+
assertEquals(expected.size(), actual.size(), "Unexpected number of parent processes");
752+
assertTrue(actual.containsAll(expected), "Returned parent process IDs do not match expected");
753+
}
733754
}

Kitodo/src/test/java/org/kitodo/production/services/data/TaskServiceIT.java

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,26 @@
1313

1414
import static org.awaitility.Awaitility.await;
1515
import static org.junit.jupiter.api.Assertions.assertEquals;
16+
import static org.junit.jupiter.api.Assertions.assertNotNull;
1617
import static org.junit.jupiter.api.Assertions.assertThrows;
1718
import static org.junit.jupiter.api.Assertions.assertTrue;
1819

20+
import java.util.EnumMap;
1921
import java.util.List;
22+
import java.util.Map;
23+
import java.util.Objects;
24+
import java.util.stream.Collectors;
2025

2126
import org.junit.jupiter.api.AfterAll;
2227
import org.junit.jupiter.api.BeforeAll;
2328
import org.junit.jupiter.api.Test;
2429
import org.kitodo.MockDatabase;
30+
import org.kitodo.data.database.beans.Process;
2531
import org.kitodo.data.database.beans.Task;
32+
import org.kitodo.data.database.beans.User;
2633
import org.kitodo.data.database.enums.TaskStatus;
2734
import org.kitodo.data.database.exceptions.DAOException;
35+
import org.kitodo.data.database.persistence.TaskDAO;
2836
import org.kitodo.production.helper.Helper;
2937
import org.kitodo.production.services.ServiceManager;
3038

@@ -272,4 +280,72 @@ public void shouldFindDistinctTitles() throws Exception {
272280
title = taskTitlesDistinct.get(2);
273281
assertEquals("Closed", title, "Incorrect sorting of distinct titles for tasks!");
274282
}
283+
284+
@Test
285+
public void shouldLoadTaskTitlesForProcesses() throws Exception {
286+
List<Integer> ids = List.of(1, 2);
287+
Map<Integer, Map<TaskStatus, List<String>>> actualMap = taskService.loadTaskTitlesForProcesses(ids);
288+
289+
for (Integer id : ids) {
290+
Process p = ServiceManager.getProcessService().getById(id);
291+
Map<TaskStatus, List<String>> processResults = actualMap.get(id);
292+
293+
for (TaskStatus status : List.of(TaskStatus.OPEN, TaskStatus.INWORK)) {
294+
List<String> expected = p.getTasks().stream()
295+
.filter(t -> t.getProcessingStatus() == status)
296+
.map(Task::getTitle)
297+
.collect(Collectors.toList());
298+
299+
List<String> actual = processResults.getOrDefault(status, List.of());
300+
301+
assertEquals(expected.size(), actual.size(), "Size mismatch for " + status);
302+
assertTrue(actual.containsAll(expected), "Content mismatch for " + status);
303+
}
304+
}
305+
}
306+
307+
@Test
308+
public void shouldLoadTaskStatusCountsForProcesses() throws Exception {
309+
TaskDAO dao = new TaskDAO();
310+
List<Process> processes = ServiceManager.getProcessService().getAll();
311+
312+
List<Integer> rootIds = processes.stream()
313+
.map(Process::getId)
314+
.collect(Collectors.toList());
315+
316+
Map<Integer, EnumMap<TaskStatus, Integer>> actual =
317+
dao.loadTaskStatusCountsForProcesses(rootIds);
318+
319+
for (Process root : processes) {
320+
EnumMap<TaskStatus, Integer> expected = new EnumMap<>(TaskStatus.class);
321+
for (TaskStatus s : TaskStatus.values()) {
322+
expected.put(s, 0);
323+
}
324+
collectCounts(root, expected);
325+
EnumMap<TaskStatus, Integer> actualCounts = actual.get(root.getId());
326+
assertNotNull(actualCounts, "No result returned for process " + root.getId());
327+
328+
for (TaskStatus status : TaskStatus.values()) {
329+
assertEquals(
330+
expected.get(status),
331+
actualCounts.get(status),
332+
"Mismatch for process " + root.getId() + " and status " + status
333+
);
334+
}
335+
}
336+
}
337+
338+
private void collectCounts(Process process, EnumMap<TaskStatus, Integer> counts) {
339+
if (Objects.isNull(process)) {
340+
return;
341+
}
342+
for (Task task : process.getTasks()) {
343+
counts.merge(task.getProcessingStatus(), 1, Integer::sum);
344+
}
345+
if (Objects.nonNull(process.getChildren())) {
346+
for (Process child : process.getChildren()) {
347+
collectCounts(child, counts);
348+
}
349+
}
350+
}
275351
}

0 commit comments

Comments
 (0)