# -*- 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"] == []