feat(backend): verifie l extension TimescaleDB sur la sonde de disponibilite
/api/v1/health/ready interrogeait la base par un SELECT 1, qui ne distingue pas un PostgreSQL nu d'un PostgreSQL avec TimescaleDB. La sonde lit desormais pg_extension et repond 503 si l'extension manque, cas qui survient quand db/init n'a pas ete joue. - Premiere revision Alembic : aucune table, une garde qui refuse de s'appliquer sans l'extension. - Tests du chemin nominal et de l'extension absente, plus un test marque `integration` contre la vraie base. pytest ecarte ce marqueur par defaut pour que make check reste jouable sans Docker. - conftest recycle l'engine entre les tests : get_engine est lru_cache alors que pytest-asyncio ouvre une boucle par test, et les connexions asyncpg sont liees a leur boucle.
This commit is contained in:
@@ -6,6 +6,7 @@ from fastapi import FastAPI
|
||||
from httpx import ASGITransport, AsyncClient
|
||||
|
||||
from app.core.config import get_settings
|
||||
from app.db.session import get_engine, get_session_factory
|
||||
from app.main import create_app
|
||||
|
||||
|
||||
@@ -13,13 +14,24 @@ from app.main import create_app
|
||||
def environment() -> Iterator[None]:
|
||||
os.environ.setdefault("APP_SECRET_KEY", "secret-de-test")
|
||||
os.environ.setdefault(
|
||||
"DATABASE_URL", "postgresql+asyncpg://enervision:enervision@localhost:5432/enervision_test"
|
||||
"DATABASE_URL", "postgresql+asyncpg://enervision:change_me@localhost:5433/enervision_test"
|
||||
)
|
||||
get_settings.cache_clear()
|
||||
yield
|
||||
get_settings.cache_clear()
|
||||
|
||||
|
||||
# Piege : get_engine est lru_cache et pytest-asyncio ouvre une boucle par test. Sans ce
|
||||
# recyclage, le 2e test touchant vraiment la base heriterait d une boucle morte.
|
||||
@pytest.fixture(autouse=True)
|
||||
async def engine_per_test() -> AsyncIterator[None]:
|
||||
yield
|
||||
if get_engine.cache_info().currsize:
|
||||
await get_engine().dispose()
|
||||
get_engine.cache_clear()
|
||||
get_session_factory.cache_clear()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def app() -> FastAPI:
|
||||
return create_app()
|
||||
|
||||
Reference in New Issue
Block a user