diff options
| author | Marat Boshernitsan <[email protected]> | 2025-07-08 09:37:10 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-07-08 16:37:10 +0000 |
| commit | f1647d9e19bf6930bc50bd2e66d2929f8f771503 (patch) | |
| tree | 9419cbc6345c775f4c3bf21a9437a1614cf8fc33 /packages/core/src/code_assist/setup.test.ts | |
| parent | 5c759d48c7e49b84f35544478d86cfe60a41b569 (diff) | |
Improve auth env var validation logic and messaging to detect settings that confuse GenAI SDK (#1381)
Co-authored-by: Scott Densmore <[email protected]>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Diffstat (limited to 'packages/core/src/code_assist/setup.test.ts')
| -rw-r--r-- | packages/core/src/code_assist/setup.test.ts | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/packages/core/src/code_assist/setup.test.ts b/packages/core/src/code_assist/setup.test.ts new file mode 100644 index 00000000..479abae0 --- /dev/null +++ b/packages/core/src/code_assist/setup.test.ts @@ -0,0 +1,82 @@ +/** + * @license + * Copyright 2025 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +import { describe, it, expect, vi, beforeEach } from 'vitest'; +import { setupUser, ProjectIdRequiredError } from './setup.js'; +import { CodeAssistServer } from '../code_assist/server.js'; +import { OAuth2Client } from 'google-auth-library'; +import { GeminiUserTier, UserTierId } from './types.js'; + +vi.mock('../code_assist/server.js'); + +const mockPaidTier: GeminiUserTier = { + id: UserTierId.STANDARD, + name: 'paid', + description: 'Paid tier', +}; + +describe('setupUser', () => { + let mockLoad: ReturnType<typeof vi.fn>; + let mockOnboardUser: ReturnType<typeof vi.fn>; + + beforeEach(() => { + vi.resetAllMocks(); + mockLoad = vi.fn(); + mockOnboardUser = vi.fn().mockResolvedValue({ + done: true, + response: { + cloudaicompanionProject: { + id: 'server-project', + }, + }, + }); + vi.mocked(CodeAssistServer).mockImplementation( + () => + ({ + loadCodeAssist: mockLoad, + onboardUser: mockOnboardUser, + }) as unknown as CodeAssistServer, + ); + }); + + it('should use GOOGLE_CLOUD_PROJECT when set', async () => { + process.env.GOOGLE_CLOUD_PROJECT = 'test-project'; + mockLoad.mockResolvedValue({ + currentTier: mockPaidTier, + }); + await setupUser({} as OAuth2Client); + expect(CodeAssistServer).toHaveBeenCalledWith( + expect.any(Object), + 'test-project', + ); + }); + + it('should treat empty GOOGLE_CLOUD_PROJECT as undefined and use project from server', async () => { + process.env.GOOGLE_CLOUD_PROJECT = ''; + mockLoad.mockResolvedValue({ + cloudaicompanionProject: 'server-project', + currentTier: mockPaidTier, + }); + const projectId = await setupUser({} as OAuth2Client); + expect(CodeAssistServer).toHaveBeenCalledWith( + expect.any(Object), + undefined, + ); + expect(projectId).toBe('server-project'); + }); + + it('should throw ProjectIdRequiredError when no project ID is available', async () => { + delete process.env.GOOGLE_CLOUD_PROJECT; + // And the server itself requires a project ID internally + vi.mocked(CodeAssistServer).mockImplementation(() => { + throw new ProjectIdRequiredError(); + }); + + await expect(setupUser({} as OAuth2Client)).rejects.toThrow( + ProjectIdRequiredError, + ); + }); +}); |
