Ejecute pruebas de un extremo a otro (E2E)
Las pruebas E2E de Gitrust utilizan Playwright para comparar un navegador Chromium con una instancia de la aplicación configurada con una base de datos dedicada y un directorio de repositorio.
Requisitos previos
- Node.js (ya presente para Tailwind/DaisyUI)
- PostgreSQL accesible localmente (Docker a través de
database/docker-compose.yml)
psql, createdb, dropdb disponibles en la RUTA
- Chromium instalado a través de Playwright (
npx playwright install chromium)
Órdenes
# 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
Arquitectura
.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
Aislamiento del entorno de prueba.
| 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 |
Marcha
npm run test:e2e:setup elimina, luego vuelve a crear la base de datos gitrust_test y vacía depot_test/.
- Playwright inicia automáticamente la aplicación a través de
scripts/e2e-server.sh, que carga las variables desde .env.test antes de ejecutar cargo run.
- La configuración global crea los usuarios de prueba (alice, bob, charlie) usando el formulario
/register: enfoque 100% E2E, sin inserción directa en la base de datos.
- Las pruebas se ejecutan secuencialmente (un solo trabajador) para evitar conflictos en la base de datos compartida.
- El desmontaje global se ejecuta al final de la sesión.
Calendario
El archivo fixtures.ts proporciona un dispositivo loginAs que es reutilizable en todas las pruebas:
import { test, expect } from './fixtures';
test('mon test', async ({ page, loginAs }) => {
await loginAs('alice');
// alice est connectée, on peut naviguer
});
Usuarios disponibles: admin, alice, bob, charlie.
Lista de pruebas
auth.spec.ts — Autenticación
| 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 — Gestión del repositorio
| 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 — Administración
| 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 — Navegación y 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 |
Agregar una nueva prueba
- Cree un archivo
tests/e2e/mon-module.spec.ts
- Importar accesorios:
importar {prueba, esperar} desde './fixtures';
- Utilice
loginAs para pruebas que requieran autenticación
- Ejecute con
npm run test:e2e o apunte al archivo: npx playwright test my-module