Skip to content

Commit 6c2c6c6

Browse files
committed
Add tests
1 parent ca73014 commit 6c2c6c6

File tree

2 files changed

+94
-2
lines changed

2 files changed

+94
-2
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;
@@ -732,4 +736,21 @@ public void shouldReturnCorrectProcessExportDTOWithCorrectStats() throws Excepti
732736
// cleanup
733737
ProcessTestUtils.removeTestProcess(testProcessId);
734738
}
739+
740+
@Test
741+
public void shouldFindProcessIdsWithChildren() throws Exception {
742+
ProcessService processService = ServiceManager.getProcessService();
743+
List<Process> processes = processService.getAll();
744+
List<Integer> allIds = processes.stream()
745+
.map(Process::getId)
746+
.collect(Collectors.toList());
747+
Set<Integer> expected = processes.stream()
748+
.filter(p -> Objects.nonNull(p.getChildren()) && !p.getChildren().isEmpty())
749+
.map(Process::getId)
750+
.collect(Collectors.toSet());
751+
Set<Integer> actual = processService.findProcessIdsWithChildren(allIds);
752+
753+
assertEquals(expected.size(), actual.size(), "Unexpected number of parent processes");
754+
assertTrue(actual.containsAll(expected), "Returned parent process IDs do not match expected");
755+
}
735756
}

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

Lines changed: 73 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,23 @@
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

19-
import java.util.List;
20-
import java.util.Objects;
20+
import java.util.*;
2121
import java.util.stream.Collectors;
2222

2323
import org.junit.jupiter.api.AfterAll;
2424
import org.junit.jupiter.api.BeforeAll;
2525
import org.junit.jupiter.api.Test;
2626
import org.kitodo.MockDatabase;
27+
import org.kitodo.data.database.beans.Process;
2728
import org.kitodo.data.database.beans.Task;
2829
import org.kitodo.data.database.beans.User;
2930
import org.kitodo.data.database.enums.TaskStatus;
3031
import org.kitodo.data.database.exceptions.DAOException;
32+
import org.kitodo.data.database.persistence.TaskDAO;
3133
import org.kitodo.production.helper.Helper;
3234
import org.kitodo.production.services.ServiceManager;
3335

@@ -294,4 +296,73 @@ public void shouldGetTasksInProgressForUser() throws Exception {
294296
assertEquals(expected.size(), actual.size(), "Unexpected task count");
295297
assertTrue(actual.containsAll(expected), "Returned tasks do not match expected INWORK tasks");
296298
}
299+
300+
@Test
301+
public void shouldLoadTaskTitlesForProcesses() throws Exception {
302+
List<Integer> ids = List.of(1, 2);
303+
Map<Integer, Map<TaskStatus, List<String>>> actualMap = taskService.loadTaskTitlesForProcesses(ids);
304+
305+
for (Integer id : ids) {
306+
Process p = ServiceManager.getProcessService().getById(id);
307+
Map<TaskStatus, List<String>> processResults = actualMap.get(id);
308+
309+
for (TaskStatus status : List.of(TaskStatus.OPEN, TaskStatus.INWORK)) {
310+
List<String> expected = p.getTasks().stream()
311+
.filter(t -> t.getProcessingStatus() == status)
312+
.map(Task::getTitle)
313+
.collect(Collectors.toList());
314+
315+
List<String> actual = processResults.getOrDefault(status, List.of());
316+
317+
assertEquals(expected.size(), actual.size(), "Size mismatch for " + status);
318+
assertTrue(actual.containsAll(expected), "Content mismatch for " + status);
319+
}
320+
}
321+
}
322+
323+
@Test
324+
public void shouldLoadTaskStatusCountsForProcesses() throws Exception {
325+
TaskDAO dao = new TaskDAO();
326+
List<Process> processes = ServiceManager.getProcessService().getAll();
327+
328+
List<Integer> rootIds = processes.stream()
329+
.map(Process::getId)
330+
.collect(Collectors.toList());
331+
332+
Map<Integer, EnumMap<TaskStatus, Integer>> actual =
333+
dao.loadTaskStatusCountsForProcesses(rootIds);
334+
335+
for (Process root : processes) {
336+
EnumMap<TaskStatus, Integer> expected = new EnumMap<>(TaskStatus.class);
337+
for (TaskStatus s : TaskStatus.values()) {
338+
expected.put(s, 0);
339+
}
340+
collectCounts(root, expected);
341+
EnumMap<TaskStatus, Integer> actualCounts = actual.get(root.getId());
342+
assertNotNull(actualCounts, "No result returned for process " + root.getId());
343+
344+
for (TaskStatus status : TaskStatus.values()) {
345+
assertEquals(
346+
expected.get(status),
347+
actualCounts.get(status),
348+
"Mismatch for process " + root.getId() + " and status " + status
349+
);
350+
}
351+
}
352+
}
353+
354+
private void collectCounts(Process process, EnumMap<TaskStatus, Integer> counts) {
355+
if (Objects.isNull(process)) {
356+
return;
357+
}
358+
for (Task task : process.getTasks()) {
359+
counts.merge(task.getProcessingStatus(), 1, Integer::sum);
360+
}
361+
if (Objects.nonNull(process.getChildren())) {
362+
for (Process child : process.getChildren()) {
363+
collectCounts(child, counts);
364+
}
365+
}
366+
}
367+
297368
}

0 commit comments

Comments
 (0)