lancer-tests-e2e.md 6461 octets

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

RessourceDéveloppementTests E2E
Base de donnéesgitrustgitrust_test
Port HTTP40004001
Port SSH22222223
Dépôts Git./data/repos/./depot_test/
Rate limitingStandardRelâché (×20)
Validation emailActivéeDésactivée

Fonctionnement

  1. npm run test:e2e:setup supprime puis recrée la base gitrust_test et vide depot_test/.
  2. Playwright démarre automatiquement l'application via scripts/e2e-server.sh, qui charge les variables de .env.test avant d'exécuter cargo run.
  3. 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.
  4. Les tests s'exécutent séquentiellement (un seul worker) pour éviter les conflits sur la DB partagée.
  5. 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

TestDescription
login avec des identifiants validesVérifie le login standard et la redirection vers /dashboard
login avec un mauvais mot de passeVérifie l'affichage d'un message d'erreur
login avec un utilisateur inexistantVérifie le rejet d'un username inconnu
logout déconnecte l'utilisateurVérifie la déconnexion et l'impossibilité d'accéder au dashboard
accès au dashboard sans login redirige vers loginVérifie la protection des routes authentifiées
option remember me est présenteVérifie la présence de la checkbox remember_me
formulaire d'inscription est accessibleVérifie la présence de tous les champs du formulaire
inscription avec username déjà pris échoueVérifie l'unicité des usernames
inscription avec mots de passe différents échoueVérifie la validation de confirmation du mot de passe

repository.spec.ts — Gestion des dépôts

TestDescription
créer un dépôt avec nom et descriptionCrée un dépôt complet et vérifie la redirection
créer un dépôt sans descriptionVérifie que la description est optionnelle
créer un dépôt avec un nom déjà pris échoueVérifie l'unicité des slugs par utilisateur
le formulaire de création nécessite un loginVérifie la protection de la route /new
le dashboard liste les dépôts de l'utilisateurVérifie l'affichage des dépôts sur le dashboard
un dépôt public est accessible sans loginVérifie l'accès anonyme aux dépôts publics

admin.spec.ts — Administration

TestDescription
l'admin peut accéder au panneau d'administrationVérifie l'accès admin à /admin
un utilisateur normal ne peut pas accéder à l'adminVérifie le contrôle d'accès
lister les utilisateursVérifie l'affichage de la liste des utilisateurs
créer un nouvel utilisateur via l'adminTeste le formulaire de création d'utilisateur admin
créer un utilisateur avec un username déjà pris échoueVérifie la gestion des doublons côté admin
les liens du menu admin sont présentsVérifie la navigation du panneau admin

navigation.spec.ts — Navigation et UI

TestDescription
la page de login est accessibleVérifie le rendu de la page de login
la navbar est présente après loginVérifie la présence de la barre de navigation
le sidebar est présent après loginVérifie la présence du menu latéral
le lien vers le dashboard fonctionneVérifie la navigation vers le dashboard
le lien vers la création de dépôt fonctionneVérifie le lien /new
la page utilise le thème DaisyUIVérifie la présence de l'attribut data-theme

Ajouter un nouveau test

  1. Créer un fichier tests/e2e/mon-module.spec.ts
  2. Importer les fixtures : import { test, expect } from './fixtures';
  3. Utiliser loginAs pour les tests nécessitant une authentification
  4. Lancer avec npm run test:e2e ou cibler le fichier : npx playwright test mon-module