80 lines
2.3 KiB
Python
80 lines
2.3 KiB
Python
"""SMTP integration tests relying on real infrastructure."""
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
import smtplib
|
|
from email.message import EmailMessage
|
|
|
|
import pytest
|
|
|
|
from server.services import contact as contact_service
|
|
|
|
RUN_INTEGRATION = os.getenv("RUN_SMTP_INTEGRATION_TEST")
|
|
|
|
pytestmark = [
|
|
pytest.mark.integration,
|
|
pytest.mark.skipif(
|
|
not RUN_INTEGRATION,
|
|
reason="Set RUN_SMTP_INTEGRATION_TEST=1 to enable SMTP integration tests.",
|
|
),
|
|
]
|
|
|
|
|
|
def _require_smtp_settings():
|
|
settings = contact_service.settings.SMTP_SETTINGS
|
|
if not settings["host"] or not settings["recipients"] or not settings["username"]:
|
|
pytest.skip("SMTP settings not fully configured via environment")
|
|
return settings
|
|
|
|
|
|
def _build_submission() -> contact_service.ContactSubmission:
|
|
settings = contact_service.settings.SMTP_SETTINGS
|
|
return contact_service.ContactSubmission(
|
|
name="Integration Test",
|
|
email=settings["sender"] or settings["username"] or "integration@example.com",
|
|
company="Integration",
|
|
message="Integration test notification",
|
|
timeline=None,
|
|
)
|
|
|
|
|
|
'''
|
|
Test sending a notification via SMTP using real settings.
|
|
This requires a properly configured SMTP server and valid credentials.
|
|
|
|
Commenting out to avoid accidental execution during local runs.
|
|
@pytest.mark.skip(reason="Requires real SMTP server configuration")
|
|
'''
|
|
|
|
'''
|
|
def test_send_notification_real_smtp():
|
|
settings = _require_smtp_settings()
|
|
|
|
submission = _build_submission()
|
|
|
|
assert contact_service.send_notification(submission) is True
|
|
|
|
|
|
def test_direct_smtp_connection():
|
|
settings = _require_smtp_settings()
|
|
|
|
use_ssl = settings["port"] == 465
|
|
client_cls = smtplib.SMTP_SSL if use_ssl else smtplib.SMTP
|
|
|
|
with client_cls(settings["host"], settings["port"], timeout=10) as client:
|
|
client.ehlo()
|
|
if settings["use_tls"] and not use_ssl:
|
|
client.starttls()
|
|
client.ehlo()
|
|
client.login(settings["username"], settings["password"] or "")
|
|
|
|
message = EmailMessage()
|
|
message["Subject"] = "SMTP integration check"
|
|
message["From"] = settings["sender"] or settings["username"]
|
|
message["To"] = settings["recipients"][0]
|
|
message.set_content(
|
|
"This is a test email for SMTP integration checks.")
|
|
|
|
client.send_message(message)
|
|
'''
|