From 958e2f191962e028e7095dc28a375c13b690dcb2 Mon Sep 17 00:00:00 2001 From: Marcel Date: Thu, 23 Apr 2026 22:07:58 +0200 Subject: [PATCH] feat(dashboard): populate resume thumbnailUrl from Document DashboardService now reads the URL from the Document's computed getter instead of passing null, so the resume strip can display the real thumbnail of whatever the user was last working on (#309). Co-Authored-By: Claude Opus 4.7 --- .../dashboard/DashboardService.java | 2 +- .../dashboard/DashboardServiceTest.java | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/backend/src/main/java/org/raddatz/familienarchiv/dashboard/DashboardService.java b/backend/src/main/java/org/raddatz/familienarchiv/dashboard/DashboardService.java index 054ea91b..0e5203b2 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/dashboard/DashboardService.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/dashboard/DashboardService.java @@ -82,7 +82,7 @@ public class DashboardService { .toList(); return new DashboardResumeDTO(docId, doc.getTitle(), caption, excerpt, - totalBlocks, pct, null, collaborators); + totalBlocks, pct, doc.getThumbnailUrl(), collaborators); } public DashboardPulseDTO getPulse(UUID userId) { diff --git a/backend/src/test/java/org/raddatz/familienarchiv/dashboard/DashboardServiceTest.java b/backend/src/test/java/org/raddatz/familienarchiv/dashboard/DashboardServiceTest.java index 19a20e51..d9df35cc 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/dashboard/DashboardServiceTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/dashboard/DashboardServiceTest.java @@ -18,6 +18,7 @@ import org.raddatz.familienarchiv.service.TranscriptionService; import org.raddatz.familienarchiv.service.UserService; import java.time.Instant; +import java.time.LocalDateTime; import java.time.OffsetDateTime; import java.util.HashSet; import java.util.List; @@ -45,6 +46,31 @@ class DashboardServiceTest { @InjectMocks DashboardService dashboardService; + // ─── getResume wires thumbnailUrl from Document ─────────────────────────── + + @Test + void getResume_populatesThumbnailUrl_fromDocument() { + UUID userId = UUID.randomUUID(); + UUID docId = UUID.fromString("12345678-aaaa-bbbb-cccc-1234567890ab"); + + Document doc = Document.builder() + .id(docId).title("Brief").originalFilename("brief.pdf") + .thumbnailKey("thumbnails/" + docId + ".jpg") + .thumbnailGeneratedAt(LocalDateTime.of(2026, 4, 23, 9, 0, 0)) + .receivers(new HashSet<>()) + .build(); + + when(auditLogQueryService.findMostRecentDocumentForUser(userId)).thenReturn(Optional.of(docId)); + when(documentService.getDocumentById(docId)).thenReturn(doc); + when(transcriptionService.listBlocks(docId)).thenReturn(List.of()); + + DashboardResumeDTO result = dashboardService.getResume(userId); + + assertThat(result).isNotNull(); + assertThat(result.thumbnailUrl()).isEqualTo(doc.getThumbnailUrl()); + assertThat(result.thumbnailUrl()).startsWith("/api/documents/" + docId + "/thumbnail?v="); + } + // ─── toActorDTO (via getResume collaborators) ───────────────────────────── @Test