/*
Unit tests for workspace discovery covering its documented public contract and regression-sensitive edge cases.
- Not a contract source of truth — the module under test owns the authoritative behavior; fixtures are minimal scaffolding only.
- Fixtures stay inline and minimal so each case states its own setup.
- RFC-1311: Compass header sweep — declares the workspace suite's contract for test-file scaffold coverage.
*/
// @ai-invariant fixtures must not couple to kernel internals beyond the public surface under test
import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { test, expect } from "vitest";
import { discoverWorkspacePackages } from "../workspace-discovery.ts";
async function writeJson(path: string, value: unknown): Promise {
await writeFile(path, `${JSON.stringify(value, null, 2)}\n`, "utf8");
}
async function createWorkspace(): Promise {
const root = await mkdtemp(join(tmpdir(), "workspace-discovery-"));
await writeFile(
join(root, "pnpm-workspace.yaml"),
"packages:\n - apps/*\n - services/*\n - packages/*\n - packages/os/*\n - '!packages/ignored'\n",
"utf8",
);
for (const directory of [
"apps/site",
"services/worker",
"packages/share",
"packages/werkstatt",
"packages/ignored",
"packages/-draft",
]) {
await mkdir(join(root, directory), { recursive: true });
}
await writeJson(join(root, "apps/site/package.json"), { name: "site" });
await writeJson(join(root, "services/worker/package.json"), {
name: "@warpgogol/worker",
});
await writeJson(join(root, "packages/share/package.json"), {
name: "@warpgogol/werkstatt-shared",
});
await writeJson(join(root, "packages/werkstatt/package.json"), {
name: "@warpgogol/werkstatt-engine",
});
await writeJson(join(root, "packages/ignored/package.json"), { name: "@warpgogol/ignored" });
await writeJson(join(root, "packages/-draft/package.json"), { name: "@warpgogol/draft" });
return root;
}
test("discoverWorkspacePackages expands and classifies supported workspace globs", async () => {
const root = await createWorkspace();
try {
const result = await discoverWorkspacePackages(root);
expect(result.packageGlobs).toEqual(["apps/*", "packages/*", "packages/os/*", "services/*"]);
expect(result.packages.map((pkg) => [pkg.directory, pkg.workspacePattern, pkg.kind])).toEqual([
["apps/site", "apps/*", "app"],
["packages/share", "packages/*", "package"],
["packages/werkstatt", "packages/*", "package"],
["services/worker", "services/*", "service"],
]);
expect(result.diagnostics.length).toBe(0);
} finally {
await rm(root, { recursive: true, force: true });
}
});
test("discoverWorkspacePackages reports unsupported patterns and missing names", async () => {
const root = await mkdtemp(join(tmpdir(), "workspace-discovery-"));
try {
await writeFile(
join(root, "pnpm-workspace.yaml"),
"packages:\n - plugins/**\n - misc/*\n",
"utf8",
);
await mkdir(join(root, "misc", "unnamed"), { recursive: true });
await writeJson(join(root, "misc", "unnamed", "package.json"), { version: "0.0.0" });
const result = await discoverWorkspacePackages(root);
expect(result.diagnostics.map((diagnostic) => diagnostic.ruleId).sort()).toEqual([
"WORKSPACE-DISCOVERY-01",
"WORKSPACE-DISCOVERY-02",
"WORKSPACE-DISCOVERY-03",
]);
} finally {
await rm(root, { recursive: true, force: true });
}
});