test(documents): add component tests for sender/receiver URL prefill on new document page
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -3,14 +3,15 @@ import { enhance } from '$app/forms';
|
|||||||
import TagInput from '$lib/components/TagInput.svelte';
|
import TagInput from '$lib/components/TagInput.svelte';
|
||||||
import PersonTypeahead from '$lib/components/PersonTypeahead.svelte';
|
import PersonTypeahead from '$lib/components/PersonTypeahead.svelte';
|
||||||
import PersonMultiSelect from '$lib/components/PersonMultiSelect.svelte';
|
import PersonMultiSelect from '$lib/components/PersonMultiSelect.svelte';
|
||||||
|
import { untrack } from 'svelte';
|
||||||
import { m } from '$lib/paraglide/messages.js';
|
import { m } from '$lib/paraglide/messages.js';
|
||||||
|
|
||||||
let { data, form } = $props();
|
let { data, form } = $props();
|
||||||
|
|
||||||
let tags: string[] = $state([]);
|
let tags: string[] = $state([]);
|
||||||
let senderId = $state(data.initialSenderId);
|
let senderId = $state(untrack(() => data.initialSenderId));
|
||||||
let selectedReceivers: { id: string; firstName: string; lastName: string }[] = $state(
|
let selectedReceivers: { id: string; firstName: string; lastName: string }[] = $state(
|
||||||
data.initialReceivers
|
untrack(() => data.initialReceivers)
|
||||||
);
|
);
|
||||||
|
|
||||||
let dateDisplay = $state('');
|
let dateDisplay = $state('');
|
||||||
|
|||||||
71
frontend/src/routes/documents/new/page.svelte.spec.ts
Normal file
71
frontend/src/routes/documents/new/page.svelte.spec.ts
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
import { afterEach, describe, expect, it } from 'vitest';
|
||||||
|
import { cleanup, render } from 'vitest-browser-svelte';
|
||||||
|
import { page } from 'vitest/browser';
|
||||||
|
import Page from './+page.svelte';
|
||||||
|
|
||||||
|
afterEach(cleanup);
|
||||||
|
|
||||||
|
// ─── Test data ────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
const baseData = {
|
||||||
|
persons: [],
|
||||||
|
initialSenderId: '',
|
||||||
|
initialSenderName: '',
|
||||||
|
initialReceivers: []
|
||||||
|
};
|
||||||
|
|
||||||
|
// ─── Prefill – sender ─────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
describe('New document page – sender prefill', () => {
|
||||||
|
it('shows an empty sender input when no senderId is in the URL', async () => {
|
||||||
|
render(Page, { data: baseData });
|
||||||
|
const input = document.querySelector<HTMLInputElement>('#senderId-search');
|
||||||
|
expect(input?.value).toBe('');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('shows the sender name in the typeahead input when initialSenderName is set', async () => {
|
||||||
|
render(Page, {
|
||||||
|
data: { ...baseData, initialSenderId: 'p1', initialSenderName: 'Hans Müller' }
|
||||||
|
});
|
||||||
|
const input = document.querySelector<HTMLInputElement>('#senderId-search');
|
||||||
|
expect(input?.value).toBe('Hans Müller');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('sets the hidden senderId input to the prefilled ID', async () => {
|
||||||
|
render(Page, {
|
||||||
|
data: { ...baseData, initialSenderId: 'p1', initialSenderName: 'Hans Müller' }
|
||||||
|
});
|
||||||
|
const hidden = document.querySelector<HTMLInputElement>(
|
||||||
|
'input[type="hidden"][name="senderId"]'
|
||||||
|
);
|
||||||
|
expect(hidden?.value).toBe('p1');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// ─── Prefill – receiver ───────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
describe('New document page – receiver prefill', () => {
|
||||||
|
it('shows no receiver chips when initialReceivers is empty', async () => {
|
||||||
|
render(Page, { data: baseData });
|
||||||
|
await expect.element(page.getByText('Anna Schmidt')).not.toBeInTheDocument();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('shows a receiver chip when initialReceivers has a person', async () => {
|
||||||
|
const data = {
|
||||||
|
...baseData,
|
||||||
|
initialReceivers: [{ id: 'p2', firstName: 'Anna', lastName: 'Schmidt' }]
|
||||||
|
};
|
||||||
|
render(Page, { data });
|
||||||
|
await expect.element(page.getByText('Anna Schmidt')).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('renders a hidden receiverIds input for the prefilled receiver', async () => {
|
||||||
|
const data = {
|
||||||
|
...baseData,
|
||||||
|
initialReceivers: [{ id: 'p2', firstName: 'Anna', lastName: 'Schmidt' }]
|
||||||
|
};
|
||||||
|
render(Page, { data });
|
||||||
|
const hidden = document.querySelector<HTMLInputElement>('input[name="receiverIds"]');
|
||||||
|
expect(hidden?.value).toBe('p2');
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user