Host checked adapter-object controllers through bounded registries (WI-13)
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
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 {_qx {ref}}}}}}"))
|
||||
.length,
|
||||
1,
|
||||
);
|
||||
for (const document of [
|
||||
"query Enabled {root {objects(first:64) {entries {node {_qx {ref}}}}}}",
|
||||
"query Enabled {root {objects(all:65) {entries {node {_qx {ref}}}}}}",
|
||||
"query Enabled {root {devices:objects(all:64) {entries {node {_qx {ref}}}}}}",
|
||||
"query Enabled {root {objects(all:64) {entries {node {enabled}}}}}",
|
||||
"query Enabled($enabled:Boolean!) {root {objects(all:64,where:{enabled:{eq:$enabled}}) {entries {node {_qx {ref}}}}}}",
|
||||
])
|
||||
await assert.rejects(check(document), /registry|Controller/);
|
||||
assert.throws(() => parseControllerCatalog(metadata, [iface], []), /registry/);
|
||||
});
|
||||
Reference in New Issue
Block a user