summaryrefslogtreecommitdiff
path: root/packages/core/src/tools/glob.test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/core/src/tools/glob.test.ts')
-rw-r--r--packages/core/src/tools/glob.test.ts29
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', () => {