import { beforeEach, describe, expect, it, vi } from "vitest"; import { applyAuthChoiceGoogleGeminiCli } from "./auth-choice.apply.google-gemini-cli.js"; import type { ApplyAuthChoiceParams } from "./auth-choice.apply.js"; import { applyAuthChoicePluginProvider } from "./auth-choice.apply.plugin-provider.js"; import { createExitThrowingRuntime, createWizardPrompter } from "./test-wizard-helpers.js"; vi.mock("./auth-choice.apply.plugin-provider.js", () => ({ applyAuthChoicePluginProvider: vi.fn(), })); function createParams( authChoice: ApplyAuthChoiceParams["authChoice"], overrides: Partial = {}, ): ApplyAuthChoiceParams { return { authChoice, config: {}, prompter: createWizardPrompter({}, { defaultSelect: "" }), runtime: createExitThrowingRuntime(), setDefaultModel: true, ...overrides, }; } describe("applyAuthChoiceGoogleGeminiCli", () => { const mockedApplyAuthChoicePluginProvider = vi.mocked(applyAuthChoicePluginProvider); beforeEach(() => { mockedApplyAuthChoicePluginProvider.mockReset(); }); it("returns null for unrelated authChoice", async () => { const result = await applyAuthChoiceGoogleGeminiCli(createParams("openrouter-api-key")); expect(result).toBeNull(); expect(mockedApplyAuthChoicePluginProvider).not.toHaveBeenCalled(); }); it("shows caution and skips setup when user declines", async () => { const confirm = vi.fn(async () => false); const note = vi.fn(async () => {}); const params = createParams("google-gemini-cli", { prompter: createWizardPrompter({ confirm, note }, { defaultSelect: "" }), }); const result = await applyAuthChoiceGoogleGeminiCli(params); expect(result).toEqual({ config: params.config }); expect(note).toHaveBeenNthCalledWith( 1, expect.stringContaining("This is an unofficial integration and is not endorsed by Google."), "Google Gemini CLI caution", ); expect(confirm).toHaveBeenCalledWith({ message: "Continue with Google Gemini CLI OAuth?", initialValue: false, }); expect(note).toHaveBeenNthCalledWith( 2, "Skipped Google Gemini CLI OAuth setup.", "Setup skipped", ); expect(mockedApplyAuthChoicePluginProvider).not.toHaveBeenCalled(); }); it("continues to plugin provider flow when user confirms", async () => { const confirm = vi.fn(async () => true); const note = vi.fn(async () => {}); const params = createParams("google-gemini-cli", { prompter: createWizardPrompter({ confirm, note }, { defaultSelect: "" }), }); const expected = { config: {} }; mockedApplyAuthChoicePluginProvider.mockResolvedValue(expected); const result = await applyAuthChoiceGoogleGeminiCli(params); expect(result).toBe(expected); expect(mockedApplyAuthChoicePluginProvider).toHaveBeenCalledWith(params, { authChoice: "google-gemini-cli", pluginId: "google-gemini-cli-auth", providerId: "google-gemini-cli", methodId: "oauth", label: "Google Gemini CLI", }); }); });