"""Teste US-003 (PRD 3.5): helper pur payload -> campuri afisabile. Helper partajat web + API (DRY, eng review). Defensiv: nu arunca pe payload malformat; tolerant la diferentele de chei intre canale (numar vs numarInmatriculare) si la coercion Excel (odometru "123.0", VIN non-string). """ from __future__ import annotations import json from app.payload_view import prezentare_din_payload, EMPTY def test_detalii_din_payload(): """Payload complet -> toate campurile afisabile corecte.""" payload = json.dumps({ "vin": "WVWZZZ1JZXW000001", "nr_inmatriculare": "B123XYZ", "odometru_final": "123456", "data_prestatie": "2026-06-18", "prestatii": [{"cod_prestatie": "R-FRANE", "denumire": "Reparatie frane"}], }) d = prezentare_din_payload(payload) assert d["vehicul_nr"] == "B123XYZ" assert d["vin"] == "WVWZZZ1JZXW000001" assert "000001" in d["vin_scurt"] # trunchiat dar identificabil assert d["operatie"] == "Reparatie frane" assert d["cod"] == "R-FRANE" assert d["data_prestatie"] == "2026-06-18" assert d["odometru"] == "123456" def test_payload_partial(): """Campuri lipsa -> EMPTY, fara exceptie.""" d = prezentare_din_payload(json.dumps({"vin": "WVWZZZ1JZXW000002"})) assert d["vin"] == "WVWZZZ1JZXW000002" assert d["vehicul_nr"] == EMPTY assert d["operatie"] == EMPTY assert d["cod"] == EMPTY assert d["data_prestatie"] == EMPTY assert d["odometru"] == EMPTY def test_payload_gol(): """Payload gol / None -> toate EMPTY, fara exceptie.""" for p in (None, "", "{}", {}): d = prezentare_din_payload(p) assert d["vehicul_nr"] == EMPTY assert d["vin"] == EMPTY def test_payload_invalid(): """JSON invalid / tip neasteptat -> fallback grijuliu (nu arunca).""" for bad in ("nu-e-json", "[1,2,3]", "null", "12345"): d = prezentare_din_payload(bad) assert d["vin"] == EMPTY # degradeaza curat def test_payload_coercion_excel(): """Odometru '123.0'/numeric si VIN non-string afisate curat; chei API alternative.""" # Excel coercion: odometru float-string si numeric d1 = prezentare_din_payload({"odometru_final": "123456.0"}) assert d1["odometru"] == "123456" d2 = prezentare_din_payload({"odometru_final": 123456}) assert d2["odometru"] == "123456" # VIN non-string (coercion Excel) d3 = prezentare_din_payload({"vin": 12345678901234567}) assert d3["vin"] == "12345678901234567" # Chei alternative canal API (numar / numarInmatriculare / odometru) d4 = prezentare_din_payload({"numar": "CJ99ABC", "odometru": "777.0"}) assert d4["vehicul_nr"] == "CJ99ABC" assert d4["odometru"] == "777" d5 = prezentare_din_payload({"numarInmatriculare": "TM01AAA"}) assert d5["vehicul_nr"] == "TM01AAA" def test_operatie_fallback_la_cod(): """Fara denumire -> operatie afiseaza codul; cod intern cand lipseste cel RAR.""" d = prezentare_din_payload({"prestatii": [{"cod_op_service": "OP-77"}]}) assert d["cod"] == "OP-77" assert d["operatie"] == "OP-77"