Luigit
repositories / pi-ext

pi-ext

bugabingas pi extensions

owned by admin

extensions/the-system/__tests__/startup.test.ts

Raw
import 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);
	});
});