74 lines
2.7 KiB
Python
74 lines
2.7 KiB
Python
from __future__ import annotations
|
||
|
||
from router.query_classifier import classify_query_for_route
|
||
|
||
|
||
def _store_meta() -> dict:
|
||
return {
|
||
"precomputed_aggregates": ["baseline_period_summary", "period_trend_summary", "risk_slice_summary"],
|
||
}
|
||
|
||
|
||
def test_classifier_heavy_ranking_flags() -> None:
|
||
flags = classify_query_for_route(
|
||
"Рейтинг риск-счетов за июнь",
|
||
{"question_class": "heavy_analytical"},
|
||
_store_meta(),
|
||
)
|
||
assert flags.needs_full_period_aggregation is True
|
||
assert flags.needs_ranking is True
|
||
assert flags.needs_exact_object_trace is False
|
||
|
||
|
||
def test_classifier_drilldown_exact_trace_flags() -> None:
|
||
flags = classify_query_for_route(
|
||
"Цепочка документ -> проводки -> субконто",
|
||
{"question_class": "drilldown_explain"},
|
||
_store_meta(),
|
||
)
|
||
assert flags.needs_exact_object_trace is True
|
||
assert flags.needs_causal_chain is True
|
||
assert flags.needs_runtime_truth is True
|
||
|
||
|
||
def test_classifier_cross_entity_causal_flags() -> None:
|
||
flags = classify_query_for_route(
|
||
"Свяжи контрагентов, договоры и проводки",
|
||
{"question_class": "cross_entity"},
|
||
_store_meta(),
|
||
)
|
||
assert flags.needs_cross_entity_join is True
|
||
assert flags.needs_causal_chain is True
|
||
assert flags.needs_exact_object_trace is False
|
||
|
||
|
||
def test_classifier_inventory_stock_provenance_flags() -> None:
|
||
flags = classify_query_for_route(
|
||
"От какого поставщика куплен товар Диван трехместный из текущего остатка на складе Основной склад",
|
||
{"question_class": "simple_factual"},
|
||
_store_meta(),
|
||
)
|
||
assert flags.needs_exact_object_trace is True
|
||
assert flags.needs_runtime_truth is True
|
||
|
||
|
||
def test_classifier_inventory_account_on_date_flags() -> None:
|
||
flags = classify_query_for_route(
|
||
"Какие товары числятся на 41 счете на дату 2020-03-31",
|
||
{"question_class": "unknown"},
|
||
_store_meta(),
|
||
)
|
||
assert flags.needs_exact_object_trace is True
|
||
assert flags.needs_runtime_truth is True
|
||
|
||
|
||
def test_classifier_inventory_sale_chain_flags() -> None:
|
||
flags = classify_query_for_route(
|
||
"Есть ли документально подтвержденная цепочка: поставщик Гамма-мебель, ООО -> товар Шкаф картотечный -> покупатель",
|
||
{"question_class": "cross_entity"},
|
||
_store_meta(),
|
||
)
|
||
assert flags.needs_exact_object_trace is True
|
||
assert flags.needs_causal_chain is True
|
||
assert flags.needs_cross_entity_join is True
|