gateway/tests/demo/test_demo_api.py
2026-04-26 08:31:35 +02:00

66 lines
2.4 KiB
Python

"""
T-API: Demo Config API endpoint verification.
Tests the admin API endpoints for listing, loading, and removing demo configs.
Uses FastAPI TestClient (no running server needed).
Note: Login requires CSRF + form-data + httpOnly cookies, so we test
unauthenticated rejection and the discovery module directly.
"""
import pytest
class TestDemoConfigDiscovery:
"""Test the auto-discovery module (no HTTP needed)."""
def test_discoveryFindsInvestorConfig(self):
from modules.demoConfigs import getAvailableDemoConfigs
configs = getAvailableDemoConfigs()
assert "investor-demo-2026" in configs, f"Available configs: {list(configs.keys())}"
def test_getByCodeReturnsInstance(self):
from modules.demoConfigs import getDemoConfigByCode
cfg = getDemoConfigByCode("investor-demo-2026")
assert cfg is not None
assert cfg.code == "investor-demo-2026"
assert cfg.label == "Investor Demo April 2026"
def test_getByCodeReturnsNoneForUnknown(self):
from modules.demoConfigs import getDemoConfigByCode
cfg = getDemoConfigByCode("nonexistent-config")
assert cfg is None
def test_toDictHasRequiredFields(self):
from modules.demoConfigs import getDemoConfigByCode
cfg = getDemoConfigByCode("investor-demo-2026")
d = cfg.toDict()
assert "code" in d
assert "label" in d
assert "description" in d
assert d["code"] == "investor-demo-2026"
class TestDemoConfigApiEndpoints:
"""Test API endpoints via TestClient."""
@pytest.fixture(scope="class")
def client(self):
try:
from app import app
from fastapi.testclient import TestClient
return TestClient(app)
except Exception as e:
pytest.skip(f"Cannot create TestClient: {e}")
def test_listEndpointRejectsUnauthenticated(self, client):
response = client.get("/api/admin/demo-config")
assert response.status_code in (401, 403)
def test_loadEndpointRejectsUnauthenticated(self, client):
response = client.post("/api/admin/demo-config/investor-demo-2026/load")
assert response.status_code in (401, 403)
def test_removeEndpointRejectsUnauthenticated(self, client):
response = client.post("/api/admin/demo-config/investor-demo-2026/remove")
assert response.status_code in (401, 403)