Files
quixos-protocol/test/inspection.test.ts

37 lines
1.9 KiB
TypeScript

import assert from "node:assert/strict";
import { test } from "node:test";
import { loadReaderWorkspace } from "./reader-fixture.js";
import { compileExecutionPlan, compileQueryProgram } from "../src/execution-world/index.js";
import { compileInspectionTemplates } from "../src/execution-world/inspection.js";
test("public member inspection installs a finite set of typed lazy templates", async () => {
const plan = compileExecutionPlan(await loadReaderWorkspace());
const result = compileInspectionTemplates(plan);
assert.ok(result.templates.length);
const document = result.templates.find(
(template) =>
template.members.some((member) => member.name === "content") &&
template.members.some((member) => member.name === "highlights"),
)!;
assert.ok(document.inputs && document.view && document.server && document.completeInputs && document.completeView);
assert.equal(document.completeView.sourceQuery, document.completeInputs.query);
assert.equal(document.view.sourceQuery, document.inputs.query);
assert.ok(document.members.find((member) => member.name === "highlights")?.many);
assert.ok(!document.members.some((member) => member.name === "revise"));
const compiled = compileQueryProgram(plan) as {
queries: { id: string; selection: { selection: { conditions: unknown[] }[] }[] }[];
};
for (const descriptor of result.contracts) {
const query = compiled.queries.find(
(query) => query.id === JSON.stringify([descriptor.package, descriptor.query]),
)!;
assert.ok(query);
assert.ok(
query.selection[0]!.selection.every((field) => field.conditions.length === 1),
"Each field admission is independently selected",
);
}
assert.ok(!JSON.stringify(result.templates).includes("slot:"));
assert.equal(result.queries.length, result.contracts.length);
assert.ok(result.queries.length <= plan.definition.workspace.interfaceImports.length * 5);
});