test(email): контактный адрес, Reply-To и тестовая отправка письма
Покрытие валидации/сохранения contact_email, простановки Reply-To в письмах регистрации/приглашений/саммари при включённом и выключенном контактном адресе, и эндпоинта тестовой отправки (успех, дефолтный получатель, сбой транспорта без утечки логина/пароля).
This commit is contained in:
@@ -7,6 +7,8 @@
|
||||
"""
|
||||
|
||||
import logging
|
||||
from email.message import EmailMessage
|
||||
from typing import cast
|
||||
|
||||
import aiosmtplib
|
||||
import pytest
|
||||
@@ -90,6 +92,33 @@ def test_build_message_includes_html_alternative_and_ics_attachment() -> None:
|
||||
assert attachments[0].get_payload(decode=True) == b"BEGIN:VCALENDAR\r\nEND:VCALENDAR\r\n"
|
||||
|
||||
|
||||
def test_build_message_sets_reply_to_when_given() -> None:
|
||||
message = _build_message(
|
||||
sender="VidConf <no-reply@vidconf.example>",
|
||||
to="user@example.com",
|
||||
subject="Тема",
|
||||
body="Тело",
|
||||
html_body=None,
|
||||
attachments=(),
|
||||
reply_to="contact@vidconf.example",
|
||||
)
|
||||
|
||||
assert message["Reply-To"] == "contact@vidconf.example"
|
||||
|
||||
|
||||
def test_build_message_omits_reply_to_when_not_given() -> None:
|
||||
message = _build_message(
|
||||
sender="VidConf <no-reply@vidconf.example>",
|
||||
to="user@example.com",
|
||||
subject="Тема",
|
||||
body="Тело",
|
||||
html_body=None,
|
||||
attachments=(),
|
||||
)
|
||||
|
||||
assert message["Reply-To"] is None
|
||||
|
||||
|
||||
def _backend() -> SmtpEmailBackend:
|
||||
return SmtpEmailBackend(
|
||||
hostname="smtp.example.com",
|
||||
@@ -168,3 +197,23 @@ async def test_smtp_backend_send_success_calls_aiosmtplib(monkeypatch: pytest.Mo
|
||||
"use_tls": False,
|
||||
"timeout": 30,
|
||||
}
|
||||
|
||||
|
||||
async def test_smtp_backend_send_passes_reply_to_into_message(
|
||||
monkeypatch: pytest.MonkeyPatch,
|
||||
) -> None:
|
||||
captured: dict[str, object] = {}
|
||||
|
||||
async def _fake_send(message: object, **kwargs: object) -> tuple[dict[str, object], str]:
|
||||
captured["message"] = message
|
||||
return {}, "OK"
|
||||
|
||||
monkeypatch.setattr(aiosmtplib, "send", _fake_send)
|
||||
backend = _backend()
|
||||
|
||||
await backend.send(
|
||||
to="user@example.com", subject="Тема", body="Тело", reply_to="contact@vidconf.example"
|
||||
)
|
||||
|
||||
message = cast(EmailMessage, captured["message"])
|
||||
assert message["Reply-To"] == "contact@vidconf.example"
|
||||
|
||||
Reference in New Issue
Block a user