"""FIX (code-review 5.8): o regula text cu auto_send=0 (DEFAULT, decizia CEO) trebuie sa TINA randul pentru verificare umana (needs_mapping/review), NU sa-l trimita automat. `has_no_auto_send` trebuie sa prinda si itemii rezolvati-prin-regula-text cu auto_send=0, nu doar maparile exacte din operations_mapping. Adnotarile (cod_sursa/regula_fara_autosend) trebuie curatate la fiecare rezolvare (anti-staleness). Functii pure -> teste fara DB. """ from __future__ import annotations from app.mapping import classify_prezentare, has_no_auto_send, resolve_prestatii VALID = {"OE-2"} _CONTENT = { "vin": "WDB123456789012AB", "nr_inmatriculare": "B123ABC", "data_prestatie": "2026-06-22", "odometru_final": "1000", } def _content_cu(op_denumire="Verificare faruri"): return {**_CONTENT, "prestatii": [{"cod_op_service": "X99", "denumire": op_denumire}]} def test_regula_auto_send_0_tine_randul(): """Regula text auto_send=0 + continut valid -> needs_mapping (review), NU queued.""" tr = [{"pattern": "verificare", "cod_prestatie": "OE-2", "auto_send": 0, "priority": 0}] cl = classify_prezentare(_content_cu(), {}, {}, VALID, tr) assert cl["status"] == "needs_mapping", f"asteptat needs_mapping (held), got {cl['status']}" def test_regula_auto_send_1_trece_in_coada(): """Regula text auto_send=1 + continut valid -> queued (trimite automat).""" tr = [{"pattern": "verificare", "cod_prestatie": "OE-2", "auto_send": 1, "priority": 0}] cl = classify_prezentare(_content_cu(), {}, {}, VALID, tr) assert cl["status"] == "queued", f"asteptat queued, got {cl['status']}" def test_has_no_auto_send_prinde_flagul_regula(): """has_no_auto_send=True cand un item poarta regula_fara_autosend; codul e tot rezolvat.""" tr = [{"pattern": "verificare", "cod_prestatie": "OE-2", "auto_send": 0, "priority": 0}] resolved, unmapped = resolve_prestatii( [{"cod_op_service": "X99", "denumire": "Verificare faruri"}], {}, VALID, tr ) assert unmapped == [] assert resolved[0]["cod_prestatie"] == "OE-2" assert resolved[0].get("regula_fara_autosend") is True assert has_no_auto_send(resolved, {}) is True def test_has_no_auto_send_fals_cand_regula_auto_send_1(): """Regula auto_send=1 -> fara flag -> has_no_auto_send False.""" tr = [{"pattern": "verificare", "cod_prestatie": "OE-2", "auto_send": 1, "priority": 0}] resolved, _ = resolve_prestatii( [{"cod_op_service": "X99", "denumire": "Verificare faruri"}], {}, VALID, tr ) assert resolved[0].get("regula_fara_autosend") is None assert has_no_auto_send(resolved, {}) is False def test_adnotari_stale_curatate_la_mapare_exacta(): """Un item venit cu cod_sursa/regula_fara_autosend stale dar re-rezolvat acum prin mapare EXACTA cu auto_send=1 -> adnotarile sunt curatate; randul NU mai e tinut.""" item_stale = { "cod_op_service": "X99", "denumire": "Verificare faruri", "cod_sursa": "text_rule:verificare", "regula_fara_autosend": True, } # Acum X99 are mapare exacta cu auto_send=1. mapping = {"X99": "OE-2"} mapping_meta = {"X99": {"cod_prestatie": "OE-2", "auto_send": True}} resolved, _ = resolve_prestatii([item_stale], mapping, VALID, text_rules=None) assert resolved[0]["cod_prestatie"] == "OE-2" assert "cod_sursa" not in resolved[0], "cod_sursa stale nu a fost curatat" assert "regula_fara_autosend" not in resolved[0], "flag stale nu a fost curatat" assert has_no_auto_send(resolved, mapping_meta) is False