From f6976fe7bd163eab1722a8b5cc60e8aab710bf14 Mon Sep 17 00:00:00 2001 From: kaifarikman Date: Sun, 27 Sep 2026 23:30:59 +0300 Subject: [PATCH] =?UTF-8?q?docs:=20=D1=80=D0=B0=D0=B7=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D1=82=D1=8C=20=D1=83=D1=81=D0=BB=D0=BE=D0=B2=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=BE=D0=BF=D0=BE=D0=B2=D0=B5=D1=89=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=95=D0=9A=D0=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/tests/test_ekp.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) 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 = {