summaryrefslogtreecommitdiff
path: root/packages/core/src/code_assist/setup.test.ts
diff options
context:
space:
mode:
authorMarat Boshernitsan <[email protected]>2025-07-08 09:37:10 -0700
committerGitHub <[email protected]>2025-07-08 16:37:10 +0000
commitf1647d9e19bf6930bc50bd2e66d2929f8f771503 (patch)
tree9419cbc6345c775f4c3bf21a9437a1614cf8fc33 /packages/core/src/code_assist/setup.test.ts
parent5c759d48c7e49b84f35544478d86cfe60a41b569 (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.ts82
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,
+ );
+ });
+});