diff options
Diffstat (limited to 'packages/core/src/tools/glob.test.ts')
| -rw-r--r-- | packages/core/src/tools/glob.test.ts | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/packages/core/src/tools/glob.test.ts b/packages/core/src/tools/glob.test.ts index 7af09352..905c5776 100644 --- a/packages/core/src/tools/glob.test.ts +++ b/packages/core/src/tools/glob.test.ts @@ -9,10 +9,14 @@ import { partListUnionToString } from '../core/geminiRequest.js'; import path from 'path'; import fs from 'fs/promises'; import os from 'os'; -import { describe, it, expect, beforeEach, afterEach } from 'vitest'; +import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import { FileDiscoveryService } from '../services/fileDiscoveryService.js'; import { Config } from '../config/config.js'; import { createMockWorkspaceContext } from '../test-utils/mockWorkspaceContext.js'; +import { ToolErrorType } from './tool-error.js'; +import * as glob from 'glob'; + +vi.mock('glob', { spy: true }); describe('GlobTool', () => { let tempRootDir: string; // This will be the rootDirectory for the GlobTool instance @@ -203,6 +207,29 @@ describe('GlobTool', () => { path.resolve(tempRootDir, 'older.sortme'), ); }); + + it('should return a PATH_NOT_IN_WORKSPACE error if path is outside workspace', async () => { + // Bypassing validation to test execute method directly + vi.spyOn(globTool, 'validateToolParams').mockReturnValue(null); + const params: GlobToolParams = { pattern: '*.txt', path: '/etc' }; + const invocation = globTool.build(params); + const result = await invocation.execute(abortSignal); + expect(result.error?.type).toBe(ToolErrorType.PATH_NOT_IN_WORKSPACE); + expect(result.returnDisplay).toBe('Path is not within workspace'); + }); + + it('should return a GLOB_EXECUTION_ERROR on glob failure', async () => { + vi.mocked(glob.glob).mockRejectedValue(new Error('Glob failed')); + const params: GlobToolParams = { pattern: '*.txt' }; + const invocation = globTool.build(params); + const result = await invocation.execute(abortSignal); + expect(result.error?.type).toBe(ToolErrorType.GLOB_EXECUTION_ERROR); + expect(result.llmContent).toContain( + 'Error during glob search operation: Glob failed', + ); + // Reset glob. + vi.mocked(glob.glob).mockReset(); + }); }); describe('validateToolParams', () => { |
