schemeta/tests/schema-regression.test.js

35 lines
1.5 KiB
JavaScript

import test from "node:test";
import assert from "node:assert/strict";
import schema from "../frontend/schemeta.schema.json" with { type: "json" };
test("schema keeps streamlined symbol shorthand support", () => {
const symbol = schema?.$defs?.symbol;
assert.ok(symbol);
assert.deepEqual(symbol.required, []);
assert.equal(symbol.properties.template_name.type, "string");
assert.ok(Array.isArray(symbol.examples));
assert.ok(symbol.examples.some((v) => v.template_name === "resistor"));
assert.ok(symbol.examples.some((v) => v.category === "generic"));
});
test("schema supports built-in instance.part shortcuts without explicit symbols", () => {
const instance = schema?.$defs?.instance;
assert.ok(instance);
assert.ok(Array.isArray(instance.anyOf));
assert.ok(instance.anyOf.some((rule) => Array.isArray(rule.required) && rule.required.includes("symbol")));
assert.ok(instance.anyOf.some((rule) => Array.isArray(rule.required) && rule.required.includes("part")));
const partEnum = instance.properties?.part?.enum ?? [];
assert.ok(partEnum.includes("resistor"));
assert.ok(partEnum.includes("capacitor"));
assert.ok(partEnum.includes("generic"));
});
test("schema preserves per-pin UI edit metadata contract", () => {
const pinUi = schema?.$defs?.instance?.properties?.properties?.properties?.pin_ui;
assert.ok(pinUi);
const pinUiEntry = pinUi.additionalProperties;
assert.ok(pinUiEntry);
assert.equal(pinUiEntry.properties.show_net_label.type, "boolean");
});