feat: harden test and registry evidence
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
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`,
|
||||
);
|
||||
Reference in New Issue
Block a user