From ac8d0d579636668404e7b71d32a6df3df5025901 Mon Sep 17 00:00:00 2001 From: Marcel Date: Sat, 25 Apr 2026 21:28:10 +0200 Subject: [PATCH] =?UTF-8?q?feat(persons):=20normalize=20SKIP=E2=86=92UNKNO?= =?UTF-8?q?WN=20in=20edit-route=20load=20function?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- .../routes/persons/[id]/edit/+page.server.ts | 4 ++- .../persons/[id]/edit/page.server.test.ts | 33 +++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 frontend/src/routes/persons/[id]/edit/page.server.test.ts diff --git a/frontend/src/routes/persons/[id]/edit/+page.server.ts b/frontend/src/routes/persons/[id]/edit/+page.server.ts index e814737a..dd9fd1af 100644 --- a/frontend/src/routes/persons/[id]/edit/+page.server.ts +++ b/frontend/src/routes/persons/[id]/edit/+page.server.ts @@ -22,7 +22,9 @@ export async function load({ params, fetch, locals }) { throw error(result.response.status, getErrorMessage(code)); } - return { person: result.data!, aliases: aliasesResult.data ?? [] }; + const person = result.data!; + const personType = person.personType === 'SKIP' ? 'UNKNOWN' : person.personType; + return { person: { ...person, personType }, aliases: aliasesResult.data ?? [] }; } export const actions = { diff --git a/frontend/src/routes/persons/[id]/edit/page.server.test.ts b/frontend/src/routes/persons/[id]/edit/page.server.test.ts new file mode 100644 index 00000000..a5e76b1a --- /dev/null +++ b/frontend/src/routes/persons/[id]/edit/page.server.test.ts @@ -0,0 +1,33 @@ +import { describe, it, expect } from 'vitest'; + +type PersonType = 'PERSON' | 'INSTITUTION' | 'GROUP' | 'UNKNOWN' | 'SKIP'; + +function normalizePersonType(raw: string | undefined | null): PersonType { + return raw === 'SKIP' ? 'UNKNOWN' : ((raw ?? 'PERSON') as PersonType); +} + +describe('edit load — SKIP → UNKNOWN normalization', () => { + it('maps SKIP to UNKNOWN', () => { + expect(normalizePersonType('SKIP')).toBe('UNKNOWN'); + }); + + it('passes PERSON through unchanged', () => { + expect(normalizePersonType('PERSON')).toBe('PERSON'); + }); + + it('passes INSTITUTION through unchanged', () => { + expect(normalizePersonType('INSTITUTION')).toBe('INSTITUTION'); + }); + + it('passes GROUP through unchanged', () => { + expect(normalizePersonType('GROUP')).toBe('GROUP'); + }); + + it('passes UNKNOWN through unchanged', () => { + expect(normalizePersonType('UNKNOWN')).toBe('UNKNOWN'); + }); + + it('defaults null to PERSON', () => { + expect(normalizePersonType(null)).toBe('PERSON'); + }); +});