mirror of
https://github.com/pacnpal/Roo-Code.git
synced 2025-12-20 04:11:10 -05:00
Add a test ensuring that we're sending a clean conversation history
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
import { Cline } from '../Cline';
|
import { Cline } from '../Cline';
|
||||||
import { ClineProvider } from '../webview/ClineProvider';
|
import { ClineProvider } from '../webview/ClineProvider';
|
||||||
import { ApiConfiguration } from '../../shared/api';
|
import { ApiConfiguration } from '../../shared/api';
|
||||||
|
import { ApiStreamChunk } from '../../api/transform/stream';
|
||||||
import * as vscode from 'vscode';
|
import * as vscode from 'vscode';
|
||||||
|
|
||||||
// Mock all MCP-related modules
|
// Mock all MCP-related modules
|
||||||
@@ -419,5 +420,84 @@ describe('Cline', () => {
|
|||||||
expect(details).toContain('# Current Time');
|
expect(details).toContain('# Current Time');
|
||||||
expect(details).toMatch(/1\/1\/2024.*5:00:00 AM.*\(America\/Los_Angeles, UTC-7:00\)/); // Full time string format
|
expect(details).toMatch(/1\/1\/2024.*5:00:00 AM.*\(America\/Los_Angeles, UTC-7:00\)/); // Full time string format
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('API conversation handling', () => {
|
||||||
|
it('should clean conversation history before sending to API', async () => {
|
||||||
|
const cline = new Cline(
|
||||||
|
mockProvider,
|
||||||
|
mockApiConfig,
|
||||||
|
undefined,
|
||||||
|
false,
|
||||||
|
undefined,
|
||||||
|
'test task'
|
||||||
|
);
|
||||||
|
|
||||||
|
// Mock the API's createMessage method to capture the conversation history
|
||||||
|
const createMessageSpy = jest.fn();
|
||||||
|
const mockStream = {
|
||||||
|
async *[Symbol.asyncIterator]() {
|
||||||
|
yield { type: 'text', text: '' };
|
||||||
|
},
|
||||||
|
async next() {
|
||||||
|
return { done: true, value: undefined };
|
||||||
|
},
|
||||||
|
async return() {
|
||||||
|
return { done: true, value: undefined };
|
||||||
|
},
|
||||||
|
async throw(e: any) {
|
||||||
|
throw e;
|
||||||
|
},
|
||||||
|
async [Symbol.asyncDispose]() {
|
||||||
|
// Cleanup
|
||||||
|
}
|
||||||
|
} as AsyncGenerator<ApiStreamChunk>;
|
||||||
|
|
||||||
|
jest.spyOn(cline.api, 'createMessage').mockImplementation((...args) => {
|
||||||
|
createMessageSpy(...args);
|
||||||
|
return mockStream;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Add a message with extra properties to the conversation history
|
||||||
|
const messageWithExtra = {
|
||||||
|
role: 'user' as const,
|
||||||
|
content: [{ type: 'text' as const, text: 'test message' }],
|
||||||
|
ts: Date.now(),
|
||||||
|
extraProp: 'should be removed'
|
||||||
|
};
|
||||||
|
cline.apiConversationHistory = [messageWithExtra];
|
||||||
|
|
||||||
|
// Trigger an API request
|
||||||
|
await cline.recursivelyMakeClineRequests([
|
||||||
|
{ type: 'text', text: 'test request' }
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Get all calls to createMessage
|
||||||
|
const calls = createMessageSpy.mock.calls;
|
||||||
|
|
||||||
|
// Find the call that includes our test message
|
||||||
|
const relevantCall = calls.find(call =>
|
||||||
|
call[1]?.some((msg: any) =>
|
||||||
|
msg.content?.[0]?.text === 'test message'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Verify the conversation history was cleaned in the relevant call
|
||||||
|
expect(relevantCall?.[1]).toEqual(
|
||||||
|
expect.arrayContaining([
|
||||||
|
{
|
||||||
|
role: 'user',
|
||||||
|
content: [{ type: 'text', text: 'test message' }]
|
||||||
|
}
|
||||||
|
])
|
||||||
|
);
|
||||||
|
|
||||||
|
// Verify extra properties were removed
|
||||||
|
const passedMessage = relevantCall?.[1].find((msg: any) =>
|
||||||
|
msg.content?.[0]?.text === 'test message'
|
||||||
|
);
|
||||||
|
expect(passedMessage).not.toHaveProperty('ts');
|
||||||
|
expect(passedMessage).not.toHaveProperty('extraProp');
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user