This commit is contained in:
@@ -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'
|
||||
|
||||
Reference in New Issue
Block a user