Führen Sie End-to-End-Tests (E2E) durch

Die E2E-Tests von Gitrust verwenden Playwright, um einen Chromium-Browser gegen eine Instanz der Anwendung zu steuern, die mit einer dedizierten Datenbank und einem Repository-Verzeichnis konfiguriert ist.

Voraussetzungen

  • Node.js (bereits vorhanden für Tailwind/DaisyUI)
  • Lokaler Zugriff auf PostgreSQL (Docker über „database/docker-compose.yml“)
  • „psql“, „createdb“, „dropdb“ im PATH verfügbar
  • Chromium über Playwright installiert („npx playwright install chromium“)

Bestellungen

# 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

Architektur

.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

Isolierung der Testumgebung

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

Funktion

  1. npm run test:e2e:setup löscht die Datenbank „gitrust_test“, erstellt sie neu und leert „depot_test/“.
  2. Playwright startet die Anwendung automatisch über „scripts/e2e-server.sh“, das die Variablen aus „.env.test“ lädt, bevor „cargo run“ ausgeführt wird.
  3. Das globale Setup erstellt die Testbenutzer (Alice, Bob, Charlie) mithilfe des „/register“-Formulars – 100 % E2E-Ansatz, keine direkte Einfügung in die Datenbank.
  4. Die Tests werden nacheinander ausgeführt (ein einzelner Worker), um Konflikte in der gemeinsam genutzten Datenbank zu vermeiden.
  5. Der global-teardown wird am Ende der Sitzung ausgeführt.

Vorrichtungen

Die Datei „fixtures.ts“ stellt ein „loginAs“-Fixture bereit, das in allen Tests wiederverwendbar ist:

import { test, expect } from './fixtures';

test('mon test', async ({ page, loginAs }) => {
  await loginAs('alice');
  // alice est connectée, on peut naviguer
});

Verfügbare Benutzer: „admin“, „alice“, „bob“, „charlie“.

Liste der Tests

„auth.spec.ts“ – Authentifizierung

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“ – Repository-Verwaltung

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“ – Verwaltung

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
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

Fügen Sie einen neuen Test hinzu

  1. Erstellen Sie eine Datei „tests/e2e/mon-module.spec.ts“.
  2. Fixtures importieren: import { test, Expect } from './fixtures';
  3. Verwenden Sie „loginAs“ für Tests, die eine Authentifizierung erfordern
  4. Führen Sie es mit „npm run test:e2e“ aus oder zielen Sie auf die Datei: „npx playwright test my-module“.