Lancer les tests end-to-end (E2E)
Les tests E2E de gitrust utilisent Playwright pour piloter un navigateur Chromium contre une instance de l'application configurée avec une base de données et un répertoire de dépôts dédiés.
Pré-requis
- Node.js (déjà présent pour Tailwind/DaisyUI)
- PostgreSQL accessible en local (Docker via
database/docker-compose.yml)
psql, createdb, dropdb disponibles dans le PATH
- Chromium installé via Playwright (
npx playwright install chromium)
Commandes
# Créer (ou remettre à zéro) la base de données de test
npm run test:e2e:setup
# Lancer tous les tests E2E
npm run test:e2e
# Mode debug interactif (inspecteur Playwright, pas-à-pas)
npm run test:e2e:debug
# Mode UI (interface graphique Playwright)
npm run test:e2e:ui
# Consulter le rapport HTML après exécution
npm run test:e2e:report
Architecture
.env.test # Variables d'environnement de test
playwright.config.ts # Configuration Playwright
scripts/
e2e-setup-db.sh # Crée la DB gitrust_test + nettoie depot_test
e2e-server.sh # Démarre l'app avec .env.test
tests/e2e/
fixtures.ts # Fixtures partagées (loginAs, credentials)
global-setup.ts # Seed : crée les utilisateurs via /register
global-teardown.ts # Nettoyage post-tests
auth.spec.ts # Tests d'authentification
repository.spec.ts # Tests de gestion des dépôts
admin.spec.ts # Tests du panneau d'administration
navigation.spec.ts # Tests de navigation et UI
Isolation de l'environnement de test
| Ressource |
Développement |
Tests E2E |
| Base de données |
gitrust |
gitrust_test |
| Port HTTP |
4000 |
4001 |
| Port SSH |
2222 |
2223 |
| Dépôts Git |
./data/repos/ |
./depot_test/ |
| Rate limiting |
Standard |
Relâché (×20) |
| Validation email |
Activée |
Désactivée |
Fonctionnement
npm run test:e2e:setup supprime puis recrée la base gitrust_test et vide depot_test/.
- Playwright démarre automatiquement l'application via
scripts/e2e-server.sh, qui charge les variables de .env.test avant d'exécuter cargo run.
- Le global-setup crée les utilisateurs de test (alice, bob, charlie) en passant par le formulaire
/register — approche 100% E2E, aucune insertion directe en base.
- Les tests s'exécutent séquentiellement (un seul worker) pour éviter les conflits sur la DB partagée.
- Le global-teardown est exécuté à la fin de la session.
Fixtures
Le fichier fixtures.ts fournit une fixture loginAs réutilisable dans tous les tests :
import { test, expect } from './fixtures';
test('mon test', async ({ page, loginAs }) => {
await loginAs('alice');
// alice est connectée, on peut naviguer
});
Utilisateurs disponibles : admin, alice, bob, charlie.
Liste des tests
auth.spec.ts — Authentification
| Test |
Description |
| login avec des identifiants valides |
Vérifie le login standard et la redirection vers /dashboard |
| login avec un mauvais mot de passe |
Vérifie l'affichage d'un message d'erreur |
| login avec un utilisateur inexistant |
Vérifie le rejet d'un username inconnu |
| logout déconnecte l'utilisateur |
Vérifie la déconnexion et l'impossibilité d'accéder au dashboard |
| accès au dashboard sans login redirige vers login |
Vérifie la protection des routes authentifiées |
| option remember me est présente |
Vérifie la présence de la checkbox remember_me |
| formulaire d'inscription est accessible |
Vérifie la présence de tous les champs du formulaire |
| inscription avec username déjà pris échoue |
Vérifie l'unicité des usernames |
| inscription avec mots de passe différents échoue |
Vérifie la validation de confirmation du mot de passe |
repository.spec.ts — Gestion des dépôts
| Test |
Description |
| créer un dépôt avec nom et description |
Crée un dépôt complet et vérifie la redirection |
| créer un dépôt sans description |
Vérifie que la description est optionnelle |
| créer un dépôt avec un nom déjà pris échoue |
Vérifie l'unicité des slugs par utilisateur |
| le formulaire de création nécessite un login |
Vérifie la protection de la route /new |
| le dashboard liste les dépôts de l'utilisateur |
Vérifie l'affichage des dépôts sur le dashboard |
| un dépôt public est accessible sans login |
Vérifie l'accès anonyme aux dépôts publics |
admin.spec.ts — Administration
| Test |
Description |
| l'admin peut accéder au panneau d'administration |
Vérifie l'accès admin à /admin |
| un utilisateur normal ne peut pas accéder à l'admin |
Vérifie le contrôle d'accès |
| lister les utilisateurs |
Vérifie l'affichage de la liste des utilisateurs |
| créer un nouvel utilisateur via l'admin |
Teste le formulaire de création d'utilisateur admin |
| créer un utilisateur avec un username déjà pris échoue |
Vérifie la gestion des doublons côté admin |
| les liens du menu admin sont présents |
Vérifie la navigation du panneau admin |
navigation.spec.ts — Navigation et UI
| Test |
Description |
| la page de login est accessible |
Vérifie le rendu de la page de login |
| la navbar est présente après login |
Vérifie la présence de la barre de navigation |
| le sidebar est présent après login |
Vérifie la présence du menu latéral |
| le lien vers le dashboard fonctionne |
Vérifie la navigation vers le dashboard |
| le lien vers la création de dépôt fonctionne |
Vérifie le lien /new |
| la page utilise le thème DaisyUI |
Vérifie la présence de l'attribut data-theme |
Ajouter un nouveau test
- Créer un fichier
tests/e2e/mon-module.spec.ts
- Importer les fixtures :
import { test, expect } from './fixtures';
- Utiliser
loginAs pour les tests nécessitant une authentification
- Lancer avec
npm run test:e2e ou cibler le fichier : npx playwright test mon-module