mirror of
https://github.com/open-jarvis/OpenJarvis.git
synced 2026-07-28 13:26:48 +00:00
* fix(channels): wire channel→agent handler and fix Telegram send pipeline * format code * add supported tests
63 lines
1.9 KiB
Python
63 lines
1.9 KiB
Python
"""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"
|