import { Command } from "commander"; import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; const backupCreateCommand = vi.fn(); const backupVerifyCommand = vi.fn(); const runtime = { log: vi.fn(), error: vi.fn(), exit: vi.fn(), }; vi.mock("../../commands/backup.js", () => ({ backupCreateCommand, })); vi.mock("../../commands/backup-verify.js", () => ({ backupVerifyCommand, })); vi.mock("../../runtime.js", () => ({ defaultRuntime: runtime, })); let registerBackupCommand: typeof import("./register.backup.js").registerBackupCommand; beforeAll(async () => { ({ registerBackupCommand } = await import("./register.backup.js")); }); describe("registerBackupCommand", () => { async function runCli(args: string[]) { const program = new Command(); registerBackupCommand(program); await program.parseAsync(args, { from: "user" }); } beforeEach(() => { vi.clearAllMocks(); backupCreateCommand.mockResolvedValue(undefined); backupVerifyCommand.mockResolvedValue(undefined); }); it("runs backup create with forwarded options", async () => { await runCli(["backup", "create", "--output", "/tmp/backups", "--json", "--dry-run"]); expect(backupCreateCommand).toHaveBeenCalledWith( runtime, expect.objectContaining({ output: "/tmp/backups", json: true, dryRun: true, verify: false, onlyConfig: false, includeWorkspace: true, }), ); }); it("honors --no-include-workspace", async () => { await runCli(["backup", "create", "--no-include-workspace"]); expect(backupCreateCommand).toHaveBeenCalledWith( runtime, expect.objectContaining({ includeWorkspace: false, }), ); }); it("forwards --verify to backup create", async () => { await runCli(["backup", "create", "--verify"]); expect(backupCreateCommand).toHaveBeenCalledWith( runtime, expect.objectContaining({ verify: true, }), ); }); it("forwards --only-config to backup create", async () => { await runCli(["backup", "create", "--only-config"]); expect(backupCreateCommand).toHaveBeenCalledWith( runtime, expect.objectContaining({ onlyConfig: true, }), ); }); it("runs backup verify with forwarded options", async () => { await runCli(["backup", "verify", "/tmp/openclaw-backup.tar.gz", "--json"]); expect(backupVerifyCommand).toHaveBeenCalledWith( runtime, expect.objectContaining({ archive: "/tmp/openclaw-backup.tar.gz", json: true, }), ); }); });