Files
quixos-protocol/test/query-workspace.test.ts
T

30 lines
1.5 KiB
TypeScript

import assert from "node:assert/strict";
import test from "node:test";
import { queryWorkspaceFixture } from "./fixtures/query-workspace.js";
import { linkQueries } from "../src/query/link.js";
test("query fixture links generic collections, both implementations, and native getter/RPC setter", async () => {
const { workspace } = await queryWorkspaceFixture();
const query = workspace.linkedQueries.find((query) => query.id.endsWith(":upcoming"))!;
assert.ok(query);
assert.equal(query.fields.filter((field) => field.memberId === "title").length, 2);
assert.ok(
query.fields.filter((field) => field.memberId === "title").every((field) => field.binding.kind === "state"),
);
const broken = structuredClone(workspace);
const facts = broken.interfaceImports.find((iface) => iface.displayName === "TaskFacts")!;
const title = facts.members.find((member) => member.id === "title")!;
assert.equal(title.kind, "value");
delete title.queryRead;
assert.throws(() => linkQueries(broken), /changed/);
const aggregateBroken = structuredClone(workspace);
const rank = aggregateBroken.interfaceImports
.find((i) => i.displayName === "TaskFacts")!
.members.find((m) => m.id === "rank")!;
assert.equal(rank.kind, "value");
delete rank.queryRead;
assert.throws(() => linkQueries(aggregateBroken), /changed/);
const totals = workspace.linkedQueries.find((q) => q.id.endsWith(":totals"))!;
assert.equal(totals.fields.filter((f) => f.memberId === "rank").length, 2);
});