Files
article-data-manager/tests/integration/test_project_foundation.py

58 lines
2.4 KiB
Python

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