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 2eacbd31..81c2fa83 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/dashboard/DashboardService.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/dashboard/DashboardService.java @@ -149,7 +149,7 @@ public class DashboardService { UUID commentId = row.getCommentId(); CommentData commentData = commentId != null ? commentDataByComment.get(commentId) : null; UUID annotationId = commentData != null ? commentData.annotationId() : null; - String commentPreview = commentData != null && !commentData.preview().isEmpty() + String commentPreview = commentData != null && !commentData.preview().isBlank() ? commentData.preview() : null; return new ActivityFeedItemDTO( org.raddatz.familienarchiv.audit.AuditKind.valueOf(row.getKind()), diff --git a/backend/src/main/java/org/raddatz/familienarchiv/document/comment/CommentData.java b/backend/src/main/java/org/raddatz/familienarchiv/document/comment/CommentData.java index aefa340b..a0810cb4 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/document/comment/CommentData.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/document/comment/CommentData.java @@ -1,5 +1,6 @@ package org.raddatz.familienarchiv.document.comment; +import jakarta.annotation.Nullable; import java.util.UUID; -public record CommentData(UUID annotationId, String preview) {} +public record CommentData(@Nullable UUID annotationId, String preview) {} diff --git a/frontend/src/lib/activity/ChronikRow.svelte b/frontend/src/lib/activity/ChronikRow.svelte index 22e47d13..4679d636 100644 --- a/frontend/src/lib/activity/ChronikRow.svelte +++ b/frontend/src/lib/activity/ChronikRow.svelte @@ -108,8 +108,10 @@ const rowHref: string = $derived( { expect(link?.getAttribute('aria-label')).toContain('A wonderful letter from grandma'); }); + it('link still has aria-label for comment variant when commentPreview is absent', async () => { + const item: ActivityFeedItemDTO = { + ...baseItem, + kind: 'COMMENT_ADDED', + commentPreview: undefined + }; + render(ChronikRow, { item }); + const link = document.querySelector('a[aria-label]'); + expect(link).not.toBeNull(); + expect(link?.getAttribute('aria-label')).not.toBeNull(); + }); + // --- robustness: title rendering for edge cases --- it('still renders the row link when documentTitle is an empty string', async () => { // Felix: verbText.indexOf(docTitle) returned 0 for empty titles — the span