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/); });