Skip to main content
Glama

ClinicalTrials.gov MCP Server

worker.test.ts•6.46 kB
/** * @fileoverview Test suite for Cloudflare Worker entry point * @module tests/worker.test */ import { describe, expect, it } from 'vitest'; import type { CloudflareBindings } from '@/worker.js'; describe('Cloudflare Worker Entry Point', () => { describe('CloudflareBindings Interface', () => { it('should support KV namespace binding', () => { const bindings: CloudflareBindings = { KV_NAMESPACE: {} as any, }; expect(bindings.KV_NAMESPACE).toBeDefined(); }); it('should support R2 bucket binding', () => { const bindings: CloudflareBindings = { R2_BUCKET: {} as any, }; expect(bindings.R2_BUCKET).toBeDefined(); }); it('should support D1 database binding', () => { const bindings: CloudflareBindings = { DB: {} as any, }; expect(bindings.DB).toBeDefined(); }); it('should support AI binding', () => { const bindings: CloudflareBindings = { AI: {} as any, }; expect(bindings.AI).toBeDefined(); }); it('should support environment variable bindings', () => { const bindings: CloudflareBindings = { ENVIRONMENT: 'test', LOG_LEVEL: 'debug', MCP_AUTH_SECRET_KEY: 'secret', STORAGE_PROVIDER_TYPE: 'cloudflare-kv', }; expect(bindings.ENVIRONMENT).toBe('test'); expect(bindings.LOG_LEVEL).toBe('debug'); expect(bindings.MCP_AUTH_SECRET_KEY).toBe('secret'); }); it('should support string index signature for additional bindings', () => { const bindings: CloudflareBindings = { CUSTOM_BINDING: 'value', }; expect(bindings.CUSTOM_BINDING).toBe('value'); }); it('should support all standard environment variables', () => { const bindings: CloudflareBindings = { ENVIRONMENT: 'production', LOG_LEVEL: 'info', MCP_AUTH_SECRET_KEY: 'secret', OPENROUTER_API_KEY: 'api-key', SUPABASE_URL: 'https://supabase.co', SUPABASE_ANON_KEY: 'anon-key', SUPABASE_SERVICE_ROLE_KEY: 'service-role-key', STORAGE_PROVIDER_TYPE: 'cloudflare-r2', OAUTH_ISSUER_URL: 'https://auth.example.com', OAUTH_AUDIENCE: 'https://api.example.com', OAUTH_JWKS_URI: 'https://auth.example.com/.well-known/jwks.json', MCP_ALLOWED_ORIGINS: 'https://app.example.com', SPEECH_TTS_ENABLED: 'true', SPEECH_TTS_API_KEY: 'tts-key', SPEECH_STT_ENABLED: 'true', SPEECH_STT_API_KEY: 'stt-key', OTEL_ENABLED: 'true', OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: 'https://otel.example.com/traces', OTEL_EXPORTER_OTLP_METRICS_ENDPOINT: 'https://otel.example.com/metrics', }; expect(bindings.ENVIRONMENT).toBe('production'); expect(bindings.STORAGE_PROVIDER_TYPE).toBe('cloudflare-r2'); expect(bindings.OTEL_ENABLED).toBe('true'); }); }); describe('Worker Exports', () => { it('should export default handler object', async () => { const worker = await import('@/worker.js'); expect(worker.default).toBeDefined(); expect(typeof worker.default).toBe('object'); }); it('should export CloudflareBindings interface', () => { // Type-level test - if this compiles, the interface is exported const bindings: CloudflareBindings = { ENVIRONMENT: 'test', }; expect(bindings).toBeDefined(); }); it('should have fetch handler', async () => { const worker = await import('@/worker.js'); expect(worker.default.fetch).toBeDefined(); expect(typeof worker.default.fetch).toBe('function'); }); it('should have scheduled handler', async () => { const worker = await import('@/worker.js'); expect(worker.default.scheduled).toBeDefined(); expect(typeof worker.default.scheduled).toBe('function'); }); }); describe('Environment Variable Structure', () => { it('should map ENVIRONMENT to NODE_ENV conceptually', () => { const env: CloudflareBindings = { ENVIRONMENT: 'production', }; expect(env.ENVIRONMENT).toBe('production'); }); it('should map LOG_LEVEL to MCP_LOG_LEVEL conceptually', () => { const env: CloudflareBindings = { LOG_LEVEL: 'debug', }; expect(env.LOG_LEVEL).toBe('debug'); }); it('should handle optional environment variables', () => { const env: CloudflareBindings = {}; expect(env.ENVIRONMENT).toBeUndefined(); expect(env.LOG_LEVEL).toBeUndefined(); }); }); describe('Worker Initialization Requirements', () => { it('should set IS_SERVERLESS flag concept', () => { // The worker should identify itself as serverless expect(true).toBe(true); }); it('should initialize OpenTelemetry if enabled', () => { // Telemetry should be optional based on OTEL_ENABLED expect(true).toBe(true); }); it('should initialize logger with configured log level', () => { // Logger should use LOG_LEVEL from bindings or default to info expect(true).toBe(true); }); }); describe('Request Handling Concept', () => { it('should extract CF-Ray header for request IDs', () => { // CF-Ray provides unique request identifiers expect(true).toBe(true); }); it('should create serverless request context', () => { // Request context should include isServerless: true expect(true).toBe(true); }); it('should handle errors gracefully', () => { // Errors should return JSON error responses expect(true).toBe(true); }); }); describe('Scheduled Event Handling', () => { it('should support cron schedules', () => { // Scheduled events include cron patterns expect(true).toBe(true); }); it('should log scheduled event execution', () => { // Each scheduled event should be logged expect(true).toBe(true); }); }); describe('Worker Architecture', () => { it('should support idempotent initialization', () => { // App promise ensures single initialization expect(true).toBe(true); }); it('should inject bindings into global scope', () => { // KV, R2, D1, AI bindings are stored globally expect(true).toBe(true); }); it('should support execution context', () => { // ExecutionContext provides waitUntil for background tasks expect(true).toBe(true); }); }); });

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/cyanheads/clinicaltrialsgov-mcp-server'

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