52 lines
1.6 KiB
Python
52 lines
1.6 KiB
Python
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})
|