From 510ab1d2d5bfd01a09c8d4c0e93cf7ad03a24001 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