import fs from "node:fs"; import os from "node:os"; import path from "node:path"; import { afterEach, describe, expect, it } from "vitest"; import { verifyPrismaBaseline } from "./verify-prisma-baseline.mjs"; const fixtures = []; function copyBaselineFixture() { const fixture = fs.mkdtempSync(path.join(os.tmpdir(), "hivegrid-prisma-baseline-")); fixtures.push(fixture); fs.mkdirSync(path.join(fixture, "prisma"), { recursive: true }); fs.cpSync(path.join(process.cwd(), "prisma/migrations"), path.join(fixture, "prisma/migrations"), { recursive: true }); fs.copyFileSync(path.join(process.cwd(), "prisma/baseline-legacy-manifest.json"), path.join(fixture, "prisma/baseline-legacy-manifest.json")); fs.copyFileSync(path.join(process.cwd(), "prisma/baseline-legacy-migrations.tar.gz"), path.join(fixture, "prisma/baseline-legacy-migrations.tar.gz")); return fixture; } afterEach(() => { while (fixtures.length > 0) fs.rmSync(fixtures.pop(), { recursive: true, force: true }); }); describe("verifyPrismaBaseline", () => { it("accepts the committed consolidated baseline", () => { expect(verifyPrismaBaseline(process.cwd()).failures).toEqual([]); }); it("fails when the active baseline no longer matches the adoption manifest", () => { const fixture = copyBaselineFixture(); fs.appendFileSync(path.join(fixture, "prisma/migrations/00000000000000_hivegrid_baseline/migration.sql"), "\n-- changed\n"); expect(verifyPrismaBaseline(fixture).failures).toContain( "baseline checksum, audit archive, migration name, or source revision differs from the legacy manifest" ); }); it("fails when the legacy audit archive no longer matches the adoption manifest", () => { const fixture = copyBaselineFixture(); fs.appendFileSync(path.join(fixture, "prisma/baseline-legacy-migrations.tar.gz"), "changed"); expect(verifyPrismaBaseline(fixture).failures).toContain( "baseline checksum, audit archive, migration name, or source revision differs from the legacy manifest" ); }); it("fails when a reviewed historical checksum variant is not pinned to a source revision", () => { const fixture = copyBaselineFixture(); const manifestPath = path.join(fixture, "prisma/baseline-legacy-manifest.json"); const manifest = JSON.parse(fs.readFileSync(manifestPath, "utf8")); delete manifest.legacyChecksumVariants[0].sourceCommit; fs.writeFileSync(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`); expect(verifyPrismaBaseline(fixture).failures).toContain( "legacy adoption manifest must pin exactly 10 unique reviewed checksum variants with source revisions" ); }); it("accepts later forward-only migrations after the baseline", () => { const fixture = copyBaselineFixture(); fs.mkdirSync(path.join(fixture, "prisma/migrations/20260723000000_unreviewed")); fs.writeFileSync(path.join(fixture, "prisma/migrations/20260723000000_unreviewed/migration.sql"), "SELECT 1;\n"); expect(verifyPrismaBaseline(fixture).failures).toEqual([]); }); it("fails when a migration sorts before the baseline", () => { const fixture = copyBaselineFixture(); fs.mkdirSync(path.join(fixture, "prisma/migrations/00000000000000_aaa"), { recursive: true }); fs.writeFileSync(path.join(fixture, "prisma/migrations/00000000000000_aaa/migration.sql"), "SELECT 1;\n"); expect(verifyPrismaBaseline(fixture).failures).toContain("active Prisma history must start with 00000000000000_hivegrid_baseline"); }); });