mcp-memory-libsql
by spences10
Verified
import { ToolRegistry, ToolMetadata } from '../registry.js';
describe('ToolRegistry', () => {
const mockTools: ToolMetadata[] = [
{
name: 'create_workspace_label',
category: 'Gmail/Labels',
description: 'Create a new label',
aliases: ['create_label', 'new_label', 'create_gmail_label'],
inputSchema: {
type: 'object',
properties: {
name: { type: 'string' }
}
}
},
{
name: 'send_workspace_email',
category: 'Gmail/Messages',
description: 'Send an email',
aliases: ['send_email', 'send_mail'],
inputSchema: {
type: 'object',
properties: {
to: { type: 'string' }
}
}
},
{
name: 'create_workspace_calendar_event',
category: 'Calendar/Events',
description: 'Create calendar event',
aliases: ['create_event', 'schedule_event'],
inputSchema: {
type: 'object',
properties: {
title: { type: 'string' }
}
}
}
];
let registry: ToolRegistry;
beforeEach(() => {
registry = new ToolRegistry(mockTools);
});
describe('getTool', () => {
it('should find tool by main name', () => {
const tool = registry.getTool('create_workspace_label');
expect(tool).toBeDefined();
expect(tool?.name).toBe('create_workspace_label');
});
it('should find tool by alias', () => {
const tool = registry.getTool('create_gmail_label');
expect(tool).toBeDefined();
expect(tool?.name).toBe('create_workspace_label');
});
it('should return undefined for unknown tool', () => {
const tool = registry.getTool('nonexistent_tool');
expect(tool).toBeUndefined();
});
});
describe('getAllTools', () => {
it('should return all registered tools', () => {
const tools = registry.getAllTools();
expect(tools).toHaveLength(3);
expect(tools.map(t => t.name)).toContain('create_workspace_label');
expect(tools.map(t => t.name)).toContain('send_workspace_email');
expect(tools.map(t => t.name)).toContain('create_workspace_calendar_event');
});
});
describe('getCategories', () => {
it('should return tools organized by category', () => {
const categories = registry.getCategories();
expect(categories).toHaveLength(3);
const categoryNames = categories.map(c => c.name);
expect(categoryNames).toContain('Gmail/Labels');
expect(categoryNames).toContain('Gmail/Messages');
expect(categoryNames).toContain('Calendar/Events');
const labelCategory = categories.find(c => c.name === 'Gmail/Labels');
expect(labelCategory?.tools).toHaveLength(1);
expect(labelCategory?.tools[0].name).toBe('create_workspace_label');
});
});
describe('findSimilarTools', () => {
it('should find similar tools by name', () => {
const similar = registry.findSimilarTools('create_label_workspace');
expect(similar).toHaveLength(1);
expect(similar[0].name).toBe('create_workspace_label');
});
it('should find similar tools by alias', () => {
const similar = registry.findSimilarTools('gmail_label_create');
expect(similar).toHaveLength(1);
expect(similar[0].name).toBe('create_workspace_label');
});
it('should respect maxSuggestions limit', () => {
const similar = registry.findSimilarTools('create', 2);
expect(similar).toHaveLength(2);
});
});
describe('formatErrorWithSuggestions', () => {
it('should format error message with suggestions', () => {
const message = registry.formatErrorWithSuggestions('create_gmail_lable');
expect(message).toContain('Tool \'create_gmail_lable\' not found');
expect(message).toContain('Did you mean:');
expect(message).toContain('create_workspace_label (Gmail/Labels)');
expect(message).toContain('Available categories:');
});
it('should include aliases in error message', () => {
const message = registry.formatErrorWithSuggestions('send_mail_workspace');
expect(message).toContain('send_workspace_email');
expect(message).toContain('Aliases: send_email, send_mail');
});
});
describe('getAllToolNames', () => {
it('should return all tool names including aliases', () => {
const names = registry.getAllToolNames();
expect(names).toContain('create_workspace_label');
expect(names).toContain('create_gmail_label');
expect(names).toContain('send_workspace_email');
expect(names).toContain('send_mail');
});
});
});