Files
rar-autopass/tests/test_idempotency.py
Claude Agent 37172ae2f9 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.
2026-07-10 13:43:37 +00:00

61 lines
2.2 KiB
Python

"""build_key incorporeaza rar_env."""
from __future__ import annotations
from app.idempotency import build_key, canonicalize_row, normalize_nr_inmatriculare
def _canon():
raw = {
"vin": "WVWZZZ1JZXW000001", "nr_inmatriculare": "B 123 ABC",
"data_prestatie": "2026-01-10", "odometru_final": "123456.0",
"prestatii": [{"cod_prestatie": "OE-1"}],
}
canon = canonicalize_row(raw)
canon["prestatii"] = raw["prestatii"]
return canon
def test_key_difera_intre_test_si_prod():
canon = _canon()
assert build_key(1, canon, "test") != build_key(1, canon, "prod")
def test_key_stabil_pe_env():
canon = _canon()
assert build_key(1, canon, "prod") == build_key(1, canon, "prod")
# None si 1 colapseaza la aceeasi cheie (account_or_default), pe acelasi env
assert build_key(None, canon, "test") == build_key(1, canon, "test")
def test_normalize_nr_inmatriculare_elimina_spatii_cratime_puncte():
assert normalize_nr_inmatriculare("B 99 XYZ") == "B99XYZ"
assert normalize_nr_inmatriculare("B-99-XYZ") == "B99XYZ"
assert normalize_nr_inmatriculare("B.99.XYZ") == "B99XYZ"
assert normalize_nr_inmatriculare(" b99xyz ") == "B99XYZ"
def test_canonicalize_row_normalizeaza_nr_inmatriculare():
raw = {"nr_inmatriculare": "B 99 XYZ"}
assert canonicalize_row(raw)["nr_inmatriculare"] == "B99XYZ"
def test_build_key_acelasi_pentru_formate_echivalente_nrinm():
""""B 99 XYZ" si "B99XYZ" trebuie sa produca aceeasi cheie de dedup."""
raw_cu_spatii = {
"vin": "WVWZZZ1JZXW000001", "nr_inmatriculare": "B 99 XYZ",
"data_prestatie": "2026-01-10", "odometru_final": "123456",
"prestatii": [{"cod_prestatie": "OE-1"}],
}
raw_fara_spatii = {
"vin": "WVWZZZ1JZXW000001", "nr_inmatriculare": "B99XYZ",
"data_prestatie": "2026-01-10", "odometru_final": "123456",
"prestatii": [{"cod_prestatie": "OE-1"}],
}
canon1 = canonicalize_row(raw_cu_spatii)
canon1["prestatii"] = raw_cu_spatii["prestatii"]
canon2 = canonicalize_row(raw_fara_spatii)
canon2["prestatii"] = raw_fara_spatii["prestatii"]
assert build_key(1, canon1, "test") == build_key(1, canon2, "test")