# -*- coding: utf-8 -*- """Tests de `monitor_estado.fuentes.correo` — ventana 24h y solo lectura (RF-2, RF-25).""" import monitor_estado.fuentes.correo as correo class _Req: def __init__(self, resp): self._resp = resp def execute(self): return self._resp class _Messages: def __init__(self): self.queries = [] self.gets = [] self.modificados = [] def list(self, userId, q, maxResults): self.queries.append(q) return _Req({"messages": [{"id": "m1"}, {"id": "m2"}]}) def get(self, userId, id, format, metadataHeaders): self.gets.append(id) return _Req({ "snippet": f"resumen de {id}", "payload": {"headers": [ {"name": "Subject", "value": f"Asunto {id}"}, {"name": "From", "value": "Remitente "}, {"name": "Date", "value": "Sat, 3 Oct 2026 09:00:00 +0200"}, ]}, }) def modify(self, **kwargs): # no debe llamarse nunca (RF-25) self.modificados.append(kwargs) return _Req({}) class _Users: def __init__(self): self._m = _Messages() def messages(self): return self._m class FakeGmail: def __init__(self): self._u = _Users() def users(self): return self._u def test_correo_ventana_24h(): gmail = FakeGmail() correos = correo.recoger_recientes(gmail, horas=24) assert len(correos) == 2 assert correos[0]["id"] == "m1" assert correos[0]["asunto"] == "Asunto m1" assert "newer_than:1d" in gmail.users().messages().queries[0] def test_correo_no_modifica_estado(): gmail = FakeGmail() correo.recoger_recientes(gmail, horas=24) assert gmail.users().messages().modificados == [] # no marca leido (RF-25) def test_render_correo(): txt = correo.render_correo({"fecha": "Sat, 3 Oct 2026 09:00:00 +0200", "de": "a@b.com", "asunto": "Hola", "snippet": "cuerpo"}) assert "a@b.com" in txt and "Hola" in txt