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 <noreply@anthropic.com>
This commit is contained in:
Marcel
2026-05-10 03:50:13 +02:00
parent b5f8a4e1ac
commit d51552ed11

View File

@@ -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();