87 lines
2.6 KiB
Python
87 lines
2.6 KiB
Python
"""Unit tests for SMTP settings helpers in app.api.v1.settings."""
|
|
|
|
from app.api.v1.settings import (
|
|
SMTPSettingsUpdate,
|
|
_build_smtp_payload,
|
|
_serialize_smtp_payload,
|
|
)
|
|
|
|
|
|
def test_serialize_masks_password_and_reports_configured():
|
|
serialized = _serialize_smtp_payload(
|
|
{
|
|
"host": "smtp.example.com",
|
|
"port": 587,
|
|
"username": "noreply@example.com",
|
|
"password": "super-secret",
|
|
"from_address": "noreply@example.com",
|
|
"from_name": "Planet",
|
|
"use_tls": False,
|
|
"use_starttls": True,
|
|
"timeout_seconds": 20,
|
|
}
|
|
)
|
|
assert serialized["configured"] is True
|
|
assert serialized["password"]["configured"] is True
|
|
assert "secret" not in serialized["password"]["preview"]
|
|
|
|
|
|
def test_serialize_marks_unconfigured_when_host_missing():
|
|
serialized = _serialize_smtp_payload(
|
|
{
|
|
"host": "",
|
|
"port": 587,
|
|
"from_address": "",
|
|
}
|
|
)
|
|
assert serialized["configured"] is False
|
|
assert serialized["password"]["configured"] is False
|
|
|
|
|
|
def test_build_payload_preserves_password_when_placeholder_submitted():
|
|
current = {
|
|
"host": "smtp.example.com",
|
|
"port": 587,
|
|
"username": "noreply@example.com",
|
|
"password": "super-secret",
|
|
"from_address": "noreply@example.com",
|
|
"from_name": "Planet",
|
|
"use_tls": False,
|
|
"use_starttls": True,
|
|
"timeout_seconds": 20,
|
|
}
|
|
preview = _serialize_smtp_payload(current)["password"]["preview"]
|
|
update = SMTPSettingsUpdate(
|
|
host="smtp.example.com",
|
|
port=587,
|
|
username="noreply@example.com",
|
|
password=preview,
|
|
from_address="noreply@example.com",
|
|
)
|
|
merged = _build_smtp_payload(current, update)
|
|
assert merged["password"] == "super-secret"
|
|
|
|
|
|
def test_build_payload_replaces_password_when_new_value_submitted():
|
|
current = {"password": "old", "host": "", "port": 587, "from_address": ""}
|
|
update = SMTPSettingsUpdate(
|
|
host="smtp.example.com",
|
|
port=587,
|
|
password="new-secret",
|
|
from_address="noreply@example.com",
|
|
)
|
|
merged = _build_smtp_payload(current, update)
|
|
assert merged["password"] == "new-secret"
|
|
|
|
|
|
def test_build_payload_clears_password_when_requested():
|
|
current = {"password": "old"}
|
|
update = SMTPSettingsUpdate(
|
|
host="smtp.example.com",
|
|
port=587,
|
|
from_address="noreply@example.com",
|
|
clear_password=True,
|
|
)
|
|
merged = _build_smtp_payload(current, update)
|
|
assert merged["password"] == ""
|