27 lines
1.2 KiB
TypeScript
27 lines
1.2 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import { readFileSync } from "node:fs";
|
|
import test from "node:test";
|
|
|
|
const schemaUrl = new URL("../../../schemas/diagram-ir-v2.schema.json", import.meta.url);
|
|
|
|
test("published IR v2 schema defines pages, geometry, waypoints, and provenance", () => {
|
|
const schema = JSON.parse(readFileSync(schemaUrl, "utf8")) as {
|
|
properties: Record<string, unknown>;
|
|
$defs: Record<string, unknown>;
|
|
};
|
|
assert.ok(schema.properties.pages);
|
|
assert.ok(schema.properties.provenance);
|
|
assert.ok(schema.$defs.geometry);
|
|
const geometry = schema.$defs.geometry as { required?: string[]; properties?: Record<string, unknown>; allOf?: unknown };
|
|
assert.equal(geometry.allOf, undefined);
|
|
assert.deepEqual(geometry.required, ["x", "y", "width", "height"]);
|
|
assert.ok(geometry.properties?.width);
|
|
assert.ok(schema.$defs.point);
|
|
assert.ok(schema.$defs.page);
|
|
const page = schema.$defs.page as { properties?: { title?: { pattern?: string } } };
|
|
const node = schema.$defs.node as { properties?: { label?: { pattern?: string } } };
|
|
assert.equal(page.properties?.title?.pattern, "\\S");
|
|
assert.equal(node.properties?.label?.pattern, "\\S");
|
|
assert.ok(schema.$defs.edge);
|
|
});
|