offline.test.js•1.21 kB
import { describe, it, expect, vi } from 'vitest';
const failingJokeApi = { getJoke: vi.fn().mockRejectedValue(new Error('JokeAPI offline')) };
const failingOfficial = { getJoke: vi.fn().mockRejectedValue(new Error('Official API offline')) };
const localMock = { getJoke: vi.fn().mockResolvedValue({ text: 'Local fallback joke', category: 'general', source: 'local-fallback' }) };
vi.mock('../../src/providers/jokeapi.js', () => failingJokeApi);
vi.mock('../../src/providers/official.js', () => failingOfficial);
vi.mock('../../src/providers/local.js', () => localMock);
const { resolveJoke } = await import('../../src/jokes-mcp.js');
describe('resolveJoke offline fallback', () => {
it('falls back to local provider when network providers fail', async () => {
const result = await resolveJoke(
{ category: 'programming', lang: 'en', blacklist: [] },
{ timeoutMs: 10, retries: 0, allowNet: true },
);
expect(result.source).toBe('local-fallback');
expect(result.text).toContain('Local fallback joke');
expect(failingJokeApi.getJoke).toHaveBeenCalled();
expect(failingOfficial.getJoke).toHaveBeenCalled();
expect(localMock.getJoke).toHaveBeenCalled();
});
});