import csv import json from collections import Counter from pathlib import Path from article_data_manager.merge.rules import MANUAL_OVERRIDE_FIELDS, MERGE_PRIORITY def test_expected_documentation_files_exist() -> None: expected = [ "README.md", "AGENTS.md", "PROJECT_KNOWLEDGE.md", "docs/architecture.md", "docs/data-model.md", "docs/data-dictionary.md", "docs/merge-rules.md", "docs/security-and-data-protection.md", "docs/roadmap.md", "docs/adr/0001-separate-repository.md", "docs/adr/0002-source-data-separation.md", "docs/adr/0003-article-number-as-string.md", "docs/adr/0004-generated-output-not-primary-data.md", ] for file_name in expected: assert Path(file_name).is_file() def test_fixtures_cover_phase_zero_cases() -> None: rollcalc = json.loads(Path("tests/fixtures/rollcalc-article-data.json").read_text()) with Path("tests/fixtures/production-key-data.csv").open(newline="") as csv_file: erp_rows = list(csv.DictReader(csv_file)) with Path("tests/fixtures/article-manual-data.csv").open(newline="") as csv_file: manual_rows = list(csv.DictReader(csv_file, delimiter=";")) rollcalc_numbers = {row["nr"] for row in rollcalc} erp_numbers = [row["SL_ITEM_NO"] for row in erp_rows] manual_numbers = {row["nr"] for row in manual_rows} assert "214700" in rollcalc_numbers and "214700" in erp_numbers assert "900001" in rollcalc_numbers and "900001" not in erp_numbers assert "800001" in erp_numbers and "800001" not in rollcalc_numbers assert "000123" in rollcalc_numbers and "000123" in erp_numbers assert Counter(erp_numbers)["777777"] == 2 assert "214700" in manual_numbers assert "000123" in manual_numbers assert any(row["SL_PRODUCTION_SPEED"] == "invalid" for row in erp_rows) assert any(row["ROP_PRODUCT_WIDTH"] == "6,00" for row in erp_rows) assert any(row["ROP_PRODUCT_WIDTH"] == "1.20" for row in erp_rows) assert any(row["qm"] == "" for row in erp_rows) assert len({row["ROP_PRODUCT_WIDTH"] for row in erp_rows if row["SL_ITEM_NO"] == "777777"}) == 2 def test_declared_merge_policy_is_phase_zero_contract() -> None: assert MERGE_PRIORITY == ("erp", "rollcalc", "manual") assert frozenset({"area_weight", "core_diameter", "core_type"}) == MANUAL_OVERRIDE_FIELDS