From c5e9644f6f47b266c3d5ed0a309f0e779494636e Mon Sep 17 00:00:00 2001 From: Celes Renata Date: Thu, 16 Apr 2026 08:19:53 +0000 Subject: [PATCH] fix: guard EventSource for jsdom test env, add rate-limits MSW handler --- frontend/src/pages/OpsPipeline.tsx | 3 +++ frontend/src/test/mocks/handlers.ts | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/frontend/src/pages/OpsPipeline.tsx b/frontend/src/pages/OpsPipeline.tsx index af2b0a5..724898b 100644 --- a/frontend/src/pages/OpsPipeline.tsx +++ b/frontend/src/pages/OpsPipeline.tsx @@ -24,6 +24,9 @@ function usePipelineStream() { const [data, setData] = useState(null); useEffect(() => { + // EventSource is not available in test environments (jsdom) + if (typeof EventSource === 'undefined') return; + const base = import.meta.env.VITE_QUERY_API_BASE || ''; const url = `${base}/api/ops/pipeline/stream`; const es = new EventSource(url); diff --git a/frontend/src/test/mocks/handlers.ts b/frontend/src/test/mocks/handlers.ts index 7668a52..c4771b3 100644 --- a/frontend/src/test/mocks/handlers.ts +++ b/frontend/src/test/mocks/handlers.ts @@ -118,6 +118,16 @@ export const handlers = [ // Health http.get('/api/health', () => HttpResponse.json({ status: 'ok' })), + // System + http.get('/api/system/rate-limits', () => HttpResponse.json({ + polygon_global_limit: 45, + polygon_source_types: ['market_api', 'news_api'], + per_type_limits: { market_api: 20, news_api: 20 }, + cadences_seconds: { market_api: 300, news_api: 300 }, + market_api: { rate_per_minute: 20, cadence_seconds: 300, max_tickers_per_cycle: 100, active_sources: 51 }, + news_api: { rate_per_minute: 20, cadence_seconds: 300, active_sources: 50 }, + })), + // Macro events and impacts http.get('/api/macro/events', () => HttpResponse.json(mockMacroEvents)), http.get('/api/macro/events/:id', ({ params }) => {