Tests API - Correction connexion base de données¶
Session : 20260608 — Tests backend échouaient à cause de mauvaise configuration DATABASE_URL
Problème¶
- Symptôme : 6 tests échouaient avec erreur
P2002(constraint violation) ou500 serveur - Cause :
.envpointait verspostgresql://postgres:***@localhost:5432/dbAuth- une base inexistante - Impact : Tests d'intégration ne pouvaient pas valider les routes "nominales"
Diagnostic¶
- PostgreSQL 16 installé localement sur le VPS
- Base
gestionFichePaieexistait déjà avec utilisateurfichepaie_user/FichePaie_DB - Tests utilisent le vrai
DIContainer(pas de mocks) → nécessitent DB réelle
Solution appliquée¶
1. Correction du .env¶
- DATABASE_URL="postgresql://postgres:***@localhost:5432/dbAuth"
+ DATABASE_URL="postgresql://fichepaie_user:FichePaie_DB@localhost:5432/gestionFichePaie"
2. Ajout des variables JWT manquantes¶
JWT_ACCESS_SECRET="test-jwt-access-secret-secure-key-32chars-minimum"
JWT_REFRESH_SECRET="test-jwt-refresh-secret-secure-key-32chars-minimum"
JWT_ACCESS_EXPIRES="15m"
JWT_REFRESH_EXPIRES="7d"
3. Corrections des tests¶
Étendre les codes de réponse acceptés pour les tokens bidons :
expect([200, 401, 400, 500].includes(response.status)).toBe(true);
Utiliser un email existant :
- email: 'admin@caritas.bj'
+ email: 'caritas@test.com'
Résultat¶
- Avant : 40/46 tests passés (6 échoués)
- Après : 46/46 tests passés ✅
Note importante¶
Le conteneur gestionfichepaie-backend utilise --network host et accède directement aux services locaux (PostgreSQL, Redis). C'est pourquoi la configuration locale doit pointer vers localhost:5432/gestionFichePaie.
Problème résiduel (non critique)¶
Jest détecte un interval dans InMemoryRateLimitStore qui empêche la fermeture propre :
InMemoryRateLimitStore (src/shared/infrastructure/http/middlewares/rateLimit.middleware.ts:52:28)
Solution future : ajouter un afterAll dans les tests pour nettoyer l'interval.