NODEDC_1C/tests/test_route_guards.py

79 lines
2.6 KiB
Python

from __future__ import annotations
from router.query_classifier import RouteDecisionFlags
from router.route_selector import choose_route
from router.store_sufficiency import StoreSufficiencyResult
def _flags() -> RouteDecisionFlags:
return RouteDecisionFlags(
needs_exact_object_trace=False,
needs_causal_chain=False,
needs_cross_entity_join=False,
needs_full_period_aggregation=False,
needs_ranking=False,
needs_anomaly_summary=False,
needs_runtime_truth=False,
freshness_sensitive=False,
ambiguous_object_scope=False,
store_sufficiency_confident=False,
precomputed_aggregate_available=True,
)
def _suff() -> StoreSufficiencyResult:
return StoreSufficiencyResult(
canonical_sufficient=True,
feature_sufficient=True,
risk_sufficient=True,
freshness_ok=True,
aggregate_level_ok=True,
ranking_ready=True,
explanation_ready=True,
reason_codes=[],
)
def test_route_guard_exact_object_trace_to_live() -> None:
flags = _flags()
flags.needs_exact_object_trace = True
result = choose_route(flags, _suff(), parsed_as_trend_or_risk=False)
assert result.chosen_route == "live_mcp_drilldown"
def test_route_guard_heavy_without_aggregate_to_batch() -> None:
flags = _flags()
flags.needs_full_period_aggregation = True
flags.precomputed_aggregate_available = False
suff = _suff()
suff.aggregate_level_ok = False
result = choose_route(flags, suff, parsed_as_trend_or_risk=False)
assert result.chosen_route == "batch_refresh_then_store"
def test_route_guard_cross_entity_causal_to_hybrid() -> None:
flags = _flags()
flags.needs_cross_entity_join = True
flags.needs_causal_chain = True
suff = _suff()
suff.explanation_ready = False
result = choose_route(flags, suff, parsed_as_trend_or_risk=False)
assert result.chosen_route == "hybrid_store_plus_live"
def test_route_guard_simple_factual_to_store_canonical() -> None:
result = choose_route(_flags(), _suff(), parsed_as_trend_or_risk=False)
assert result.chosen_route == "store_canonical"
def test_route_guard_trend_to_store_feature_risk() -> None:
result = choose_route(_flags(), _suff(), parsed_as_trend_or_risk=True)
assert result.chosen_route == "store_feature_risk"
def test_route_guard_inventory_exact_trace_stays_live() -> None:
flags = _flags()
flags.needs_exact_object_trace = True
result = choose_route(flags, _suff(), parsed_as_trend_or_risk=False)
assert result.chosen_route == "live_mcp_drilldown"