- PGlite (in-memory WASM Postgres) hosted in a child process, exposed via TCP socket; real migrations applied with prisma migrate deploy - Vitest harness (vitest.integration.config.ts, global-setup spawns PGlite + built Nuxt server, per-test TRUNCATE, factories, cookie-jar API client); no mocks, zero production code changes - 50 tests across auth, hunt, team, submit, review, showcase, diashow incl. SuperJSON envelope check; *.itest.ts keeps bun test untouched - CI: parallel unit + integration jobs in .github/workflows/test.yml - tests/ covered by nuxt typecheck via tests/tsconfig.json reference
20 lines
694 B
TypeScript
20 lines
694 B
TypeScript
import { prisma } from '../integration/setup';
|
|
|
|
/**
|
|
* Truncates every table in the public schema (except _prisma_migrations)
|
|
* so each test starts from an empty database. Sequences are reset to keep
|
|
* autoincrement ids predictable.
|
|
*/
|
|
export async function resetDatabase() {
|
|
const tables = await prisma.$queryRawUnsafe<{ tablename: string }[]>(
|
|
`SELECT tablename::text AS tablename FROM pg_tables
|
|
WHERE schemaname = 'public' AND tablename <> '_prisma_migrations'`
|
|
);
|
|
if (tables.length === 0) return;
|
|
|
|
const list = tables.map(({ tablename }) => `"public"."${tablename}"`);
|
|
await prisma.$executeRawUnsafe(
|
|
`TRUNCATE ${list.join(', ')} RESTART IDENTITY CASCADE;`
|
|
);
|
|
}
|