El sistema contesta a quien envió el correo con la plantilla que corresponda. Por defecto (NOTIFICACION_MODO=prueba) la respuesta va solo al equipo con el asunto "[PRUEBA → remitente]"; en modo real va al remitente con copia oculta al equipo. El correo técnico (tablas de SAP, JSON) pasa a ir solo al equipo. - respuesta_proveedor.py: contextos de las plantillas, envío y protecciones (remitente desconocido o sin dominio, propio buzón, no-reply, mensajes automáticos, respuestas a notificaciones, límite de 3 por remitente/24 h). - observaciones.py: motivos de rechazo con título, filas y cómo corregir (borrador de textos); también para correos sin comprobante válido. - Un error de SAP/HANA o un fallo inesperado no se le comunica al proveedor y ya no tumba el ciclo; "guía no encontrada" exige que HANA responda. - outlook_utilities: es_mensaje_automatico y copia oculta en send_email. - seguimiento: notificacion_destinatario (con migración) y contar_respuestas_correo. - config_validator anuncia el modo activo; documentación y pruebas. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
37 lines
1.3 KiB
Python
37 lines
1.3 KiB
Python
import os
|
|
|
|
import pytest
|
|
|
|
import database_utilities
|
|
|
|
RAIZ = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
FIXTURES = os.path.join(RAIZ, "tests", "fixtures", "correos_prueba")
|
|
GOLDEN = os.path.join(RAIZ, "tests", "golden")
|
|
|
|
|
|
@pytest.fixture
|
|
def actualizar_golden() -> bool:
|
|
"""True si se ejecutó con ``UPDATE_GOLDEN=1`` (regenera los resultados esperados)."""
|
|
return os.environ.get("UPDATE_GOLDEN") == "1"
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def base_de_datos_temporal(tmp_path_factory, monkeypatch):
|
|
"""
|
|
Toda prueba usa una BD SQLite propia: ``DB_NAME`` es relativo al directorio
|
|
de trabajo, así que sin esto se escribiría en el ``emails.db`` real.
|
|
"""
|
|
monkeypatch.setattr(database_utilities, "DB_NAME", str(tmp_path_factory.mktemp("bd") / "emails_prueba.db"))
|
|
database_utilities.init_db()
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def entorno_de_notificacion_aislado(monkeypatch):
|
|
"""
|
|
Los módulos cargan el ``.env`` real al importarse. Las pruebas no deben depender de él:
|
|
sin esto, un ``NOTIFICACION_MODO=real`` del .env haría que se probara (y enviara) en modo real.
|
|
"""
|
|
for variable in ("NOTIFICACION_MODO", "NOTIFICACION_EQUIPO", "NOTIFICACION_CONTACTO", "LOGO_URL"):
|
|
monkeypatch.delenv(variable, raising=False)
|
|
monkeypatch.setenv("EMAIL", "buzon@aberio.com")
|