Contrats de test et CI
Utilisez les niveaux de test, l’infrastructure réelle, Playwright, la couverture croissante et les gates de build sans réduire les garanties.
Vérifié avec le commit
b16b416.
La suite est organisée par ce que chaque niveau peut simuler. Une base mockée ne prouve pas une contrainte unique ; une route qui mocke son guard ne prouve pas que l’authentification précède la lecture.
| Niveau | Prouve | Peut mocker |
|---|---|---|
| Unit | règles pures et architecture | rien |
| API | HTTP, enveloppe, ordre d’auth | services/modèles, pas les guards |
| Service | orchestration, reprises, coût, compensation | modèles et SDK externes |
| Component | comportement visible | fetch |
| Database | contraintes, verrous, vrais timestamps | rien |
| E2E | navigateur connecté et infrastructure locale | rien |
Chaque route a un test d’auth qui vérifie qu’aucune fonction de données n’est appelée avant 401/403. Toute mutation de crédit ou d’argent a un test de rejeu avec un seul effet.
pnpm test:fast
pnpm test:run
pnpm test:cov
pnpm test:db
pnpm exec playwright install chromium
pnpm test:e2etest:fast est la vérification isolée avant commit ; test:run exécute les projets Vitest configurés. test:cov impose les seuils de couverture aux services, modèles, routes API, code serveur partagé et données d’Admin.
Sans TEST_DATABASE_URL ni TEST_REDIS_URL, Vitest exclut le projet d’infrastructure avant la collecte. PostgreSQL et Redis s’activent séparément ; une exécution Redis seule n’initialise ni Better Auth ni PostgreSQL. La CI exige les deux URL et échoue si l’infrastructure manque. Le nom de la base PostgreSQL de test doit contenir test, car les tables sont tronquées. Ne configurez pas les URL de test dans les déploiements de production.
Playwright teste connexion, crédits tenant, upload/suppression Garage et la tâche image à cinq crédits jusqu’au worker et au téléchargement signé.
Une cible E2E externe exige E2E_BASE_URL, E2E_USER_EMAIL et E2E_USER_PASSWORD ; les tests qui écrivent ne s’exécutent qu’avec E2E_ALLOW_MUTATIONS=1 sur un environnement jetable. Ne ciblez pas la production.
La CI exécute lint, migrations PostgreSQL 16, Redis, couverture, builds et navigateur. Ne baissez pas un seuil et ne remplacez pas l’infrastructure réelle par des mocks pour obtenir du vert.