mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-16 12:30:49 +00:00
85 lines
2.6 KiB
TypeScript
85 lines
2.6 KiB
TypeScript
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
|
|
const emitCliBannerMock = vi.hoisted(() => vi.fn());
|
|
const ensureConfigReadyMock = vi.hoisted(() => vi.fn(async () => {}));
|
|
const ensurePluginRegistryLoadedMock = vi.hoisted(() => vi.fn());
|
|
const findRoutedCommandMock = vi.hoisted(() => vi.fn());
|
|
const runRouteMock = vi.hoisted(() => vi.fn(async () => true));
|
|
|
|
vi.mock("./banner.js", () => ({
|
|
emitCliBanner: emitCliBannerMock,
|
|
}));
|
|
|
|
vi.mock("./program/config-guard.js", () => ({
|
|
ensureConfigReady: ensureConfigReadyMock,
|
|
}));
|
|
|
|
vi.mock("./plugin-registry.js", () => ({
|
|
ensurePluginRegistryLoaded: ensurePluginRegistryLoadedMock,
|
|
}));
|
|
|
|
vi.mock("./program/routes.js", () => ({
|
|
findRoutedCommand: findRoutedCommandMock,
|
|
}));
|
|
|
|
vi.mock("../runtime.js", () => ({
|
|
defaultRuntime: { error: vi.fn(), log: vi.fn(), exit: vi.fn() },
|
|
}));
|
|
|
|
describe("tryRouteCli", () => {
|
|
let tryRouteCli: typeof import("./route.js").tryRouteCli;
|
|
let originalDisableRouteFirst: string | undefined;
|
|
|
|
beforeEach(async () => {
|
|
vi.clearAllMocks();
|
|
originalDisableRouteFirst = process.env.OPENCLAW_DISABLE_ROUTE_FIRST;
|
|
delete process.env.OPENCLAW_DISABLE_ROUTE_FIRST;
|
|
vi.resetModules();
|
|
({ tryRouteCli } = await import("./route.js"));
|
|
findRoutedCommandMock.mockReturnValue({
|
|
loadPlugins: false,
|
|
run: runRouteMock,
|
|
});
|
|
});
|
|
|
|
afterEach(() => {
|
|
if (originalDisableRouteFirst === undefined) {
|
|
delete process.env.OPENCLAW_DISABLE_ROUTE_FIRST;
|
|
} else {
|
|
process.env.OPENCLAW_DISABLE_ROUTE_FIRST = originalDisableRouteFirst;
|
|
}
|
|
});
|
|
|
|
it("passes suppressDoctorStdout=true for routed --json commands", async () => {
|
|
await expect(tryRouteCli(["node", "openclaw", "status", "--json"])).resolves.toBe(true);
|
|
|
|
expect(ensureConfigReadyMock).toHaveBeenCalledWith(
|
|
expect.objectContaining({
|
|
commandPath: ["status"],
|
|
suppressDoctorStdout: true,
|
|
}),
|
|
);
|
|
});
|
|
|
|
it("does not pass suppressDoctorStdout for routed non-json commands", async () => {
|
|
await expect(tryRouteCli(["node", "openclaw", "status"])).resolves.toBe(true);
|
|
|
|
expect(ensureConfigReadyMock).toHaveBeenCalledWith({
|
|
runtime: expect.any(Object),
|
|
commandPath: ["status"],
|
|
});
|
|
});
|
|
|
|
it("routes status when root options precede the command", async () => {
|
|
await expect(tryRouteCli(["node", "openclaw", "--log-level", "debug", "status"])).resolves.toBe(
|
|
true,
|
|
);
|
|
|
|
expect(findRoutedCommandMock).toHaveBeenCalledWith(["status"]);
|
|
expect(ensureConfigReadyMock).toHaveBeenCalledWith({
|
|
runtime: expect.any(Object),
|
|
commandPath: ["status"],
|
|
});
|
|
});
|
|
});
|