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 <noreply@anthropic.com>
This commit is contained in:
Marcel
2026-05-10 05:33:58 +02:00
committed by marcel
parent 8aedbab0c7
commit d89279842c

View File

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