75 lines
2.0 KiB
Python
75 lines
2.0 KiB
Python
# -*- 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 <r@b.com>"},
|
|
{"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
|