26 lines
1.3 KiB
TypeScript
26 lines
1.3 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { z } from "zod";
|
|
import cases from "../../../../tests/fixtures/chart-publication-cases.json";
|
|
import examples from "../../../../tests/fixtures/unified-presentation.jsonl?raw";
|
|
import { createViewSchemas, safeChartInput, safeChartPublicationInput } from "./command-schema";
|
|
|
|
describe("shared chart publication conformance", () => {
|
|
it.each(cases)("$name", ({ chart, accepted }) => {
|
|
expect(safeChartPublicationInput.safeParse(chart).success).toBe(accepted);
|
|
for (const publication of [false, true]) {
|
|
const schema = createViewSchemas(z, publication, true).command;
|
|
expect(schema.safeParse({ action: "open_chart", chart_id: "comparison", evidence_refs: ["dev:synthetic"], chart }).success).toBe(accepted);
|
|
}
|
|
});
|
|
|
|
it("keeps historical mixed charts structurally readable", () => {
|
|
expect(safeChartInput.safeParse(cases.find((item) => item.name === "old mixed charts are read only")!.chart).success).toBe(true);
|
|
});
|
|
|
|
it("accepts every exported command example through the publication schema", () => {
|
|
const schema = createViewSchemas(z, true).command;
|
|
for (const record of examples.trim().split("\n").map((line) => JSON.parse(line)))
|
|
if (record.record_type === "presentation") expect(schema.safeParse(record.command).success).toBe(true);
|
|
});
|
|
});
|