DFiP_Budget_planing/api/tests/unit/test_svod2_oracle.py
Andrey Epifancev 174ec73732 test(api): свод 2 — Python-оракул экрана, сверенный с векторами JS
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 21:11:17 +04:00

52 lines
2.0 KiB
Python

import json
from pathlib import Path
import pytest
from tests.svod2_oracle import (
COMPACT_PATHS,
FILTER_COLUMNS,
compact_projection,
js_number_text,
screen_facets,
screen_found,
screen_rows,
)
FIX = Path(__file__).resolve().parents[1] / "fixtures"
NUM = json.loads((FIX / "js_number_text_vectors.json").read_text())
SCREEN = json.loads((FIX / "svod2_screen_vectors.json").read_text())
def test_js_number_text_matches_node_vectors():
for v in NUM:
assert js_number_text(json.loads(v["input"])) == v["js"], v
@pytest.mark.parametrize("case", SCREEN["cases"], ids=lambda c: f"{c['search']!r}-{c['filters']}")
def test_screen_port_matches_node(case):
rows = SCREEN["rows"]
assert [r["data"]["line_id"] for r in screen_rows(rows, case["search"], case["filters"])] == case["line_ids"]
assert screen_found(rows, case["search"]) == (case["found"]["found"], case["found"]["total"])
f = screen_facets(rows, case["search"], case["filters"])
assert (f["total"], f["search_total"]) == (case["facets"]["total"], case["facets"]["search_total"])
for col in FILTER_COLUMNS:
assert f[col] == dict(case["facets"][col])
def test_compact_projection_keeps_zero_drops_null_and_unknown():
out = compact_projection({"line_id": 1, "header": {"source_form": "FORM_1", "name": None, "vsp_id": 5},
"plan": {"plan_q1": 0, "plan_q2": None}})
assert out["line_id"] == 1
assert out["header"] == {"source_form": "FORM_1"}
assert out["plan"] == {"plan_q1": 0}
assert out["sequestration"] == {"DFIP": {}}
assert "transfer_to_q1" not in out["q1"] and set(out) >= {"q1", "q2", "q3", "q4", "contract_detail"}
def test_compact_paths_shape():
assert len(COMPACT_PATHS) == len(set(COMPACT_PATHS))
assert "q4.actual_spod" in COMPACT_PATHS and "q1.actual_spod" not in COMPACT_PATHS
assert "q1.transfer_to_q2" in COMPACT_PATHS and "q3.transfer_to_q4" in COMPACT_PATHS
assert "q4.transfer_to_economy" not in COMPACT_PATHS and "q1.plan_revision_increase" not in COMPACT_PATHS