| """ |
| Integration Tests for Tool Selection |
| |
| Tests agent's ability to select correct tools based on user intent. |
| """ |
|
|
| import pytest |
|
|
| from tests.utils.agent_helpers import invoke_agent_with_message, assert_tool_called, test_agent_intent_recognition |
|
|
|
|
| @pytest.mark.integration |
| @pytest.mark.asyncio |
| async def test_agent_selects_correct_tool_based_on_user_intent(test_user, test_session): |
| """ |
| Test: Agent selects correct tool based on user intent |
| |
| Verifies that agent correctly interprets user intent and selects appropriate tools. |
| """ |
| |
| response1 = await invoke_agent_with_message( |
| user_id=test_user.id, |
| message="Remind me to call mom" |
| ) |
| assert_tool_called(response1, "create_task") |
|
|
| |
| response2 = await invoke_agent_with_message( |
| user_id=test_user.id, |
| message="What do I need to do?" |
| ) |
| assert_tool_called(response2, "list_tasks") |
|
|
|
|
| @pytest.mark.integration |
| @pytest.mark.asyncio |
| async def test_agent_recognizes_create_task_intent_variations(test_user): |
| """ |
| Test: Agent recognizes create_task intent variations |
| |
| Verifies that agent recognizes different phrasings for creating tasks. |
| """ |
| |
| create_phrases = [ |
| "Add a task to buy groceries", |
| "Remind me to call the dentist", |
| "I need to submit the report", |
| "Create a task for reviewing code" |
| ] |
|
|
| for phrase in create_phrases: |
| result = await test_agent_intent_recognition( |
| user_id=test_user.id, |
| message=phrase, |
| expected_tool="create_task" |
| ) |
| assert result, f"Agent failed to recognize create intent for: {phrase}" |
|
|
|
|
| @pytest.mark.integration |
| @pytest.mark.asyncio |
| async def test_agent_recognizes_list_tasks_intent_variations(test_user): |
| """ |
| Test: Agent recognizes list_tasks intent variations |
| |
| Verifies that agent recognizes different phrasings for listing tasks. |
| """ |
| |
| list_phrases = [ |
| "Show my tasks", |
| "What do I need to do?", |
| "List all my tasks", |
| "What's on my todo list?" |
| ] |
|
|
| for phrase in list_phrases: |
| result = await test_agent_intent_recognition( |
| user_id=test_user.id, |
| message=phrase, |
| expected_tool="list_tasks" |
| ) |
| assert result, f"Agent failed to recognize list intent for: {phrase}" |
|
|
|
|
| @pytest.mark.integration |
| @pytest.mark.asyncio |
| async def test_agent_recognizes_mark_complete_intent(test_user, test_session): |
| """ |
| Test: Agent recognizes mark_complete intent |
| |
| Verifies that agent recognizes intent to mark tasks complete. |
| """ |
| |
| from tests.utils.task_helpers import create_test_task |
| task = create_test_task(test_session, test_user.id, title="Test task") |
|
|
| |
| response = await invoke_agent_with_message( |
| user_id=test_user.id, |
| message=f"Mark task {task.id} as complete" |
| ) |
|
|
| assert_tool_called(response, "mark_complete") |
|
|
|
|
| @pytest.mark.integration |
| @pytest.mark.asyncio |
| async def test_agent_recognizes_update_task_intent(test_user, test_session): |
| """ |
| Test: Agent recognizes update_task intent |
| |
| Verifies that agent recognizes intent to update tasks. |
| """ |
| |
| from tests.utils.task_helpers import create_test_task |
| task = create_test_task(test_session, test_user.id, title="Old title") |
|
|
| |
| response = await invoke_agent_with_message( |
| user_id=test_user.id, |
| message=f"Change task {task.id} title to 'New title'" |
| ) |
|
|
| assert_tool_called(response, "update_task") |
|
|
|
|
| @pytest.mark.integration |
| @pytest.mark.asyncio |
| async def test_agent_recognizes_delete_task_intent(test_user, test_session): |
| """ |
| Test: Agent recognizes delete_task intent |
| |
| Verifies that agent recognizes intent to delete tasks. |
| """ |
| |
| from tests.utils.task_helpers import create_test_task |
| task = create_test_task(test_session, test_user.id, title="Task to delete") |
|
|
| |
| response = await invoke_agent_with_message( |
| user_id=test_user.id, |
| message=f"Delete task {task.id}" |
| ) |
|
|
| assert_tool_called(response, "delete_task") |
|
|