"""Tests for WebSocket event bridge.""" from __future__ import annotations import time import pytest from openjarvis.core.events import EventBus, EventType try: from fastapi import FastAPI from fastapi.testclient import TestClient HAS_FASTAPI = True except ImportError: HAS_FASTAPI = False pytestmark = pytest.mark.skipif(not HAS_FASTAPI, reason="fastapi not installed") @pytest.fixture def event_bus(): return EventBus() @pytest.fixture def app(event_bus): from openjarvis.server.ws_bridge import create_ws_router app = FastAPI() router = create_ws_router(event_bus) app.include_router(router) return app class TestWSBridge: def test_websocket_receives_events(self, app, event_bus): client = TestClient(app) with client.websocket_connect("/v1/agents/events") as ws: event_bus.publish( EventType.AGENT_TICK_START, { "agent_id": "test-123", "agent_name": "test", }, ) time.sleep(0.05) # Let call_soon_threadsafe deliver to queue data = ws.receive_json() assert data["type"] == "agent_tick_start" assert data["data"]["agent_id"] == "test-123" def test_websocket_filters_by_agent_id(self, app, event_bus): client = TestClient(app) with client.websocket_connect("/v1/agents/events?agent_id=agent-A") as ws: # This event should NOT be received (different agent) event_bus.publish(EventType.AGENT_TICK_START, {"agent_id": "agent-B"}) # This event SHOULD be received event_bus.publish(EventType.AGENT_TICK_START, {"agent_id": "agent-A"}) time.sleep(0.05) # Let call_soon_threadsafe deliver to queue data = ws.receive_json() assert data["data"]["agent_id"] == "agent-A"