Files
opencloud-backend/tests/conftest.py
T

64 lines
1.8 KiB
Python

import asyncio
import io
import os
import shutil
import tempfile
import uuid
from collections.abc import Iterator
from pathlib import Path
import pytest
from fastapi.testclient import TestClient
from PIL import Image
TEST_ID = uuid.uuid4().hex
TEST_DB = Path(tempfile.gettempdir()) / f"opencloud-{TEST_ID}.sqlite3"
TEST_UPLOADS = Path(tempfile.gettempdir()) / f"opencloud-{TEST_ID}-uploads"
def bearer(token: str) -> dict[str, str]:
return {"Authorization": f"Bearer {token}"}
def png_bytes() -> bytes:
output = io.BytesIO()
Image.new("RGB", (200, 200), color=(125, 196, 240)).save(output, format="PNG")
return output.getvalue()
os.environ["ENVIRONMENT"] = "test"
os.environ["DATABASE_URL"] = f"sqlite+aiosqlite:///{TEST_DB}"
os.environ["SECRET_KEY"] = "test-secret-key-that-is-long-enough-for-opencloud"
os.environ["PUBLIC_BASE_URL"] = "http://testserver"
os.environ["FRONTEND_URL"] = "http://testserver"
os.environ["CORS_ORIGINS"] = "http://testserver"
os.environ["UPLOAD_DIR"] = str(TEST_UPLOADS)
os.environ["EMAIL_DELIVERY_MODE"] = "console"
os.environ["ADMIN_EMAIL"] = "admin@example.com"
os.environ["ADMIN_PASSWORD"] = "admin-password-123"
os.environ["ADMIN_USERNAME"] = "测试管理员"
from app.database import Base, engine # noqa: E402
from app.main import app # noqa: E402
from app.seed import seed # noqa: E402
async def _prepare_database() -> None:
async with engine.begin() as connection:
await connection.run_sync(Base.metadata.create_all)
await seed()
async def _close_database() -> None:
await engine.dispose()
@pytest.fixture(scope="session")
def client() -> Iterator[TestClient]:
asyncio.run(_prepare_database())
with TestClient(app) as test_client:
yield test_client
asyncio.run(_close_database())
TEST_DB.unlink(missing_ok=True)
shutil.rmtree(TEST_UPLOADS, ignore_errors=True)