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