Skip to main content
Glama
ErrorService-suggestions.test.tsβ€’4.75 kB
/** * Split: ErrorService.getOperationSuggestion tests */ import { describe, it, expect, beforeEach, vi } from 'vitest'; import { ErrorService } from '../../src/services/ErrorService.js'; vi.mock('../../src/handlers/tool-configs/universal/field-mapper.js', () => ({ validateResourceType: vi.fn(), getFieldSuggestions: vi.fn(), })); import { validateResourceType, getFieldSuggestions, } from '../../src/handlers/tool-configs/universal/field-mapper.js'; describe('ErrorService.getOperationSuggestion', () => { beforeEach(() => { vi.clearAllMocks(); vi.mocked(validateResourceType).mockReturnValue({ valid: true, suggestion: undefined, } as any); }); it('returns resource type suggestion for invalid resource', () => { vi.mocked(validateResourceType).mockReturnValue({ valid: false, suggestion: 'Use "companies" instead of "company"', } as any); const result = ErrorService.getOperationSuggestion( 'create', 'company', new Error('Invalid resource') ); expect(result).toBe('Use "companies" instead of "company"'); }); it('provides date format suggestions', () => { const result = ErrorService.getOperationSuggestion( 'search', 'companies', new Error('Unable to parse date format') ); expect(result).toContain('relative dates like "last 7 days"'); expect(result).toContain('ISO format (YYYY-MM-DD)'); }); it('provides date range suggestions', () => { const result = ErrorService.getOperationSuggestion( 'search', 'people', new Error('Invalid daterange specified') ); expect(result).toContain('Date ranges support formats like'); expect(result).toContain('last 30 days'); }); it('suggests simpler filters for unsupported combinations', () => { const result = ErrorService.getOperationSuggestion( 'search', 'tasks', new Error('Filter combination not supported') ); expect(result).toContain('simpler filter'); }); it('suggests batch size limits', () => { const result = ErrorService.getOperationSuggestion( 'create', 'companies', new Error('Batch operation exceeds limit') ); expect(result).toContain('100 items at a time'); }); it('suggests rate limit handling', () => { const result = ErrorService.getOperationSuggestion( 'search', 'people', new Error('Rate limit exceeded') ); expect(result).toContain('wait a moment'); }); it('suggests field discovery for unknown attributes', () => { vi.mocked(getFieldSuggestions).mockReturnValue( 'Try using "name" or "email"' ); const result = ErrorService.getOperationSuggestion( 'create', 'companies', new Error('Cannot find attribute with slug/id "unknown_field"') ); expect(result).toBe('Try using "name" or "email"'); expect(getFieldSuggestions).toHaveBeenCalledWith( 'companies', 'unknown_field' ); }); it('provides generic not found suggestions', () => { const result = ErrorService.getOperationSuggestion( 'get', 'people', new Error('Record not found') ); expect(result).toContain('Verify that the people record exists'); }); it('provides authentication suggestions for unauthorized errors', () => { const result = ErrorService.getOperationSuggestion( 'create', 'tasks', new Error('Unauthorized access') ); expect(result).toContain('API permissions'); }); it('provides duplicate record suggestions for create', () => { const result = ErrorService.getOperationSuggestion( 'create', 'companies', new Error('Duplicate record found') ); expect(result).toContain('may already exist'); }); it('provides uniqueness suggestions', () => { const result = ErrorService.getOperationSuggestion( 'create', 'people', new Error('Uniqueness constraint violation') ); expect(result).toContain('unique values already exists'); }); it('handles string errors', () => { const result = ErrorService.getOperationSuggestion( 'search', 'companies', 'Rate limit exceeded' ); expect(result).toContain('wait a moment'); }); it('handles object errors with message property', () => { const result = ErrorService.getOperationSuggestion('search', 'people', { message: 'Invalid date format', } as any); expect(result).toContain('relative dates'); }); it('returns undefined for unknown patterns', () => { const result = ErrorService.getOperationSuggestion( 'create', 'companies', new Error('Some completely unknown error') ); expect(result).toBeUndefined(); }); });

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/kesslerio/attio-mcp-server'

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