Skip to main content
Glama

Joke MCP Server

by ericqian77
jokeapi-provider.test.js1.75 kB
import { describe, it, expect, beforeEach, vi } from 'vitest'; const mockFetchWithRetry = vi.fn(); vi.mock('../../src/providers/sharedFetch.js', () => ({ fetchWithRetry: mockFetchWithRetry, })); const { getJoke } = await import('../../src/providers/jokeapi.js'); describe('JokeAPI provider', () => { beforeEach(() => { mockFetchWithRetry.mockReset(); }); it('requests a joke with expected parameters', async () => { mockFetchWithRetry.mockResolvedValue( new Response( JSON.stringify({ error: false, type: 'single', joke: 'Test joke', category: 'Programming', }), { headers: { 'Content-Type': 'application/json' } }, ), ); const result = await getJoke( { category: 'programming', lang: 'en', blacklist: ['nsfw'] }, { timeoutMs: 1000, retries: 0, allowNet: true }, ); expect(result.source).toBe('jokeapi'); expect(result.category).toBe('programming'); expect(mockFetchWithRetry).toHaveBeenCalledTimes(1); const [requestedUrl] = mockFetchWithRetry.mock.calls[0]; expect(requestedUrl).toContain('/Programming'); expect(requestedUrl).toContain('lang=en'); expect(requestedUrl).toContain('blacklistFlags=nsfw'); expect(requestedUrl).toContain('type=single'); }); it('throws when API returns an error payload', async () => { mockFetchWithRetry.mockResolvedValue( new Response( JSON.stringify({ error: true, message: 'Bad request' }), { headers: { 'Content-Type': 'application/json' } }, ), ); await expect( getJoke({ category: 'general', lang: 'en', blacklist: [] }, { allowNet: true }), ).rejects.toThrow('JokeAPI returned an error'); }); });

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/ericqian77/joke-mcp'

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