import { describe, it, expect, afterEach } from 'vitest'; import { cleanup, render } from 'vitest-browser-svelte'; import { page } from 'vitest/browser'; import DashboardMentions from './DashboardMentions.svelte'; afterEach(cleanup); type NotificationDTO = { id: string; type: 'REPLY' | 'MENTION'; documentId?: string; referenceId?: string; annotationId?: string; read: boolean; createdAt: string; actorName?: string; }; function makeMention(overrides: Partial = {}): NotificationDTO { return { id: 'notif-1', type: 'MENTION', documentId: 'doc-abc', referenceId: 'comment-xyz', read: false, createdAt: '2026-01-15T10:00:00Z', actorName: 'Anna Schmidt', ...overrides }; } describe('DashboardMentions', () => { it('renders nothing when mentions list is empty', async () => { render(DashboardMentions, { mentions: [] }); const widget = page.getByTestId('dashboard-mentions'); await expect.element(widget).not.toBeInTheDocument(); }); it('shows a heading when mentions are present', async () => { render(DashboardMentions, { mentions: [makeMention()] }); const widget = page.getByTestId('dashboard-mentions'); await expect.element(widget).toBeInTheDocument(); }); it('builds link with commentId param when no annotationId', async () => { render(DashboardMentions, { mentions: [makeMention({ documentId: 'doc-1', referenceId: 'cmt-1' })] }); const link = page.getByRole('link'); await expect.element(link).toHaveAttribute('href', '/documents/doc-1?commentId=cmt-1'); }); it('builds link with commentId and annotationId when annotationId is present', async () => { render(DashboardMentions, { mentions: [makeMention({ documentId: 'doc-2', referenceId: 'cmt-2', annotationId: 'ann-9' })] }); const link = page.getByRole('link'); await expect .element(link) .toHaveAttribute('href', '/documents/doc-2?commentId=cmt-2&annotationId=ann-9'); }); it('shows actor name in each row', async () => { render(DashboardMentions, { mentions: [makeMention({ actorName: 'Maria Müller' })] }); await expect.element(page.getByText('Maria Müller')).toBeInTheDocument(); }); });