"""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"]