nanobot-voice-interface/tests/test_events_route.py

45 lines
1.5 KiB
Python
Raw Normal View History

from __future__ import annotations
import json
import unittest
from types import SimpleNamespace
from routes.sessions import stream_ui_events
from ui_event_bus import UiEventBus
class DummyRequest:
def __init__(self, chat_id: str) -> None:
self.query_params = {"chat_id": chat_id}
async def is_disconnected(self) -> bool:
return False
class EventsRouteTests(unittest.IsolatedAsyncioTestCase):
async def test_events_stream_emits_ready_and_published_payload(self) -> None:
runtime = SimpleNamespace(event_bus=UiEventBus())
response = await stream_ui_events(DummyRequest("test-chat"), runtime=runtime)
iterator = response.body_iterator
first_chunk = await anext(iterator)
self.assertEqual(first_chunk, ": stream-open\n\n")
second_chunk = await anext(iterator)
ready_payload = json.loads(second_chunk.removeprefix("data: ").strip())
self.assertEqual(ready_payload["type"], "events.ready")
self.assertEqual(ready_payload["chat_id"], "test-chat")
await runtime.event_bus.publish(
{"type": "cards.changed", "chat_id": "test-chat"},
chat_id="test-chat",
)
third_chunk = await anext(iterator)
event_payload = json.loads(third_chunk.removeprefix("data: ").strip())
self.assertEqual(event_payload["type"], "cards.changed")
self.assertEqual(event_payload["chat_id"], "test-chat")
await iterator.aclose()