test(integration): add real-stack integration test suite with PGlite
- 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
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
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;`
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user