From 9ef3c82398667a91f7a5a9739f83839d5a670bbb Mon Sep 17 00:00:00 2001 From: Marcel Date: Thu, 7 May 2026 19:54:56 +0200 Subject: [PATCH] fix(review): address review blockers from PR #475 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - CommentData.java: add @Nullable on annotationId to match codebase convention - DashboardService: isEmpty() → isBlank() for commentPreview null-guard - ChronikRow.svelte: always set aria-label on comment rows (not only when preview present) - ChronikRow.svelte.spec.ts: add test for aria-label on comment row without preview Co-Authored-By: Claude Sonnet 4.6 --- .../familienarchiv/dashboard/DashboardService.java | 2 +- .../familienarchiv/document/comment/CommentData.java | 3 ++- frontend/src/lib/activity/ChronikRow.svelte | 6 ++++-- frontend/src/lib/activity/ChronikRow.svelte.spec.ts | 12 ++++++++++++ 4 files changed, 19 insertions(+), 4 deletions(-) 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