| """ |
| Unit Tests for AgentService |
| |
| Tests the AgentService orchestration including: |
| - Creates user-scoped context |
| - Executes tools with MCPContext |
| - Handles tool errors gracefully |
| - Formats conversation history correctly |
| """ |
|
|
| import pytest |
| from unittest.mock import Mock, patch |
|
|
| from src.services.agent_service import AgentService |
| from tests.utils.task_helpers import create_test_task |
|
|
|
|
| @pytest.mark.unit |
| @pytest.mark.asyncio |
| async def test_agent_service_creates_user_scoped_context(test_user): |
| """ |
| Test: AgentService creates user-scoped context |
| |
| Verifies that AgentService initializes with user_id pre-bound. |
| """ |
| |
| agent_service = AgentService(user_id=test_user.id) |
|
|
| |
| assert agent_service.user_id == test_user.id |
| assert agent_service.mcp_context is not None |
| assert agent_service.mcp_context.user_id == test_user.id |
|
|
|
|
| @pytest.mark.unit |
| @pytest.mark.asyncio |
| async def test_agent_service_executes_tools_with_mcp_context(test_user, mock_mcp_context, test_session): |
| """ |
| Test: AgentService executes tools with MCPContext |
| |
| Verifies that AgentService can execute MCP tools with context. |
| """ |
| |
| agent_service = AgentService(user_id=test_user.id) |
| create_test_task(test_session, test_user.id, title="Test Task") |
|
|
| |
| result = await agent_service.execute_tool( |
| tool_name="list_tasks", |
| arguments={} |
| ) |
|
|
| |
| assert "tasks" in result |
| assert isinstance(result["tasks"], list) |
|
|
|
|
| @pytest.mark.unit |
| @pytest.mark.asyncio |
| async def test_agent_service_handles_tool_errors_gracefully(test_user): |
| """ |
| Test: AgentService handles tool errors gracefully |
| |
| Verifies that AgentService catches and returns errors from tools. |
| """ |
| |
| agent_service = AgentService(user_id=test_user.id) |
|
|
| |
| result = await agent_service.execute_tool( |
| tool_name="nonexistent_tool", |
| arguments={} |
| ) |
|
|
| |
| assert "status" in result or "error" in result |
|
|
|
|
| @pytest.mark.unit |
| def test_agent_service_formats_conversation_history_correctly(test_user): |
| """ |
| Test: AgentService formats conversation history correctly |
| |
| Verifies that AgentService converts database messages to OpenAI format. |
| """ |
| |
| agent_service = AgentService(user_id=test_user.id) |
|
|
| |
| from src.models.message import MessageRole |
| mock_messages = [ |
| Mock(role=MessageRole.USER, content="Hello"), |
| Mock(role=MessageRole.ASSISTANT, content="Hi there") |
| ] |
|
|
| |
| history = agent_service.format_conversation_history(mock_messages) |
|
|
| |
| assert len(history) == 2 |
| assert history[0]["role"] == "user" |
| assert history[0]["content"] == "Hello" |
| assert history[1]["role"] == "assistant" |
| assert history[1]["content"] == "Hi there" |
|
|