arm-tabular-parser/api/tests/unit/test_dkb_helpers.py
Andrey Epifancev f6e8da9cf6 test(fixtures): обобщение тестов и golden на osv-dkb/** (многолистовые книги, ожидаемые needs_check, период каталога)
- 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
2026-10-06 13:23:34 +04:00

36 lines
1.4 KiB
Python

"""Ожидания пакета ДКБ: период по каталогу и манифест нарушений (без каталога fixtures)."""
import pytest
from dkb_helpers import ExpectedPeriod, expected_period, expected_violations, load_expectations
@pytest.mark.parametrize(
("directory", "expected"),
[
("2025-Q3", ExpectedPeriod(2025, "Q3")),
("2024-Q1", ExpectedPeriod(2024, "Q1")),
("2024-10_2025-09", ExpectedPeriod(2025, None, rolling=True)),
],
)
def test_period_by_catalog_name(directory: str, expected: ExpectedPeriod) -> None:
assert expected_period(directory) == expected
@pytest.mark.parametrize("directory", ["2025", "2025-FY", "2025-09_2024-10", "x"])
def test_unknown_catalog_name_is_an_error(directory: str) -> None:
with pytest.raises(ValueError, match="каталога периода|конец периода"):
expected_period(directory)
def test_expectations_have_reasons_and_known_kinds() -> None:
kinds = {"total_row", "balance_identity", "parent_sum"}
for path, sheets in load_expectations().items():
assert sheets, path
for locator, found in sheets.items():
assert locator.startswith("sheet:"), (path, locator)
assert found and set(found) <= kinds, (path, locator, found)
def test_unlisted_sheet_is_expected_to_converge() -> None:
assert expected_violations("nm/2025-Q3/нет такого.xlsx", "sheet:60") == []