Spaces:
Sleeping
Sleeping
| """Configuración de pruebas: BD temporal, secreto determinista y cero herencia del entorno. | |
| Las pruebas describen el comportamiento POR DEFECTO del servicio, así que no pueden leer el | |
| `.env` del desarrollador: en CI ese fichero no existe y en local trae lo que cada uno tenga | |
| puesto. Con `MORPHOS_IGNORAR_ENV_FILE` la config lo salta y sólo obedece a lo que se fije aquí, | |
| que es lo que hace reproducible el resultado entre máquinas. | |
| """ | |
| from __future__ import annotations | |
| import os | |
| import tempfile | |
| from pathlib import Path | |
| import pytest | |
| # Debe fijarse ANTES de importar la config (que se cachea con lru_cache). | |
| os.environ["MORPHOS_IGNORAR_ENV_FILE"] = "1" | |
| _TMP = Path(tempfile.mkdtemp(prefix="morphos_test_")) | |
| os.environ.setdefault("MORPHOS_DB_PATH", str(_TMP / "test.db")) | |
| os.environ.setdefault("MORPHOS_SESSION_SECRET", "x" * 40) | |
| os.environ.setdefault("MORPHOS_ENTORNO", "dev") | |
| def _limitador_limpio(): | |
| """Vacía el contador de rate limiting entre pruebas. | |
| El limitador es un almacén en memoria de proceso (`security/rate_limit.py`) compartido por | |
| toda la suite, y el TestClient sale siempre desde la misma IP ('testclient'), así que los | |
| contadores se acumulan de una prueba a otra: `limite_login` (5/minute) cubre también | |
| `/api/auth/registro`, y bastaba añadir pruebas de alta para que otras empezaran a recibir | |
| 429 según el ORDEN en que corrieran. Resetear aquí hace que cada prueba mida lo suyo. | |
| """ | |
| from app.security.rate_limit import limiter | |
| limiter.reset() | |
| yield | |
| limiter.reset() | |
| def alta_abierta(monkeypatch): | |
| """Abre el alta de cuentas para las pruebas que sólo necesitan una sesión. | |
| El alta está CERRADA por defecto y así se queda en el resto de la suite: eso es lo que | |
| comprueban las pruebas de `test_registro_cerrado.py`. Las que sólo quieren llegar a otro | |
| endpoint piden este fixture en vez de repetir el monkeypatch. | |
| """ | |
| from app.config import obtener_config | |
| monkeypatch.setattr(obtener_config(), "registro_abierto", True) | |