| """ |
| Integration Tests for Agent Update Task (User Story 4) |
| |
| Tests the end-to-end workflow of AI agent updating tasks via chat endpoint. |
| """ |
|
|
| import pytest |
|
|
| from tests.utils.agent_helpers import ( |
| invoke_agent_with_message, |
| assert_tool_called, |
| extract_tool_calls |
| ) |
| from tests.utils.task_helpers import create_test_task, get_task_by_id |
|
|
|
|
| @pytest.mark.integration |
| @pytest.mark.asyncio |
| async def test_agent_updates_task_via_chat_endpoint(test_user, test_session): |
| """ |
| Test: Agent updates task via chat endpoint |
| |
| Verifies that AI agent can update a task through natural language. |
| """ |
| |
| task = create_test_task(test_session, test_user.id, title="Buy milk") |
|
|
| |
| response = await invoke_agent_with_message( |
| user_id=test_user.id, |
| message=f"Update task {task.id} to 'Buy organic milk'" |
| ) |
|
|
| |
| assert_tool_called(response, "update_task") |
|
|
| |
| updated_task = get_task_by_id(test_session, task.id) |
| assert "organic milk" in updated_task.title.lower() |
|
|
|
|
| @pytest.mark.integration |
| @pytest.mark.asyncio |
| async def test_agent_updates_task_with_natural_language_change_x_to_y(test_user, test_session): |
| """ |
| Test: Agent updates task with natural language "change X to Y" |
| |
| Verifies that agent recognizes "change X to Y" intent and updates task. |
| """ |
| |
| task = create_test_task(test_session, test_user.id, title="Buy milk") |
|
|
| |
| response = await invoke_agent_with_message( |
| user_id=test_user.id, |
| message="Change the milk task to 'Buy almond milk'" |
| ) |
|
|
| |
| tool_calls = extract_tool_calls(response) |
| tool_names = [tc["tool"] for tc in tool_calls] |
|
|
| |
| assert "list_tasks" in tool_names or "update_task" in tool_names |
|
|
|
|
| @pytest.mark.integration |
| @pytest.mark.asyncio |
| async def test_agent_lists_tasks_then_updates_specific_task(test_user, test_session): |
| """ |
| Test: Agent lists tasks then updates specific task |
| |
| Verifies multi-step workflow: list tasks, identify task, update it. |
| """ |
| |
| task = create_test_task(test_session, test_user.id, title="Review PR") |
|
|
| |
| response1 = await invoke_agent_with_message( |
| user_id=test_user.id, |
| message="Show my tasks" |
| ) |
| assert_tool_called(response1, "list_tasks") |
|
|
| |
| response2 = await invoke_agent_with_message( |
| user_id=test_user.id, |
| message=f"Update task {task.id} title to 'Review PR #123'" |
| ) |
| assert_tool_called(response2, "update_task") |
|
|
| |
| updated_task = get_task_by_id(test_session, task.id) |
| assert "123" in updated_task.title |
|
|