From a25408d4d7645bd6e05395388b73ed62bab3b8de Mon Sep 17 00:00:00 2001 From: Marcel Date: Sun, 10 May 2026 03:50:13 +0200 Subject: [PATCH] test(routes): expand aktivitaeten page coverage loadError branches (FuerDichBox skipped vs shown), first-run vs filter-empty empty-state variants, timeline rendering when feed has items, FilterPills + FuerDichBox conditional render. 7 tests covering ~12 branches in the page file. Refs #496. Co-Authored-By: Claude Sonnet 4.6 --- .../routes/aktivitaeten/page.svelte.test.ts | 80 +++++++++++++++++-- 1 file changed, 75 insertions(+), 5 deletions(-) diff --git a/frontend/src/routes/aktivitaeten/page.svelte.test.ts b/frontend/src/routes/aktivitaeten/page.svelte.test.ts index c94ec176..def1980f 100644 --- a/frontend/src/routes/aktivitaeten/page.svelte.test.ts +++ b/frontend/src/routes/aktivitaeten/page.svelte.test.ts @@ -63,17 +63,87 @@ describe('aktivitaeten page', () => { // ChronikErrorCard renders some retry mechanism const main = document.querySelector('main'); expect(main).not.toBeNull(); + // FuerDichBox should NOT render when loadError is set + const fuerDich = document.querySelector('[data-testid="chronik-inbox-zero"]'); + expect(fuerDich).toBeNull(); }); - it('renders the empty state when activityFeed is empty', async () => { + it('renders the FuerDichBox and FilterPills when loadError is null', async () => { render(AktivitaetenPage, { props: { data: baseData() } }); - const main = document.querySelector('main'); - expect(main).not.toBeNull(); + // FuerDichBox shows the inbox-zero state when no unread + const fuerDich = document.querySelector('[data-testid="chronik-inbox-zero"]'); + expect(fuerDich).not.toBeNull(); + + // FilterPills present + const radiogroup = document.querySelector('[role="radiogroup"]'); + expect(radiogroup).not.toBeNull(); }); - it('renders without crashing when filter is set to non-default value', async () => { - render(AktivitaetenPage, { props: { data: baseData({ filter: 'mentions' as const }) } }); + it('renders the first-run empty state when activityFeed is empty', async () => { + render(AktivitaetenPage, { props: { data: baseData() } }); + + const empty = document.querySelector('[data-testid="chronik-empty-state"]'); + expect(empty?.getAttribute('data-variant')).toBe('first-run'); + }); + + it('renders the filter-empty empty state when feed has items but filter rules out all', async () => { + render(AktivitaetenPage, { + props: { + data: baseData({ + filter: 'fuer-dich' as const, + activityFeed: [ + { + kind: 'TEXT_SAVED', + documentId: 'doc-1', + documentTitle: 'Brief', + actor: { id: 'u1', name: 'Anna', initials: 'AS', color: '#000' }, + count: 1, + happenedAt: '2026-01-01T00:00:00Z', + happenedAtUntil: null, + youMentioned: false + } + ] + }) + } + }); + + const empty = document.querySelector('[data-testid="chronik-empty-state"]'); + expect(empty?.getAttribute('data-variant')).toBe('filter-empty'); + }); + + it('renders the timeline when displayFeed is non-empty', async () => { + render(AktivitaetenPage, { + props: { + data: baseData({ + filter: 'alle' as const, + activityFeed: [ + { + kind: 'TEXT_SAVED', + documentId: 'doc-1', + documentTitle: 'Brief 1899', + actor: { id: 'u1', name: 'Anna', initials: 'AS', color: '#000' }, + count: 1, + happenedAt: '2026-01-01T00:00:00Z', + happenedAtUntil: null, + youMentioned: false + } + ] + }) + } + }); + + // Timeline renders the document title from the feed item + expect(document.body.textContent).toContain('Brief 1899'); + // No empty-state in this case + const empty = document.querySelector('[data-testid="chronik-empty-state"]'); + expect(empty).toBeNull(); + }); + + it('renders without crashing when filter is set to a non-default value', async () => { + render(AktivitaetenPage, { + props: { data: baseData({ filter: 'transkription' as const }) } + }); const main = document.querySelector('main'); expect(main).not.toBeNull();