Spaces:
Sleeping
Sleeping
| """ | |
| Unit tests for Message model. | |
| """ | |
| import pytest | |
| from datetime import datetime | |
| from backend.models.message import Message | |
| def test_message_creation(): | |
| """Test creating a message with required fields.""" | |
| message = Message( | |
| conversation_id=123, | |
| user_id="user_abc123", | |
| role="user", | |
| content="Hello AI assistant!" | |
| ) | |
| assert message.conversation_id == 123 | |
| assert message.user_id == "user_abc123" | |
| assert message.role == "user" | |
| assert message.content == "Hello AI assistant!" | |
| assert message.id is None # Not set until committed | |
| assert message.tool_calls is None | |
| assert isinstance(message.created_at, datetime) | |
| def test_message_with_tool_calls(): | |
| """Test creating a message with tool_calls.""" | |
| tool_calls = { | |
| "name": "add_task", | |
| "parameters": {"title": "Buy groceries"}, | |
| "result": {"task_id": 1, "status": "created"} | |
| } | |
| message = Message( | |
| conversation_id=123, | |
| user_id="user_abc123", | |
| role="assistant", | |
| content="I've created a task for you.", | |
| tool_calls=tool_calls | |
| ) | |
| assert message.tool_calls == tool_calls | |
| assert message.tool_calls["name"] == "add_task" | |
| def test_message_role_validation(): | |
| """Test message role can be 'user' or 'assistant'.""" | |
| # These should both be valid | |
| user_msg = Message(conversation_id=123, user_id="user_abc", role="user", content="test") | |
| assistant_msg = Message(conversation_id=123, user_id="user_abc", role="assistant", content="test") | |
| assert user_msg.role == "user" | |
| assert assistant_msg.role == "assistant" | |
| def test_message_fields(): | |
| """Test message model has correct fields.""" | |
| message = Message( | |
| conversation_id=123, | |
| user_id="user_abc123", | |
| role="user", | |
| content="test" | |
| ) | |
| # Check all expected fields exist | |
| assert hasattr(message, "id") | |
| assert hasattr(message, "conversation_id") | |
| assert hasattr(message, "user_id") | |
| assert hasattr(message, "role") | |
| assert hasattr(message, "content") | |
| assert hasattr(message, "tool_calls") | |
| assert hasattr(message, "created_at") | |
| def test_message_timestamps_auto(): | |
| """Test message timestamp is auto-generated.""" | |
| message = Message( | |
| conversation_id=123, | |
| user_id="user_abc123", | |
| role="user", | |
| content="test" | |
| ) | |
| assert message.created_at is not None | |
| assert isinstance(message.created_at, datetime) | |
| def test_message_tool_calls_optional(): | |
| """Test tool_calls is optional field.""" | |
| # Without tool_calls | |
| message1 = Message( | |
| conversation_id=123, | |
| user_id="user_abc123", | |
| role="user", | |
| content="test" | |
| ) | |
| assert message1.tool_calls is None | |
| # With tool_calls | |
| message2 = Message( | |
| conversation_id=123, | |
| user_id="user_abc123", | |
| role="assistant", | |
| content="test", | |
| tool_calls={"name": "test", "parameters": {}} | |
| ) | |
| assert message2.tool_calls is not None | |
| def test_message_table_name(): | |
| """Test message has correct table name.""" | |
| assert Message.__tablename__ == "messages" | |
| def test_message_content_required(): | |
| """Test content is a required field.""" | |
| # Content must be provided | |
| message = Message( | |
| conversation_id=123, | |
| user_id="user_abc123", | |
| role="user", | |
| content="Required content" | |
| ) | |
| assert message.content == "Required content" | |
| def test_message_long_content(): | |
| """Test message can store long content.""" | |
| long_content = "A" * 10000 # Very long message | |
| message = Message( | |
| conversation_id=123, | |
| user_id="user_abc123", | |
| role="user", | |
| content=long_content | |
| ) | |
| assert len(message.content) == 10000 | |