docs(legal)+test: Compliance-Dokumentation & Consent-Unit-Tests (v1.7.4)
Teil 5 des Compliance-Updates: - docs/legal/: data-processing-inventory.md, subprocessors.md, technical-organizational-measures.md, retention-and-deletion.md, incident-response.md, licenses-and-attributions.md — Ist-Zustand aus der Analyse, offene Punkte als Platzhalter - Reine Consent-Regeln nach src/lib/legal-rules.ts ausgelagert (kein Prisma) + Texte nach src/lib/legal-content.ts (7 Pflichtbestätigungen) — für Testbarkeit - Vitest eingerichtet (vitest.config.ts, test-Script); 13 Tests grün: Pflicht-Dokumenttypen, Re-Consent bei neuer Version, normale Benutzer ≠ Org-Vertreter, 7 Org-Bestätigungen, Platzhalter-Erkennung, keine erfundenen Subprozessoren Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
32
src/config/__tests__/legal-config.test.ts
Normal file
32
src/config/__tests__/legal-config.test.ts
Normal file
@@ -0,0 +1,32 @@
|
||||
import { describe, it, expect } from 'vitest'
|
||||
import { isPlaceholder, legal } from '@/config/legal'
|
||||
|
||||
describe('isPlaceholder', () => {
|
||||
it('erkennt Platzhalter im Format [NAME]', () => {
|
||||
expect(isPlaceholder('[POSTADRESSE]')).toBe(true)
|
||||
expect(isPlaceholder('[RECHTLICHER NAME DES BETREIBERS]')).toBe(true)
|
||||
})
|
||||
it('erkennt echte Werte als Nicht-Platzhalter', () => {
|
||||
expect(isPlaceholder('Musterstrasse 1, 8000 Zürich')).toBe(false)
|
||||
expect(isPlaceholder('app@lageplan.ch')).toBe(false)
|
||||
})
|
||||
it('leere Werte gelten als Platzhalter (fehlend)', () => {
|
||||
expect(isPlaceholder('')).toBe(true)
|
||||
expect(isPlaceholder(null)).toBe(true)
|
||||
expect(isPlaceholder(undefined)).toBe(true)
|
||||
})
|
||||
})
|
||||
|
||||
describe('legal config', () => {
|
||||
it('führt genau 5 Rechtsdokumenttypen', () => {
|
||||
expect(Object.keys(legal.documents).sort()).toEqual(
|
||||
['dataProcessingAgreement', 'organizationDeclaration', 'privacy', 'responsibleUse', 'terms']
|
||||
)
|
||||
})
|
||||
it('listet nur real genutzte Subprozessoren (keine erfundenen wie Google Analytics)', () => {
|
||||
const names = legal.processors.map(p => p.name.toLowerCase())
|
||||
expect(names.some(n => n.includes('stripe'))).toBe(true)
|
||||
expect(names.some(n => n.includes('analytics'))).toBe(false)
|
||||
expect(names.some(n => n.includes('mapbox'))).toBe(false)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user