From ba96db968bf7222b5f2b10f7cdedbb98df1db984 Mon Sep 17 00:00:00 2001 From: Marcel Date: Sun, 10 May 2026 00:53:14 +0200 Subject: [PATCH] test: cover five small index/empty-state route components MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three admin/index pages (groups/tags/users) — each renders a single "Wähle X aus der Liste" prompt for the desktop split-view layout. AuthHeader: brand link href + wordmark. PersonsEmptyState: empty heading + explanation text. 6 tests across five small files. Refs #496. Co-Authored-By: Claude Sonnet 4.6 --- frontend/src/routes/AuthHeader.svelte.test.ts | 22 +++++++++++++++++++ .../routes/admin/groups/page.svelte.test.ts | 14 ++++++++++++ .../src/routes/admin/tags/page.svelte.test.ts | 14 ++++++++++++ .../routes/admin/users/page.svelte.test.ts | 14 ++++++++++++ .../persons/PersonsEmptyState.svelte.test.ts | 15 +++++++++++++ 5 files changed, 79 insertions(+) create mode 100644 frontend/src/routes/AuthHeader.svelte.test.ts create mode 100644 frontend/src/routes/admin/groups/page.svelte.test.ts create mode 100644 frontend/src/routes/admin/tags/page.svelte.test.ts create mode 100644 frontend/src/routes/admin/users/page.svelte.test.ts create mode 100644 frontend/src/routes/persons/PersonsEmptyState.svelte.test.ts diff --git a/frontend/src/routes/AuthHeader.svelte.test.ts b/frontend/src/routes/AuthHeader.svelte.test.ts new file mode 100644 index 00000000..67c23479 --- /dev/null +++ b/frontend/src/routes/AuthHeader.svelte.test.ts @@ -0,0 +1,22 @@ +import { describe, it, expect, afterEach } from 'vitest'; +import { cleanup, render } from 'vitest-browser-svelte'; +import { page } from 'vitest/browser'; +import AuthHeader from './AuthHeader.svelte'; + +afterEach(cleanup); + +describe('AuthHeader', () => { + it('renders the brand link to /', async () => { + render(AuthHeader, { props: {} }); + + await expect + .element(page.getByRole('link', { name: /familienarchiv/i })) + .toHaveAttribute('href', '/'); + }); + + it('renders the brand wordmark', async () => { + render(AuthHeader, { props: {} }); + + await expect.element(page.getByText('Familienarchiv')).toBeVisible(); + }); +}); diff --git a/frontend/src/routes/admin/groups/page.svelte.test.ts b/frontend/src/routes/admin/groups/page.svelte.test.ts new file mode 100644 index 00000000..fa205e14 --- /dev/null +++ b/frontend/src/routes/admin/groups/page.svelte.test.ts @@ -0,0 +1,14 @@ +import { describe, it, expect, afterEach } from 'vitest'; +import { cleanup, render } from 'vitest-browser-svelte'; +import { page } from 'vitest/browser'; +import AdminGroupsIndexPage from './+page.svelte'; + +afterEach(cleanup); + +describe('admin/groups index page', () => { + it('renders the select-from-list prompt', async () => { + render(AdminGroupsIndexPage, { props: {} }); + + await expect.element(page.getByText('Wähle eine Gruppe aus der Liste.')).toBeVisible(); + }); +}); diff --git a/frontend/src/routes/admin/tags/page.svelte.test.ts b/frontend/src/routes/admin/tags/page.svelte.test.ts new file mode 100644 index 00000000..f6d4b7ab --- /dev/null +++ b/frontend/src/routes/admin/tags/page.svelte.test.ts @@ -0,0 +1,14 @@ +import { describe, it, expect, afterEach } from 'vitest'; +import { cleanup, render } from 'vitest-browser-svelte'; +import { page } from 'vitest/browser'; +import AdminTagsIndexPage from './+page.svelte'; + +afterEach(cleanup); + +describe('admin/tags index page', () => { + it('renders the select-from-list prompt', async () => { + render(AdminTagsIndexPage, { props: {} }); + + await expect.element(page.getByText('Wähle ein Schlagwort aus der Liste.')).toBeVisible(); + }); +}); diff --git a/frontend/src/routes/admin/users/page.svelte.test.ts b/frontend/src/routes/admin/users/page.svelte.test.ts new file mode 100644 index 00000000..750b7100 --- /dev/null +++ b/frontend/src/routes/admin/users/page.svelte.test.ts @@ -0,0 +1,14 @@ +import { describe, it, expect, afterEach } from 'vitest'; +import { cleanup, render } from 'vitest-browser-svelte'; +import { page } from 'vitest/browser'; +import AdminUsersIndexPage from './+page.svelte'; + +afterEach(cleanup); + +describe('admin/users index page', () => { + it('renders the select-from-list prompt', async () => { + render(AdminUsersIndexPage, { props: {} }); + + await expect.element(page.getByText('Wähle einen Benutzer aus der Liste.')).toBeVisible(); + }); +}); diff --git a/frontend/src/routes/persons/PersonsEmptyState.svelte.test.ts b/frontend/src/routes/persons/PersonsEmptyState.svelte.test.ts new file mode 100644 index 00000000..1df726cb --- /dev/null +++ b/frontend/src/routes/persons/PersonsEmptyState.svelte.test.ts @@ -0,0 +1,15 @@ +import { describe, it, expect, afterEach } from 'vitest'; +import { cleanup, render } from 'vitest-browser-svelte'; +import { page } from 'vitest/browser'; +import PersonsEmptyState from './PersonsEmptyState.svelte'; + +afterEach(cleanup); + +describe('PersonsEmptyState', () => { + it('renders the empty heading and explanation text', async () => { + render(PersonsEmptyState, { props: {} }); + + await expect.element(page.getByText('Keine Personen gefunden.')).toBeVisible(); + await expect.element(page.getByText('Versuchen Sie einen anderen Suchbegriff.')).toBeVisible(); + }); +});