46 lines
1.7 KiB
Python
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"] == []
|