Download packages/cli/src/ui/hooks/useAtCompletion_agents.test.ts from SaylorTwift/gemini-cli: direct link, hf CLI and curl.
- Browser
- Download file 3.42 kB
-
https://huggingface.co/SaylorTwift/gemini-cli/resolve/main/packages/cli/src/ui/hooks/useAtCompletion_agents.test.ts
- Command line
-
hf download hf://SaylorTwift/gemini-cli/packages/cli/src/ui/hooks/useAtCompletion_agents.test.ts
-
curl -L -o useAtCompletion_agents.test.ts https://huggingface.co/SaylorTwift/gemini-cli/resolve/main/packages/cli/src/ui/hooks/useAtCompletion_agents.test.ts
3.42 kB
| /** | |
| * @license | |
| * Copyright 2025 Google LLC | |
| * SPDX-License-Identifier: Apache-2.0 | |
| */ | |
| import { describe, it, expect, beforeEach, vi, afterEach } from 'vitest'; | |
| import { useState } from 'react'; | |
| import { renderHook } from '../../test-utils/render.js'; | |
| import { waitFor } from '../../test-utils/async.js'; | |
| import { useAtCompletion } from './useAtCompletion.js'; | |
| import type { Config, AgentDefinition } from '@google/gemini-cli-core'; | |
| import { createTmpDir, cleanupTmpDir } from '@google/gemini-cli-test-utils'; | |
| import type { Suggestion } from '../components/SuggestionsDisplay.js'; | |
| import { CommandKind } from '../commands/types.js'; | |
| // Test harness to capture the state from the hook's callbacks. | |
| function useTestHarnessForAtCompletion( | |
| enabled: boolean, | |
| pattern: string, | |
| config: Config | undefined, | |
| cwd: string, | |
| ) { | |
| const [suggestions, setSuggestions] = useState<Suggestion[]>([]); | |
| const [isLoadingSuggestions, setIsLoadingSuggestions] = useState(false); | |
| useAtCompletion({ | |
| enabled, | |
| pattern, | |
| config, | |
| cwd, | |
| setSuggestions, | |
| setIsLoadingSuggestions, | |
| }); | |
| return { suggestions, isLoadingSuggestions }; | |
| } | |
| describe('useAtCompletion with Agents', () => { | |
| let testRootDir: string; | |
| let mockConfig: Config; | |
| beforeEach(() => { | |
| const mockAgentRegistry = { | |
| getAllDefinitions: vi.fn(() => [ | |
| { | |
| name: 'CodebaseInvestigator', | |
| description: 'Investigates codebase', | |
| kind: 'local', | |
| } as AgentDefinition, | |
| { | |
| name: 'OtherAgent', | |
| description: 'Another agent', | |
| kind: 'local', | |
| } as AgentDefinition, | |
| ]), | |
| }; | |
| mockConfig = { | |
| getFileFilteringOptions: vi.fn(() => ({ | |
| respectGitIgnore: true, | |
| respectGeminiIgnore: true, | |
| })), | |
| getEnableRecursiveFileSearch: () => true, | |
| getFileFilteringDisableFuzzySearch: () => false, | |
| getFileFilteringEnableFuzzySearch: () => true, | |
| getAgentsSettings: () => ({}), | |
| getResourceRegistry: vi.fn().mockReturnValue({ | |
| getAllResources: () => [], | |
| }), | |
| getAgentRegistry: () => mockAgentRegistry, | |
| } as unknown as Config; | |
| vi.clearAllMocks(); | |
| }); | |
| afterEach(async () => { | |
| if (testRootDir) { | |
| await cleanupTmpDir(testRootDir); | |
| } | |
| vi.restoreAllMocks(); | |
| }); | |
| it('should include agent suggestions', async () => { | |
| testRootDir = await createTmpDir({}); | |
| const { result } = await renderHook(() => | |
| useTestHarnessForAtCompletion(true, '', mockConfig, testRootDir), | |
| ); | |
| await waitFor(() => { | |
| expect(result.current.suggestions.length).toBeGreaterThan(0); | |
| }); | |
| const agentSuggestion = result.current.suggestions.find( | |
| (s) => s.value === 'CodebaseInvestigator', | |
| ); | |
| expect(agentSuggestion).toBeDefined(); | |
| expect(agentSuggestion?.commandKind).toBe(CommandKind.AGENT); | |
| }); | |
| it('should filter agent suggestions', async () => { | |
| testRootDir = await createTmpDir({}); | |
| const { result } = await renderHook(() => | |
| useTestHarnessForAtCompletion(true, 'Code', mockConfig, testRootDir), | |
| ); | |
| await waitFor(() => { | |
| expect(result.current.suggestions.length).toBeGreaterThan(0); | |
| }); | |
| expect(result.current.suggestions.map((s) => s.value)).toContain( | |
| 'CodebaseInvestigator', | |
| ); | |
| expect(result.current.suggestions.map((s) => s.value)).not.toContain( | |
| 'OtherAgent', | |
| ); | |
| }); | |
| }); | |