Refactor: Use config.getGeminiClient() for GeminiClient instantiation (#715)

This commit is contained in:
N. Taylor Mullen
2025-06-02 22:30:52 -07:00
committed by GitHub
parent cf84f1af68
commit 8ab74ef1bb
9 changed files with 39 additions and 16 deletions

View File

@@ -25,6 +25,7 @@ import { checkNextSpeaker } from '../utils/nextSpeakerChecker.js';
import { reportError } from '../utils/errorReporting.js';
import { GeminiChat } from './geminiChat.js';
import { retryWithBackoff } from '../utils/retry.js';
import { getErrorMessage } from '../utils/errors.js';
export class GeminiClient {
private chat: Promise<GeminiChat>;
@@ -158,8 +159,7 @@ export class GeminiClient {
history,
'startChat',
);
const message = error instanceof Error ? error.message : 'Unknown error.';
throw new Error(`Failed to initialize chat: ${message}`);
throw new Error(`Failed to initialize chat: ${getErrorMessage(error)}`);
}
}

View File

@@ -39,7 +39,15 @@ describe('EditTool', () => {
rootDir = path.join(tempDir, 'root');
fs.mkdirSync(rootDir);
// The client instance that EditTool will use
const mockClientInstanceWithGenerateJson = {
generateJson: mockGenerateJson, // mockGenerateJson is already defined and hoisted
};
mockConfig = {
getGeminiClient: vi
.fn()
.mockReturnValue(mockClientInstanceWithGenerateJson),
getTargetDir: () => rootDir,
getApprovalMode: vi.fn(() => false),
setApprovalMode: vi.fn(),

View File

@@ -114,7 +114,7 @@ Expectation for required parameters:
);
this.config = config;
this.rootDirectory = path.resolve(this.config.getTargetDir());
this.client = new GeminiClient(this.config);
this.client = config.getGeminiClient();
}
/**

View File

@@ -53,6 +53,7 @@ const mockConfigInternal = {
getTargetDir: () => rootDir,
getApprovalMode: vi.fn(() => ApprovalMode.DEFAULT),
setApprovalMode: vi.fn(),
getGeminiClient: vi.fn(), // Initialize as a plain mock function
getApiKey: () => 'test-key',
getModel: () => 'test-model',
getSandbox: () => false,
@@ -97,6 +98,11 @@ describe('WriteFileTool', () => {
) as Mocked<GeminiClient>;
vi.mocked(GeminiClient).mockImplementation(() => mockGeminiClientInstance);
// Now that mockGeminiClientInstance is initialized, set the mock implementation for getGeminiClient
mockConfigInternal.getGeminiClient.mockReturnValue(
mockGeminiClientInstance,
);
tool = new WriteFileTool(mockConfig);
// Reset mocks before each test

View File

@@ -77,7 +77,7 @@ export class WriteFileTool extends BaseTool<WriteFileToolParams, ToolResult> {
},
);
this.client = new GeminiClient(this.config);
this.client = this.config.getGeminiClient();
}
private isWithinRoot(pathToCheck: string): boolean {