v1
Some checks failed
CI / test (3.11) (push) Failing after 5m36s
CI / build-image (push) Has been skipped

This commit is contained in:
2025-10-22 16:48:55 +02:00
commit 4cefd4e3ab
53 changed files with 5837 additions and 0 deletions

View File

@@ -0,0 +1,115 @@
"""Tests for admin newsletter API endpoints."""
import pytest
from server.app import app
@pytest.fixture
def client():
with app.test_client() as client:
yield client
@pytest.fixture(autouse=True)
def setup_admin_creds(monkeypatch):
monkeypatch.setattr("server.settings.ADMIN_USERNAME", "admin")
monkeypatch.setattr("server.settings.ADMIN_PASSWORD", "admin")
def test_create_newsletter_requires_login(client):
"""Test creating newsletter requires login."""
resp = client.post("/admin/api/newsletters", json={
"subject": "Test Subject",
"content": "Test content"
})
assert resp.status_code == 302
assert resp.headers["Location"] == "/auth/login"
def test_create_newsletter_with_login(client):
"""Test creating newsletter when logged in."""
# Login first
client.post("/auth/login", data={"username": "admin", "password": "admin"})
# Create newsletter
resp = client.post("/admin/api/newsletters", json={
"subject": "Test Subject",
"content": "Test content",
"sender_name": "Test Sender"
})
assert resp.status_code == 201
data = resp.get_json()
assert data["status"] == "ok"
assert "newsletter_id" in data
def test_create_newsletter_missing_fields(client):
"""Test creating newsletter with missing required fields."""
# Login first
client.post("/auth/login", data={"username": "admin", "password": "admin"})
# Try without subject
resp = client.post("/admin/api/newsletters", json={
"content": "Test content"
})
assert resp.status_code == 400
data = resp.get_json()
assert data["status"] == "error"
assert "required" in data["message"]
# Try without content
resp = client.post("/admin/api/newsletters", json={
"subject": "Test Subject"
})
assert resp.status_code == 400
data = resp.get_json()
assert data["status"] == "error"
assert "required" in data["message"]
def test_get_newsletters_requires_login(client):
"""Test getting newsletters requires login."""
resp = client.get("/admin/api/newsletters")
assert resp.status_code == 302
assert resp.headers["Location"] == "/auth/login"
def test_get_newsletters_with_login(client):
"""Test getting newsletters when logged in."""
# Login first
client.post("/auth/login", data={"username": "admin", "password": "admin"})
# Create a newsletter first
client.post("/admin/api/newsletters", json={
"subject": "Test Subject",
"content": "Test content"
})
# Get newsletters
resp = client.get("/admin/api/newsletters")
assert resp.status_code == 200
data = resp.get_json()
assert data["status"] == "ok"
assert "newsletters" in data
assert "pagination" in data
assert len(data["newsletters"]) >= 1
def test_send_newsletter_requires_login(client):
"""Test sending newsletter requires login."""
resp = client.post("/admin/api/newsletters/1/send")
assert resp.status_code == 302
assert resp.headers["Location"] == "/auth/login"
def test_send_newsletter_not_found(client):
"""Test sending non-existent newsletter."""
# Login first
client.post("/auth/login", data={"username": "admin", "password": "admin"})
# Try to send non-existent newsletter
resp = client.post("/admin/api/newsletters/999/send")
assert resp.status_code == 404
data = resp.get_json()
assert data["status"] == "error"
assert "not found" in data["message"]