70 lines
2.2 KiB
JavaScript
70 lines
2.2 KiB
JavaScript
import assert from "node:assert/strict";
|
|
import { test } from "vitest";
|
|
|
|
import {
|
|
checkJsonPolicy,
|
|
hasValidSchemaVersion,
|
|
isSfOwnedJsonContract,
|
|
} from "./check-versioned-json.mjs";
|
|
|
|
test("check-versioned-json: parses every JSON file", () => {
|
|
const files = {
|
|
"package.json": '{"version":"1.0.0"}',
|
|
"src/resources/extensions/sf/learning/data/model-benchmarks.json": "{bad",
|
|
};
|
|
|
|
const result = checkJsonPolicy(Object.keys(files), (path) => files[path]);
|
|
|
|
assert.equal(result.failures.length, 1);
|
|
assert.match(
|
|
result.failures[0],
|
|
/^src\/resources\/extensions\/sf\/learning\/data\/model-benchmarks\.json: invalid JSON/,
|
|
);
|
|
assert.equal(result.filesParsed, 2);
|
|
});
|
|
|
|
test("check-versioned-json: skips deleted tracked files", () => {
|
|
const result = checkJsonPolicy(["deleted.json", "package.json"], (path) => {
|
|
if (path === "deleted.json") {
|
|
const error = new Error("ENOENT");
|
|
error.code = "ENOENT";
|
|
throw error;
|
|
}
|
|
return '{"version":"1.0.0"}';
|
|
});
|
|
|
|
assert.deepEqual(result.failures, []);
|
|
assert.equal(result.filesParsed, 1);
|
|
});
|
|
|
|
test("check-versioned-json: requires numeric schemaVersion for SF contracts", () => {
|
|
const files = {
|
|
"src/resources/extensions/sf/learning/data/unit-weights.json":
|
|
'{"_meta":{"schemaVersion":1}}',
|
|
"src/resources/extensions/sf/workflow-templates/registry.json":
|
|
'{"schemaVersion":1,"templates":{}}',
|
|
"src/resources/extensions/sf/learning/data/model-benchmarks.json":
|
|
'{"_meta":{"version":"1"}}',
|
|
"src/resources/extensions/sf/extension-manifest.json":
|
|
'{"version":"1.0.0"}',
|
|
};
|
|
|
|
const result = checkJsonPolicy(Object.keys(files), (path) => files[path]);
|
|
|
|
assert.deepEqual(result.failures, [
|
|
"src/resources/extensions/sf/learning/data/model-benchmarks.json: missing numeric schemaVersion marker (top-level or _meta)",
|
|
]);
|
|
assert.equal(result.contractsChecked, 3);
|
|
});
|
|
|
|
test("check-versioned-json: treats extension version as component version", () => {
|
|
assert.equal(
|
|
isSfOwnedJsonContract(
|
|
"src/resources/extensions/sf/extension-manifest.json",
|
|
),
|
|
false,
|
|
);
|
|
assert.equal(hasValidSchemaVersion({ version: "1.0.0" }), false);
|
|
assert.equal(hasValidSchemaVersion({ schemaVersion: 1 }), true);
|
|
assert.equal(hasValidSchemaVersion({ _meta: { schemaVersion: 1 } }), true);
|
|
});
|