import pytest from autogen_agentchat.messages import HandoffMessage, MessageFactory, StructuredMessage, TextMessage from pydantic import BaseModel class TestContent(BaseModel): """Test content model.""" field1: str field2: int def test_structured_message() -> None: # Create a structured message with the test content message = StructuredMessage[TestContent]( source="test_agent", content=TestContent(field1="test", field2=42), ) # Check that the message type is correct assert message.type == "StructuredMessage[TestContent]" # type: ignore # Check that the content is of the correct type assert isinstance(message.content, TestContent) # Check that the content fields are set correctly assert message.content.field1 == "test" assert message.content.field2 == 42 # Check that model_dump works correctly dumped_message = message.model_dump() assert dumped_message["source"] == "test_agent" assert dumped_message["content"]["field1"] == "test" assert dumped_message["content"]["field2"] == 42 assert dumped_message["type"] == "StructuredMessage[TestContent]" def test_message_factory() -> None: factory = MessageFactory() # Text message data text_data = { "type": "TextMessage", "source": "test_agent", "content": "Hello, world!", } # Create a TextMessage instance text_message = factory.create(text_data) assert isinstance(text_message, TextMessage) assert text_message.source == "test_agent" assert text_message.content == "Hello, world!" assert text_message.type == "TextMessage" # type: ignore # Handoff message data handoff_data = { "type": "HandoffMessage", "source": "test_agent", "content": "handoff to another agent", "target": "target_agent", } # Create a HandoffMessage instance handoff_message = factory.create(handoff_data) assert isinstance(handoff_message, HandoffMessage) assert handoff_message.source == "test_agent" assert handoff_message.content == "handoff to another agent" assert handoff_message.target == "target_agent" assert handoff_message.type == "HandoffMessage" # type: ignore # Structured message data structured_data = { "type": "StructuredMessage[TestContent]", "source": "test_agent", "content": { "field1": "test", "field2": 42, }, } # Create a StructuredMessage instance -- this will fail because the type # is not registered in the factory. with pytest.raises(ValueError): structured_message = factory.create(structured_data) # Register the StructuredMessage type in the factory factory.register(StructuredMessage[TestContent]) # Create a StructuredMessage instance structured_message = factory.create(structured_data) assert isinstance(structured_message, StructuredMessage) assert isinstance(structured_message.content, TestContent) # type: ignore assert structured_message.source == "test_agent" assert structured_message.content.field1 == "test" assert structured_message.content.field2 == 42 assert structured_message.type == "StructuredMessage[TestContent]" # type: ignore