import { execSync } from 'node:child_process'; import path from 'node:path'; import { config } from 'dotenv'; import pg from 'pg'; /** Отдельная БД barev_test рядом с основной; схема накатывается миграциями */ export default async function setup() { config({ path: path.resolve(import.meta.dirname, '../../../.env'), quiet: true }); const base = new URL(process.env.DATABASE_URL!); const testUrl = new URL(base); // TEST_DB_NAME — своя тестовая БД (например, для второй рабочей копии) const name = process.env.TEST_DB_NAME ?? 'barev_test'; testUrl.pathname = `/${name}`; const admin = new pg.Client({ connectionString: base.toString() }); await admin.connect(); const exists = await admin.query('SELECT 1 FROM pg_database WHERE datname = $1', [name]); if (!exists.rowCount) await admin.query(`CREATE DATABASE "${name}"`); await admin.end(); execSync('npx prisma migrate deploy', { cwd: path.resolve(import.meta.dirname, '../../db'), env: { ...process.env, DATABASE_URL: testUrl.toString() }, stdio: 'pipe', }); process.env.TEST_DATABASE_URL = testUrl.toString(); }