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>
35 lines
1.2 KiB
TypeScript
35 lines
1.2 KiB
TypeScript
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",
|
||
});
|
||
}
|