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

74 lines
2.7 KiB
Python

# -*- coding: utf-8 -*-
"""Tests de `monitor_estado.archivo` — ficheros del dia, reescritura y poda (RF-5,7,9,10,18)."""
from datetime import date, timedelta
import monitor_estado.archivo as archivo
def _render(m):
return f"- **{m['id']}**: {m['t']}"
def test_archivo_reescribe_sin_duplicados(tmp_path, monkeypatch):
"""El fichero del dia contiene todo lo de hoy y nada duplicado (RF-9)."""
monkeypatch.setattr(archivo, "MONITOR_DIR", tmp_path)
hoy = date(2026, 10, 3)
p = archivo.escribe_dia(
"telegram/test", hoy,
[{"id": 1, "t": "a"}, {"id": 2, "t": "b"}, {"id": 2, "t": "b"}],
id_fn=lambda m: m["id"], render_fn=_render,
)
contenido = p.read_text(encoding="utf-8")
assert contenido.count("- **1**") == 1
assert contenido.count("- **2**") == 1
# Nuevo ciclo con lo del dia completo: el fichero se reescribe con el estado actual.
archivo.escribe_dia(
"telegram/test", hoy,
[{"id": 1, "t": "a"}, {"id": 2, "t": "b"}, {"id": 3, "t": "c"}],
id_fn=lambda m: m["id"], render_fn=_render,
)
contenido = p.read_text(encoding="utf-8")
assert "- **3**" in contenido
assert contenido.count("- **1**") == 1
def test_archivo_poda_30_dias_y_conserva_recientes(tmp_path, monkeypatch):
"""Se borran los ficheros de mas de 30 dias y se conservan los recientes (RF-10)."""
monkeypatch.setattr(archivo, "MONITOR_DIR", tmp_path)
hoy = date(2026, 10, 3)
reciente = tmp_path / "telegram" / "test"
reciente.mkdir(parents=True)
f_hoy = reciente / f"{hoy.isoformat()}.md"
f_10 = reciente / f"{(hoy - timedelta(days=10)).isoformat()}.md"
f_40 = reciente / f"{(hoy - timedelta(days=40)).isoformat()}.md"
for f in (f_hoy, f_10, f_40):
f.write_text("x", encoding="utf-8")
borrados = archivo.poda(retencion_dias=30, hoy=hoy)
assert f_hoy.exists() and f_10.exists()
assert not f_40.exists()
assert f_40 in borrados
def test_escribe_resumen(tmp_path, monkeypatch):
"""El resumen se guarda en md y json consultables (RF-18)."""
monkeypatch.setattr(archivo, "MONITOR_DIR", tmp_path)
resumen = {"resumen_md": "Todo ok", "requiere_atencion": [], "errores": []}
archivo.escribe_resumen(resumen)
assert (tmp_path / "resumen_actual.md").read_text(encoding="utf-8") == "Todo ok"
assert '"resumen_md": "Todo ok"' in (tmp_path / "resumen_actual.json").read_text(encoding="utf-8")
def test_escribe_dia_de_fuente_sin_novedad(tmp_path, monkeypatch):
"""Una fuente sin elementos genera un fichero vacio (no falla) (RF-5)."""
monkeypatch.setattr(archivo, "MONITOR_DIR", tmp_path)
p = archivo.escribe_dia(
"correo", date(2026, 10, 3), [], id_fn=lambda m: m, render_fn=lambda m: str(m)
)
assert p.exists()