v1
This commit is contained in:
115
tests/test_admin_newsletter_api.py
Normal file
115
tests/test_admin_newsletter_api.py
Normal 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"]
|
||||
Reference in New Issue
Block a user