Files
quixos-protocol/test/controller-registry.test.ts
T

51 lines
2.5 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
import { readFile } from "node:fs/promises";
import { compileCapabilityResourceSource } from "../src/capability-language/index.js";
import { compileQuery } from "../src/query/compile.js";
import { parseControllerCatalog } from "../src/capability-model/controllers.js";
const source = { repository: "https://example.test/device.git", commit: "a".repeat(40) };
test("controller discovery requires complete bounded accepted-state membership", async () => {
const result = compileCapabilityResourceSource(
await readFile("test/fixtures/controller-device/DeviceController.qx", "utf8"),
{ source },
);
assert.ok(result.ok && result.resource.kind === "interface", JSON.stringify(result.diagnostics));
const iface = result.resource.revision;
const pkg = compileCapabilityResourceSource(
'import interface DeviceController;package Driver id "driver" revision "driver@1" {query Enabled id "enabled" root workspace DeviceController document "enabled.graphql" operation "Enabled" {max rows 100;}}',
{ source, environment: { interfaces: new Map([["DeviceController", iface]]), interfaceClosure: [iface] } },
);
assert.ok(pkg.ok && pkg.resource.kind === "package", JSON.stringify(pkg.diagnostics));
const declaration = pkg.resource.revision.queries![0]!;
const metadata = JSON.stringify({
schemaVersion: 1,
controllers: [
{
id: "driver",
registry: "enabled",
subject: "device-controller@1",
snapshot: "device:snapshot:call",
remote: "device:apply:call",
input: "value",
},
],
});
const check = async (document: string) =>
parseControllerCatalog(metadata, [iface], [await compileQuery(declaration, [iface], async () => document)]);
assert.equal(
(await check("query Enabled {root {objects(all:64,where:{enabled:{eq:true}}) {entries {node {_camino {ref}}}}}}"))
.length,
1,
);
for (const document of [
"query Enabled {root {objects(first:64) {entries {node {_camino {ref}}}}}}",
"query Enabled {root {objects(all:65) {entries {node {_camino {ref}}}}}}",
"query Enabled {root {devices:objects(all:64) {entries {node {_camino {ref}}}}}}",
"query Enabled {root {objects(all:64) {entries {node {enabled}}}}}",
"query Enabled($enabled:Boolean!) {root {objects(all:64,where:{enabled:{eq:$enabled}}) {entries {node {_camino {ref}}}}}}",
])
await assert.rejects(check(document), /registry|Controller/);
assert.throws(() => parseControllerCatalog(metadata, [iface], []), /registry/);
});