fix: mail delivery never fails requests after commit

This commit is contained in:
Jonas Miederer 2026-09-12 07:44:36 +02:00
parent 62d01b5097
commit 6e12720ad6
3 changed files with 62 additions and 12 deletions

View file

@ -226,3 +226,45 @@ def test_resolve_tenant():
user = User(email="a@b.c", tenant_id="parish-7")
assert resolve_tenant(user, None) == "parish-7"
assert resolve_tenant(user, "other") == "parish-7"
def _broken_smtp(monkeypatch):
import smtplib
from app.auth import mail
class ExplodingSMTP:
def __init__(self, *args, **kwargs):
raise smtplib.SMTPException("relay down")
monkeypatch.setattr(mail.smtplib, "SMTP", ExplodingSMTP)
def test_magic_link_delivery_failure_returns_false(monkeypatch):
from app.auth import mail
monkeypatch.setattr(settings, "smtp_host", "dummy")
_broken_smtp(monkeypatch)
assert mail.send_magic_link("a@example.com", "http://x/login?token=t") is False
assert (
mail.send_access_notification("req-1", "A", "a@example.com") is False
)
async def test_approve_survives_delivery_failure(client, session, monkeypatch):
monkeypatch.setattr(settings, "smtp_host", "dummy")
_broken_smtp(monkeypatch)
await client.post("/api/auth/admin-bootstrap", json={"email": ADMIN})
await _login(client, session, ADMIN, role="admin")
created = await client.post(
"/api/access/requests",
json={"name": "M", "email": "m@example.com", "reason": ""},
)
assert created.status_code == 201, created.text
approved = await client.post(
f"/api/access/requests/{created.json()['id']}/approve"
)
assert approved.status_code == 200, approved.text
body = approved.json()
assert body["request"]["status"] == "approved"
assert body["email_sent"] is False