@@ -180,9 +180,9 @@ async def test_handle_malformed_json_logs_error_continues(self, model):
180
180
# Malformed JSON should not crash the handler
181
181
await model ._handle_ws_event ("invalid json {" )
182
182
183
- # Should emit error event to listeners
184
- mock_listener .on_event .assert_called_once ()
185
- error_event = mock_listener .on_event .call_args [0 ][0 ]
183
+ # Should emit raw server event and error event to listeners
184
+ assert mock_listener .on_event .call_count == 2
185
+ error_event = mock_listener .on_event .call_args_list [ 1 ] [0 ][0 ]
186
186
assert error_event .type == "error"
187
187
188
188
@pytest .mark .asyncio
@@ -195,9 +195,9 @@ async def test_handle_invalid_event_schema_logs_error(self, model):
195
195
196
196
await model ._handle_ws_event (invalid_event )
197
197
198
- # Should emit error event to listeners
199
- mock_listener .on_event .assert_called_once ()
200
- error_event = mock_listener .on_event .call_args [0 ][0 ]
198
+ # Should emit raw server event and error event to listeners
199
+ assert mock_listener .on_event .call_count == 2
200
+ error_event = mock_listener .on_event .call_args_list [ 1 ] [0 ][0 ]
201
201
assert error_event .type == "error"
202
202
203
203
@pytest .mark .asyncio
@@ -241,9 +241,9 @@ async def test_handle_audio_delta_event_success(self, model):
241
241
242
242
await model ._handle_ws_event (audio_event )
243
243
244
- # Should emit audio event to listeners
245
- mock_listener .on_event .assert_called_once ()
246
- emitted_event = mock_listener .on_event .call_args [0 ][0 ]
244
+ # Should emit raw server event and audio event to listeners
245
+ assert mock_listener .on_event .call_count == 2
246
+ emitted_event = mock_listener .on_event .call_args_list [ 1 ] [0 ][0 ]
247
247
assert isinstance (emitted_event , RealtimeModelAudioEvent )
248
248
assert emitted_event .response_id == "resp_123"
249
249
assert emitted_event .data == b"test audio" # decoded from base64
@@ -274,9 +274,9 @@ async def test_handle_error_event_success(self, model):
274
274
275
275
await model ._handle_ws_event (error_event )
276
276
277
- # Should emit error event to listeners
278
- mock_listener .on_event .assert_called_once ()
279
- emitted_event = mock_listener .on_event .call_args [0 ][0 ]
277
+ # Should emit raw server event and error event to listeners
278
+ assert mock_listener .on_event .call_count == 2
279
+ emitted_event = mock_listener .on_event .call_args_list [ 1 ] [0 ][0 ]
280
280
assert isinstance (emitted_event , RealtimeModelErrorEvent )
281
281
282
282
@pytest .mark .asyncio
@@ -303,12 +303,12 @@ async def test_handle_tool_call_event_success(self, model):
303
303
304
304
await model ._handle_ws_event (tool_call_event )
305
305
306
- # Should emit both item updated and tool call events
307
- assert mock_listener .on_event .call_count == 2
306
+ # Should emit raw server event, item updated, and tool call events
307
+ assert mock_listener .on_event .call_count == 3
308
308
309
- # First should be item updated, second should be tool call
309
+ # First should be raw server event, second should be item updated, third should be tool call
310
310
calls = mock_listener .on_event .call_args_list
311
- tool_call_emitted = calls [1 ][0 ][0 ]
311
+ tool_call_emitted = calls [2 ][0 ][0 ]
312
312
assert isinstance (tool_call_emitted , RealtimeModelToolCallEvent )
313
313
assert tool_call_emitted .name == "get_weather"
314
314
assert tool_call_emitted .arguments == '{"location": "San Francisco"}'
0 commit comments