File size: 1,638 Bytes
41788c4 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | """Shared pytest fixtures."""
from __future__ import annotations
from collections.abc import AsyncIterator
import pytest
import pytest_asyncio
from httpx import ASGITransport, AsyncClient
from docsifer.analytics import AnalyticsService, InMemoryStore
from docsifer.config import Settings, get_settings
from docsifer.main import create_app
@pytest.fixture
def settings(monkeypatch: pytest.MonkeyPatch, tmp_path) -> Settings:
monkeypatch.setenv("DOCSIFER_ENVIRONMENT", "development")
monkeypatch.setenv("DOCSIFER_LOG_JSON", "false")
monkeypatch.setenv("DOCSIFER_ANALYTICS_ENABLED", "false")
monkeypatch.setenv("DOCSIFER_MAX_UPLOAD_BYTES", str(2 * 1024 * 1024))
monkeypatch.setenv("DOCSIFER_MAX_CONCURRENT_CONVERSIONS", "2")
monkeypatch.setenv("DOCSIFER_MAX_QUEUE_DEPTH", "4")
monkeypatch.setenv("DOCSIFER_MAX_PER_IP_CONCURRENT", "5")
monkeypatch.setenv("DOCSIFER_TMP_DIR", str(tmp_path))
get_settings.cache_clear()
return get_settings()
@pytest_asyncio.fixture
async def app(settings: Settings):
application = create_app(settings)
async with application.router.lifespan_context(application):
yield application
@pytest_asyncio.fixture
async def client(app) -> AsyncIterator[AsyncClient]:
transport = ASGITransport(app=app)
async with AsyncClient(transport=transport, base_url="http://test") as ac:
yield ac
@pytest_asyncio.fixture
async def in_memory_analytics() -> AsyncIterator[AnalyticsService]:
svc = AnalyticsService(store=InMemoryStore(), sync_interval_sec=1)
await svc.start()
try:
yield svc
finally:
await svc.stop()
|