Files
rar-autopass/tests/test_errors.py
Claude Agent 14e1c463f0 feat(errors): erori pe 3 niveluri (problema+cauza+fix) pe API si UI (PRD 5.4)
Catalog central pur app/errors.py ca sursa unica cod->{problema,fix},
consumat de API+UI+worker. Aditiv (field/message pastrate la octet) +
rar_error stocat superset. Scope: fluxul de declarare; login/signup/CSRF
neatinse. labels.parse_erori degradeaza gratios; UI progresiv AA light+dark.
631 teste.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 10:28:09 +00:00

78 lines
3.0 KiB
Python

"""Teste pentru app/errors.py — catalog central de erori (US-001 / PRD 5.4).
Urmeaza TDD: testele sunt scrise INAINTE de implementare.
"""
from __future__ import annotations
import pytest
from app.errors import CATALOG, eroare
# ---------------------------------------------------------------------------
# test_catalog_complet
# ---------------------------------------------------------------------------
def test_catalog_complet():
"""Fiecare intrare din CATALOG are 'problema' si 'fix' ne-goale."""
assert len(CATALOG) >= 24, "CATALOG trebuie sa contina cel putin 24 de coduri"
for cod, entry in CATALOG.items():
assert "problema" in entry, f"Lipseste 'problema' pentru codul {cod!r}"
assert "fix" in entry, f"Lipseste 'fix' pentru codul {cod!r}"
assert isinstance(entry["problema"], str) and entry["problema"].strip(), (
f"'problema' goala pentru codul {cod!r}"
)
assert isinstance(entry["fix"], str) and entry["fix"].strip(), (
f"'fix' gol pentru codul {cod!r}"
)
# ---------------------------------------------------------------------------
# test_eroare_construieste_3niveluri
# ---------------------------------------------------------------------------
def test_eroare_construieste_3niveluri():
"""eroare() intoarce dict cu exact cheile asteptate si valorile corecte."""
rezultat = eroare("VIN_FORMAT", field="vin", cauza="VIN-ul are 15 caractere")
chei_asteptate = {"field", "cod", "problema", "cauza", "fix", "message"}
assert set(rezultat.keys()) == chei_asteptate, (
f"Cheile obtinute: {set(rezultat.keys())} — asteptate: {chei_asteptate}"
)
assert rezultat["cod"] == "VIN_FORMAT"
assert rezultat["field"] == "vin"
assert rezultat["cauza"] == "VIN-ul are 15 caractere"
assert rezultat["problema"] == CATALOG["VIN_FORMAT"]["problema"]
assert rezultat["fix"] == CATALOG["VIN_FORMAT"]["fix"]
# message == cauza cand cauza este dat
assert rezultat["message"] == "VIN-ul are 15 caractere"
# ---------------------------------------------------------------------------
# test_message_back_compat
# ---------------------------------------------------------------------------
def test_message_back_compat():
"""message == cauza cand cauza e dat; message == problema cand cauza lipseste."""
# Cu cauza
cu_cauza = eroare("DATA_FORMAT", cauza="data_primita=31/06/2026")
assert cu_cauza["message"] == "data_primita=31/06/2026"
# Fara cauza
fara_cauza = eroare("DATA_FORMAT")
assert fara_cauza["message"] == CATALOG["DATA_FORMAT"]["problema"]
# cauza din dict e None sau egala cu problema
assert fara_cauza["cauza"] == CATALOG["DATA_FORMAT"]["problema"]
# ---------------------------------------------------------------------------
# test_cod_necunoscut_ridica
# ---------------------------------------------------------------------------
def test_cod_necunoscut_ridica():
"""eroare() pe cod absent din CATALOG ridica KeyError."""
with pytest.raises(KeyError):
eroare("INEXISTENT")