Files
AfiS-Aktensystem/web/tests/beteiligte-anlegen.test.ts
T
Harlekin e0b03ea336
Prüfung / Lint, Typen, Tests (push) Canceled after 0s
Prüfung / Images bauen (pdf) (push) Canceled after 0s
Prüfung / Images bauen (web) (push) Canceled after 0s
Prüfung / Images bauen (worker) (push) Canceled after 0s
Images / bauen (pdf, docker/pdf.Dockerfile) (push) Canceled after 0s
Images / bauen (web, docker/web.Dockerfile) (push) Canceled after 0s
Images / bauen (worker, docker/worker.Dockerfile) (push) Canceled after 0s
Gedankenstriche durch Bindestriche ersetzt
375 Vorkommen in 210 Dateien. Betrifft Kommentare, Oberflaechentexte und die
README; an keiner Stelle Bedeutung, nur Zeichensetzung.
2026-09-04 08:54:52 +02:00

68 lines
2.3 KiB
TypeScript

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)
})
})