test: inject real ConfirmService via context (batch 2/2)
Completes Phase 2a: geschichten/[id], persons/[id]/edit and admin/tags/[id] page specs now provide a real createConfirmService() via render context instead of mocking confirm.svelte. Zero confirm.svelte vi.mocks remain across the client suite (AC#4). Part of #560. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1,10 +1,8 @@
|
||||
import { describe, it, expect, vi, afterEach } from 'vitest';
|
||||
import { describe, it, expect, afterEach } from 'vitest';
|
||||
import { cleanup, render } from 'vitest-browser-svelte';
|
||||
import { page } from 'vitest/browser';
|
||||
|
||||
vi.mock('$lib/shared/services/confirm.svelte', () => ({
|
||||
getConfirmService: () => ({ confirm: async () => false })
|
||||
}));
|
||||
import { createConfirmService, CONFIRM_KEY } from '$lib/shared/services/confirm.svelte.js';
|
||||
|
||||
const { default: PersonEditPage } = await import('./+page.svelte');
|
||||
|
||||
@@ -29,19 +27,26 @@ const baseData = (overrides: Record<string, unknown> = {}) => ({
|
||||
|
||||
describe('persons/[id]/edit page', () => {
|
||||
it('renders the edit heading', async () => {
|
||||
render(PersonEditPage, { props: { data: baseData(), form: undefined } });
|
||||
render(PersonEditPage, {
|
||||
context: new Map([[CONFIRM_KEY, createConfirmService()]]),
|
||||
props: { data: baseData(), form: undefined }
|
||||
});
|
||||
|
||||
await expect.element(page.getByRole('heading', { name: /person bearbeiten/i })).toBeVisible();
|
||||
});
|
||||
|
||||
it('renders the persons-section heading', async () => {
|
||||
render(PersonEditPage, { props: { data: baseData(), form: undefined } });
|
||||
render(PersonEditPage, {
|
||||
context: new Map([[CONFIRM_KEY, createConfirmService()]]),
|
||||
props: { data: baseData(), form: undefined }
|
||||
});
|
||||
|
||||
await expect.element(page.getByRole('heading', { name: /angaben zur person/i })).toBeVisible();
|
||||
});
|
||||
|
||||
it('shows the form-error banner when form.updateError is set', async () => {
|
||||
render(PersonEditPage, {
|
||||
context: new Map([[CONFIRM_KEY, createConfirmService()]]),
|
||||
props: { data: baseData(), form: { updateError: 'Last name is required' } }
|
||||
});
|
||||
|
||||
@@ -49,14 +54,20 @@ describe('persons/[id]/edit page', () => {
|
||||
});
|
||||
|
||||
it('does not show the form-error banner when form is undefined', async () => {
|
||||
render(PersonEditPage, { props: { data: baseData(), form: undefined } });
|
||||
render(PersonEditPage, {
|
||||
context: new Map([[CONFIRM_KEY, createConfirmService()]]),
|
||||
props: { data: baseData(), form: undefined }
|
||||
});
|
||||
|
||||
const banner = document.querySelector('.bg-red-50.border-red-200');
|
||||
expect(banner).toBeNull();
|
||||
});
|
||||
|
||||
it('renders the save bar with the discard href pointing to the person detail', async () => {
|
||||
render(PersonEditPage, { props: { data: baseData(), form: undefined } });
|
||||
render(PersonEditPage, {
|
||||
context: new Map([[CONFIRM_KEY, createConfirmService()]]),
|
||||
props: { data: baseData(), form: undefined }
|
||||
});
|
||||
|
||||
const link = document.querySelector('a[href="/persons/p-1"]');
|
||||
expect(link).not.toBeNull();
|
||||
|
||||
Reference in New Issue
Block a user