from collections.abc import Sequence from typing import Any from app.core.config import Settings SETTINGS_DE_TEST: dict[str, Any] = { "env": "local", "debug": False, "log_level": "WARNING", "cors_origins": "", "secret_key": "secret-de-test-assez-long-pour-le-validateur", "database_url": "postgresql+asyncpg://enervision:change_me@localhost:5433/enervision_test", } class FakeScalars: """Resultat factice pour `.scalars()` : `.all()` renvoie les lignes fournies.""" def __init__(self, rows: Sequence[object]) -> None: self._rows = rows def all(self) -> Sequence[object]: return self._rows class FakeSession: """Session factice : renvoie `result`, ou leve `failure` si elle est fournie.""" def __init__(self, result: object = None, failure: Exception | None = None) -> None: self._result = result self._failure = failure async def scalar(self, *_: object, **__: object) -> object: return self._repondre() async def execute(self, *_: object, **__: object) -> object: return self._repondre() async def scalars(self, *_: object, **__: object) -> FakeScalars: return FakeScalars(self._repondre() or []) def _repondre(self) -> object: if self._failure is not None: raise self._failure return self._result # Piège : les arguments nommés priment sur l'environnement et sur .env, contrairement # aux variables posées par la fixture `environment`, qui restent surchargeables. def make_settings(**overrides: Any) -> Settings: return Settings(**{**SETTINGS_DE_TEST, **overrides})