diff --git a/backend/tests/test_ekp.py b/backend/tests/test_ekp.py index e641fce..1abcd3d 100644 --- a/backend/tests/test_ekp.py +++ b/backend/tests/test_ekp.py @@ -4,6 +4,8 @@ производен и не выбирается руками, сценарий размечается признаками. """ +import hashlib +import json from pathlib import Path import pytest @@ -93,6 +95,31 @@ def test_all_customer_ticket_cards_are_complete_and_classified(): } +def test_ticket_ekp_codes_and_notify_lists_match_current_baseline(): + """Изменение правил оповещения не должно незаметно переписать 96 эталонов. + + При намеренной смене версии ЕКП сначала сверяют каждый изменившийся список + с источником и методистом, затем обновляют контрольную сумму. + """ + cards = [ + scenario + for scenario in load_library(Path(__file__).resolve().parents[2] / "scenarios") + if scenario.ticket is not None + ] + assert len(cards) == 96 + manifest = { + scenario.id: { + "code": scenario.ground_truth.incident_code, + "notify": scenario.ground_truth.notify, + } + for scenario in cards + } + encoded = json.dumps(manifest, ensure_ascii=False, sort_keys=True, separators=(",", ":")) + assert hashlib.sha256(encoded.encode()).hexdigest() == ( + "2e3d49cc1e4a47bf8813437207a4105799c5721cc54bddc795730267ebb44df4" + ) + + def test_ticket_two_preserves_moscow_and_does_not_invent_missing_victim_data(): root = Path(__file__).resolve().parents[2] / "scenarios" cards = {