Skip to main content
Glama
rate-limiting.test.ts1.72 kB
import { describe, test, beforeEach, expect } from '@jest/globals'; import { TodoistTasksTool } from '../../src/tools/todoist-tasks.js'; import { CacheService } from '../../src/services/cache.js'; import { BatchOperationsService } from '../../src/services/batch.js'; import { TodoistApiService } from '../../src/services/todoist-api.js'; import { createTasksApiMock, TasksApiMock, } from '../helpers/mockTodoistApiService.js'; const mockApiConfig = { token: 'test_token_123456', base_url: 'https://api.todoist.com/rest/v1', timeout: 10000, retry_attempts: 3, }; describe('Rate limiting integration', () => { let apiService: TasksApiMock; let tasksTool: TodoistTasksTool; beforeEach(() => { const rateLimitStatus = { rest: { remaining: 5, resetTime: new Date(Date.now() + 1_000), isLimited: false, }, sync: { remaining: 10, resetTime: new Date(Date.now() + 1_000), isLimited: false, }, }; apiService = createTasksApiMock(); apiService.getRateLimitStatus.mockReturnValue(rateLimitStatus); tasksTool = new TodoistTasksTool(mockApiConfig, { apiService: apiService as unknown as TodoistApiService, batchService: new BatchOperationsService( apiService as unknown as TodoistApiService ), cacheService: new CacheService(), }); }); test('includes rate limit metadata in responses', async () => { const result = await tasksTool.execute({ action: 'list', project_id: '220474322', }); expect(result.success).toBe(true); expect(result.metadata?.rate_limit_remaining).toBe(5); expect(apiService.getRateLimitStatus).toHaveBeenCalled(); }); });

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/shayonpal/mcp-todoist'

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