Skip to main content
Glama
clear-conversations.test.tsโ€ข6.28 kB
import { describe, it, expect, jest, beforeEach } from '@jest/globals'; import { clearConversationsTool } from '../../src/tools/clear-conversations.js'; import { ConversationManager } from '../../src/services/conversation.js'; // Mock logger to avoid console noise during tests jest.mock('../../src/utils/logger'); describe('clear_conversations tool', () => { let conversationManager: ConversationManager; beforeEach(() => { conversationManager = new ConversationManager(); }); describe('tool execution', () => { it('should call ConversationManager.clearAll and return proper response format', () => { // Create some conversations first conversationManager.createConversation('test-1', 'openai'); conversationManager.addMessage('test-1', { role: 'user' as const, content: 'Hello', timestamp: new Date(), }); const result = clearConversationsTool(conversationManager, {}); expect(result).toHaveProperty('content'); expect(result.content).toHaveLength(1); expect(result.content[0]).toHaveProperty('type', 'text'); expect(result.content[0].text).toContain('๐Ÿงน Cleared 1 conversation (1 message)'); expect(result.content[0].text).toContain('๐Ÿฆ† All ducks now have a fresh start!'); // Verify conversations were actually cleared expect(conversationManager.getConversation('test-1')).toBeUndefined(); }); it('should handle empty state gracefully', () => { const result = clearConversationsTool(conversationManager, {}); expect(result.content[0].text).toContain('๐Ÿงน No conversations to clear - memory is already empty!'); expect(result.content[0].text).toContain('๐Ÿฆ† All ducks now have a fresh start!'); }); it('should handle multiple conversations correctly', () => { // Create multiple conversations with different message counts conversationManager.createConversation('test-1', 'openai'); conversationManager.addMessage('test-1', { role: 'user' as const, content: 'Hello 1', timestamp: new Date(), }); conversationManager.addMessage('test-1', { role: 'assistant' as const, content: 'Hi 1', timestamp: new Date(), }); conversationManager.createConversation('test-2', 'groq'); conversationManager.addMessage('test-2', { role: 'user' as const, content: 'Hello 2', timestamp: new Date(), }); conversationManager.createConversation('test-3', 'gemini'); // No messages in test-3 const result = clearConversationsTool(conversationManager, {}); expect(result.content[0].text).toContain('๐Ÿงน Cleared 3 conversations (3 messages)'); expect(result.content[0].text).toContain('๐Ÿฆ† All ducks now have a fresh start!'); // Verify all conversations were cleared expect(conversationManager.listConversations()).toHaveLength(0); }); it('should handle singular vs plural correctly', () => { // Test single conversation with single message conversationManager.createConversation('test-1', 'openai'); conversationManager.addMessage('test-1', { role: 'user' as const, content: 'Hello', timestamp: new Date(), }); const result = clearConversationsTool(conversationManager, {}); // Should use singular form expect(result.content[0].text).toContain('๐Ÿงน Cleared 1 conversation (1 message)'); expect(result.content[0].text).not.toContain('conversations'); expect(result.content[0].text).not.toContain('messages)'); }); it('should handle args parameter (even though unused)', () => { const args = { unused: 'parameter' }; conversationManager.createConversation('test-1', 'openai'); const result = clearConversationsTool(conversationManager, args); expect(result).toHaveProperty('content'); expect(result.content[0].text).toContain('๐Ÿงน Cleared 1 conversation'); }); it('should return consistent response structure', () => { const result = clearConversationsTool(conversationManager, {}); // Verify response structure matches MCP tool format expect(result).toEqual({ content: [ { type: 'text', text: expect.stringContaining('๐Ÿงน'), }, ], }); expect(result.content[0].text).toContain('๐Ÿฆ† All ducks now have a fresh start!'); }); }); describe('integration with ConversationManager', () => { it('should properly clear all conversation state', () => { // Create complex scenario conversationManager.createConversation('debug-session', 'openai'); conversationManager.addMessage('debug-session', { role: 'user' as const, content: 'Help with bug', timestamp: new Date(), }); conversationManager.addMessage('debug-session', { role: 'assistant' as const, content: 'Sure, what\'s the issue?', timestamp: new Date(), }); conversationManager.createConversation('code-review', 'groq'); conversationManager.addMessage('code-review', { role: 'user' as const, content: 'Review this code', timestamp: new Date(), }); // Switch provider in second conversation conversationManager.switchProvider('code-review', 'gemini'); // Verify setup expect(conversationManager.listConversations()).toHaveLength(2); expect(conversationManager.getConversation('debug-session')!.messages).toHaveLength(2); expect(conversationManager.getConversation('code-review')!.messages).toHaveLength(2); // 1 + 1 system message // Clear all const result = clearConversationsTool(conversationManager, {}); // Verify complete cleanup expect(conversationManager.listConversations()).toHaveLength(0); expect(conversationManager.getConversation('debug-session')).toBeUndefined(); expect(conversationManager.getConversation('code-review')).toBeUndefined(); // Verify counts in response expect(result.content[0].text).toContain('๐Ÿงน Cleared 2 conversations (4 messages)'); }); }); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/nesquikm/mcp-rubber-duck'

If you have feedback or need assistance with the MCP directory API, please join our Discord server