import { describe, it, expect, afterEach } from 'vitest'; import { cleanup, render } from 'vitest-browser-svelte'; import { page } from 'vitest/browser'; import DocumentDate from './DocumentDate.svelte'; // Browser-project (Playwright) tests — CI only. afterEach(cleanup); describe('DocumentDate', () => { it('renders a DAY date as a full long date', async () => { render(DocumentDate, { props: { iso: '1943-12-24', precision: 'DAY' } }); await expect.element(page.getByText('24. Dezember 1943')).toBeInTheDocument(); }); it('renders MONTH precision as month + year, never a day', async () => { render(DocumentDate, { props: { iso: '1916-06-01', precision: 'MONTH', raw: 'Juni 1916' } }); await expect.element(page.getByText('Juni 1916')).toBeInTheDocument(); }); it('shows the verbatim raw cell as a visible secondary line for UNKNOWN (not tooltip-only)', async () => { render(DocumentDate, { props: { iso: null, precision: 'UNKNOWN', raw: 'Sommer?' } }); // Real, visible text — not hidden behind a title attribute. await expect.element(page.getByText('Datum unbekannt')).toBeInTheDocument(); await expect.element(page.getByText(/Sommer\?/)).toBeVisible(); }); it('renders a malicious raw value as inert escaped text (no element injected)', async () => { const malicious = ''; render(DocumentDate, { props: { iso: null, precision: 'UNKNOWN', raw: malicious } }); // The payload appears as literal text, and no is created in the DOM. await expect.element(page.getByText(/