| Server IP : 202.61.199.114 / Your IP : 216.73.217.139 Web Server : nginx/1.22.1 System : Linux de.arni-solutions.de 6.1.0-49-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.174-1 (2026-05-26) x86_64 User : web20 ( 1018) PHP Version : 8.4.23 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /var/www/arni-solutions.de/web/plate-ai-api/tests/ |
Upload File : |
"""Pytest-Setup: SQLite-Test-DB, Demo-Client + API-Key, TestClient.
Wichtig: Umgebungsvariablen werden VOR dem App-Import gesetzt, damit die
gecachte Settings-Instanz die Test-Konfiguration nutzt.
"""
import io
import os
os.environ.setdefault("DATABASE_URL", "sqlite+pysqlite:///:memory:")
os.environ.setdefault("SECRET_KEY", "test-secret")
os.environ.setdefault("ADMIN_TOKEN", "test-admin")
os.environ.setdefault("REDIS_URL", "")
os.environ.setdefault("MAX_UPLOAD_MB", "1")
os.environ.setdefault("STORE_RESULTS", "false") # DB-Schreiben in Tests aussparen
import pytest # noqa: E402
from fastapi.testclient import TestClient # noqa: E402
from PIL import Image # noqa: E402
from sqlalchemy import create_engine # noqa: E402
from sqlalchemy.orm import sessionmaker # noqa: E402
from sqlalchemy.pool import StaticPool # noqa: E402
from app.database import base as db_base # noqa: E402
from app.database.models import ApiClient, ApiKey # noqa: E402
from app.core.security import hash_api_key # noqa: E402
# EINE gemeinsame In-Memory-DB fuer den ganzen Testlauf
_engine = create_engine(
"sqlite+pysqlite:///:memory:",
connect_args={"check_same_thread": False},
poolclass=StaticPool,
)
_TestSession = sessionmaker(bind=_engine, autoflush=False, autocommit=False)
# App-Engine/Session auf Test-DB umbiegen
db_base.engine = _engine
db_base.SessionLocal = _TestSession
from app.main import app # noqa: E402
from app.database.base import get_db # noqa: E402
TEST_KEY = "pk_live_testkey123"
def _override_get_db():
db = _TestSession()
try:
yield db
finally:
db.close()
app.dependency_overrides[get_db] = _override_get_db
@pytest.fixture(scope="session", autouse=True)
def _setup_db():
db_base.Base.metadata.create_all(bind=_engine)
db = _TestSession()
client = ApiClient(name="Test", plan="dev", monthly_limit=100000,
rate_limit_per_minute=1000, active=True)
db.add(client)
db.commit()
db.refresh(client)
db.add(ApiKey(client_id=client.id, key_hash=hash_api_key(TEST_KEY),
key_prefix="pk_live_test", label="test", active=True))
db.commit()
db.close()
yield
@pytest.fixture
def client():
return TestClient(app)
@pytest.fixture
def auth_headers():
return {"X-API-Key": TEST_KEY}
def make_png(width=120, height=90, color=(40, 90, 160)) -> bytes:
buf = io.BytesIO()
Image.new("RGB", (width, height), color).save(buf, format="PNG")
return buf.getvalue()