Files
HiveGrid-Wireframes/03 Quellen und Referenzen/hivegrid-cloud/scripts/verify-prisma-baseline.test.mjs
T

76 lines
3.4 KiB
JavaScript

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");
});
});