55 */
66
77import { AuthType } from '@google/gemini-cli-core' ;
8- import { vi } from 'vitest' ;
8+ import { afterEach , beforeEach , describe , expect , it , vi } from 'vitest' ;
99import { validateAuthMethod } from './auth.js' ;
1010
1111vi . mock ( './settings.js' , ( ) => ( {
@@ -17,7 +17,6 @@ vi.mock('./settings.js', () => ({
1717
1818describe ( 'validateAuthMethod' , ( ) => {
1919 beforeEach ( ( ) => {
20- vi . resetModules ( ) ;
2120 vi . stubEnv ( 'GEMINI_API_KEY' , undefined ) ;
2221 vi . stubEnv ( 'GOOGLE_CLOUD_PROJECT' , undefined ) ;
2322 vi . stubEnv ( 'GOOGLE_CLOUD_LOCATION' , undefined ) ;
@@ -28,53 +27,73 @@ describe('validateAuthMethod', () => {
2827 vi . unstubAllEnvs ( ) ;
2928 } ) ;
3029
31- it ( 'should return null for LOGIN_WITH_GOOGLE' , ( ) => {
32- expect ( validateAuthMethod ( AuthType . LOGIN_WITH_GOOGLE ) ) . toBeNull ( ) ;
33- } ) ;
34-
35- it ( 'should return null for COMPUTE_ADC' , ( ) => {
36- expect ( validateAuthMethod ( AuthType . COMPUTE_ADC ) ) . toBeNull ( ) ;
37- } ) ;
38-
39- describe ( 'USE_GEMINI' , ( ) => {
40- it ( 'should return null if GEMINI_API_KEY is set' , ( ) => {
41- vi . stubEnv ( 'GEMINI_API_KEY' , 'test-key' ) ;
42- expect ( validateAuthMethod ( AuthType . USE_GEMINI ) ) . toBeNull ( ) ;
43- } ) ;
44-
45- it ( 'should return an error message if GEMINI_API_KEY is not set' , ( ) => {
46- vi . stubEnv ( 'GEMINI_API_KEY' , undefined ) ;
47- expect ( validateAuthMethod ( AuthType . USE_GEMINI ) ) . toBeNull ( ) ;
48- } ) ;
49- } ) ;
50-
51- describe ( 'USE_VERTEX_AI' , ( ) => {
52- it ( 'should return null if GOOGLE_CLOUD_PROJECT and GOOGLE_CLOUD_LOCATION are set' , ( ) => {
53- vi . stubEnv ( 'GOOGLE_CLOUD_PROJECT' , 'test-project' ) ;
54- vi . stubEnv ( 'GOOGLE_CLOUD_LOCATION' , 'test-location' ) ;
55- expect ( validateAuthMethod ( AuthType . USE_VERTEX_AI ) ) . toBeNull ( ) ;
56- } ) ;
57-
58- it ( 'should return null if GOOGLE_API_KEY is set' , ( ) => {
59- vi . stubEnv ( 'GOOGLE_API_KEY' , 'test-api-key' ) ;
60- expect ( validateAuthMethod ( AuthType . USE_VERTEX_AI ) ) . toBeNull ( ) ;
61- } ) ;
62-
63- it ( 'should return an error message if no required environment variables are set' , ( ) => {
64- vi . stubEnv ( 'GOOGLE_CLOUD_PROJECT' , undefined ) ;
65- vi . stubEnv ( 'GOOGLE_CLOUD_LOCATION' , undefined ) ;
66- expect ( validateAuthMethod ( AuthType . USE_VERTEX_AI ) ) . toBe (
30+ it . each ( [
31+ {
32+ description : 'should return null for LOGIN_WITH_GOOGLE' ,
33+ authType : AuthType . LOGIN_WITH_GOOGLE ,
34+ envs : { } ,
35+ expected : null ,
36+ } ,
37+ {
38+ description : 'should return null for COMPUTE_ADC' ,
39+ authType : AuthType . COMPUTE_ADC ,
40+ envs : { } ,
41+ expected : null ,
42+ } ,
43+ {
44+ description : 'should return null for USE_GEMINI if GEMINI_API_KEY is set' ,
45+ authType : AuthType . USE_GEMINI ,
46+ envs : { GEMINI_API_KEY : 'test-key' } ,
47+ expected : null ,
48+ } ,
49+ {
50+ description :
51+ 'should return an error message for USE_GEMINI if GEMINI_API_KEY is not set' ,
52+ authType : AuthType . USE_GEMINI ,
53+ envs : { } ,
54+ expected :
55+ 'When using Gemini API, you must specify the GEMINI_API_KEY environment variable.\n' +
56+ 'Update your environment and try again (no reload needed if using .env)!' ,
57+ } ,
58+ {
59+ description :
60+ 'should return null for USE_VERTEX_AI if GOOGLE_CLOUD_PROJECT and GOOGLE_CLOUD_LOCATION are set' ,
61+ authType : AuthType . USE_VERTEX_AI ,
62+ envs : {
63+ GOOGLE_CLOUD_PROJECT : 'test-project' ,
64+ GOOGLE_CLOUD_LOCATION : 'test-location' ,
65+ } ,
66+ expected : null ,
67+ } ,
68+ {
69+ description :
70+ 'should return null for USE_VERTEX_AI if GOOGLE_API_KEY is set' ,
71+ authType : AuthType . USE_VERTEX_AI ,
72+ envs : { GOOGLE_API_KEY : 'test-api-key' } ,
73+ expected : null ,
74+ } ,
75+ {
76+ description :
77+ 'should return an error message for USE_VERTEX_AI if no required environment variables are set' ,
78+ authType : AuthType . USE_VERTEX_AI ,
79+ envs : { } ,
80+ expected :
6781 'When using Vertex AI, you must specify either:\n' +
68- '• GOOGLE_CLOUD_PROJECT and GOOGLE_CLOUD_LOCATION environment variables.\n' +
69- '• GOOGLE_API_KEY environment variable (if using express mode).\n' +
70- 'Update your environment and try again (no reload needed if using .env)!' ,
71- ) ;
72- } ) ;
73- } ) ;
74-
75- it ( 'should return an error message for an invalid auth method' , ( ) => {
76- expect ( validateAuthMethod ( 'invalid-method' ) ) . toBe (
77- 'Invalid auth method selected.' ,
78- ) ;
82+ '• GOOGLE_CLOUD_PROJECT and GOOGLE_CLOUD_LOCATION environment variables.\n' +
83+ '• GOOGLE_API_KEY environment variable (if using express mode).\n' +
84+ 'Update your environment and try again (no reload needed if using .env)!' ,
85+ } ,
86+ {
87+ description : 'should return an error message for an invalid auth method' ,
88+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
89+ authType : 'invalid-method' as any ,
90+ envs : { } ,
91+ expected : 'Invalid auth method selected.' ,
92+ } ,
93+ ] ) ( '$description' , ( { authType, envs, expected } ) => {
94+ for ( const [ key , value ] of Object . entries ( envs ) ) {
95+ vi . stubEnv ( key , value as string ) ;
96+ }
97+ expect ( validateAuthMethod ( authType ) ) . toBe ( expected ) ;
7998 } ) ;
8099} ) ;
0 commit comments