email in admin
Build LinkLog Development Image / development-image (push) Successful in 9s

This commit is contained in:
2026-08-26 12:38:38 +02:00
parent 158bc64268
commit fec4c8def5
7 changed files with 337 additions and 16 deletions
+60
View File
@@ -12,6 +12,7 @@ from fastapi.testclient import TestClient
from backend.app.main import app
from backend.app.database import get_connection
from backend.app.services.email_service import get_smtp_settings
from backend.app.services.password_reset import create_reset_token
from backend.app.services.token_service import issue_token
@@ -57,6 +58,64 @@ def test_configuration_requires_authentication_and_admin_role():
assert client.get('/api/admin/users').status_code == 401
assert client.get('/api/admin/plugins', headers=login_headers('bob')).status_code == 403
assert client.get('/api/admin/users', headers=login_headers('bob')).status_code == 403
assert client.get('/api/admin/smtp').status_code == 401
assert client.get('/api/admin/smtp', headers=login_headers('bob')).status_code == 403
def test_admin_can_save_and_validate_smtp_settings():
headers = login_headers()
original = get_smtp_settings()
response = client.put('/api/admin/smtp', headers=headers, json={
'smtp_host': 'smtp.example.com',
'smtp_port': 587,
'smtp_username': 'mailer',
'smtp_password': 'secret',
'smtp_from': 'LinkLog <no-reply@example.com>',
'smtp_use_tls': True,
})
assert response.status_code == 200
assert response.json()['smtp_host'] == 'smtp.example.com'
assert response.json()['password_configured'] is True
assert 'smtp_password' not in response.json()
with patch('backend.app.api.admin.send_test_email') as send_test_email:
validation = client.post('/api/admin/smtp/test', headers=headers, json={
'smtp_host': 'smtp.unsaved.example.com',
'smtp_port': 2525,
'smtp_username': 'temporary-user',
'smtp_password': 'temporary-secret',
'smtp_from': 'Temporary <temporary@example.com>',
'smtp_use_tls': False,
})
assert validation.status_code == 200
send_test_email.assert_called_once_with('alice@example.com', {
'smtp_host': 'smtp.unsaved.example.com',
'smtp_port': 2525,
'smtp_username': 'temporary-user',
'smtp_password': 'temporary-secret',
'smtp_from': 'Temporary <temporary@example.com>',
'smtp_use_tls': False,
})
client.put('/api/admin/smtp', headers=headers, json=original)
def test_admin_reports_smtp_validation_errors():
headers = login_headers()
with get_connection() as conn:
conn.execute('DELETE FROM app_settings WHERE name = ?', ('admin_smtp_mail_rate',))
conn.commit()
with patch('backend.app.api.admin.send_test_email', side_effect=RuntimeError('connection refused')):
failed_validation = client.post('/api/admin/smtp/test', headers=headers, json={
'smtp_host': 'smtp.unsaved.example.com',
'smtp_port': 2525,
'smtp_username': 'temporary-user',
'smtp_password': 'temporary-secret',
'smtp_from': 'Temporary <temporary@example.com>',
'smtp_use_tls': False,
})
assert failed_validation.status_code == 503
assert 'connection refused' in failed_validation.json()['detail']
def test_admin_can_add_list_and_remove_users():
@@ -66,6 +125,7 @@ def test_admin_can_add_list_and_remove_users():
'email': 'charlie@example.com',
'password': 'charlie-secret',
})
assert create_response.status_code == 201
user = create_response.json()
assert user['username'] == 'charlie'