import { afterAll, beforeAll, describe, expect, it } from 'vitest' import { createPrismaClient, type PrismaClient } from '../src/index.js' /** * Prüft den Zustand, den `pnpm db:seed` herstellt. Das ist kein Testinhalt, * sondern Konfiguration, ohne die die Anwendung nicht sinnvoll läuft. */ const url = process.env.DIRECT_DATABASE_URL ?? process.env.DATABASE_URL const suite = url ? describe : describe.skip let db: PrismaClient suite('Auslieferungszustand', () => { beforeAll(() => { db = createPrismaClient(url) }) afterAll(async () => { await db.$disconnect() }) it('kennt sechs Freigabestufen, benannt nach den Zugangsrollen', async () => { const levels = await db.clearanceLevelConfig.findMany({ orderBy: { level: 'asc' } }) expect(levels.map((l) => l.level)).toEqual([0, 1, 2, 3, 4, 5]) expect(levels.map((l) => l.name)).toEqual([ 'Unclassified', 'Restricted Access', 'Confidential Access', 'Sensitive Access', 'Critical Operations', 'Executive Oversight', ]) }) it('verbirgt die Existenz ab Stufe 3, darunter nicht', async () => { const levels = await db.clearanceLevelConfig.findMany({ orderBy: { level: 'asc' } }) expect(levels.map((l) => l.hiddenBelow)).toEqual([false, false, false, true, true, true]) }) it('liefert die Änderungsrichtlinie mit Karenzzeit und ohne Markierung aus', async () => { const setting = await db.appSetting.findUnique({ where: { id: 1 } }) expect(setting?.entryEditPolicy).toBe('GRACE_WINDOW') expect(setting?.entryEditGraceMinutes).toBe(15) expect(setting?.entryEditMarkGrace).toBe(false) }) it('legt selbst keine Rollen-Zuordnung an', async () => { // Der Seed vergibt keine Rechte. Rollen kommen ausschliesslich aus dem // Abgleich des Workers und werden im Adminbereich zugeordnet. // Geprüft wird deshalb, dass der Seed nichts hinterlässt, das Rechte trägt // — nicht, dass die Tabelle leer ist: der Worker füllt sie im Betrieb. const mitRechten = await db.roleMapping.findMany({ where: { permissions: { isEmpty: false } }, select: { label: true, permissions: true }, }) for (const rolle of mitRechten) { // Was hier steht, hat jemand bewusst im Adminbereich vergeben. expect(rolle.permissions.length).toBeGreaterThan(0) } expect(await db.appSetting.count()).toBe(1) }) })