| |
| |
| |
| |
| |
|
|
| import { AuthType } from '@google/gemini-cli-core'; |
| import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; |
| import { validateAuthMethod } from './auth.js'; |
|
|
| vi.mock('@google/gemini-cli-core', async (importOriginal) => { |
| const actual = |
| await importOriginal<typeof import('@google/gemini-cli-core')>(); |
| return { |
| ...actual, |
| loadApiKey: vi.fn().mockResolvedValue(null), |
| }; |
| }); |
|
|
| vi.mock('./settings.js', () => ({ |
| loadEnvironment: vi.fn(), |
| loadSettings: vi.fn().mockReturnValue({ |
| merged: vi.fn().mockReturnValue({}), |
| }), |
| })); |
|
|
| describe('validateAuthMethod', () => { |
| beforeEach(() => { |
| vi.stubEnv('GEMINI_API_KEY', undefined); |
| vi.stubEnv('GOOGLE_CLOUD_PROJECT', undefined); |
| vi.stubEnv('GOOGLE_CLOUD_LOCATION', undefined); |
| vi.stubEnv('GOOGLE_API_KEY', undefined); |
| }); |
|
|
| afterEach(() => { |
| vi.unstubAllEnvs(); |
| }); |
|
|
| it.each([ |
| { |
| description: 'should return null for LOGIN_WITH_GOOGLE', |
| authType: AuthType.LOGIN_WITH_GOOGLE, |
| envs: {}, |
| expected: null, |
| }, |
| { |
| description: 'should return null for COMPUTE_ADC', |
| authType: AuthType.COMPUTE_ADC, |
| envs: {}, |
| expected: null, |
| }, |
| { |
| description: 'should return null for USE_GEMINI if GEMINI_API_KEY is set', |
| authType: AuthType.USE_GEMINI, |
| envs: { GEMINI_API_KEY: 'test-key' }, |
| expected: null, |
| }, |
| { |
| description: |
| 'should return an error message for USE_GEMINI if GEMINI_API_KEY is not set', |
| authType: AuthType.USE_GEMINI, |
| envs: {}, |
| expected: |
| 'When using Gemini API, you must specify the GEMINI_API_KEY environment variable.\n' + |
| 'Update your environment and try again (no reload needed if using .env)!', |
| }, |
| { |
| description: |
| 'should return null for USE_VERTEX_AI if GOOGLE_CLOUD_PROJECT and GOOGLE_CLOUD_LOCATION are set', |
| authType: AuthType.USE_VERTEX_AI, |
| envs: { |
| GOOGLE_CLOUD_PROJECT: 'test-project', |
| GOOGLE_CLOUD_LOCATION: 'test-location', |
| }, |
| expected: null, |
| }, |
| { |
| description: |
| 'should return null for USE_VERTEX_AI if GOOGLE_API_KEY is set', |
| authType: AuthType.USE_VERTEX_AI, |
| envs: { GOOGLE_API_KEY: 'test-api-key' }, |
| expected: null, |
| }, |
| { |
| description: |
| 'should return an error message for USE_VERTEX_AI if no required environment variables are set', |
| authType: AuthType.USE_VERTEX_AI, |
| envs: {}, |
| expected: |
| 'When using Vertex AI, you must specify either:\n' + |
| '• GOOGLE_CLOUD_PROJECT and GOOGLE_CLOUD_LOCATION environment variables.\n' + |
| '• GOOGLE_API_KEY environment variable (if using express mode).\n' + |
| 'Update your environment and try again (no reload needed if using .env)!', |
| }, |
| { |
| description: 'should return an error message for an invalid auth method', |
| |
| authType: 'invalid-method' as any, |
| envs: {}, |
| expected: 'Invalid auth method selected.', |
| }, |
| ])('$description', async ({ authType, envs, expected }) => { |
| for (const [key, value] of Object.entries(envs)) { |
| vi.stubEnv(key, value as string); |
| } |
| expect(await validateAuthMethod(authType)).toBe(expected); |
| }); |
| }); |
|
|