|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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( |
|
|
<AuthDialog |
|
|
onSelect={() => {}} |
|
|
onHighlight={() => {}} |
|
|
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( |
|
|
<AuthDialog |
|
|
onSelect={onSelect} |
|
|
onHighlight={() => {}} |
|
|
settings={settings} |
|
|
/>, |
|
|
); |
|
|
await wait(); |
|
|
|
|
|
|
|
|
stdin.write('\u001b'); |
|
|
await wait(); |
|
|
|
|
|
|
|
|
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( |
|
|
<AuthDialog |
|
|
onSelect={onSelect} |
|
|
onHighlight={() => {}} |
|
|
settings={settings} |
|
|
/>, |
|
|
); |
|
|
await wait(); |
|
|
|
|
|
|
|
|
stdin.write('\u001b'); |
|
|
await wait(); |
|
|
|
|
|
|
|
|
expect(onSelect).toHaveBeenCalledWith(undefined, SettingScope.User); |
|
|
unmount(); |
|
|
}); |
|
|
}); |
|
|
|