Execute testes ponta a ponta (E2E)
Os testes E2E da Gitrust usam o Playwright para direcionar um navegador Chromium em uma instância do aplicativo configurada com um banco de dados dedicado e um diretório de repositório.
Pré-requisitos
- Node.js (já presente para Tailwind/DaisyUI)
- PostgreSQL acessível localmente (Docker via
database/docker-compose.yml)
psql, createdb, dropdb disponíveis no PATH
- Chromium instalado via Playwright (
npx playwright install chromium)
Pedidos
# 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
Arquitetura
.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
Isolamento do ambiente de teste
| 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 |
Funcionamento
npm run test:e2e:setup exclui e recria o banco de dados gitrust_test e esvazia depot_test/.
- Playwright inicia automaticamente o aplicativo via
scripts/e2e-server.sh, que carrega as variáveis de .env.test antes de executar cargo run.
- A configuração global cria os usuários de teste (alice, bob, charlie) usando o formato
/register — abordagem 100% E2E, sem inserção direta no banco de dados.
- Os testes são executados sequencialmente (um único trabalhador) para evitar conflitos no banco de dados compartilhado.
- O global-teardown é executado no final da sessão.
Jogos
O arquivo fixtures.ts fornece um fixture loginAs que é reutilizável em todos os testes:
import { test, expect } from './fixtures';
test('mon test', async ({ page, loginAs }) => {
await loginAs('alice');
// alice est connectée, on peut naviguer
});
Usuários disponíveis: admin, alice, bob, charlie.
Lista de testes
auth.spec.ts — Autenticação
| 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 — Gerenciamento de repositório
| 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 — Administração
| 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 — Navegação e IU
| 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 |
Adicionar um novo teste
- Crie um arquivo
tests/e2e/mon-module.spec.ts
- Importar fixtures:
importar {test, expect} de './fixtures';
- Use
loginAs para testes que requerem autenticação
- Execute com
npm run test:e2e ou direcione o arquivo: npx playwright test my-module