import { beforeEach, describe, expect, it } from "vitest"; import { datenbankLeeren, datenbankVerfuegbar, testPrisma } from "./helpers/db"; /** * Regeln, die in der Datenbank selbst stehen – sie gelten auch, wenn jemand an der * Service-Schicht vorbei schreibt. Jede ist hier namentlich aufgeführt. */ describe.runIf(datenbankVerfuegbar)("Datenbankregeln", () => { beforeEach(datenbankLeeren); it("protokoll_nur_anhaengen: Einträge lassen sich weder ändern noch löschen", async () => { const eintrag = await testPrisma.protokoll.create({ data: { quelle: "SYSTEM", aktion: "Test" } }); await expect( testPrisma.protokoll.update({ where: { id: eintrag.id }, data: { aktion: "Gefälscht" } }), ).rejects.toThrow(/nur anhängbar/); await expect(testPrisma.protokoll.delete({ where: { id: eintrag.id } })).rejects.toThrow(/nur anhängbar/); }); it("protokoll_nur_anhaengen: das Löschen eines Benutzers lässt seine Einträge stehen", async () => { const benutzer = await testPrisma.benutzer.create({ data: { benutzername: "weg", anzeigename: "Weg" } }); await testPrisma.protokoll.create({ data: { quelle: "WEB", aktion: "Angemeldet", benutzerId: benutzer.id }, }); await testPrisma.benutzer.delete({ where: { id: benutzer.id } }); const eintraege = await testPrisma.protokoll.findMany(); expect(eintraege).toHaveLength(1); expect(eintraege[0]?.benutzerId).toBeNull(); }); it("benutzer_benutzername_format: nur Kleinbuchstaben, Ziffern, . _ -", async () => { await expect( testPrisma.benutzer.create({ data: { benutzername: "Florian Wilde", anzeigename: "x" } }), ).rejects.toThrow(/benutzer_benutzername_format/); }); });