fix(nrinmatriculare): normalizeaza spatii/cratime/puncte consecvent pe toate canalele
Doar 13.8% din numerele de inmatriculare istorice treceau validarea stricta
^[A-Z0-9]{1,10}$ (spike SQL), majoritatea din cauza formatelor reale cu
spatii/cratime ("B 99 XYZ", "B-99-XYZ") pe care normalizarea actuala
(strip+upper) nu le curata.
Adauga normalize_nr_inmatriculare() in app.idempotency (deja punctul comun
API+import pentru canonicalize_row) si o foloseste consecvent in:
- models.PrezentareIn (validare shape / normalizare API)
- validation.validate_prezentare (validare continut)
- idempotency.canonicalize_row (cheia de dedup)
Fara aceasta consecventa, validarea si idempotency ar diverge pe acelasi
numar de inmatriculare in formate echivalente.
This commit is contained in:
@@ -63,10 +63,28 @@ def test_nrinmatriculare_prea_lung():
|
||||
|
||||
|
||||
def test_nrinmatriculare_caracter_special():
|
||||
errors = validate_prezentare(_base(nr_inmatriculare="B-99"))
|
||||
errors = validate_prezentare(_base(nr_inmatriculare="B_99"))
|
||||
assert "nr_inmatriculare" in _fields(errors)
|
||||
|
||||
|
||||
def test_nrinmatriculare_normalizeaza_spatii():
|
||||
c = _base(nr_inmatriculare="B 99 XYZ")
|
||||
assert c["nr_inmatriculare"] == "B99XYZ"
|
||||
assert validate_prezentare(c) == []
|
||||
|
||||
|
||||
def test_nrinmatriculare_normalizeaza_cratime():
|
||||
c = _base(nr_inmatriculare="B-99-XYZ")
|
||||
assert c["nr_inmatriculare"] == "B99XYZ"
|
||||
assert validate_prezentare(c) == []
|
||||
|
||||
|
||||
def test_nrinmatriculare_normalizeaza_puncte():
|
||||
c = _base(nr_inmatriculare="B.99.XYZ")
|
||||
assert c["nr_inmatriculare"] == "B99XYZ"
|
||||
assert validate_prezentare(c) == []
|
||||
|
||||
|
||||
def test_data_prea_veche():
|
||||
errors = validate_prezentare(_base(data_prestatie="2024-11-30"))
|
||||
assert "data_prestatie" in _fields(errors)
|
||||
@@ -135,7 +153,7 @@ def test_b64image_valid_ok():
|
||||
|
||||
|
||||
def test_erori_multiple_cumulate():
|
||||
errors = validate_prezentare(_base(vin="BAD", nr_inmatriculare="X-Y", data_prestatie="2024-01-01"))
|
||||
errors = validate_prezentare(_base(vin="BAD", nr_inmatriculare="X_Y", data_prestatie="2024-01-01"))
|
||||
assert {"vin", "nr_inmatriculare", "data_prestatie"} <= _fields(errors)
|
||||
|
||||
|
||||
@@ -215,7 +233,7 @@ def test_back_compat_field_message():
|
||||
"""Fiecare eroare are inca field + message (forma veche)."""
|
||||
errs = validate_prezentare(_base(
|
||||
vin="BAD",
|
||||
nr_inmatriculare="X-Y",
|
||||
nr_inmatriculare="X_Y",
|
||||
data_prestatie="2024-01-01",
|
||||
odometru_final="abc",
|
||||
prestatii=[],
|
||||
@@ -232,7 +250,7 @@ def test_toate_codurile_in_catalog():
|
||||
|
||||
cazuri = [
|
||||
_base(vin="WVWZZZ1OZAW000123"), # VIN_FORMAT
|
||||
_base(nr_inmatriculare="X-Y"), # NR_INMATRICULARE_FORMAT
|
||||
_base(nr_inmatriculare="X_Y"), # NR_INMATRICULARE_FORMAT
|
||||
_base(data_prestatie="15-06-2026"), # DATA_FORMAT
|
||||
_base(data_prestatie="2024-11-30"), # DATA_PREA_VECHE
|
||||
_base(data_prestatie=(today_bucuresti() + timedelta(days=1)).isoformat()), # DATA_VIITOR
|
||||
|
||||
Reference in New Issue
Block a user