import { describe, expect, it } from 'vitest' import { MAX_PARTICIPANT_DRAFTS, parseParticipantDrafts, CASE_STATUSES, } from '@/lib/cases/terms' import { caseText } from '@/lib/i18n/cases' /** * Die Zerlegung der Beteiligtenzeilen aus dem Formular „Neue Fallakte". * * Sie entscheidet, wer mit welcher Rolle in eine Akte kommt - und seit die * Rolle über den Zugriff entscheidet (nur Arbeitsrollen öffnen die Akte, siehe * lib/cases/terms.ts), darf eine erfundene Rolle hier nicht durchrutschen. */ describe('Beteiligte beim Anlegen', () => { it('nimmt Konten und Personalakten mit ihrer Rolle', () => { expect( parseParticipantDrafts(['user:123|LEAD', 'file:abc|SUSPECT']), ).toEqual([ { kind: 'user', id: '123', role: 'LEAD' }, { kind: 'file', id: 'abc', role: 'SUSPECT' }, ]) }) it('lässt Unsinn weg, statt die Akte scheitern zu lassen', () => { expect( parseParticipantDrafts([ 'user:123|ERFUNDEN', // Rolle gibt es nicht 'irgendwas:1|LEAD', // Art gibt es nicht 'user:|LEAD', // keine Kennung 'user:1', // keine Rolle '', 42, null, ]), ).toEqual([]) }) it('nimmt dieselbe Person in zwei Rollen, aber nicht zweimal in derselben', () => { // Zeuge und Betroffener zugleich kommt vor. Zweimal Zeuge ist ein Versehen. expect( parseParticipantDrafts(['file:a|WITNESS', 'file:a|SUBJECT', 'file:a|WITNESS']), ).toEqual([ { kind: 'file', id: 'a', role: 'WITNESS' }, { kind: 'file', id: 'a', role: 'SUBJECT' }, ]) }) it('nimmt nicht beliebig viele', () => { const viele = Array.from({ length: 80 }, (_, i) => `file:p${i}|WITNESS`) expect(parseParticipantDrafts(viele)).toHaveLength(MAX_PARTICIPANT_DRAFTS) }) }) describe('Zustände einer Fallakte', () => { it('hat für jeden Zustand einen Namen und eine Erklärung', () => { // Der Filter zeigte fünf von sieben Zuständen - ausgerechnet „Entwurf" und // „Versiegelt" fehlten, also die beiden häufigsten in der Liste. Diese // Prüfung fällt auf, wenn wieder einer vergessen wird. for (const status of CASE_STATUSES) { expect(caseText.statusNames[status], status).toBeTruthy() expect(caseText.statusHints[status], status).toBeTruthy() } expect(CASE_STATUSES).toHaveLength(7) }) })