import assert from "node:assert/strict"; import { test } from "node:test"; import { readFileSync } from "node:fs"; // 1790: the states the module announces are the states its manifest declares, no more, no fewer; none is readable // because no other module's manifest reads one of them. test("the states the module announces are the states its manifest declares", async () => { const { KEPT } = await import("../kept.ts"); const manifest = JSON.parse(readFileSync(new URL("../module.json", import.meta.url), "utf8")); const declared = (manifest.state as (string | { name: string })[]).map((s) => (typeof s === "string" ? s : s.name)).sort(); assert.deepEqual(KEPT.map((k) => k.name).sort(), declared); assert.ok(KEPT.every((k) => !k.readable), "no other module's manifest reads a state of gitea"); }); test("the announcement has the layout mesh-sdk's go/announce reads: version 1, the module, the node, the states sorted by name", async () => { const { statesAnnouncement } = await import("../kept.ts"); assert.deepEqual(statesAnnouncement("gitea", "ace"), { v: 1, module: "gitea", node: "ace", states: [{ name: "announced" }, { name: "bound" }] }); assert.deepEqual(statesAnnouncement("gitea", undefined), { v: 1, module: "gitea", states: [{ name: "announced" }, { name: "bound" }] }); }); test("index.ts says the announcement as the event `states` before the tools are served", () => { const source = readFileSync(new URL("../index.ts", import.meta.url), "utf8"); assert.match(source, /await emit\("states", statesAnnouncement\(/); assert.ok(source.indexOf('await emit("states"') < source.indexOf('registerModuleTools("gitea"'), "announced before the tools are served"); });