Files
descarga_factura_transporte/tests/test_outlook.py
T

97 lines
4.5 KiB
Python
Raw Normal View History

import outlook_utilities as o
# ============================================================================
# es_mensaje_automatico
# ============================================================================
def _h(**kv):
return [{"name": k.replace("_", "-"), "value": v} for k, v in kv.items()]
def test_mensajes_normales_no_son_automaticos():
assert o.es_mensaje_automatico(None) is False
assert o.es_mensaje_automatico([]) is False
assert o.es_mensaje_automatico(_h(Auto_Submitted="no", Content_Type="text/html", Precedence="normal")) is False
def test_mensajes_automaticos():
assert o.es_mensaje_automatico(_h(Auto_Submitted="auto-replied")) is True
assert o.es_mensaje_automatico(_h(Auto_Submitted="auto-generated")) is True
assert o.es_mensaje_automatico(_h(X_Auto_Response_Suppress="All")) is True
assert o.es_mensaje_automatico(_h(X_Autoreply="yes")) is True
assert o.es_mensaje_automatico(_h(Precedence="bulk")) is True
assert o.es_mensaje_automatico(_h(Precedence="auto_reply")) is True
assert o.es_mensaje_automatico(_h(Content_Type="multipart/report; report-type=delivery-status")) is True
def test_los_nombres_de_encabezado_no_distinguen_mayusculas():
assert o.es_mensaje_automatico([{"name": "AUTO-SUBMITTED", "value": "Auto-Replied"}]) is True
# ============================================================================
# send_email (payload hacia Graph)
# ============================================================================
class _Respuesta:
def __init__(self, status=202, text=""):
self.status_code, self.text = status, text
def test_send_email_incluye_destinatarios_copia_y_copia_oculta(monkeypatch):
enviado = {}
monkeypatch.setattr(o.requests, "post", lambda url, **k: enviado.update(url=url, **k) or _Respuesta())
ok = o.send_email("tok", "buzon@x.com", ["a@x.com"], "Asunto", "<p>hola</p>", None,
cc_recipients=["c@x.com"], bcc_recipients=["oculto@x.com"])
mensaje = enviado["json"]["message"]
assert ok is True and enviado["url"].endswith("/users/buzon@x.com/sendMail")
assert mensaje["toRecipients"] == [{"emailAddress": {"address": "a@x.com"}}]
assert mensaje["ccRecipients"] == [{"emailAddress": {"address": "c@x.com"}}]
assert mensaje["bccRecipients"] == [{"emailAddress": {"address": "oculto@x.com"}}]
assert mensaje["attachments"] == [] and mensaje["body"]["contentType"] == "HTML"
def test_send_email_sin_copia_oculta_envia_la_lista_vacia(monkeypatch):
enviado = {}
monkeypatch.setattr(o.requests, "post", lambda url, **k: enviado.update(**k) or _Respuesta())
o.send_email("tok", "b@x.com", ["a@x.com"], "A", "<p/>")
assert enviado["json"]["message"]["bccRecipients"] == []
def test_send_email_devuelve_false_si_graph_rechaza_o_falla(monkeypatch):
monkeypatch.setattr(o.requests, "post", lambda *a, **k: _Respuesta(400, "mal"))
assert o.send_email("tok", "b@x.com", ["a@x.com"], "A", "<p/>") is False
def explota(*a, **k):
raise ConnectionError("sin red")
monkeypatch.setattr(o.requests, "post", explota)
assert o.send_email("tok", "b@x.com", ["a@x.com"], "A", "<p/>") is False
# ============================================================================
# get_emails
# ============================================================================
def test_get_emails_pide_los_encabezados_y_marca_los_automaticos(monkeypatch):
pedido = {}
class Resp:
status_code = 200
def json(self):
return {"value": [
{"id": "1", "receivedDateTime": "2026-10-14T15:35:00Z", "hasAttachments": True, "subject": "Factura",
"from": {"emailAddress": {"address": "a@x.com"}}, "internetMessageHeaders": []},
{"id": "2", "receivedDateTime": "2026-10-14T16:00:00Z", "hasAttachments": False, "subject": "Auto",
"from": {"emailAddress": {"address": "b@x.com"}},
"internetMessageHeaders": [{"name": "Auto-Submitted", "value": "auto-replied"}]},
{"id": "3", "receivedDateTime": "2026-10-14T16:00:00Z", "subject": "Sin encabezados", "from": {}},
]}
monkeypatch.setattr(o.requests, "get", lambda url, **k: pedido.update(k) or Resp())
correos = o.get_emails("buzon@x.com", "tok", "2026-10-14", "2026-10-14")
assert "internetMessageHeaders" in pedido["params"]["$select"]
assert [c["es_automatico"] for c in correos] == [False, True, False]
assert correos[0]["fecha"] == "2026-10-14 10:35:00" # UTC-5
assert correos[2]["sender"] == "Desconocido"