Spaces:
Sleeping
Sleeping
| """Regresión del traductor determinista ES→EN de la consulta de recuperación.""" | |
| from __future__ import annotations | |
| import pytest | |
| from app.rag.traduccion_consulta import traducir_consulta | |
| def test_traducciones_clave(es, en): | |
| assert traducir_consulta(es, "en") == en | |
| def test_idioma_es_es_identidad(): | |
| consulta = "Anemia ; Daño hepatocelular ; Hiperpotasemia" | |
| assert traducir_consulta(consulta, "es") == consulta | |
| def test_separador_de_consulta_se_conserva(): | |
| # construir_consulta une términos con ' ; ' | |
| salida = traducir_consulta("Anemia ; Azotemia", "en") | |
| assert ";" in salida | |
| assert "anemia" in salida and "azotemia" in salida | |
| def test_siglas_en_mayuscula_se_conservan(): | |
| assert traducir_consulta("BUN", "en") == "BUN" | |
| def test_vacio_no_rompe(): | |
| assert traducir_consulta("", "en") == "" | |
| def test_cobertura_alteraciones(): | |
| """Guarda de mantenimiento (recomendación de la revisión): toda palabra de contenido de | |
| data/alteraciones.json debe estar en el léxico o en la allowlist de cognados. Si se añade | |
| una alteración con un término no-cognado nuevo, este test falla y obliga a traducirlo.""" | |
| import json | |
| import re | |
| from pathlib import Path | |
| from app.rag.traduccion_consulta import _LEXICO, COGNADOS_PERMITIDOS, _sin_acentos | |
| ruta = Path(__file__).resolve().parents[2] / "data" / "alteraciones.json" | |
| alt = json.loads(ruta.read_text(encoding="utf-8")) | |
| palabras: set[str] = set() | |
| for v in alt.values(): | |
| if isinstance(v, dict): | |
| for w in re.findall(r"[A-Za-zÁÉÍÓÚÑáéíóúñ]+", v.get("nombre", "").lower()): | |
| palabras.add(_sin_acentos(w)) | |
| sin_cubrir = {w for w in palabras if len(w) >= 5 and w not in _LEXICO and w not in COGNADOS_PERMITIDOS} | |
| assert not sin_cubrir, f"Términos sin traducir (añádelos al léxico o a COGNADOS_PERMITIDOS): {sorted(sin_cubrir)}" | |