test: add comprehensive tests for imap, stats, setup, security; enforce 80% coverage gate

Agent-Logs-Url: https://github.com/christianlouis/dmarq/sessions/752de981-5cf5-4789-a5b9-1f5ff165d202

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-03-30 00:33:00 +00:00
parent 1cecde6120
commit 3524344a4a
6 changed files with 1175 additions and 1 deletions
+106
View File
@@ -0,0 +1,106 @@
"""
Tests for the /api/v1/setup endpoints.
Covers initial setup status, admin user setup, and system configuration.
"""
import pytest
from fastapi.testclient import TestClient
from app.api.api_v1.endpoints.setup import setup_status
@pytest.fixture(autouse=True)
def reset_setup_status():
"""Reset in-memory setup_status before each test to avoid state leakage."""
original = dict(setup_status)
setup_status["is_setup_complete"] = False
setup_status["admin_email"] = None
setup_status["app_name"] = "DMARQ"
yield
setup_status.update(original)
class TestSetupStatus:
"""Tests for GET /api/v1/setup/status"""
def test_initial_status_not_complete(self, client: TestClient):
response = client.get("/api/v1/setup/status")
assert response.status_code == 200
data = response.json()
assert data["is_setup_complete"] is False
assert data["app_name"] == "DMARQ"
def test_status_after_system_setup(self, client: TestClient):
client.post(
"/api/v1/setup/system",
json={"app_name": "MyApp", "base_url": "https://example.com"},
)
response = client.get("/api/v1/setup/status")
data = response.json()
assert data["is_setup_complete"] is True
assert data["app_name"] == "MyApp"
class TestSetupAdmin:
"""Tests for POST /api/v1/setup/admin"""
def test_admin_setup_succeeds_on_first_call(self, client: TestClient):
response = client.post(
"/api/v1/setup/admin",
json={
"email": "admin@example.com",
"username": "admin",
"password": "s3cr3tpass",
},
)
assert response.status_code == 201
assert "message" in response.json()
def test_admin_setup_fails_if_already_complete(self, client: TestClient):
# Mark setup as complete
setup_status["is_setup_complete"] = True
response = client.post(
"/api/v1/setup/admin",
json={
"email": "admin2@example.com",
"username": "admin2",
"password": "pass",
},
)
assert response.status_code == 400
assert "already completed" in response.json()["detail"]
def test_admin_setup_rejects_invalid_email(self, client: TestClient):
response = client.post(
"/api/v1/setup/admin",
json={
"email": "not-an-email",
"username": "admin",
"password": "pass",
},
)
assert response.status_code == 422
class TestSetupSystem:
"""Tests for POST /api/v1/setup/system"""
def test_system_setup_saves_app_name(self, client: TestClient):
response = client.post(
"/api/v1/setup/system",
json={"app_name": "DMARQ Custom", "base_url": "https://dmarq.example.com"},
)
assert response.status_code == 200
assert "message" in response.json()
assert setup_status["app_name"] == "DMARQ Custom"
assert setup_status["is_setup_complete"] is True
def test_system_setup_marks_complete(self, client: TestClient):
assert setup_status["is_setup_complete"] is False
client.post(
"/api/v1/setup/system",
json={"app_name": "Test", "base_url": "https://test.example.com"},
)
assert setup_status["is_setup_complete"] is True