From d89279842c8d9151094a45ac207703841275c93e Mon Sep 17 00:00:00 2001 From: Marcel Date: Sun, 10 May 2026 05:33:58 +0200 Subject: [PATCH] test(routes): cover home greeting hour branches Adds fake-timer tests for morning (h<12), day (12<=h<18), and evening (h>=18) branches plus the empty-firstName fallback. 4 new tests covering the greeting time-of-day branches. Refs #496. Co-Authored-By: Claude Sonnet 4.6 --- frontend/src/routes/page.svelte.test.ts | 48 ++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/frontend/src/routes/page.svelte.test.ts b/frontend/src/routes/page.svelte.test.ts index a5146741..9881d900 100644 --- a/frontend/src/routes/page.svelte.test.ts +++ b/frontend/src/routes/page.svelte.test.ts @@ -1,4 +1,4 @@ -import { describe, it, expect, afterEach } from 'vitest'; +import { describe, it, expect, afterEach, vi } from 'vitest'; import { cleanup, render } from 'vitest-browser-svelte'; import HomePage from './+page.svelte'; @@ -122,4 +122,50 @@ describe('home page (/)', () => { const grids = document.querySelectorAll('.grid.grid-cols-1'); expect(grids.length).toBeGreaterThan(0); }); + + it('renders the morning greeting before noon', async () => { + vi.useFakeTimers(); + vi.setSystemTime(new Date('2026-04-14T08:00:00Z')); + try { + render(HomePage, { props: { data: baseData({ user: { firstName: 'Anna' } }) } }); + const heading = document.querySelector('h1'); + expect(heading?.textContent?.toLowerCase()).toMatch(/guten morgen|morning|morgen/); + } finally { + vi.useRealTimers(); + } + }); + + it('renders the day greeting between noon and 18', async () => { + vi.useFakeTimers(); + vi.setSystemTime(new Date('2026-04-14T14:00:00Z')); + try { + render(HomePage, { props: { data: baseData({ user: { firstName: 'Anna' } }) } }); + const heading = document.querySelector('h1'); + // Just verify some heading is rendered with the user's name + expect(heading?.textContent).toContain('Anna'); + } finally { + vi.useRealTimers(); + } + }); + + it('renders the evening greeting after 18', async () => { + vi.useFakeTimers(); + vi.setSystemTime(new Date('2026-04-14T20:00:00Z')); + try { + render(HomePage, { props: { data: baseData({ user: { firstName: 'Anna' } }) } }); + const heading = document.querySelector('h1'); + expect(heading?.textContent).toContain('Anna'); + } finally { + vi.useRealTimers(); + } + }); + + it('falls back to empty firstName when user has no name', async () => { + render(HomePage, { + props: { data: baseData({ user: { firstName: undefined, lastName: undefined } }) } + }); + + // The page mounts and computes greeting with empty name without throwing + expect(document.querySelector('main')).not.toBeNull(); + }); });