main
py 43 lines 1.45 KB
Raw
1 from __future__ import annotations
2
3 from datetime import datetime, timezone
4 from uuid import UUID
5
6 from app.research_readiness import ProviderFallbackPolicy, ResearchRequirementStatus
7
8
9 INSTRUMENT_ID = UUID("11111111-1111-4111-8111-111111111111")
10
11
12 def test_fallback_policy_issues_narrow_serializable_mcp_authorization() -> None:
13 issued_at = datetime(2026, 9, 11, 10, 0, tzinfo=timezone.utc)
14 authorization = ProviderFallbackPolicy().authorize_external_tool(
15 global_instrument_id=INSTRUMENT_ID,
16 requirement_id="CURRENT_NEWS",
17 status=ResearchRequirementStatus.MISSING,
18 confidence=None,
19 permitted_provider_ids=("FUTURE_INDIA_MCP",),
20 now=issued_at,
21 )
22
23 assert authorization is not None
24 assert authorization.as_gateway_payload() == {
25 "authorized": True,
26 "issuedBy": "ProviderFallbackPolicy",
27 "globalInstrumentId": str(INSTRUMENT_ID),
28 "requirementId": "CURRENT_NEWS",
29 "permittedProviderIds": ["FUTURE_INDIA_MCP"],
30 "issuedAt": issued_at.isoformat(),
31 }
32
33
34 def test_fallback_policy_does_not_authorize_ready_high_confidence_requirement() -> None:
35 authorization = ProviderFallbackPolicy().authorize_external_tool(
36 global_instrument_id=INSTRUMENT_ID,
37 requirement_id="CURRENT_NEWS",
38 status=ResearchRequirementStatus.READY_FRESH,
39 confidence=0.99,
40 permitted_provider_ids=("FUTURE_INDIA_MCP",),
41 )
42
43 assert authorization is None