diff --git a/apps/api/tests/test_p0_diagnose_routing.py b/apps/api/tests/test_p0_diagnose_routing.py new file mode 100644 index 00000000..2b10424b --- /dev/null +++ b/apps/api/tests/test_p0_diagnose_routing.py @@ -0,0 +1,40 @@ +""" +P0 DIAGNOSE Privacy-First Routing Tests +======================================== +測試 AIRouter local chain 隔離 + DIAGNOSE timeout 路由 + +建立時間: 2026-04-04 (台北時區) +建立者: Claude Code (P0 DIAGNOSE Privacy-First) +""" + +import os +os.environ.setdefault("MOCK_MODE", "true") + +import pytest +from unittest.mock import AsyncMock, MagicMock, patch + + +class TestNemotronPerTaskTimeout: + """Nemotron 支援 per-task timeout""" + + @pytest.mark.asyncio + async def test_diagnose_uses_diagnose_timeout(self): + """DIAGNOSE context 應使用 NEMOTRON_DIAGNOSE_TIMEOUT_SECONDS""" + from src.services.ai_providers.nemotron import NemotronProvider + + provider = NemotronProvider() + + # 建立 mock nvidia provider + mock_nvidia = MagicMock() + mock_result = MagicMock() + mock_result.tool_calls = [] + mock_nvidia.tool_call = AsyncMock(return_value=mock_result) + + with patch.object(provider, '_get_nvidia', return_value=mock_nvidia): + result = await provider.analyze( + prompt="測試診斷", + context={"task_type": "diagnose"}, + ) + + assert result.success is True + mock_nvidia.tool_call.assert_called_once()