import { PrismaPg } from "@prisma/adapter-pg"; import { PrismaClient } from "@/generated/prisma/client"; const url = process.env["TEST_DATABASE_URL"]; // In CI darf nichts still übersprungen werden – dort lieber hart abbrechen. if (!url && process.env["CI"]) { throw new Error("TEST_DATABASE_URL fehlt. In CI dürfen die Datenbanktests nicht übersprungen werden."); } export const datenbankVerfuegbar = Boolean(url); export const testPrisma = new PrismaClient({ adapter: new PrismaPg({ connectionString: url ?? "postgresql://localhost:5437/proxdeploy_test" }), }); /** * Leert alle Tabellen. Das Protokoll ist per Trigger nur anhängbar – TRUNCATE löst * Zeilen-Trigger nicht aus und ist deshalb der einzige Weg, es zu leeren. */ export async function datenbankLeeren(): Promise { const tabellen = await testPrisma.$queryRaw<{ tablename: string }[]>` SELECT tablename FROM pg_tables WHERE schemaname = 'public' AND tablename NOT LIKE '_prisma%' `; if (tabellen.length === 0) return; const liste = tabellen.map((t) => `"public"."${t.tablename}"`).join(", "); await testPrisma.$executeRawUnsafe(`TRUNCATE ${liste} RESTART IDENTITY CASCADE`); }