64 lines
1.6 KiB
JavaScript
64 lines
1.6 KiB
JavaScript
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
|
|
import {
|
|
diffRegistrySnapshots,
|
|
validateBreakingEvidence,
|
|
verifyRegistryBaselineApproval,
|
|
} from "./lib/registry-compatibility.mjs";
|
|
|
|
const fixtures = JSON.parse(
|
|
await readFile(
|
|
"tests/fixtures/registry/compatibility/semantic-diff.json",
|
|
"utf8",
|
|
),
|
|
);
|
|
const results = [];
|
|
for (const fixture of fixtures.cases) {
|
|
const actual = diffRegistrySnapshots(fixture.before, fixture.after);
|
|
results.push({
|
|
id: fixture.id,
|
|
expected: fixture.expected,
|
|
actual: actual.impact,
|
|
passed: actual.impact === fixture.expected,
|
|
});
|
|
}
|
|
|
|
const breaking = diffRegistrySnapshots(
|
|
fixtures.breakingEvidence.before,
|
|
fixtures.breakingEvidence.after,
|
|
);
|
|
const missingEvidence = validateBreakingEvidence(breaking, {
|
|
schemaVersion: 1,
|
|
changes: [],
|
|
});
|
|
results.push({
|
|
id: "breaking-evidence-required",
|
|
expected: false,
|
|
actual: missingEvidence.passed,
|
|
passed: !missingEvidence.passed,
|
|
});
|
|
|
|
const tamperedApproval = verifyRegistryBaselineApproval(
|
|
fixtures.tamperedApproval.snapshot,
|
|
fixtures.tamperedApproval.approval,
|
|
);
|
|
results.push({
|
|
id: "tampered-baseline-digest",
|
|
expected: false,
|
|
actual: tamperedApproval.passed,
|
|
passed: !tamperedApproval.passed,
|
|
});
|
|
|
|
await mkdir("artifacts/quality", { recursive: true });
|
|
await writeFile(
|
|
"artifacts/quality/registry-compatibility-fixtures.json",
|
|
`${JSON.stringify({ schemaVersion: 1, results }, null, 2)}\n`,
|
|
);
|
|
if (results.some((result) => !result.passed)) {
|
|
process.stderr.write("Registry compatibility fixture failed.\n");
|
|
process.exit(1);
|
|
}
|
|
process.stdout.write(
|
|
`Registry compatibility fixtures: ${results.length} PASS\n`,
|
|
);
|