fix(generator): сторожа имён DDS и порядка строк, торговый словарь — по границе
- Зачем:
- слепая линия Кодекса (свежий тред, high) нашла три места, где обещание
контракта не подкреплено: имена для DDS не сверялись ни с чем, порядок
строк документа держался только на нумерации, а комментарий рекламировал
торговые события, которые мастер-спека прямо исключила.
- Что:
- имена для DDS записаны независимо и сверяются целиком: они не выводятся
правилом из имён Метрики, значит осмысленно неверное имя иначе молча
уезжает в опубликованное описание (проверено подменой referer).
- строки документа сверяются парами «номер, колонка»: рендер в другом
порядке больше не проходит зелёным (проверено перевёрнутым рендером).
- productEventType: detail и remove убраны из комментария — раздел 10
мастер-спеки отказался от полного словаря торговых событий Метрики;
стенд шлёт add и purchase.
- Проверка:
- make test (250 тестов), make lint;
- make docs, затем git diff --exit-code docs/ — пусто;
- обе новые проверки проверены мутациями: каждая краснеет своим тестом.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -16,7 +16,9 @@ from clickstream_generator.schema_doc import render
|
||||
REPO_ROOT = Path(__file__).resolve().parents[2]
|
||||
DOC_PATH = REPO_ROOT / "docs" / "formats" / "clickstream-event.md"
|
||||
|
||||
TABLE_ROW = re.compile(r"^\| \d+ \|", re.MULTILINE)
|
||||
# Номер и имя колонки из строки таблицы: по ним сверяется не только состав
|
||||
# документа, но и его порядок — по нему сторона хранилища выпишет колонки.
|
||||
TABLE_ROW = re.compile(r"^\| (\d+) \| `([^`]+)` \|", re.MULTILINE)
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
@@ -35,9 +37,11 @@ def test_every_column_has_a_row(rendered: str):
|
||||
assert len(TABLE_ROW.findall(rendered)) == len(COLUMNS)
|
||||
|
||||
|
||||
def test_rows_are_numbered_in_contract_order(rendered: str):
|
||||
numbers = [int(row.strip("| ")) for row in TABLE_ROW.findall(rendered)]
|
||||
assert numbers == list(range(1, len(COLUMNS) + 1))
|
||||
def test_rows_follow_contract_order(rendered: str):
|
||||
"""Строки идут в порядке контракта, а не просто нумеруются с 1 по 47."""
|
||||
rows = [(int(number), name) for number, name in TABLE_ROW.findall(rendered)]
|
||||
expected = [(number, column.name) for number, column in enumerate(COLUMNS, 1)]
|
||||
assert rows == expected
|
||||
|
||||
|
||||
@pytest.mark.parametrize("column", COLUMNS, ids=lambda column: column.name)
|
||||
|
||||
Reference in New Issue
Block a user