Files
INFRAESTRUCTURA/tests/test_resumen.py
2026-10-03 17:13:39 +02:00

46 lines
1.7 KiB
Python

# -*- coding: utf-8 -*-
"""Tests de `monitor_estado.resumen` — resumen IA y clasificacion (RF-11, RF-12, RF-13)."""
import monitor_estado.resumen as resumen
def test_resumen_clasifica_atencion():
def fake_ia(prompt):
return ('{"resumen_md": "Hay una incidencia de SQL.", '
'"requiere_atencion": [{"fuente": "jira", "quien": "DS-3648", '
'"texto": "PC526 sin conexion", "motivo": "ticket sin asignar"}]}')
r = resumen.generar({"jira": [{"key": "DS-3648", "resumen": "PC526 sin conexion"}]}, [], _ia=fake_ia)
assert r["fallo_ia"] is False
assert len(r["requiere_atencion"]) == 1
assert r["requiere_atencion"][0]["quien"] == "DS-3648"
assert "incidencia" in r["resumen_md"].lower()
def test_resumen_fallo_ia_deja_constancia():
def bad_ia(prompt):
raise RuntimeError("OmniRoute caido")
r = resumen.generar({"jira": [{"key": "DS-1", "resumen": "x"}]}, [("correo", "token caducado")], _ia=bad_ia)
assert r["fallo_ia"] is True
assert r["requiere_atencion"] == []
assert r["resumen_md"] # deja constancia del fallo
assert r["errores"] # conserva los errores del ciclo
def test_resumen_parsea_json_con_fences():
def fake_ia(prompt):
return '```json\n{"resumen_md": "ok", "requiere_atencion": []}\n```'
r = resumen.generar({"correo": [{"asunto": "hola"}]}, [], _ia=fake_ia)
assert r["fallo_ia"] is False and r["resumen_md"] == "ok"
def test_resumen_sin_novedades_no_llama_ia():
def no_llamar(prompt):
raise AssertionError("no deberia llamarse a la IA sin novedades")
r = resumen.generar({}, [], _ia=no_llamar)
assert r["fallo_ia"] is False
assert r["requiere_atencion"] == []