mirror of
https://github.com/openclaw/openclaw.git
synced 2026-06-05 20:22:53 +00:00
107 lines
3.2 KiB
TypeScript
107 lines
3.2 KiB
TypeScript
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
import type { OutputRuntimeEnv } from "../runtime.js";
|
|
|
|
function createJsonRuntime(writes: unknown[]): OutputRuntimeEnv {
|
|
return {
|
|
log: (...args: unknown[]) => writes.push(args.length === 1 ? args[0] : args),
|
|
error: vi.fn(),
|
|
exit: vi.fn((code: number) => {
|
|
throw new Error(`exit ${code}`);
|
|
}),
|
|
writeStdout: (value: string) => writes.push(value),
|
|
writeJson: (value: unknown) => writes.push(value),
|
|
};
|
|
}
|
|
|
|
describe("runPluginsListCommand", () => {
|
|
afterEach(() => {
|
|
vi.doUnmock("../config/config.js");
|
|
vi.doUnmock("../plugins/status.js");
|
|
vi.doUnmock("../plugins/status-snapshot.js");
|
|
vi.doUnmock("../plugins/source-display.js");
|
|
vi.doUnmock("../terminal/table.js");
|
|
vi.doUnmock("../terminal/theme.js");
|
|
vi.doUnmock("./command-format.js");
|
|
vi.doUnmock("./plugins-list-format.js");
|
|
vi.resetModules();
|
|
});
|
|
|
|
it("does not import human list renderers for JSON output", async () => {
|
|
vi.resetModules();
|
|
const importedHumanModules: string[] = [];
|
|
|
|
vi.doMock("../config/config.js", () => ({
|
|
getRuntimeConfig: () => ({}),
|
|
}));
|
|
vi.doMock("../plugins/status.js", () => {
|
|
throw new Error("plugins list JSON must use the snapshot status module");
|
|
});
|
|
vi.doMock("../plugins/status-snapshot.js", () => ({
|
|
buildPluginRegistrySnapshotReport: () => ({
|
|
workspaceDir: "/workspace",
|
|
registrySource: "config",
|
|
registryDiagnostics: [],
|
|
plugins: [{ id: "demo", enabled: true }],
|
|
diagnostics: [],
|
|
}),
|
|
}));
|
|
vi.doMock("../plugins/source-display.js", () => {
|
|
importedHumanModules.push("source-display");
|
|
return {
|
|
formatPluginSourceForTable: vi.fn(),
|
|
resolvePluginSourceRoots: vi.fn(),
|
|
};
|
|
});
|
|
vi.doMock("../terminal/table.js", () => {
|
|
importedHumanModules.push("table");
|
|
return {
|
|
getTerminalTableWidth: vi.fn(),
|
|
renderTable: vi.fn(),
|
|
};
|
|
});
|
|
vi.doMock("../terminal/theme.js", () => {
|
|
importedHumanModules.push("theme");
|
|
return {
|
|
theme: {
|
|
muted: (value: string) => value,
|
|
heading: (value: string) => value,
|
|
command: (value: string) => value,
|
|
error: (value: string) => value,
|
|
success: (value: string) => value,
|
|
warn: (value: string) => value,
|
|
},
|
|
};
|
|
});
|
|
vi.doMock("./command-format.js", () => {
|
|
importedHumanModules.push("command-format");
|
|
return {
|
|
formatCliCommand: (value: string) => value,
|
|
};
|
|
});
|
|
vi.doMock("./plugins-list-format.js", () => {
|
|
importedHumanModules.push("plugins-list-format");
|
|
return {
|
|
formatPluginLine: vi.fn(),
|
|
};
|
|
});
|
|
|
|
const { runPluginsListCommand } = await import("./plugins-list-command.js");
|
|
const writes: unknown[] = [];
|
|
|
|
await runPluginsListCommand({ json: true }, createJsonRuntime(writes));
|
|
|
|
expect(importedHumanModules).toEqual([]);
|
|
expect(writes).toEqual([
|
|
{
|
|
workspaceDir: "/workspace",
|
|
registry: {
|
|
source: "config",
|
|
diagnostics: [],
|
|
},
|
|
plugins: [{ id: "demo", enabled: true }],
|
|
diagnostics: [],
|
|
},
|
|
]);
|
|
});
|
|
});
|