Suite de Testes E2E - Course Platform
Esta suite utiliza Playwright para testes end-to-end da aplicação.
📋 Estrutura dos Testes
tests/
├── e2e/
│ ├── auth/
│ │ ├── login.spec.ts # Login e autenticação
│ │ └── register.spec.ts # Cadastro e seleção de role
│ ├── admin/
│ │ ├── classes.spec.ts # Gestão de turmas
│ │ └── payments.spec.ts # Pagamentos e obrigações
│ ├── guardian/
│ │ └── wards.spec.ts # Alunos vinculados (wards)
│ ├── student/
│ │ └── exams.spec.ts # Provas e avaliações
│ ├── ui/
│ │ └── theme-and-responsive.spec.ts # Tema, responsividade, modais
│ └── error-cases.spec.ts # Casos de erro importantes
└── helpers.ts # Utilidades e fixtures
🚀 Comandos Disponíveis
# Instalar navegadores do Playwright
npx playwright install
# Instalar apenas Chromium (mais rápido)
npx playwright install chromium
# Executar todos os testes
npm test
# Executar com interface visual
npm run test:ui
# Executar em modo headed (ver navegador)
npm run test:headed
# Executar em modo debug
npm run test:debug
# Ver relatório HTML
npm run test:report
# Executar testes específicos
npm test -- tests/e2e/auth/login.spec.ts
# Executar em navegador específico
npm test --project=chromium
npm test --project=firefox
npm test --project=webkit
# Executar em mobile
npm test --project="Mobile Chrome"
npm test --project="Mobile Safari"
📁 Cenários de Teste Cobertos
1. Autenticação
- ✅ Login com credenciais válidas/inválidas
- ✅ Redirecionamento para login em rotas protegidas
- ✅ Cadastro com validações
- ✅ Navbar muda estado conforme autenticação
- ✅ Dispatcher (múltiplos roles)
2. Wards (Alunos vinculados a Responsáveis)
- ✅ Cadastro de ward por responsável
- ✅ Validação de email duplicado
- ✅ Visualização de lista de wards
- ✅ Acesso a detalhes de ward
3. Admin - Turmas
- ✅ Listagem e busca
- ✅ Criação com validações
- ✅ Edição (professores, alunos, dias)
- ✅ Validação de datas
- ✅ Checkboxes de professores e dias da semana
4. Admin - Pagamentos
- ✅ Visualização por turma
- ✅ Expansão/colapso
- ✅ Filtros de status
- ✅ Aprovação/rejeição
- ✅ Modal de comprovante
5. Aluno - Provas
- ✅ Lista de provas disponíveis
- ✅ Fazer prova
- ✅ Timer de contagem regressiva
- ✅ Submissão
- ✅ Resultados
6. UI/UX
- ✅ Tema claro/escuro
- ✅ Responsividade (mobile, tablet)
- ✅ Modais
- ✅ Hover states
- ✅ Loading states
7. Casos de Erro
- ✅ Acesso não autorizado
- ✅ Validações de formulário
- � Email duplicado
- ✅ Data inválida
- ✅ Provas após prazo
- ✅ Submissão duplicada
⚠️ Testes Marcados com TODO
Alguns testes estão marcados com // TODO: porque dependem de:
-
Dados de teste no banco de dados
- Criar usuários de teste (admin, teacher, student, guardian)
- Criar turmas, categorias, templates de prova
- Criar obrigações e pagamentos
-
Implementação de funcionalidades
- Algumas validações podem não estar implementadas ainda
🛠️ Como Configurar Dados de Teste
Opção 1: Script de Seed
Crie um script em scripts/seed-tests.ts que popula o banco com dados de teste:
import { getUserModel } from "@/app/models/User";
import bcrypt from "bcryptjs";
const testUsers = [
{
email: "[email protected]",
password: await bcrypt.hash("123456", 10),
fullName: "Admin Teste",
roles: ["admin"],
},
// ... outros usuários
];
export async function seedTestData() {
const User = await getUserModel();
await User.deleteMany({ email: { $in: testUsers.map(u => u.email) } });
await User.create(testUsers);
}
Opção 2: Fixtures do Playwright
Use o beforeEach para criar dados necessários para cada teste:
test.beforeEach(async ({ page }) => {
// Criar usuário via API
await page.request.post('/api/test/users', {
data: { email: '[email protected]', password: '123456' }
});
});
📊 Relatórios
Após executar os testes, o relatório HTML é gerado em:
playwright-report/
└── index.html
Abra com:
npm run test:report
# ou
npx playwright show-report
🔧 Configuração
Arquivo de configuração: playwright.config.ts
Configurações principais:
- baseURL:
http://localhost:3000 - testDir:
./tests/e2e - webServer: Inicia o dev server automaticamente
📝 Convenções
-
Nome de testes: Escreva em português, descrevendo o comportamento
test('deve mostrar erro com email inválido', async ({ page }) => { -
Selectores: Prefira seletores acessíveis
page.getByLabel(/email/i) page.getByRole('button', { name: /salvar/i }) -
Esperas: Seja específico
await expect(page).toHaveURL(/\/admin\/dashboard/); await expect(page.getByText(/sucesso/i)).toBeVisible(); -
TODOs: Marque testes que dependem de implementação futura
// TODO: Implementar após login
🐛 Debug
Execute um teste específico em modo debug:
npx playwright test --debug tests/e2e/auth/login.spec.ts
Isso abre o Playwright Inspector para inspecionar elementos e ver o que está acontecendo.