@@ -27,7 +27,12 @@ def chat_service_instance(monkeypatch, tmp_path):
2727 platform_message_history_manager = platform_history_mgr ,
2828 umop_config_router = Mock (),
2929 )
30- service = ChatService (Mock (), core_lifecycle )
30+ db = Mock ()
31+ db .get_platform_session_by_id = AsyncMock (
32+ return_value = SimpleNamespace (session_id = "existing-session" )
33+ )
34+ db .create_platform_session = AsyncMock ()
35+ service = ChatService (db , core_lifecycle )
3136 service .build_user_message_parts = AsyncMock (
3237 return_value = [{"type" : "plain" , "text" : "hello" }]
3338 )
@@ -40,6 +45,36 @@ def chat_service_instance(monkeypatch, tmp_path):
4045 return service
4146
4247
48+ @pytest .mark .asyncio
49+ async def test_chat_stream_creates_missing_webchat_platform_session (
50+ chat_service_instance ,
51+ ):
52+ service = chat_service_instance
53+ session_id = "missing-platform-session"
54+ service .db .get_platform_session_by_id .return_value = None
55+
56+ stream = await service .build_chat_stream (
57+ "alice" ,
58+ {"message" : "hello" , "session_id" : session_id },
59+ )
60+ run = next (iter (service .chat_runs .values ()))
61+
62+ try :
63+ service .db .get_platform_session_by_id .assert_awaited_once_with (session_id )
64+ service .db .create_platform_session .assert_awaited_once_with (
65+ creator = "alice" ,
66+ platform_id = "webchat" ,
67+ session_id = session_id ,
68+ is_group = 0 ,
69+ )
70+ finally :
71+ await stream .aclose ()
72+ if run .task and not run .task .done ():
73+ run .task .cancel ()
74+ await asyncio .gather (run .task , return_exceptions = True )
75+ chat_service .webchat_queue_mgr .remove_queues (session_id )
76+
77+
4378def _decode_sse_event (event : str ) -> dict :
4479 """Decode one JSON SSE event emitted by ChatService.
4580
0 commit comments