test(fixtures): тесты и golden для osv-dkb/** (#10) #17

Merged
aep merged 1 commits from feat/10-osv-dkb-tests into main 2026-10-06 13:05:52 +03:00
Owner

Closes #10 (первая часть — 72 файла — сделана в PR #12). Stacked on #15 (→ #13); парный PR с golden: RSHB/arm-ka-fixtures (ветка feat/10-golden, после fixtures#8).

Что сделано

  • tests/fixtures/test_osv_dkb.py — на каждом из 25 файлов fixtures/osv-dkb/** (многолистовые книги, sheet:<код счёта>/TDSheet): ошибок нет; locator'ы уникальны; ожидаемые нарушения §1.4 по листам — манифест tests/osv_dkb_expectations.yaml (данные, у каждой записи причина; чего нет в манифесте — должно быть done), статус результата — следствие; период — по имени каталога (2025-Q3 → 2025/Q3, 2024-10_2025-09 → год конца, квартал и is_cumulative null, предупреждение «не с начала года»); структура строк (parent < row, level, TOTAL уровня 0, коды ACCOUNT начинаются с кода шапки, metrics.rows); контракт v1.1; время (5 с, у больших файлов 30 с). Один разбор файла — все проверки.
  • Golden для osv-dkb/** до порога 1 МиБ (GOLDEN_MAX_BYTES): 22 из 25 файлов; три файла Агрокомплекса (9–14 МБ) — без снимков (тест test_files_over_threshold_have_no_golden_snapshot не даёт добавить). Снимки лежат в golden/expected_osv_parse/osv-dkb/…. Порог предложен: всё, кроме Агрокомплекса, ≤ 0,5 МБ; при пороге 256 КиБ выпали бы НМ 60/62/76 и НПЗ 60/62/76 — самые показательные (скользящий период, «Итого развернутое»).
  • Хелперы: dkb_helpers.py (expected_period, манифест, violated_kinds), fixtures_helpers.osv_dkb_golden_files, golden_helpers (подкаталог osv-dkb/), golden_update.py, параметры dkb_file / dkb_golden_file в conftest; юнит-тесты без каталога fixtures.
  • Покрытие словарей включает osv-dkb/** (сделано в #13).

Время

make test-fixtures: до (на ветке #15) — 886 тестов, 112 с; после — 936 тестов, 144 с (×1,29, порог ×2). make check: 2023 passed.

make check            # 2023 passed, 9 deselected
make test-fixtures    # 936 passed, 1095 deselected in 144.46s

Находки

маркер суть статус
A10-1 В описании fixtures/osv-dkb/README.md и в моём плане файлов было 22 — фактически 25 (22 + 3 больших) fixed f6e8da9 (счётчики в тестах и README)
A10-2 Манифест фиксирует нынешние нарушения как ожидаемые: при закрытии OQ-132 записи 91 удаляются, тест тогда потребует done deferred (напоминание в OQ-132)
A10-3 Контракт-валидация (assert_valid_result) выполняется и на файлах 50 тыс. строк — время укладывается в лимит 30 с rejected: проблемы нет
A10-4 Тесты иерархии/классификации/детекции на реальных файлах (test_*_real.py) по-прежнему только osv/** (требуют один лист ОСВ) — для ДКБ покрыты property-инвариантами deferred

Decisions made without discussion

  • 2026-10-06: порог golden = 1 МиБ по размеру исходного файла (н�� по размеру JSON); снимки ≈ 7,8 МБ в repo fixtures.
  • 2026-10-06: манифест — в tabular-parser/api/tests/ (рядом с тестами), а не в fixtures: ожидания зависят от поведения парсера (причины — ссылки на OQ).
  • 2026-10-06: для каталога YYYY-Qn не проверяется is_cumulative (имя каталога его не задаёт; в пакете «Q3» = «9 месяцев»), только «не None».

Что проверить человеку

  • Порог 1 МиБ и размер снимков (7,8 МБ).
  • Список ожидаемых needs_check в манифесте (каждая запись с причиной).
  • Порядок слияния: #13 → fixtures#8 → #15 → fixtures#9 → этот PR.

🤖 Generated with Claude Code

Closes #10 (первая часть — 72 файла — сделана в PR #12). **Stacked on #15** (→ #13); парный PR с golden: RSHB/arm-ka-fixtures (ветка `feat/10-golden`, после fixtures#8). ## Что сделано - `tests/fixtures/test_osv_dkb.py` — на каждом из 25 файлов `fixtures/osv-dkb/**` (многолистовые книги, `sheet:<код счёта>`/`TDSheet`): ошибок нет; locator'ы уникальны; **ожидаемые нарушения §1.4 по листам — манифест** `tests/osv_dkb_expectations.yaml` (данные, у каждой записи причина; чего нет в манифесте — должно быть `done`), статус результата — следствие; **период — по имени каталога** (`2025-Q3` → 2025/Q3, `2024-10_2025-09` → год конца, квартал и is_cumulative null, предупреждение «не с начала года»); структура строк (parent < row, level, TOTAL уровня 0, коды ACCOUNT начинаются с кода шапки, `metrics.rows`); контракт v1.1; время (5 с, у больших файлов 30 с). Один разбор файла — все проверки. - Golden для `osv-dkb/**` до **порога 1 МиБ** (`GOLDEN_MAX_BYTES`): 22 из 25 файлов; три файла Агрокомплекса (9–14 МБ) — без снимков (тест `test_files_over_threshold_have_no_golden_snapshot` не даёт добавить). Снимки лежат в `golden/expected_osv_parse/osv-dkb/…`. Порог предложен: всё, кроме Агрокомплекса, ≤ 0,5 МБ; при пороге 256 КиБ выпали бы НМ 60/62/76 и НПЗ 60/62/76 — самые показательные (скользящий период, «Итого развернутое»). - Хелперы: `dkb_helpers.py` (`expected_period`, манифест, `violated_kinds`), `fixtures_helpers.osv_dkb_golden_files`, `golden_helpers` (подкаталог `osv-dkb/`), `golden_update.py`, параметры `dkb_file` / `dkb_golden_file` в `conftest`; юнит-тесты без каталога fixtures. - Покрытие словарей включает `osv-dkb/**` (сделано в #13). ## Время `make test-fixtures`: до (на ветке #15) — 886 тестов, 112 с; после — 936 тестов, 144 с (×1,29, порог ×2). `make check`: 2023 passed. ``` make check # 2023 passed, 9 deselected make test-fixtures # 936 passed, 1095 deselected in 144.46s ``` ## Находки | маркер | суть | статус | |---|---|---| | A10-1 | В описании `fixtures/osv-dkb/README.md` и в моём плане файлов было 22 — фактически 25 (22 + 3 больших) | fixed f6e8da9 (счётчики в тестах и README) | | A10-2 | Манифест фиксирует нынешние нарушения как ожидаемые: при закрытии OQ-132 записи 91 удаляются, тест тогда потребует `done` | deferred (напоминание в OQ-132) | | A10-3 | Контракт-валидация (`assert_valid_result`) выполняется и на файлах 50 тыс. строк — время укладывается в лимит 30 с | rejected: проблемы нет | | A10-4 | Тесты иерархии/классификации/детекции на реальных файлах (`test_*_real.py`) по-прежнему только `osv/**` (требуют один лист ОСВ) — для ДКБ покрыты property-инвариантами | deferred | ## Decisions made without discussion - 2026-10-06: порог golden = 1 МиБ по размеру исходного файла (н�� по размеру JSON); снимки ≈ 7,8 МБ в repo fixtures. - 2026-10-06: манифест — в `tabular-parser/api/tests/` (рядом с тестами), а не в fixtures: ожидания зависят от поведения парсера (причины — ссылки на OQ). - 2026-10-06: для каталога `YYYY-Qn` не проверяется `is_cumulative` (имя каталога его не задаёт; в пакете «Q3» = «9 месяцев»), только «не None». ## Что проверить человеку - Порог 1 МиБ и размер снимков (7,8 МБ). - Список ожидаемых `needs_check` в манифесте (каждая запись с причиной). - Порядок слияния: #13 → fixtures#8 → #15 → fixtures#9 → этот PR. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
aep added 1 commit 2026-10-06 12:24:02 +03:00
- test_osv_dkb.py: на каждом из 25 файлов пакета ДКБ — статусы листов по манифесту osv_dkb_expectations.yaml (данные, не
  if по имени файла), период по каталогу (2025-Q3, 2024-10_2025-09), структура строк, контракт, время разбора.
- golden: osv-dkb/** до порога GOLDEN_MAX_BYTES = 1 МиБ (22 из 25 файлов; три файла Агрокомплекса 9–14 МБ — без снимков);
  golden_update, golden_helpers (подкаталог osv-dkb/), conftest (dkb_file, dkb_golden_file), хелперы.
- dkb_helpers: expected_period, манифест; юнит-тесты без каталога fixtures.

Stacked on #15. Closes #10

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Claude-Session: cedd7915-2efe-41e5-988c-a9117033598b
aep changed target branch from feat/9-inn-in-text to main 2026-10-06 13:05:31 +03:00
aep merged commit 3b32462910 into main 2026-10-06 13:05:52 +03:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RSHB/arm-tabular-parser#17
No description provided.