diff options
| author | matt korwel <[email protected]> | 2025-06-19 16:52:22 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-06-19 16:52:22 -0700 |
| commit | 04518b52c0ddcd5ae1192763c55e472add218b3c (patch) | |
| tree | 2587b0ccc5460e9e94eb8b715956cb713950f7c8 /packages/cli/src/utils/modelCheck.test.ts | |
| parent | c48fcaa8c3fe8175718b1bbfc7770a958012173c (diff) | |
Auth First Run (#1207)
Co-authored-by: Tommaso Sciortino <[email protected]>
Co-authored-by: N. Taylor Mullen <[email protected]>
Diffstat (limited to 'packages/cli/src/utils/modelCheck.test.ts')
| -rw-r--r-- | packages/cli/src/utils/modelCheck.test.ts | 154 |
1 files changed, 0 insertions, 154 deletions
diff --git a/packages/cli/src/utils/modelCheck.test.ts b/packages/cli/src/utils/modelCheck.test.ts deleted file mode 100644 index 11e38c01..00000000 --- a/packages/cli/src/utils/modelCheck.test.ts +++ /dev/null @@ -1,154 +0,0 @@ -/** - * @license - * Copyright 2025 Google LLC - * SPDX-License-Identifier: Apache-2.0 - */ - -import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; -import { getEffectiveModel } from './modelCheck.js'; -import { - DEFAULT_GEMINI_MODEL, - DEFAULT_GEMINI_FLASH_MODEL, -} from '@gemini-cli/core'; - -// Mock global fetch -global.fetch = vi.fn(); - -// Mock AbortController -const mockAbort = vi.fn(); -global.AbortController = vi.fn(() => ({ - signal: { aborted: false }, // Start with not aborted - abort: mockAbort, - // eslint-disable-next-line @typescript-eslint/no-explicit-any -})) as any; - -describe('getEffectiveModel', () => { - const apiKey = 'test-api-key'; - - beforeEach(() => { - vi.useFakeTimers(); - vi.clearAllMocks(); - // Reset signal for each test if AbortController mock is more complex - global.AbortController = vi.fn(() => ({ - signal: { aborted: false }, - abort: mockAbort, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - })) as any; - }); - - afterEach(() => { - vi.restoreAllMocks(); - vi.useRealTimers(); - }); - - describe('when currentConfiguredModel is not DEFAULT_GEMINI_MODEL', () => { - it('should return the currentConfiguredModel without fetching', async () => { - const customModel = 'custom-model-name'; - const result = await getEffectiveModel(apiKey, customModel); - expect(result).toEqual(customModel); - expect(fetch).not.toHaveBeenCalled(); - }); - }); - - describe('when currentConfiguredModel is DEFAULT_GEMINI_MODEL', () => { - it('should switch to DEFAULT_GEMINI_FLASH_MODEL if fetch returns 429', async () => { - (fetch as vi.Mock).mockResolvedValueOnce({ - ok: false, - status: 429, - }); - const result = await getEffectiveModel(apiKey, DEFAULT_GEMINI_MODEL); - expect(result).toEqual(DEFAULT_GEMINI_FLASH_MODEL); - expect(fetch).toHaveBeenCalledTimes(1); - expect(fetch).toHaveBeenCalledWith( - `https://generativelanguage.googleapis.com/v1beta/models/${DEFAULT_GEMINI_MODEL}:generateContent?key=${apiKey}`, - expect.any(Object), - ); - }); - - it('should return DEFAULT_GEMINI_MODEL if fetch returns 200', async () => { - (fetch as vi.Mock).mockResolvedValueOnce({ - ok: true, - status: 200, - }); - const result = await getEffectiveModel(apiKey, DEFAULT_GEMINI_MODEL); - expect(result).toEqual(DEFAULT_GEMINI_MODEL); - expect(fetch).toHaveBeenCalledTimes(1); - }); - - it('should return DEFAULT_GEMINI_MODEL if fetch returns a non-429 error status (e.g., 500)', async () => { - (fetch as vi.Mock).mockResolvedValueOnce({ - ok: false, - status: 500, - }); - const result = await getEffectiveModel(apiKey, DEFAULT_GEMINI_MODEL); - expect(result).toEqual(DEFAULT_GEMINI_MODEL); - expect(fetch).toHaveBeenCalledTimes(1); - }); - - it('should return DEFAULT_GEMINI_MODEL if fetch throws a network error', async () => { - (fetch as vi.Mock).mockRejectedValueOnce(new Error('Network error')); - const result = await getEffectiveModel(apiKey, DEFAULT_GEMINI_MODEL); - expect(result).toEqual(DEFAULT_GEMINI_MODEL); - expect(fetch).toHaveBeenCalledTimes(1); - }); - - it('should return DEFAULT_GEMINI_MODEL if fetch times out', async () => { - // Simulate AbortController's signal changing and fetch throwing AbortError - const abortControllerInstance = { - signal: { aborted: false }, // mutable signal - abort: vi.fn(() => { - abortControllerInstance.signal.aborted = true; // Use abortControllerInstance - }), - }; - (global.AbortController as vi.Mock).mockImplementationOnce( - () => abortControllerInstance, - ); - - (fetch as vi.Mock).mockImplementationOnce( - async ({ signal }: { signal: AbortSignal }) => { - // Simulate the timeout advancing and abort being called - vi.advanceTimersByTime(2000); - if (signal.aborted) { - throw new DOMException('Aborted', 'AbortError'); - } - // Should not reach here in a timeout scenario - return { ok: true, status: 200 }; - }, - ); - - const resultPromise = getEffectiveModel(apiKey, DEFAULT_GEMINI_MODEL); - // Ensure timers are advanced to trigger the timeout within getEffectiveModel - await vi.advanceTimersToNextTimerAsync(); // Or advanceTimersByTime(2000) if more precise control is needed - - const result = await resultPromise; - - expect(mockAbort).toHaveBeenCalledTimes(0); // setTimeout calls controller.abort(), not our direct mockAbort - expect(abortControllerInstance.abort).toHaveBeenCalledTimes(1); - expect(result).toEqual(DEFAULT_GEMINI_MODEL); - expect(fetch).toHaveBeenCalledTimes(1); - }); - - it('should correctly pass API key and model in the fetch request', async () => { - (fetch as vi.Mock).mockResolvedValueOnce({ ok: true, status: 200 }); - const specificApiKey = 'specific-key-for-this-test'; - await getEffectiveModel(specificApiKey, DEFAULT_GEMINI_MODEL); - - expect(fetch).toHaveBeenCalledWith( - `https://generativelanguage.googleapis.com/v1beta/models/${DEFAULT_GEMINI_MODEL}:generateContent?key=${specificApiKey}`, - expect.objectContaining({ - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - contents: [{ parts: [{ text: 'test' }] }], - generationConfig: { - maxOutputTokens: 1, - temperature: 0, - topK: 1, - thinkingConfig: { thinkingBudget: 0, includeThoughts: false }, - }, - }), - }), - ); - }); - }); -}); |
