Files
openclaw/src/plugins/bundle-commands.test.ts

95 lines
3.2 KiB
TypeScript

import fs from "node:fs/promises";
import path from "node:path";
import { afterEach, describe, expect, it } from "vitest";
import { captureEnv } from "../test-utils/env.js";
import { loadEnabledClaudeBundleCommands } from "./bundle-commands.js";
import { createBundleMcpTempHarness } from "./bundle-mcp.test-support.js";
const tempHarness = createBundleMcpTempHarness();
afterEach(async () => {
await tempHarness.cleanup();
});
describe("loadEnabledClaudeBundleCommands", () => {
it("loads enabled Claude bundle markdown commands and skips disabled-model-invocation entries", async () => {
const env = captureEnv(["HOME", "USERPROFILE", "OPENCLAW_HOME", "OPENCLAW_STATE_DIR"]);
try {
const homeDir = await tempHarness.createTempDir("openclaw-bundle-commands-home-");
const workspaceDir = await tempHarness.createTempDir("openclaw-bundle-commands-workspace-");
process.env.HOME = homeDir;
process.env.USERPROFILE = homeDir;
delete process.env.OPENCLAW_HOME;
delete process.env.OPENCLAW_STATE_DIR;
const pluginRoot = path.join(homeDir, ".openclaw", "extensions", "compound-bundle");
await fs.mkdir(path.join(pluginRoot, ".claude-plugin"), { recursive: true });
await fs.mkdir(path.join(pluginRoot, "commands", "workflows"), { recursive: true });
await fs.writeFile(
path.join(pluginRoot, ".claude-plugin", "plugin.json"),
`${JSON.stringify({ name: "compound-bundle" }, null, 2)}\n`,
"utf-8",
);
await fs.writeFile(
path.join(pluginRoot, "commands", "office-hours.md"),
[
"---",
"description: Help with scoping and architecture",
"---",
"Give direct engineering advice.",
"",
].join("\n"),
"utf-8",
);
await fs.writeFile(
path.join(pluginRoot, "commands", "workflows", "review.md"),
[
"---",
"name: workflows:review",
"description: Run a structured review",
"---",
"Review the code. $ARGUMENTS",
"",
].join("\n"),
"utf-8",
);
await fs.writeFile(
path.join(pluginRoot, "commands", "disabled.md"),
["---", "disable-model-invocation: true", "---", "Do not load me.", ""].join("\n"),
"utf-8",
);
const commands = loadEnabledClaudeBundleCommands({
workspaceDir,
cfg: {
plugins: {
entries: {
"compound-bundle": { enabled: true },
},
},
},
});
expect(commands).toEqual(
expect.arrayContaining([
expect.objectContaining({
pluginId: "compound-bundle",
rawName: "office-hours",
description: "Help with scoping and architecture",
promptTemplate: "Give direct engineering advice.",
}),
expect.objectContaining({
pluginId: "compound-bundle",
rawName: "workflows:review",
description: "Run a structured review",
promptTemplate: "Review the code. $ARGUMENTS",
}),
]),
);
expect(commands.some((entry) => entry.rawName === "disabled")).toBe(false);
} finally {
env.restore();
}
});
});