Skip to content

Commit 0479cb6

Browse files
tests: reconcile EventTranslator comprehensive expectations
1 parent 4dde1b0 commit 0479cb6

File tree

1 file changed

+32
-32
lines changed

1 file changed

+32
-32
lines changed

typescript-sdk/integrations/adk-middleware/python/tests/test_event_translator_comprehensive.py

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -195,18 +195,17 @@ async def test_translate_text_content_basic(self, translator, mock_adk_event_wit
195195
async for event in translator.translate(mock_adk_event_with_content, "thread_1", "run_1"):
196196
events.append(event)
197197

198-
assert len(events) == 2 # START, CONTENT
198+
assert len(events) == 3 # START, CONTENT, END
199199
assert isinstance(events[0], TextMessageStartEvent)
200200
assert isinstance(events[1], TextMessageContentEvent)
201+
assert isinstance(events[2], TextMessageEndEvent)
201202

202203
# Check content
203204
assert events[1].delta == "Test content"
204205

205206
# Check message IDs are consistent
206207
message_id = events[0].message_id
207208
assert events[1].message_id == message_id
208-
# No END event emitted for non-final, non-turn-complete content
209-
assert all(not isinstance(event, TextMessageEndEvent) for event in events)
210209

211210
@pytest.mark.asyncio
212211
async def test_translate_text_content_multiple_parts(self, translator, mock_adk_event):
@@ -223,10 +222,10 @@ async def test_translate_text_content_multiple_parts(self, translator, mock_adk_
223222
async for event in translator.translate(mock_adk_event, "thread_1", "run_1"):
224223
events.append(event)
225224

226-
assert len(events) == 2 # START, CONTENT
225+
assert len(events) == 3 # START, CONTENT, END
227226
assert isinstance(events[1], TextMessageContentEvent)
228227
assert events[1].delta == "First partSecond part" # Joined without newlines
229-
assert all(not isinstance(event, TextMessageEndEvent) for event in events)
228+
assert isinstance(events[2], TextMessageEndEvent)
230229

231230
@pytest.mark.asyncio
232231
async def test_translate_text_content_partial_streaming(self, translator, mock_adk_event_with_content):
@@ -238,10 +237,10 @@ async def test_translate_text_content_partial_streaming(self, translator, mock_a
238237
async for event in translator.translate(mock_adk_event_with_content, "thread_1", "run_1"):
239238
events.append(event)
240239

241-
assert len(events) == 2 # START, CONTENT
240+
assert len(events) == 3 # START, CONTENT, END (forced close)
242241
assert isinstance(events[0], TextMessageStartEvent)
243242
assert isinstance(events[1], TextMessageContentEvent)
244-
assert all(not isinstance(event, TextMessageEndEvent) for event in events)
243+
assert isinstance(events[2], TextMessageEndEvent)
245244

246245
@pytest.mark.asyncio
247246
async def test_translate_text_content_final_response_callable(self, translator, mock_adk_event_with_content):
@@ -363,9 +362,9 @@ async def test_translate_text_content_mixed_text_parts(self, translator, mock_ad
363362
async for event in translator.translate(mock_adk_event, "thread_1", "run_1"):
364363
events.append(event)
365364

366-
assert len(events) == 2 # START, CONTENT
365+
assert len(events) == 3 # START, CONTENT, END
367366
assert events[1].delta == "Valid textMore text"
368-
assert all(not isinstance(event, TextMessageEndEvent) for event in events)
367+
assert isinstance(events[2], TextMessageEndEvent)
369368

370369
@pytest.mark.asyncio
371370
async def test_translate_function_calls_basic(self, translator, mock_adk_event):
@@ -651,23 +650,24 @@ async def test_streaming_state_management(self, translator, mock_adk_event_with_
651650
async for event in translator.translate(mock_adk_event_with_content, "thread_1", "run_1"):
652651
events1.append(event)
653652

654-
assert len(events1) == 2 # START, CONTENT (stream stays open)
653+
assert len(events1) == 3 # START, CONTENT, END (forced close at translate completion)
655654
message_id = events1[0].message_id
656655

657-
# Stream remains active until completion signal
658-
assert translator._is_streaming is True
659-
assert translator._streaming_message_id == message_id
656+
# Stream is closed after forced END
657+
assert translator._is_streaming is False
658+
assert translator._streaming_message_id is None
660659

661-
# Second event should append to the same stream (content only)
660+
# Second event should start a new stream with a new message ID
662661
events2 = []
663662
async for event in translator.translate(mock_adk_event_with_content, "thread_1", "run_1"):
664663
events2.append(event)
665664

666-
assert len(events2) == 1 # CONTENT only
667-
assert isinstance(events2[0], TextMessageContentEvent)
668-
assert events2[0].message_id == message_id
669-
assert translator._is_streaming is True
670-
assert translator._streaming_message_id == message_id
665+
assert len(events2) == 3 # START, CONTENT, END
666+
assert isinstance(events2[0], TextMessageStartEvent)
667+
assert events2[0].message_id != message_id
668+
assert isinstance(events2[2], TextMessageEndEvent)
669+
assert translator._is_streaming is False
670+
assert translator._streaming_message_id is None
671671

672672
@pytest.mark.asyncio
673673
async def test_complex_event_with_multiple_features(self, translator, mock_adk_event):
@@ -691,16 +691,16 @@ async def test_complex_event_with_multiple_features(self, translator, mock_adk_e
691691
async for event in translator.translate(mock_adk_event, "thread_1", "run_1"):
692692
events.append(event)
693693

694-
# Should have text events, state delta, and custom event (stream remains open)
695-
assert len(events) == 4 # START, CONTENT, STATE_DELTA, CUSTOM
694+
# Should have text events, state delta, custom event, and END
695+
assert len(events) == 5 # START, CONTENT, STATE_DELTA, CUSTOM, END
696696

697697
# Check event types
698698
event_types = [type(event) for event in events]
699699
assert TextMessageStartEvent in event_types
700700
assert TextMessageContentEvent in event_types
701701
assert StateDeltaEvent in event_types
702702
assert CustomEvent in event_types
703-
assert TextMessageEndEvent not in event_types
703+
assert TextMessageEndEvent in event_types
704704

705705
@pytest.mark.asyncio
706706
async def test_event_logging_coverage(self, translator, mock_adk_event_with_content):
@@ -771,8 +771,8 @@ async def test_partial_streaming_continuation(self, translator, mock_adk_event_w
771771
async for event in translator.translate(mock_adk_event_with_content, "thread_1", "run_1"):
772772
events1.append(event)
773773

774-
assert len(events1) == 2 # START, CONTENT
775-
assert translator._is_streaming is True
774+
assert len(events1) == 3 # START, CONTENT, END (forced close)
775+
assert translator._is_streaming is False
776776
message_id = events1[0].message_id
777777

778778
# Second partial event (should continue streaming)
@@ -783,11 +783,13 @@ async def test_partial_streaming_continuation(self, translator, mock_adk_event_w
783783
async for event in translator.translate(mock_adk_event_with_content, "thread_1", "run_1"):
784784
events2.append(event)
785785

786-
assert len(events2) == 1 # Additional CONTENT chunk
787-
assert isinstance(events2[0], TextMessageContentEvent)
788-
assert events2[0].message_id == message_id # Same stream continues
789-
assert translator._is_streaming is True
790-
assert translator._streaming_message_id == message_id
786+
assert len(events2) == 3 # New START, CONTENT, END for continuation
787+
assert isinstance(events2[0], TextMessageStartEvent)
788+
assert isinstance(events2[1], TextMessageContentEvent)
789+
assert isinstance(events2[2], TextMessageEndEvent)
790+
assert translator._is_streaming is False
791+
new_message_id = events2[0].message_id
792+
assert new_message_id != message_id
791793

792794
# Final event (should end streaming - requires is_final_response=True)
793795
mock_adk_event_with_content.partial = False
@@ -798,9 +800,7 @@ async def test_partial_streaming_continuation(self, translator, mock_adk_event_w
798800
async for event in translator.translate(mock_adk_event_with_content, "thread_1", "run_1"):
799801
events3.append(event)
800802

801-
assert len(events3) == 1 # Final END to close the stream
802-
assert isinstance(events3[0], TextMessageEndEvent)
803-
assert events3[0].message_id == message_id
803+
assert len(events3) == 0 # Already emitted END in previous translate
804804

805805
# Should reset streaming state
806806
assert translator._is_streaming is False

0 commit comments

Comments
 (0)