import { describe, it, expect, beforeEach } from 'vitest';
const env = {
JOKE_API: 'jokeapi',
JOKE_DEFAULT_CATEGORY: 'programming',
JOKE_LANG: 'en',
TIMEOUT_MS: '2000',
RETRIES: '0',
ALLOW_NET: 'false',
LOG_VERBOSE: 'false',
};
describe('cloudflare worker interface', () => {
let workerModule: typeof import('../../src/interfaces/cloudflare/worker.js');
beforeEach(async () => {
workerModule = await import('../../src/interfaces/cloudflare/worker.js');
workerModule.__resetWorkerCacheForTesting();
});
it('responds with ok for health endpoint', async () => {
const response = await workerModule.default.fetch(new Request('https://example.com/health'), env);
expect(response.status).toBe(200);
const payload = await response.json();
expect(payload).toEqual({ ok: true });
});
it('returns a joke via POST /getJoke', async () => {
const request = new Request('https://example.com/getJoke', {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({ category: 'programming', lang: 'en' }),
});
const response = await workerModule.default.fetch(request, env);
expect(response.status).toBe(200);
const payload = await response.json();
expect(payload.text.length).toBeGreaterThan(0);
expect(payload.source).toBe('local-fallback');
expect(payload.category).toBe('programming');
});
it('returns 400 on invalid JSON', async () => {
const request = new Request('https://example.com/getJoke', {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: 'this-is-not-json',
});
const response = await workerModule.default.fetch(request, env);
expect(response.status).toBe(400);
const payload = await response.json();
expect(payload.ok).toBe(false);
expect(payload.error).toMatch(/invalid json/i);
});
});