Spaces:
Paused
Paused
| 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); | |
| }); | |
| }); | |