mirror of
https://github.com/QwenLM/qwen-code.git
synced 2025-12-19 09:33:53 +00:00
Scotdensmore/first run auth fix (#1322)
This commit is contained in:
4
.vscode/launch.json
vendored
4
.vscode/launch.json
vendored
@@ -12,9 +12,9 @@
|
|||||||
"runtimeArgs": ["run", "start"],
|
"runtimeArgs": ["run", "start"],
|
||||||
"skipFiles": ["<node_internals>/**"],
|
"skipFiles": ["<node_internals>/**"],
|
||||||
"cwd": "${workspaceFolder}",
|
"cwd": "${workspaceFolder}",
|
||||||
|
"console": "integratedTerminal",
|
||||||
"env": {
|
"env": {
|
||||||
"GEMINI_SANDBOX": "false",
|
"GEMINI_SANDBOX": "false"
|
||||||
"GEMINI_API_KEY": "testkey"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -5,11 +5,14 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { render } from 'ink-testing-library';
|
import { render } from 'ink-testing-library';
|
||||||
|
import { describe, it, expect, vi } from 'vitest';
|
||||||
import { AuthDialog } from './AuthDialog.js';
|
import { AuthDialog } from './AuthDialog.js';
|
||||||
import { LoadedSettings } from '../../config/settings.js';
|
import { LoadedSettings, SettingScope } from '../../config/settings.js';
|
||||||
import { AuthType } from '@gemini-cli/core';
|
import { AuthType } from '@gemini-cli/core';
|
||||||
|
|
||||||
describe('AuthDialog', () => {
|
describe('AuthDialog', () => {
|
||||||
|
const wait = (ms = 50) => new Promise((resolve) => setTimeout(resolve, ms));
|
||||||
|
|
||||||
it('should show an error if the initial auth type is invalid', () => {
|
it('should show an error if the initial auth type is invalid', () => {
|
||||||
const settings: LoadedSettings = new LoadedSettings(
|
const settings: LoadedSettings = new LoadedSettings(
|
||||||
{
|
{
|
||||||
@@ -38,4 +41,75 @@ describe('AuthDialog', () => {
|
|||||||
'GEMINI_API_KEY environment variable not found',
|
'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();
|
||||||
|
|
||||||
|
// 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(
|
||||||
|
<AuthDialog
|
||||||
|
onSelect={onSelect}
|
||||||
|
onHighlight={() => {}}
|
||||||
|
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();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -78,6 +78,13 @@ export function AuthDialog({
|
|||||||
|
|
||||||
useInput((_input, key) => {
|
useInput((_input, key) => {
|
||||||
if (key.escape) {
|
if (key.escape) {
|
||||||
|
if (settings.merged.selectedAuthType === undefined) {
|
||||||
|
// Prevent exiting if no auth method is set
|
||||||
|
setErrorMessage(
|
||||||
|
'You must select an auth method to proceed. Press Ctrl+C twice to exit.',
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
onSelect(undefined, SettingScope.User);
|
onSelect(undefined, SettingScope.User);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user