From 99d521569d392e660f8dbbb9a50cad9c9062b75b Mon Sep 17 00:00:00 2001 From: Scott Densmore Date: Sun, 22 Jun 2025 22:52:25 -0700 Subject: Scotdensmore/first run auth fix (#1322) --- packages/cli/src/ui/components/AuthDialog.test.tsx | 76 +++++++++++++++++++++- 1 file changed, 75 insertions(+), 1 deletion(-) (limited to 'packages/cli/src/ui/components/AuthDialog.test.tsx') diff --git a/packages/cli/src/ui/components/AuthDialog.test.tsx b/packages/cli/src/ui/components/AuthDialog.test.tsx index a5f46d93..8d56e96a 100644 --- a/packages/cli/src/ui/components/AuthDialog.test.tsx +++ b/packages/cli/src/ui/components/AuthDialog.test.tsx @@ -5,11 +5,14 @@ */ import { render } from 'ink-testing-library'; +import { describe, it, expect, vi } from 'vitest'; import { AuthDialog } from './AuthDialog.js'; -import { LoadedSettings } from '../../config/settings.js'; +import { LoadedSettings, SettingScope } from '../../config/settings.js'; import { AuthType } from '@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( { @@ -38,4 +41,75 @@ describe('AuthDialog', () => { '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( + {}} + settings={settings} + />, + ); + 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( + {}} + settings={settings} + />, + ); + 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(); + }); }); -- cgit v1.2.3