feat(dashboard): add contributors to TranscriptionQueueItemDTO with 5-cap and hasMore flag

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Marcel
2026-04-19 18:44:26 +02:00
committed by marcel
parent 20cac8f6d9
commit 812053cd6b
4 changed files with 85 additions and 25 deletions

View File

@@ -17,6 +17,8 @@ import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.test.context.bean.override.mockito.MockitoBean;
import org.springframework.test.web.servlet.MockMvc;
import org.raddatz.familienarchiv.dashboard.ActivityActorDTO;
import java.time.LocalDate;
import java.util.List;
import java.util.UUID;
@@ -41,7 +43,9 @@ class TranscriptionQueueControllerTest {
UUID.fromString("00000000-0000-0000-0000-000000000001"),
"Testbrief",
LocalDate.of(1920, 6, 15),
3, 1, 0
3, 1, 0,
List.of(new ActivityActorDTO("TR", "#a6dad8", "Test Raddatz")),
false
);
private static final TranscriptionWeeklyStatsDTO STATS = new TranscriptionWeeklyStatsDTO(2L, 5L);

View File

@@ -1,10 +1,13 @@
package org.raddatz.familienarchiv.service;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.raddatz.familienarchiv.dashboard.ActivityActorDTO;
import org.raddatz.familienarchiv.dashboard.AuditLogQueryService;
import org.raddatz.familienarchiv.dto.TranscriptionQueueItemDTO;
import org.raddatz.familienarchiv.dto.TranscriptionWeeklyStatsDTO;
import org.raddatz.familienarchiv.repository.DocumentRepository;
@@ -13,17 +16,25 @@ import org.raddatz.familienarchiv.repository.TranscriptionWeeklyStatsProjection;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.*;
@ExtendWith(MockitoExtension.class)
class TranscriptionQueueServiceTest {
@Mock DocumentRepository documentRepository;
@Mock AuditLogQueryService auditLogQueryService;
@InjectMocks TranscriptionQueueService service;
@BeforeEach
void stubContributors() {
lenient().when(auditLogQueryService.findContributorsPerDocument(any())).thenReturn(Map.of());
}
// ─── getSegmentationQueue ─────────────────────────────────────────────────
@Test
@@ -108,6 +119,47 @@ class TranscriptionQueueServiceTest {
assertThat(result.transcriptionCount()).isEqualTo(0L);
}
// ─── contributors ────────────────────────────────────────────────────────
@Test
void getSegmentationQueue_includesContributors_whenAuditDataPresent() {
UUID docId = UUID.randomUUID();
TranscriptionQueueProjection proj = mockQueueProjection(docId, "Brief", null, 0, 0, 0);
when(documentRepository.findSegmentationQueue(5)).thenReturn(List.of(proj));
ActivityActorDTO actor = new ActivityActorDTO("MR", "#a6dad8", "Max Raddatz");
when(auditLogQueryService.findContributorsPerDocument(List.of(docId)))
.thenReturn(Map.of(docId, List.of(actor)));
List<TranscriptionQueueItemDTO> result = service.getSegmentationQueue();
assertThat(result.get(0).contributors()).containsExactly(actor);
assertThat(result.get(0).hasMoreContributors()).isFalse();
}
@Test
void getSegmentationQueue_capsContributorsAtFive_andSetsHasMoreFlag() {
UUID docId = UUID.randomUUID();
TranscriptionQueueProjection proj = mockQueueProjection(docId, "Brief", null, 0, 0, 0);
when(documentRepository.findSegmentationQueue(5)).thenReturn(List.of(proj));
List<ActivityActorDTO> sixActors = List.of(
new ActivityActorDTO("A1", "#111", "Alice One"),
new ActivityActorDTO("A2", "#222", "Alice Two"),
new ActivityActorDTO("A3", "#333", "Alice Three"),
new ActivityActorDTO("A4", "#444", "Alice Four"),
new ActivityActorDTO("A5", "#555", "Alice Five"),
new ActivityActorDTO("A6", "#666", "Alice Six")
);
when(auditLogQueryService.findContributorsPerDocument(List.of(docId)))
.thenReturn(Map.of(docId, sixActors));
List<TranscriptionQueueItemDTO> result = service.getSegmentationQueue();
assertThat(result.get(0).contributors()).hasSize(5);
assertThat(result.get(0).hasMoreContributors()).isTrue();
}
// ─── helpers ─────────────────────────────────────────────────────────────
private TranscriptionQueueProjection mockQueueProjection(