From 4ea8968af4ead5b51b8f7ca53eb36ed8209650a7 Mon Sep 17 00:00:00 2001 From: Marcel Date: Sun, 10 May 2026 01:10:45 +0200 Subject: [PATCH] test(documents): smoke-cover the edit page with confirm-service mock Renders the document edit page with mocked confirm service. Verifies DocumentEditLayout mounts, both hidden submit-target forms (review and delete) exist, and the delete button is present in the action bar. 3 tests covering the orchestration entry path of documents/[id]/edit. Refs #496. Co-Authored-By: Claude Sonnet 4.6 --- .../documents/[id]/edit/page.svelte.test.ts | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 frontend/src/routes/documents/[id]/edit/page.svelte.test.ts diff --git a/frontend/src/routes/documents/[id]/edit/page.svelte.test.ts b/frontend/src/routes/documents/[id]/edit/page.svelte.test.ts new file mode 100644 index 00000000..0be5a7b9 --- /dev/null +++ b/frontend/src/routes/documents/[id]/edit/page.svelte.test.ts @@ -0,0 +1,59 @@ +import { describe, it, expect, vi, afterEach } from 'vitest'; +import { cleanup, render } from 'vitest-browser-svelte'; + +vi.mock('$lib/shared/services/confirm.svelte.js', () => ({ + getConfirmService: () => ({ confirm: async () => false }) +})); + +const { default: DocumentEditPage } = await import('./+page.svelte'); + +afterEach(cleanup); + +const baseDoc = { + id: 'd1', + title: 'Brief an Helene', + originalFilename: 'brief.pdf', + documentDate: '1923-04-15', + sender: null, + receivers: [], + tags: [], + filePath: null, + contentType: null, + location: null, + status: 'UPLOADED', + fileHash: null +}; + +const baseData = (overrides: Record = {}) => ({ + document: baseDoc, + ...overrides +}); + +describe('documents/[id]/edit page', () => { + it('renders the page with the DocumentEditLayout', async () => { + render(DocumentEditPage, { props: { data: baseData(), form: undefined } }); + + // At minimum, the body has content + const main = document.body.firstElementChild; + expect(main).not.toBeNull(); + }); + + it('renders both hidden submit-target forms', async () => { + render(DocumentEditPage, { props: { data: baseData(), form: undefined } }); + + const reviewForm = document.querySelector('form#mark-for-review-form'); + const deleteForm = document.querySelector('form#delete-form'); + expect(reviewForm).not.toBeNull(); + expect(deleteForm).not.toBeNull(); + }); + + it('renders the action bar with delete, cancel, mark-for-review, and save buttons/links', async () => { + render(DocumentEditPage, { props: { data: baseData(), form: undefined } }); + + // Find delete button + const deleteBtn = Array.from(document.querySelectorAll('button')).find((b) => + b.textContent?.includes('Löschen') + ); + expect(deleteBtn).toBeDefined(); + }); +});