| from unittest.mock import AsyncMock, patch |
|
|
| from fastapi.testclient import TestClient |
|
|
| from src.server.api_routes.agents_api import get_current_user |
| from src.server.services.agent_service import AI_AGENT_ROLES |
|
|
| |
| |
| mock_agent_service = AsyncMock() |
| mock_agent_service.get_assignable_agents.return_value = [ |
| {"id": agent_id, "name": role_name, "role": role_name} for role_name, agent_id in AI_AGENT_ROLES.items() |
| ] |
|
|
| |
| module_patch = patch("src.server.api_routes.agents_api.agent_service", mock_agent_service) |
|
|
| |
| from src.server.main import app |
|
|
| |
| module_patch.start() |
|
|
| client = TestClient(app) |
|
|
|
|
| def test_get_assignable_agents_success(): |
| """ |
| Test successfully fetching the list of assignable agents. |
| """ |
| |
| app.dependency_overrides[get_current_user] = lambda: {"id": "admin-1", "role": "system_admin"} |
|
|
| response = client.get("/api/agents/assignable") |
|
|
| |
| assert response.status_code == 200 |
|
|
| data = response.json() |
| assert isinstance(data, list) |
| assert len(data) == len(AI_AGENT_ROLES) |
| |
| expected_agents = [ |
| {"id": agent_id, "name": role_name, "role": role_name} for role_name, agent_id in AI_AGENT_ROLES.items() |
| ] |
| assert all(any(item == expected for expected in expected_agents) for item in data) |
|
|
| |
| mock_agent_service.get_assignable_agents.assert_awaited_once() |
|
|
|
|
| def test_get_assignable_agents_service_error(): |
| """ |
| Test handling of an error from the agent service. |
| """ |
| |
| app.dependency_overrides[get_current_user] = lambda: {"id": "admin-1", "role": "system_admin"} |
|
|
| |
| mock_agent_service.reset_mock() |
| mock_agent_service.get_assignable_agents.side_effect = Exception("Service unavailable") |
|
|
| response = client.get("/api/agents/assignable") |
|
|
| |
| assert response.status_code == 500 |
| assert "Failed to retrieve assignable agents" in response.text |
|
|
| |
| mock_agent_service.get_assignable_agents.side_effect = None |
| mock_agent_service.reset_mock() |
| |
| mock_agent_service.get_assignable_agents.return_value = [ |
| {"id": "ai-tester-1", "name": "測試 AI Agent", "role": "TEST"}, |
| ] |
|
|
|
|
| |
| def teardown_module(module): |
| module_patch.stop() |
|
|