Skip to main content
Glama
server.test.ts3.13 kB
import { describe, it, expect, beforeEach, vi } from 'vitest'; import { createServer } from 'http'; import { createServer as createExpressServer } from '../src/server.js'; // Mock the auth middleware vi.mock('../src/auth/middleware.js', () => ({ validateToken: vi.fn((req: any, res: any, next: any) => next()), getConfig: vi.fn(() => ({ port: 3000, mcpAuthToken: 'test-token', intervals: { apiKey: 'test-key', athleteId: 'test-athlete', }, whoop: null, trainerRoad: null, })), })); // Mock the tool registry vi.mock('../src/tools/index.js', () => ({ ToolRegistry: vi.fn().mockImplementation(function() { return { registerTools: vi.fn(), getToolDefinitions: vi.fn().mockReturnValue([]), handleToolCall: vi.fn().mockResolvedValue({ content: [{ type: 'text', text: '{}' }], }), }; }), })); // Mock MCP SDK vi.mock('@modelcontextprotocol/sdk/server/index.js', () => ({ Server: vi.fn().mockImplementation(function() { return { setRequestHandler: vi.fn(), connect: vi.fn(), }; }), })); vi.mock('@modelcontextprotocol/sdk/server/streamableHttp.js', () => ({ StreamableHTTPServerTransport: vi.fn().mockImplementation(function() { return { handleRequest: vi.fn(), close: vi.fn(), sessionId: 'test-session-id', }; }), })); describe('Server', () => { let server: ReturnType<typeof createServer>; let baseUrl: string; beforeEach(async () => { vi.clearAllMocks(); const app = await createExpressServer({ port: 3000 }); // Create a real HTTP server for testing server = createServer(app); await new Promise<void>((resolve) => { server.listen(0, () => resolve()); }); const address = server.address(); const port = typeof address === 'object' && address ? address.port : 3000; baseUrl = `http://localhost:${port}`; }); afterEach(async () => { await new Promise<void>((resolve) => { server.close(() => resolve()); }); }); describe('Health endpoint', () => { it('should return healthy status', async () => { const response = await fetch(`${baseUrl}/health`); const body = await response.json(); expect(response.status).toBe(200); expect(body.status).toBe('healthy'); expect(body.timestamp).toBeDefined(); }); it('should not require authentication', async () => { const response = await fetch(`${baseUrl}/health`); expect(response.status).toBe(200); }); }); describe('MCP endpoint', () => { it('should be accessible with valid token', async () => { // MCP endpoint exists and responds (auth is mocked to pass) const response = await fetch(`${baseUrl}/mcp`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer test-token', }, body: JSON.stringify({}), }); // The endpoint exists - we get a response (not 404) expect(response.status).not.toBe(404); }); }); }); // Import afterEach for cleanup import { afterEach } from 'vitest';

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/gesteves/domestique'

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