diff --git a/web/package.json b/web/package.json index 3ee904a..6a94c27 100644 --- a/web/package.json +++ b/web/package.json @@ -6,7 +6,7 @@ "dev": "next dev", "build": "next build", "start": "next start", - "test": "vitest run", + "test": "DATABASE_URL=postgresql://lyra:lyra@localhost:5432/lyra_test vitest run", "postinstall": "prisma generate", "db:migrate": "prisma migrate deploy", "db:dev": "prisma migrate dev" diff --git a/web/src/test/setup.ts b/web/src/test/setup.ts index 5d0b12e..d4bb9b1 100644 --- a/web/src/test/setup.ts +++ b/web/src/test/setup.ts @@ -2,6 +2,13 @@ import { beforeEach } from "vitest"; import { prisma } from "@/lib/db"; beforeEach(async () => { + const dbName = (process.env.DATABASE_URL ?? "").split("/").pop()?.split("?")[0] ?? ""; + if (!dbName.endsWith("_test")) { + throw new Error( + `refusing to run test cleanup against non-test database '${dbName}'. ` + + "Set DATABASE_URL to a database whose name ends in '_test' (e.g. lyra_test).", + ); + } // Job cascades from Request; Request.monitoredReleaseId is SetNull. Delete children first. await prisma.job.deleteMany(); await prisma.request.deleteMany(); diff --git a/worker/tests/conftest.py b/worker/tests/conftest.py index e7a7fb0..db298f3 100644 --- a/worker/tests/conftest.py +++ b/worker/tests/conftest.py @@ -1,12 +1,24 @@ import os +os.environ.setdefault("DATABASE_URL", "postgresql://lyra:lyra@localhost:5432/lyra_test") + import psycopg import pytest +def _require_test_db(dsn: str) -> None: + name = dsn.rsplit("/", 1)[-1].split("?")[0] + if not name.endswith("_test"): + raise RuntimeError( + f"refusing to run destructive test fixtures against non-test database '{name}'. " + "Point DATABASE_URL at a database whose name ends in '_test' (e.g. lyra_test)." + ) + + @pytest.fixture() def conn(): dsn = os.environ["DATABASE_URL"] + _require_test_db(dsn) connection = psycopg.connect(dsn) # Clean up any pre-existing rows before the test runs (Job cascades from Request). with connection.cursor() as cur: