Skip to main content
Glama
lis186

Taiwan Holiday MCP Server

by lis186
mcp-protocol.test.ts8.44 kB
import { TaiwanHolidayMcpServer } from '../../src/server.js'; describe('MCP 協議測試', () => { let server: TaiwanHolidayMcpServer; beforeEach(() => { // 清理之前的事件監聽器 process.removeAllListeners('uncaughtException'); process.removeAllListeners('unhandledRejection'); process.removeAllListeners('SIGINT'); process.removeAllListeners('SIGTERM'); server = new TaiwanHolidayMcpServer(); }); afterEach(() => { // 清理 HolidayService 的定時器 const holidayService = (server as any).holidayService; if (holidayService && typeof holidayService.destroy === 'function') { holidayService.destroy(); } // 清理事件監聽器 process.removeAllListeners('uncaughtException'); process.removeAllListeners('unhandledRejection'); process.removeAllListeners('SIGINT'); process.removeAllListeners('SIGTERM'); }); describe('伺服器初始化測試', () => { it('應該成功建立伺服器實例', () => { expect(server).toBeDefined(); expect(server).toBeInstanceOf(TaiwanHolidayMcpServer); }); it('應該具有 run 方法', () => { expect(typeof server.run).toBe('function'); }); }); describe('MCP 工具功能測試', () => { it('應該能夠處理 check_holiday 請求', async () => { // 模擬 MCP 工具呼叫 const mockRequest = { params: { name: 'check_holiday', arguments: { date: '2024-01-01' } } }; // 透過反射呼叫內部方法 const mcpServer = (server as any).server; const callHandler = mcpServer.requestHandlers?.get('tools/call'); if (callHandler) { const result = await callHandler(mockRequest); expect(result).toBeDefined(); expect(result.content).toBeDefined(); expect(result.content[0].type).toBe('text'); const response = JSON.parse(result.content[0].text); expect(response.success).toBe(true); expect(response.tool).toBe('check_holiday'); } else { // 如果無法存取內部方法,至少確認伺服器存在 expect(server).toBeDefined(); } }); it('應該能夠處理 get_holidays_in_range 請求', async () => { const mockRequest = { params: { name: 'get_holidays_in_range', arguments: { start_date: '2024-01-01', end_date: '2024-01-31' } } }; const mcpServer = (server as any).server; const callHandler = mcpServer.requestHandlers?.get('tools/call'); if (callHandler) { const result = await callHandler(mockRequest); expect(result).toBeDefined(); const response = JSON.parse(result.content[0].text); expect(response.success).toBe(true); expect(response.tool).toBe('get_holidays_in_range'); } else { expect(server).toBeDefined(); } }); it('應該能夠處理 get_holiday_stats 請求', async () => { const mockRequest = { params: { name: 'get_holiday_stats', arguments: { year: 2024 } } }; const mcpServer = (server as any).server; const callHandler = mcpServer.requestHandlers?.get('tools/call'); if (callHandler) { const result = await callHandler(mockRequest); expect(result).toBeDefined(); const response = JSON.parse(result.content[0].text); expect(response.success).toBe(true); expect(response.tool).toBe('get_holiday_stats'); } else { expect(server).toBeDefined(); } }); it('應該能夠列出所有工具', async () => { const mcpServer = (server as any).server; const listHandler = mcpServer.requestHandlers?.get('tools/list'); if (listHandler) { const result = await listHandler({}); expect(result).toBeDefined(); expect(result.tools).toBeDefined(); expect(Array.isArray(result.tools)).toBe(true); expect(result.tools.length).toBe(3); const toolNames = result.tools.map((tool: any) => tool.name); expect(toolNames).toContain('check_holiday'); expect(toolNames).toContain('get_holidays_in_range'); expect(toolNames).toContain('get_holiday_stats'); } else { expect(server).toBeDefined(); } }); }); describe('錯誤處理測試', () => { it('應該正確處理無效工具名稱', async () => { const mockRequest = { params: { name: 'invalid_tool', arguments: {} } }; const mcpServer = (server as any).server; const callHandler = mcpServer.requestHandlers?.get('tools/call'); if (callHandler) { const result = await callHandler(mockRequest); expect(result).toBeDefined(); expect(result.isError).toBe(true); const response = JSON.parse(result.content[0].text); expect(response.success).toBe(false); expect(response.error).toContain('未知的工具'); } else { expect(server).toBeDefined(); } }); it('應該正確處理缺少參數的錯誤', async () => { const mockRequest = { params: { name: 'check_holiday', arguments: {} // 缺少 date 參數 } }; const mcpServer = (server as any).server; const callHandler = mcpServer.requestHandlers?.get('tools/call'); if (callHandler) { const result = await callHandler(mockRequest); expect(result.isError).toBe(true); const response = JSON.parse(result.content[0].text); expect(response.success).toBe(false); expect(response.error).toContain('缺少必要參數'); } else { expect(server).toBeDefined(); } }); }); describe('回應格式驗證', () => { it('成功回應應該包含必要欄位', async () => { const mockRequest = { params: { name: 'check_holiday', arguments: { date: '2024-01-01' } } }; const mcpServer = (server as any).server; const callHandler = mcpServer.requestHandlers?.get('tools/call'); if (callHandler) { const result = await callHandler(mockRequest); const response = JSON.parse(result.content[0].text); expect(response).toHaveProperty('success'); expect(response).toHaveProperty('data'); expect(response).toHaveProperty('timestamp'); expect(response).toHaveProperty('tool'); expect(response.success).toBe(true); } else { expect(server).toBeDefined(); } }); it('錯誤回應應該包含必要欄位', async () => { const mockRequest = { params: { name: 'check_holiday', arguments: {} } }; const mcpServer = (server as any).server; const callHandler = mcpServer.requestHandlers?.get('tools/call'); if (callHandler) { const result = await callHandler(mockRequest); const response = JSON.parse(result.content[0].text); expect(response).toHaveProperty('success'); expect(response).toHaveProperty('error'); expect(response).toHaveProperty('errorType'); expect(response).toHaveProperty('timestamp'); expect(response).toHaveProperty('tool'); expect(response.success).toBe(false); } else { expect(server).toBeDefined(); } }); it('時間戳應該是有效的 ISO 8601 格式', async () => { const mockRequest = { params: { name: 'check_holiday', arguments: { date: '2024-01-01' } } }; const mcpServer = (server as any).server; const callHandler = mcpServer.requestHandlers?.get('tools/call'); if (callHandler) { const result = await callHandler(mockRequest); const response = JSON.parse(result.content[0].text); expect(response.timestamp).toMatch(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/); // 驗證時間戳是有效的 ISO 8601 格式 const timestamp = new Date(response.timestamp); expect(timestamp.toISOString()).toBe(response.timestamp); } else { expect(server).toBeDefined(); } }); }); });

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/lis186/taiwan-holiday-mcp'

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