test(coverage): drive browser tests to 80% on all metrics (#496) #505

Merged
marcel merged 189 commits from feat/issue-496-browser-coverage-tests into main 2026-05-11 21:50:39 +02:00
Showing only changes of commit 907fbf7a15 - Show all commits

View File

@@ -0,0 +1,64 @@
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);
});
});