repositories / pi-ext
pi-ext
bugabingas pi extensions
owned by admin
extensions/the-system/__tests__/startup.test.ts
Rawimport assert from "node:assert/strict";
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
import { tmpdir } from "node:os";
import path from "node:path";
import { afterEach, beforeEach, describe, it, vi } from "vitest";
const markdown = vi.hoisted(() => ({ loaded: false }));
vi.mock("../markdown.ts", async (importOriginal) => {
markdown.loaded = true;
return importOriginal();
});
const roots: string[] = [];
function validSystem(): string {
const root = mkdtempSync(path.join(tmpdir(), "the-system-startup-"));
roots.push(root);
mkdirSync(path.join(root, ".system"));
for (const directory of ["specs", "phases", "plans", "issues", "research"])
mkdirSync(path.join(root, ".system", directory));
for (const name of ["SYSTEM.md", "MISSION.md", "RULES.md"])
writeFileSync(path.join(root, ".system", name), `# ${name}\n`, "utf8");
writeFileSync(
path.join(root, ".system", "config.json"),
'{"prefix":"PX","schemaVersion":0}\n',
"utf8",
);
writeFileSync(
path.join(root, ".system", "board.json"),
'{"schemaVersion":0,"items":{}}\n',
"utf8",
);
return root;
}
beforeEach(() => {
markdown.loaded = false;
vi.resetModules();
});
afterEach(() => {
for (const root of roots.splice(0)) rmSync(root, { recursive: true });
});
describe("The System startup", () => {
it("does not load the Markdown parser for a project without a current phase", async () => {
const handlers = new Map<
string,
((event: { cwd: string }) => Promise<unknown>)[]
>();
const { default: registerTheSystem } = await import("../index.ts");
registerTheSystem({
events: { emit() {} },
getActiveTools: () => [],
on: (
event: string,
handler: (event: { cwd: string }) => Promise<unknown>,
) => {
handlers.set(event, [...(handlers.get(event) ?? []), handler]);
},
registerCommand() {},
registerTool() {},
setActiveTools() {},
} as never);
const discover = handlers.get("resources_discover")?.[0];
assert.ok(discover);
await discover({ cwd: validSystem() });
assert.equal(markdown.loaded, false);
});
});