import json from autogen_agentchat.base import Response, TaskResult from autogen_agentchat.messages import TextMessage from autogen_agentchat.teams._group_chat._events import ( GroupChatAgentResponse, GroupChatMessage, GroupChatStart, GroupChatTeamResponse, ) def test_group_chat_message_preserves_subclass_data() -> None: """Test that GroupChatMessage preserves TextMessage subclass fields.""" # Create a TextMessage with subclass-specific fields text_msg = TextMessage( content="Hello, world!", source="TestAgent", ) # Wrap in GroupChatMessage group_msg = GroupChatMessage(message=text_msg) # Serialize and verify subclass fields are preserved json_data = group_msg.model_dump_json() parsed = json.loads(json_data) # The critical test: subclass fields should be preserved assert "content" in parsed["message"], "TextMessage content field should be preserved" assert "type" in parsed["message"], "TextMessage type field should be preserved" assert parsed["message"]["content"] == "Hello, world!" assert parsed["message"]["type"] == "TextMessage" def test_group_chat_start_preserves_message_list_data() -> None: """Test that GroupChatStart preserves subclass data in message lists.""" text_msg1 = TextMessage(content="First message", source="Agent1") text_msg2 = TextMessage(content="Second message", source="Agent2") group_start = GroupChatStart(messages=[text_msg1, text_msg2]) json_data = group_start.model_dump_json() parsed = json.loads(json_data) # Check both messages preserve subclass data assert "content" in parsed["messages"][0] assert "content" in parsed["messages"][1] assert parsed["messages"][0]["content"] == "First message" assert parsed["messages"][1]["content"] == "Second message" def test_group_chat_agent_response_preserves_dataclass_fields() -> None: """Test that GroupChatAgentResponse preserves data in Response dataclass fields.""" text_msg = TextMessage(content="Response message", source="ResponseAgent") inner_text_msg = TextMessage(content="Inner message", source="InnerAgent") response = Response(chat_message=text_msg, inner_messages=[inner_text_msg]) group_response = GroupChatAgentResponse(response=response, name="TestAgent") json_data = group_response.model_dump_json() parsed = json.loads(json_data) # Verify dataclass field preserves subclass data assert "content" in parsed["response"]["chat_message"] assert "type" in parsed["response"]["chat_message"] assert parsed["response"]["chat_message"]["content"] == "Response message" inner_msgs = parsed["response"]["inner_messages"] assert len(inner_msgs) == 1 assert "content" in inner_msgs[0] assert inner_msgs[0]["content"] == "Inner message" def test_group_chat_team_response_preserves_nested_data() -> None: """Test that GroupChatTeamResponse preserves deeply nested subclass data.""" text_msg = TextMessage(content="Nested message", source="NestedAgent") task_result = TaskResult(messages=[text_msg]) team_response = GroupChatTeamResponse(result=task_result, name="TestTeam") json_data = team_response.model_dump_json() parsed = json.loads(json_data) # Verify deeply nested subclass data is preserved assert "content" in parsed["result"]["messages"][0] assert parsed["result"]["messages"][0]["content"] == "Nested message"