From 627fc44d999a2d26f13013a8b3df417e4555cc92 Mon Sep 17 00:00:00 2001 From: Marcel Date: Fri, 22 May 2026 19:14:44 +0200 Subject: [PATCH] fix(document): fix test regressions from DocumentListItem migration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Use documentService.getDocumentById() in detail_stillReturnsTrainingLabels so the Document.full entity graph eager-loads trainingLabels - Flatten makeItem() factory in DocumentList.svelte.test.ts (nested document: {} overrides broke item.id / item.documentDate access) - Remove { document: {} } wrapper from DocumentMultiSelect.svelte.spec.ts mock responses — component now reads body.items directly as flat items - Flatten single nested item in page.svelte.test.ts document list test Co-Authored-By: Claude Sonnet 4.6 --- .../DocumentListItemIntegrationTest.java | 4 +- .../DocumentMultiSelect.svelte.spec.ts | 7 +- .../src/routes/DocumentList.svelte.test.ts | 79 +++++++++++++------ .../src/routes/documents/page.svelte.test.ts | 15 ++-- 4 files changed, 67 insertions(+), 38 deletions(-) diff --git a/backend/src/test/java/org/raddatz/familienarchiv/document/DocumentListItemIntegrationTest.java b/backend/src/test/java/org/raddatz/familienarchiv/document/DocumentListItemIntegrationTest.java index 485b865e..4c532882 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/document/DocumentListItemIntegrationTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/document/DocumentListItemIntegrationTest.java @@ -90,8 +90,8 @@ class DocumentListItemIntegrationTest { .trainingLabels(new HashSet<>(Set.of(TrainingLabel.KURRENT_RECOGNITION))) .build()); - // Document.full entity graph (used by findById) must still load trainingLabels - Document loaded = documentRepository.findById(saved.getId()).orElseThrow(); + // Document.full entity graph (used by getDocumentById) must still load trainingLabels + Document loaded = documentService.getDocumentById(saved.getId()); assertThat(loaded.getTrainingLabels()).containsExactly(TrainingLabel.KURRENT_RECOGNITION); } diff --git a/frontend/src/lib/document/DocumentMultiSelect.svelte.spec.ts b/frontend/src/lib/document/DocumentMultiSelect.svelte.spec.ts index b5650fbd..55e75853 100644 --- a/frontend/src/lib/document/DocumentMultiSelect.svelte.spec.ts +++ b/frontend/src/lib/document/DocumentMultiSelect.svelte.spec.ts @@ -22,7 +22,7 @@ function mockSearchResponse(items: ReturnType[]) { 'fetch', vi.fn().mockResolvedValue({ ok: true, - json: vi.fn().mockResolvedValue({ items: items.map((document) => ({ document })) }) + json: vi.fn().mockResolvedValue({ items }) }) ); } @@ -91,10 +91,7 @@ describe('DocumentMultiSelect — search and select', () => { const fetchMock = vi.fn().mockResolvedValue({ ok: true, json: vi.fn().mockResolvedValue({ - items: [ - { document: docFactory('d1', 'Already attached') }, - { document: docFactory('d2', 'Not attached') } - ] + items: [docFactory('d1', 'Already attached'), docFactory('d2', 'Not attached')] }) }); vi.stubGlobal('fetch', fetchMock); diff --git a/frontend/src/routes/DocumentList.svelte.test.ts b/frontend/src/routes/DocumentList.svelte.test.ts index 782a60e6..8d1c7b5c 100644 --- a/frontend/src/routes/DocumentList.svelte.test.ts +++ b/frontend/src/routes/DocumentList.svelte.test.ts @@ -20,29 +20,46 @@ const { default: DocumentList } = await import('./DocumentList.svelte'); afterEach(cleanup); -const sender = { id: 's1', displayName: 'Anna Schmidt' }; -const receiver = { id: 'r1', displayName: 'Bert Meier' }; +const sender = { + id: 's1', + lastName: 'Schmidt', + displayName: 'Anna Schmidt', + personType: 'PERSON' as const, + familyMember: false +}; +const receiver = { + id: 'r1', + lastName: 'Meier', + displayName: 'Bert Meier', + personType: 'PERSON' as const, + familyMember: false +}; + +const emptyMatchData = { + titleOffsets: [], + senderMatched: false, + matchedReceiverIds: [], + matchedTagIds: [], + snippetOffsets: [], + summaryOffsets: [] +}; const makeItem = (overrides: Record = {}) => ({ - document: { - id: 'd1', - title: 'Brief 1923', - originalFilename: 'b.pdf', - documentDate: '1923-04-15', - sender, - receivers: [receiver], - tags: [], - thumbnailUrl: null, - contentType: 'application/pdf', - summary: null, - archiveBox: null, - archiveFolder: null, - location: null, - ...overrides - }, - matchData: null, + id: 'd1', + title: 'Brief 1923', + originalFilename: 'b.pdf', + documentDate: '1923-04-15', + sender, + receivers: [receiver], + tags: [], + summary: undefined, + archiveBox: undefined, + archiveFolder: undefined, + location: undefined, + matchData: emptyMatchData, completionPercentage: 0, - contributors: [] + contributors: [], + ...overrides }); describe('DocumentList', () => { @@ -87,8 +104,26 @@ describe('DocumentList', () => { render(DocumentList, { props: { items: [ - makeItem({ id: 'd1', sender: { id: 's1', displayName: 'Anna Schmidt' } }), - makeItem({ id: 'd2', sender: { id: 's2', displayName: 'Bert Meier' } }) + makeItem({ + id: 'd1', + sender: { + id: 's1', + lastName: 'Schmidt', + displayName: 'Anna Schmidt', + personType: 'PERSON', + familyMember: false + } + }), + makeItem({ + id: 'd2', + sender: { + id: 's2', + lastName: 'Meier', + displayName: 'Bert Meier', + personType: 'PERSON', + familyMember: false + } + }) ], canWrite: false, sort: 'SENDER' as const diff --git a/frontend/src/routes/documents/page.svelte.test.ts b/frontend/src/routes/documents/page.svelte.test.ts index 5731ea18..bf7ec810 100644 --- a/frontend/src/routes/documents/page.svelte.test.ts +++ b/frontend/src/routes/documents/page.svelte.test.ts @@ -140,15 +140,12 @@ describe('documents/+ page', () => { data: baseData({ items: [ { - document: { - id: 'd1', - title: 'Brief 1899', - status: 'TRANSCRIBED', - documentDate: '1899-04-14', - summary: '', - originalFilename: 'b1.pdf', - receivers: [] - }, + id: 'd1', + title: 'Brief 1899', + documentDate: '1899-04-14', + originalFilename: 'b1.pdf', + receivers: [], + tags: [], matchData: { titleOffsets: [], senderMatched: false,