mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-15 03:50:40 +00:00
51 lines
1.5 KiB
TypeScript
51 lines
1.5 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
|
|
const loadAndMaybeMigrateDoctorConfigMock = vi.hoisted(() => vi.fn());
|
|
const readConfigFileSnapshotMock = vi.hoisted(() => vi.fn());
|
|
|
|
vi.mock("../../commands/doctor-config-flow.js", () => ({
|
|
loadAndMaybeMigrateDoctorConfig: loadAndMaybeMigrateDoctorConfigMock,
|
|
}));
|
|
|
|
vi.mock("../../config/config.js", () => ({
|
|
readConfigFileSnapshot: readConfigFileSnapshotMock,
|
|
}));
|
|
|
|
function makeSnapshot() {
|
|
return {
|
|
exists: false,
|
|
valid: true,
|
|
issues: [],
|
|
legacyIssues: [],
|
|
path: "/tmp/openclaw.json",
|
|
};
|
|
}
|
|
|
|
function makeRuntime() {
|
|
return {
|
|
error: vi.fn(),
|
|
exit: vi.fn(),
|
|
};
|
|
}
|
|
|
|
describe("ensureConfigReady", () => {
|
|
beforeEach(() => {
|
|
vi.clearAllMocks();
|
|
readConfigFileSnapshotMock.mockResolvedValue(makeSnapshot());
|
|
});
|
|
|
|
it("skips doctor flow for read-only fast path commands", async () => {
|
|
vi.resetModules();
|
|
const { ensureConfigReady } = await import("./config-guard.js");
|
|
await ensureConfigReady({ runtime: makeRuntime() as never, commandPath: ["status"] });
|
|
expect(loadAndMaybeMigrateDoctorConfigMock).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it("runs doctor flow for commands that may mutate state", async () => {
|
|
vi.resetModules();
|
|
const { ensureConfigReady } = await import("./config-guard.js");
|
|
await ensureConfigReady({ runtime: makeRuntime() as never, commandPath: ["message"] });
|
|
expect(loadAndMaybeMigrateDoctorConfigMock).toHaveBeenCalledTimes(1);
|
|
});
|
|
});
|