| """ |
| Integration Tests for Agent Delete Task (User Story 5) |
| |
| Tests the end-to-end workflow of AI agent deleting 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, count_tasks |
|
|
|
|
| @pytest.mark.integration |
| @pytest.mark.asyncio |
| async def test_agent_deletes_task_via_chat_endpoint(test_user, test_session): |
| """ |
| Test: Agent deletes task via chat endpoint |
| |
| Verifies that AI agent can delete a task through natural language. |
| """ |
| |
| 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") |
|
|
| |
| deleted_task = get_task_by_id(test_session, task.id) |
| assert deleted_task is None |
|
|
|
|
| @pytest.mark.integration |
| @pytest.mark.asyncio |
| async def test_agent_deletes_task_with_natural_language_delete_x(test_user, test_session): |
| """ |
| Test: Agent deletes task with natural language "delete X" |
| |
| Verifies that agent recognizes "delete" intent and removes task. |
| """ |
| |
| task = create_test_task(test_session, test_user.id, title="Obsolete task") |
|
|
| |
| response = await invoke_agent_with_message( |
| user_id=test_user.id, |
| message="Delete the obsolete task" |
| ) |
|
|
| |
| tool_calls = extract_tool_calls(response) |
| tool_names = [tc["tool"] for tc in tool_calls] |
|
|
| |
| assert "list_tasks" in tool_names or "delete_task" in tool_names |
|
|
|
|
| @pytest.mark.integration |
| @pytest.mark.asyncio |
| async def test_agent_lists_tasks_then_deletes_specific_task(test_user, test_session): |
| """ |
| Test: Agent lists tasks then deletes specific task |
| |
| Verifies multi-step workflow: list tasks, identify task, delete it. |
| """ |
| |
| task1 = create_test_task(test_session, test_user.id, title="Keep this") |
| task2 = create_test_task(test_session, test_user.id, title="Delete this") |
|
|
| |
| 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"Delete task {task2.id}" |
| ) |
| assert_tool_called(response2, "delete_task") |
|
|
| |
| remaining_task = get_task_by_id(test_session, task1.id) |
| deleted_task = get_task_by_id(test_session, task2.id) |
|
|
| assert remaining_task is not None |
| assert deleted_task is None |
|
|