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
npm run test:e2e:setup löscht die Datenbank „gitrust_test“, erstellt sie neu und leert „depot_test/“.
- Playwright startet die Anwendung automatisch über „scripts/e2e-server.sh“, das die Variablen aus „.env.test“ lädt, bevor „cargo run“ ausgeführt wird.
- Das globale Setup erstellt die Testbenutzer (Alice, Bob, Charlie) mithilfe des „/register“-Formulars – 100 % E2E-Ansatz, keine direkte Einfügung in die Datenbank.
- Die Tests werden nacheinander ausgeführt (ein einzelner Worker), um Konflikte in der gemeinsam genutzten Datenbank zu vermeiden.
- 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 |
„navigation.spec.ts“ – Navigation und Benutzeroberfläche
| 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
- Erstellen Sie eine Datei „tests/e2e/mon-module.spec.ts“.
- Fixtures importieren:
import { test, Expect } from './fixtures';
- Verwenden Sie „loginAs“ für Tests, die eine Authentifizierung erfordern
- Führen Sie es mit „npm run test:e2e“ aus oder zielen Sie auf die Datei: „npx playwright test my-module“.