Files
familienarchiv/frontend/src/routes/hilfe/transkription/page.svelte.test.ts
Marcel 750f2463a2 test(hilfe): cover the Transkriptions-Richtlinien page
Title, all four section headings, secure Wikipedia link rel
attributes, five rule cards rendered, four klaerung chips rendered.

7 tests covering the static help page.

Refs #496.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 21:50:28 +02:00

65 lines
2.1 KiB
TypeScript

import { describe, it, expect, afterEach } from 'vitest';
import { cleanup, render } from 'vitest-browser-svelte';
import { page } from 'vitest/browser';
import TranskriptionsRichtlinienPage from './+page.svelte';
afterEach(cleanup);
describe('hilfe/transkription page', () => {
it('renders the page title', async () => {
render(TranskriptionsRichtlinienPage, { props: {} });
await expect
.element(page.getByRole('heading', { level: 1, name: /transkriptions-richtlinien/i }))
.toBeVisible();
});
it('renders the rules section heading', async () => {
render(TranskriptionsRichtlinienPage, { props: {} });
await expect
.element(page.getByRole('heading', { name: /regeln für die transkription/i }))
.toBeVisible();
});
it('renders the klaerung section heading', async () => {
render(TranskriptionsRichtlinienPage, { props: {} });
await expect.element(page.getByRole('heading', { name: /noch in klärung/i })).toBeVisible();
});
it('renders the closing question heading', async () => {
render(TranskriptionsRichtlinienPage, { props: {} });
await expect.element(page.getByRole('heading', { name: /fehlt eine regel/i })).toBeVisible();
});
it('renders the Wikipedia link with secure rel attributes', async () => {
render(TranskriptionsRichtlinienPage, { props: {} });
const link = (await page
.getByRole('link', { name: /wikipedia/i })
.element()) as HTMLAnchorElement;
expect(link.href).toContain('wikipedia.org');
expect(link.target).toBe('_blank');
expect(link.rel).toContain('noopener');
expect(link.rel).toContain('noreferrer');
});
it('renders five rule cards', async () => {
render(TranskriptionsRichtlinienPage, { props: {} });
// Each RichtlinienRuleCard heading appears once
const ruleHeadings = document.querySelectorAll('h3');
expect(ruleHeadings.length).toBeGreaterThanOrEqual(5);
});
it('renders four klaerung chips', async () => {
render(TranskriptionsRichtlinienPage, { props: {} });
// Chips are styled spans with rounded-full — count by class
const chips = document.querySelectorAll('span.rounded-full');
expect(chips.length).toBeGreaterThanOrEqual(4);
});
});