Contexte
Audit du 2026-06-23 : deux zones sans couverture directe, identifiées comme priorité test ce mois-ci.
1. `src/lib/circuit-breaker.ts` : couvert indirectement via `geocoder.test.ts`, mais c'est un composant infra réutilisé par les breakers Jawg ET Geoapify (seuil 3 erreurs, reset 1h). Un test unitaire direct documente et protège le comportement isolément.
Cas à couvrir : disponible par défaut, ouverture après `threshold` erreurs, `recordSuccess` remet à zéro, auto-reset après `resetMs` (mock `Date.now`).
2. Query builders SQL bruts : `src/lib/devs-query.ts`, `src/lib/repos-query.ts`, `src/lib/trending-query.ts` contiennent les `$queryRaw` à branches dynamiques. Ce sont les fichiers à risque injection si quelqu'un modifie un binding. Un test de forme (valeurs passées en paramètre bindé) sécurise les modifications futures.
Tests
- `pnpm test` passe à 1050+ sans régression
- `circuit-breaker.test.ts` : 4+ cas, `pool:"forks"` respecté
Contexte
Audit du 2026-06-23 : deux zones sans couverture directe, identifiées comme priorité test ce mois-ci.
1. `src/lib/circuit-breaker.ts` : couvert indirectement via `geocoder.test.ts`, mais c'est un composant infra réutilisé par les breakers Jawg ET Geoapify (seuil 3 erreurs, reset 1h). Un test unitaire direct documente et protège le comportement isolément.
Cas à couvrir : disponible par défaut, ouverture après `threshold` erreurs, `recordSuccess` remet à zéro, auto-reset après `resetMs` (mock `Date.now`).
2. Query builders SQL bruts : `src/lib/devs-query.ts`, `src/lib/repos-query.ts`, `src/lib/trending-query.ts` contiennent les `$queryRaw` à branches dynamiques. Ce sont les fichiers à risque injection si quelqu'un modifie un binding. Un test de forme (valeurs passées en paramètre bindé) sécurise les modifications futures.
Tests