diff --git a/src/commands/cleanup-command.test-support.ts b/src/commands/cleanup-command.test-support.ts new file mode 100644 index 00000000000..a6263c15f4b --- /dev/null +++ b/src/commands/cleanup-command.test-support.ts @@ -0,0 +1,48 @@ +import { vi } from "vitest"; +import { createNonExitingRuntime, type RuntimeEnv } from "../runtime.js"; + +export const resolveCleanupPlanFromDisk = vi.fn(); +export const removePath = vi.fn(); +export const listAgentSessionDirs = vi.fn(); +export const removeStateAndLinkedPaths = vi.fn(); +export const removeWorkspaceDirs = vi.fn(); + +vi.mock("../config/config.js", () => ({ + isNixMode: false, +})); + +vi.mock("./cleanup-plan.js", () => ({ + resolveCleanupPlanFromDisk, +})); + +vi.mock("./cleanup-utils.js", () => ({ + removePath, + listAgentSessionDirs, + removeStateAndLinkedPaths, + removeWorkspaceDirs, +})); + +export function createCleanupCommandRuntime() { + return createNonExitingRuntime(); +} + +export function resetCleanupCommandMocks() { + vi.clearAllMocks(); + resolveCleanupPlanFromDisk.mockReturnValue({ + stateDir: "/tmp/.openclaw", + configPath: "/tmp/.openclaw/openclaw.json", + oauthDir: "/tmp/.openclaw/credentials", + configInsideState: true, + oauthInsideState: true, + workspaceDirs: ["/tmp/.openclaw/workspace"], + }); + removePath.mockResolvedValue({ ok: true }); + listAgentSessionDirs.mockResolvedValue(["/tmp/.openclaw/agents/main/sessions"]); + removeStateAndLinkedPaths.mockResolvedValue(undefined); + removeWorkspaceDirs.mockResolvedValue(undefined); +} + +export function silenceCleanupCommandRuntime(runtime: RuntimeEnv) { + vi.spyOn(runtime, "log").mockImplementation(() => {}); + vi.spyOn(runtime, "error").mockImplementation(() => {}); +} diff --git a/src/commands/reset.test.ts b/src/commands/reset.test.ts index 06bbaaebfb7..cada804da84 100644 --- a/src/commands/reset.test.ts +++ b/src/commands/reset.test.ts @@ -1,28 +1,12 @@ -import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import { createNonExitingRuntime } from "../runtime.js"; -const resolveCleanupPlanFromDisk = vi.fn(); -const removePath = vi.fn(); -const listAgentSessionDirs = vi.fn(); -const removeStateAndLinkedPaths = vi.fn(); -const removeWorkspaceDirs = vi.fn(); - -vi.mock("../config/config.js", () => ({ - isNixMode: false, -})); - -vi.mock("./cleanup-plan.js", () => ({ - resolveCleanupPlanFromDisk, -})); - -vi.mock("./cleanup-utils.js", () => ({ - removePath, - listAgentSessionDirs, - removeStateAndLinkedPaths, - removeWorkspaceDirs, -})); +import { beforeAll, beforeEach, describe, expect, it } from "vitest"; +import { + createCleanupCommandRuntime, + resetCleanupCommandMocks, + silenceCleanupCommandRuntime, +} from "./cleanup-command.test-support.js"; describe("resetCommand", () => { - const runtime = createNonExitingRuntime(); + const runtime = createCleanupCommandRuntime(); let resetCommand: typeof import("./reset.js").resetCommand; beforeAll(async () => { @@ -30,21 +14,8 @@ describe("resetCommand", () => { }); beforeEach(() => { - vi.clearAllMocks(); - resolveCleanupPlanFromDisk.mockReturnValue({ - stateDir: "/tmp/.openclaw", - configPath: "/tmp/.openclaw/openclaw.json", - oauthDir: "/tmp/.openclaw/credentials", - configInsideState: true, - oauthInsideState: true, - workspaceDirs: ["/tmp/.openclaw/workspace"], - }); - removePath.mockResolvedValue({ ok: true }); - listAgentSessionDirs.mockResolvedValue(["/tmp/.openclaw/agents/main/sessions"]); - removeStateAndLinkedPaths.mockResolvedValue(undefined); - removeWorkspaceDirs.mockResolvedValue(undefined); - vi.spyOn(runtime, "log").mockImplementation(() => {}); - vi.spyOn(runtime, "error").mockImplementation(() => {}); + resetCleanupCommandMocks(); + silenceCleanupCommandRuntime(runtime); }); it("recommends creating a backup before state-destructive reset scopes", async () => { diff --git a/src/commands/uninstall.test.ts b/src/commands/uninstall.test.ts index bdf0efe1354..253e3731f6e 100644 --- a/src/commands/uninstall.test.ts +++ b/src/commands/uninstall.test.ts @@ -1,45 +1,18 @@ -import { beforeEach, describe, expect, it, vi } from "vitest"; -import { createNonExitingRuntime } from "../runtime.js"; - -const resolveCleanupPlanFromDisk = vi.fn(); -const removePath = vi.fn(); -const removeStateAndLinkedPaths = vi.fn(); -const removeWorkspaceDirs = vi.fn(); - -vi.mock("../config/config.js", () => ({ - isNixMode: false, -})); - -vi.mock("./cleanup-plan.js", () => ({ - resolveCleanupPlanFromDisk, -})); - -vi.mock("./cleanup-utils.js", () => ({ - removePath, - removeStateAndLinkedPaths, - removeWorkspaceDirs, -})); +import { beforeEach, describe, expect, it } from "vitest"; +import { + createCleanupCommandRuntime, + resetCleanupCommandMocks, + silenceCleanupCommandRuntime, +} from "./cleanup-command.test-support.js"; const { uninstallCommand } = await import("./uninstall.js"); describe("uninstallCommand", () => { - const runtime = createNonExitingRuntime(); + const runtime = createCleanupCommandRuntime(); beforeEach(() => { - vi.clearAllMocks(); - resolveCleanupPlanFromDisk.mockReturnValue({ - stateDir: "/tmp/.openclaw", - configPath: "/tmp/.openclaw/openclaw.json", - oauthDir: "/tmp/.openclaw/credentials", - configInsideState: true, - oauthInsideState: true, - workspaceDirs: ["/tmp/.openclaw/workspace"], - }); - removePath.mockResolvedValue({ ok: true }); - removeStateAndLinkedPaths.mockResolvedValue(undefined); - removeWorkspaceDirs.mockResolvedValue(undefined); - vi.spyOn(runtime, "log").mockImplementation(() => {}); - vi.spyOn(runtime, "error").mockImplementation(() => {}); + resetCleanupCommandMocks(); + silenceCleanupCommandRuntime(runtime); }); it("recommends creating a backup before removing state or workspaces", async () => {