import { afterEach, describe, expect, it, vi } from 'vitest'; import { cleanup, render } from 'vitest-browser-svelte'; import { page } from 'vitest/browser'; import CorrespondenzHero from './CorrespondenzHero.svelte'; vi.mock('$app/navigation', () => ({ goto: vi.fn() })); afterEach(cleanup); const noop = () => {}; describe('CorrespondenzHero — headline and cross-link', () => { it('renders the discovery headline', async () => { render(CorrespondenzHero, { onSelectPerson: noop }); await expect.element(page.getByText(/Wessen Briefe möchten Sie lesen/i)).toBeInTheDocument(); }); it('renders a cross-link to the document search page', async () => { render(CorrespondenzHero, { onSelectPerson: noop }); const link = page.getByRole('link', { name: /Zur Dokumentensuche/i }); await expect.element(link).toBeInTheDocument(); await expect.element(link).toHaveAttribute('href', '/'); }); it('renders a person typeahead input', async () => { render(CorrespondenzHero, { onSelectPerson: noop }); await expect.element(page.getByTestId('conv-hero').getByRole('textbox')).toBeInTheDocument(); }); }); describe('CorrespondenzHero — recent persons', () => { it('shows recent person chips when provided', async () => { render(CorrespondenzHero, { onSelectPerson: noop, recentPersons: [{ id: 'r1', name: 'Clara Braun' }] }); await expect.element(page.getByText('Clara Braun')).toBeInTheDocument(); }); it('calls onSelectPerson when a recent person chip is clicked', async () => { const spy = vi.fn(); render(CorrespondenzHero, { onSelectPerson: spy, recentPersons: [{ id: 'r1', name: 'Clara Braun' }] }); await expect.element(page.getByText('Clara Braun')).toBeInTheDocument(); document.querySelector('[data-testid="recent-person-r1"]')!.click(); expect(spy).toHaveBeenCalledWith('r1'); }); });