| import asyncio |
| import unittest |
| from unittest.mock import AsyncMock, MagicMock, patch |
|
|
| import pytest |
|
|
| from src.server.services.projects.task_service import TaskService |
| from src.server.services.shared_constants import AI_AGENT_ROLES |
|
|
|
|
| @pytest.mark.asyncio |
| class TestTaskServiceAIAssignment(unittest.TestCase): |
| @patch("src.server.services.projects.task_service.agent_service") |
| async def test_create_task_with_ai_assignee_notifies_agent_service(self, mock_agent_service): |
| mock_agent_service.run_agent_task = AsyncMock() |
| mock_supabase_client = MagicMock() |
| task_service = TaskService(supabase_client=mock_supabase_client) |
|
|
| ai_agent_name = "Supervisor" |
| ai_agent_id = AI_AGENT_ROLES["Supervisor (Group Chat)"] |
| task_id = "task-abc" |
| mock_task_data = {"id": task_id, "assignee": ai_agent_name, "assignee_id": ai_agent_id, "project_id": "p1", "title": "t1"} |
|
|
| execute_mock = MagicMock() |
| execute_mock.data = [mock_task_data] |
| mock_supabase_client.table.return_value.insert.return_value.execute.return_value = execute_mock |
|
|
| await task_service.create_task(project_id="p1", title="t1", assignee=ai_agent_name, assignee_id=ai_agent_id) |
| await asyncio.sleep(0.01) |
|
|
| mock_agent_service.run_agent_task.assert_awaited_once_with(task_id=task_id, agent_id=ai_agent_id) |
|
|
| @patch("src.server.services.projects.task_service.agent_service") |
| async def test_update_task_to_ai_assignee_notifies_agent_service(self, mock_agent_service): |
| mock_agent_service.run_agent_task = AsyncMock() |
| mock_supabase_client = MagicMock() |
| task_service = TaskService(supabase_client=mock_supabase_client) |
|
|
| ai_agent_name = list(AI_AGENT_ROLES)[0] |
| task_id = "task-xyz" |
|
|
| mock_current_task = {"id": task_id, "assignee": "human-user"} |
| mock_updated_task = {"id": task_id, "assignee": ai_agent_name} |
|
|
| get_execute_mock = MagicMock() |
| get_execute_mock.data = [mock_current_task] |
| mock_supabase_client.table.return_value.select.return_value.eq.return_value.execute.return_value = ( |
| get_execute_mock |
| ) |
|
|
| update_execute_mock = MagicMock() |
| update_execute_mock.data = [mock_updated_task] |
| mock_supabase_client.table.return_value.update.return_value.eq.return_value.execute.return_value = ( |
| update_execute_mock |
| ) |
|
|
| update_fields = {"assignee": ai_agent_name} |
|
|
| await task_service.update_task(task_id, update_fields) |
| await asyncio.sleep(0.01) |
|
|
| mock_agent_service.run_agent_task.assert_awaited_once_with(task_id=task_id, agent_id=ai_agent_name) |
|
|