Files
ProxLedger/tests/global-setup.ts
T
florian.wildeandClaude Opus 5 293bcf4b5a feat(db): Datenmodell, erste Migration und Seed (#003)
Prisma 7.10 mit Postgres-Adapter, 23 Modelle inklusive Rechnungen mit Positionen,
Seed fuer Administrator, Warnregeln und Demo-Daten, Testdatenbank fuer Vitest.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 20:32:04 +02:00

35 lines
1.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { execFileSync } from "node:child_process";
import { Client } from "pg";
import "dotenv/config";
/**
* Legt die Testdatenbank an (falls nötig) und spielt alle Migrationen ein.
* Ohne `TEST_DATABASE_URL` werden die datenbankgestützten Tests übersprungen.
*/
export default async function setup() {
const url = process.env.TEST_DATABASE_URL;
if (!url) {
console.warn("TEST_DATABASE_URL ist nicht gesetzt – Datenbanktests werden übersprungen.");
return;
}
const ziel = new URL(url);
const datenbank = ziel.pathname.replace(/^\//, "");
const verwaltung = new URL(url);
verwaltung.pathname = "/postgres";
const client = new Client({ connectionString: verwaltung.toString() });
await client.connect();
const vorhanden = await client.query("SELECT 1 FROM pg_database WHERE datname = $1", [datenbank]);
if (vorhanden.rowCount === 0) {
// Datenbanknamen lassen sich nicht parametrisieren; er stammt aus der eigenen Konfiguration.
await client.query(`CREATE DATABASE "${datenbank.replace(/"/g, "")}"`);
}
await client.end();
execFileSync("npx", ["prisma", "migrate", "deploy"], {
env: { ...process.env, DATABASE_URL: url },
stdio: "inherit",
});
}