diff --git a/src/cli/cli-installer.test.ts b/src/cli/cli-installer.test.ts new file mode 100644 index 00000000..2320d951 --- /dev/null +++ b/src/cli/cli-installer.test.ts @@ -0,0 +1,83 @@ +import { afterEach, beforeEach, describe, expect, it, mock, spyOn } from "bun:test" +import * as configManager from "./config-manager" +import { runCliInstaller } from "./cli-installer" +import type { InstallArgs } from "./types" + +describe("runCliInstaller", () => { + const mockConsoleLog = mock(() => {}) + const mockConsoleError = mock(() => {}) + const originalConsoleLog = console.log + const originalConsoleError = console.error + + beforeEach(() => { + console.log = mockConsoleLog + console.error = mockConsoleError + mockConsoleLog.mockClear() + mockConsoleError.mockClear() + }) + + afterEach(() => { + console.log = originalConsoleLog + console.error = originalConsoleError + }) + + it("runs auth and provider setup steps when openai or copilot are enabled without gemini", async () => { + //#given + const addAuthPluginsSpy = spyOn(configManager, "addAuthPlugins").mockResolvedValue({ + success: true, + configPath: "/tmp/opencode.jsonc", + }) + const addProviderConfigSpy = spyOn(configManager, "addProviderConfig").mockReturnValue({ + success: true, + configPath: "/tmp/opencode.jsonc", + }) + const restoreSpies = [ + addAuthPluginsSpy, + addProviderConfigSpy, + spyOn(configManager, "detectCurrentConfig").mockReturnValue({ + isInstalled: false, + hasClaude: false, + isMax20: false, + hasOpenAI: false, + hasGemini: false, + hasCopilot: false, + hasOpencodeZen: false, + hasZaiCodingPlan: false, + hasKimiForCoding: false, + }), + spyOn(configManager, "isOpenCodeInstalled").mockResolvedValue(true), + spyOn(configManager, "getOpenCodeVersion").mockResolvedValue("1.0.200"), + spyOn(configManager, "addPluginToOpenCodeConfig").mockResolvedValue({ + success: true, + configPath: "/tmp/opencode.jsonc", + }), + spyOn(configManager, "writeOmoConfig").mockReturnValue({ + success: true, + configPath: "/tmp/oh-my-opencode.jsonc", + }), + ] + + const args: InstallArgs = { + tui: false, + claude: "no", + openai: "yes", + gemini: "no", + copilot: "yes", + opencodeZen: "no", + zaiCodingPlan: "no", + kimiForCoding: "no", + } + + //#when + const result = await runCliInstaller(args, "3.4.0") + + //#then + expect(result).toBe(0) + expect(addAuthPluginsSpy).toHaveBeenCalledTimes(1) + expect(addProviderConfigSpy).toHaveBeenCalledTimes(1) + + for (const spy of restoreSpies) { + spy.mockRestore() + } + }) +})