test: inject real ConfirmService via context (batch 1/2)
Replaces the vi.mock('$lib/shared/services/confirm.svelte') stub with a
real createConfirmService() provided through render's context map, mirroring
the existing admin/tags/[id]/page.svelte.spec.ts pattern. The generic
confirm.test-fixture.svelte renders only ConfirmDialog and cannot wrap an
arbitrary page; none of these specs trigger confirm(), so the children's
getConfirmService() simply reads the provided context instead of a module
mock. No vi.mock of confirm.svelte remains in these 5 specs. Part of #560.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1,9 +1,7 @@
|
||||
import { describe, it, expect, vi, afterEach } from 'vitest';
|
||||
import { cleanup, render } from 'vitest-browser-svelte';
|
||||
|
||||
vi.mock('$lib/shared/services/confirm.svelte', () => ({
|
||||
getConfirmService: () => ({ confirm: async () => false })
|
||||
}));
|
||||
import { createConfirmService, CONFIRM_KEY } from '$lib/shared/services/confirm.svelte.js';
|
||||
|
||||
const { default: DocumentEditPage } = await import('./+page.svelte');
|
||||
|
||||
@@ -31,7 +29,10 @@ const baseData = (overrides: Record<string, unknown> = {}) => ({
|
||||
|
||||
describe('documents/[id]/edit page', () => {
|
||||
it('renders the page with the DocumentEditLayout', async () => {
|
||||
render(DocumentEditPage, { props: { data: baseData(), form: undefined } });
|
||||
render(DocumentEditPage, {
|
||||
context: new Map([[CONFIRM_KEY, createConfirmService()]]),
|
||||
props: { data: baseData(), form: undefined }
|
||||
});
|
||||
|
||||
// At minimum, the body has content
|
||||
const main = document.body.firstElementChild;
|
||||
@@ -39,7 +40,10 @@ describe('documents/[id]/edit page', () => {
|
||||
});
|
||||
|
||||
it('renders both hidden submit-target forms', async () => {
|
||||
render(DocumentEditPage, { props: { data: baseData(), form: undefined } });
|
||||
render(DocumentEditPage, {
|
||||
context: new Map([[CONFIRM_KEY, createConfirmService()]]),
|
||||
props: { data: baseData(), form: undefined }
|
||||
});
|
||||
|
||||
const reviewForm = document.querySelector('form#mark-for-review-form');
|
||||
const deleteForm = document.querySelector('form#delete-form');
|
||||
@@ -48,7 +52,10 @@ describe('documents/[id]/edit page', () => {
|
||||
});
|
||||
|
||||
it('renders the action bar with delete, cancel, mark-for-review, and save buttons/links', async () => {
|
||||
render(DocumentEditPage, { props: { data: baseData(), form: undefined } });
|
||||
render(DocumentEditPage, {
|
||||
context: new Map([[CONFIRM_KEY, createConfirmService()]]),
|
||||
props: { data: baseData(), form: undefined }
|
||||
});
|
||||
|
||||
// Find delete button
|
||||
const deleteBtn = Array.from(document.querySelectorAll('button')).find((b) =>
|
||||
@@ -58,13 +65,17 @@ describe('documents/[id]/edit page', () => {
|
||||
});
|
||||
|
||||
it('uses doc.title in the document title when set', async () => {
|
||||
render(DocumentEditPage, { props: { data: baseData(), form: undefined } });
|
||||
render(DocumentEditPage, {
|
||||
context: new Map([[CONFIRM_KEY, createConfirmService()]]),
|
||||
props: { data: baseData(), form: undefined }
|
||||
});
|
||||
|
||||
await vi.waitFor(() => expect(document.title).toContain('Brief an Helene'));
|
||||
});
|
||||
|
||||
it('falls back to originalFilename when title is empty', async () => {
|
||||
render(DocumentEditPage, {
|
||||
context: new Map([[CONFIRM_KEY, createConfirmService()]]),
|
||||
props: {
|
||||
data: baseData({ document: { ...baseDoc, title: '', originalFilename: 'fallback.pdf' } }),
|
||||
form: undefined
|
||||
@@ -75,7 +86,10 @@ describe('documents/[id]/edit page', () => {
|
||||
});
|
||||
|
||||
it('renders the cancel link to the document detail page', async () => {
|
||||
render(DocumentEditPage, { props: { data: baseData(), form: undefined } });
|
||||
render(DocumentEditPage, {
|
||||
context: new Map([[CONFIRM_KEY, createConfirmService()]]),
|
||||
props: { data: baseData(), form: undefined }
|
||||
});
|
||||
|
||||
const link = document.querySelector('a[href="/documents/d1"]');
|
||||
expect(link).not.toBeNull();
|
||||
@@ -83,6 +97,7 @@ describe('documents/[id]/edit page', () => {
|
||||
|
||||
it('passes form.error to DocumentEditLayout when form is set', async () => {
|
||||
render(DocumentEditPage, {
|
||||
context: new Map([[CONFIRM_KEY, createConfirmService()]]),
|
||||
props: { data: baseData(), form: { error: 'Save failed' } }
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user