test(email): контактный адрес, Reply-To и тестовая отправка письма
Покрытие валидации/сохранения contact_email, простановки Reply-To в письмах регистрации/приглашений/саммари при включённом и выключенном контактном адресе, и эндпоинта тестовой отправки (успех, дефолтный получатель, сбой транспорта без утечки логина/пароля).
This commit is contained in:
@@ -48,6 +48,7 @@ class _CapturingEmailBackend:
|
||||
|
||||
def __init__(self) -> None:
|
||||
self.sent: list[tuple[str, str, str]] = []
|
||||
self.reply_to: list[str | None] = []
|
||||
|
||||
async def send(
|
||||
self,
|
||||
@@ -57,8 +58,10 @@ class _CapturingEmailBackend:
|
||||
body: str,
|
||||
html_body: str | None = None,
|
||||
attachments: Sequence[EmailAttachment] = (),
|
||||
reply_to: str | None = None,
|
||||
) -> None:
|
||||
self.sent.append((to, subject, body))
|
||||
self.reply_to.append(reply_to)
|
||||
|
||||
|
||||
def _extract_verification_token(email_body: str) -> str:
|
||||
@@ -432,3 +435,34 @@ async def test_register_any_domain_allowed_when_verification_disabled(
|
||||
},
|
||||
)
|
||||
assert response.status_code == 201, response.text
|
||||
|
||||
|
||||
async def test_register_sets_reply_to_when_contact_email_enabled(
|
||||
client: httpx.AsyncClient, db_session: AsyncSession, email_backend: _CapturingEmailBackend
|
||||
) -> None:
|
||||
"""Контактный адрес инстанса включён — письмо подтверждения регистрации несёт `Reply-To`."""
|
||||
await InstanceSettingsService(db_session).update(
|
||||
SettingsUpdateIn(contact_email_enabled=True, contact_email="contact@vidconf.example")
|
||||
)
|
||||
await db_session.commit()
|
||||
|
||||
response = await client.post(
|
||||
"/api/v1/auth/register",
|
||||
json={"email": "dave@example.com", "name_user": "Dave", "password": "supersecret1"},
|
||||
)
|
||||
|
||||
assert response.status_code == 201, response.text
|
||||
assert email_backend.reply_to[-1] == "contact@vidconf.example"
|
||||
|
||||
|
||||
async def test_register_no_reply_to_when_contact_email_disabled(
|
||||
client: httpx.AsyncClient, email_backend: _CapturingEmailBackend
|
||||
) -> None:
|
||||
"""Контактный адрес выключен (дефолт) — `Reply-To` не проставляется."""
|
||||
response = await client.post(
|
||||
"/api/v1/auth/register",
|
||||
json={"email": "erin@example.com", "name_user": "Erin", "password": "supersecret1"},
|
||||
)
|
||||
|
||||
assert response.status_code == 201, response.text
|
||||
assert email_backend.reply_to[-1] is None
|
||||
|
||||
Reference in New Issue
Block a user