- Updated the `validate_csv_template` function to normalize both the column signature and field mappings for accurate comparison, preventing false warnings about mismatches. - Enhanced warning messages to provide clearer guidance on the relationship between normalized signatures and raw field mappings. - Added a new test to ensure that normalized signatures do not trigger false warnings when compared to raw mappings.
71 lines
2.3 KiB
Python
71 lines
2.3 KiB
Python
"""Formatprüfung CSV-Vorlagen (template_validator)."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from csv_parser.template_validator import validate_csv_template
|
|
|
|
|
|
def test_validate_kj_column_warns_without_source_unit():
|
|
r = validate_csv_template(
|
|
"activity",
|
|
{"Aktive Energie (kJ)": "kcal_active", "Start": "start_time", "Trainingsart": "activity_type"},
|
|
{"start_time": {"type": "datetime", "format": "yyyy-mm-dd HH:MM:SS", "flexible": True}},
|
|
None,
|
|
None,
|
|
)
|
|
assert r["valid"] is True
|
|
codes = {w["code"] for w in r["warnings"]}
|
|
assert "energy_kj_without_source_unit" in codes
|
|
|
|
|
|
def test_validate_invalid_target_error():
|
|
r = validate_csv_template(
|
|
"activity",
|
|
{"X": "not_a_field"},
|
|
{},
|
|
None,
|
|
None,
|
|
)
|
|
assert r["valid"] is False
|
|
assert any(e["code"] == "invalid_field_mapping" for e in r["errors"])
|
|
|
|
|
|
def test_signature_normalized_vs_raw_mapping_no_false_warning():
|
|
"""Analyse liefert normalisierte Signatur; field_mappings nutzt Original-Header wie im Seed."""
|
|
r = validate_csv_template(
|
|
"blood_pressure",
|
|
{
|
|
"Datum": "measured_date",
|
|
"Zeit": "measured_time",
|
|
"Systolisch (mmHg)": "systolic",
|
|
"Diastolisch (mmHg)": "diastolic",
|
|
"Puls (bpm)": "pulse",
|
|
},
|
|
{
|
|
"measured_date": {"type": "date", "format": "dd.mm.yyyy"},
|
|
"measured_time": {"type": "time", "format": "HH:MM"},
|
|
"systolic": {"type": "int"},
|
|
"diastolic": {"type": "int"},
|
|
"pulse": {"type": "int"},
|
|
},
|
|
None,
|
|
["datum", "diastolisch_mmhg", "puls_bpm", "systolisch_mmhg", "zeit"],
|
|
)
|
|
assert r["valid"] is True
|
|
assert not any(w["code"] == "signature_vs_mappings_mismatch" for w in r["warnings"])
|
|
|
|
|
|
def test_validate_duplicate_target_warning():
|
|
r = validate_csv_template(
|
|
"weight",
|
|
{"A": "weight", "B": "weight", "Tag": "date"},
|
|
{
|
|
"weight": {"type": "float", "decimal_separator": "."},
|
|
"date": {"type": "date", "format": "yyyy-mm-dd", "flexible": True},
|
|
},
|
|
None,
|
|
None,
|
|
)
|
|
assert r["valid"] is True
|
|
assert any(w["code"] == "duplicate_target_columns" for w in r["warnings"])
|