/** * @license * Copyright 2025 Google LLC * SPDX-License-Identifier: Apache-2.0 */ import { render } from 'ink-testing-library'; import { describe, it, expect, vi } from 'vitest'; import { AuthDialog } from './AuthDialog.js'; import { LoadedSettings, SettingScope } from '../../config/settings.js'; import { AuthType } from '@google/gemini-cli-core'; describe('AuthDialog', () => { const wait = (ms = 50) => new Promise((resolve) => setTimeout(resolve, ms)); it('should show an error if the initial auth type is invalid', () => { const settings: LoadedSettings = new LoadedSettings( { settings: { selectedAuthType: AuthType.USE_GEMINI, }, path: '', }, { settings: {}, path: '', }, [], ); const { lastFrame } = render( {}} settings={settings} initialErrorMessage="GEMINI_API_KEY environment variable not found" />, ); expect(lastFrame()).toContain( 'GEMINI_API_KEY environment variable not found', ); }); it('should prevent exiting when no auth method is selected and show error message', async () => { const onSelect = vi.fn(); const settings: LoadedSettings = new LoadedSettings( { settings: { selectedAuthType: undefined, }, path: '', }, { settings: {}, path: '', }, [], ); const { lastFrame, stdin, unmount } = render( , ); await wait(); // Simulate pressing escape key stdin.write('\u001b'); // ESC key await wait(); // Should show error message instead of calling onSelect expect(lastFrame()).toContain( 'You must select an auth method to proceed. Press Ctrl+C twice to exit.', ); expect(onSelect).not.toHaveBeenCalled(); unmount(); }); it('should allow exiting when auth method is already selected', async () => { const onSelect = vi.fn(); const settings: LoadedSettings = new LoadedSettings( { settings: { selectedAuthType: AuthType.USE_GEMINI, }, path: '', }, { settings: {}, path: '', }, [], ); const { stdin, unmount } = render( , ); await wait(); // Simulate pressing escape key stdin.write('\u001b'); // ESC key await wait(); // Should call onSelect with undefined to exit expect(onSelect).toHaveBeenCalledWith(undefined, SettingScope.User); unmount(); }); });