import { test, expect } from '@playwright/test'; test.describe('Cadastro', () => { test.beforeEach(async ({ page }) => { await page.goto('/auth/register'); }); test('deve mostrar o formulário de cadastro', async ({ page }) => { await expect(page.locator('h1, h2')).toContainText(/cadastro|registro/i); await expect(page.getByLabel(/nome completo/i)).toBeVisible(); await expect(page.getByLabel(/email/i)).toBeVisible(); await expect(page.getByLabel(/senha/i)).toBeVisible(); await expect(page.getByLabel(/confirmar senha/i)).toBeVisible(); await expect(page.getByRole('button', { name: /cadastrar|registrar/i })).toBeVisible(); }); test('deve mostrar erro com senhas que não conferem', async ({ page }) => { await page.getByLabel(/nome completo/i).fill('Usuário Teste'); await page.getByLabel(/email/i).fill(`teste${Date.now()}@teste.com`); await page.getByLabel(/senha/i).fill('123456'); await page.getByLabel(/confirmar senha/i).fill('654321'); await page.getByRole('button', { name: /cadastrar|registrar/i }).click(); await expect(page.getByText(/senhas não conferem|senha não confere/i)).toBeVisible(); }); test('deve mostrar erro com senha muito curta', async ({ page }) => { await page.getByLabel(/nome completo/i).fill('Usuário Teste'); await page.getByLabel(/email/i).fill(`teste${Date.now()}@teste.com`); await page.getByLabel(/senha/i).fill('123'); await page.getByLabel(/confirmar senha/i).fill('123'); await page.getByRole('button', { name: /cadastrar|registrar/i }).click(); await expect(page.getByText(/mínimo de \d+ caracteres|senha muito curta/i)).toBeVisible(); }); test('deve mostrar erro com email inválido', async ({ page }) => { await page.getByLabel(/nome completo/i).fill('Usuário Teste'); await page.getByLabel(/email/i).fill('email-invalido'); await page.getByLabel(/senha/i).fill('123456'); await page.getByLabel(/confirmar senha/i).fill('123456'); await page.getByRole('button', { name: /cadastrar|registrar/i }).click(); await expect(page.getByText(/email inválido/i)).toBeVisible(); }); test('deve mostrar erro com campos obrigatórios vazios', async ({ page }) => { await page.getByRole('button', { name: /cadastrar|registrar/i }).click(); await expect(page.getByText(/nome.*obrigatório/i)).toBeVisible(); }); test('deve cadastrar com dados válidos e redirecionar para login', async ({ page }) => { const timestamp = Date.now(); await page.getByLabel(/nome completo/i).fill(`Usuário Teste ${timestamp}`); await page.getByLabel(/email/i).fill(`teste${timestamp}@teste.com`); await page.getByLabel(/senha/i).fill('123456'); await page.getByLabel(/confirmar senha/i).fill('123456'); await page.getByRole('button', { name: /cadastrar|registrar/i }).click(); // Deve redirecionar para login ou mostrar mensagem de sucesso await expect(page).toHaveURL(/\/auth\/login/, { timeout: 10000 }); }); }); test.describe('Seleção de Role', () => { test('deve mostrar opções quando usuário tem múltiplos roles', async ({ page }) => { // TODO: Fazer login com usuário que tem múltiplos roles await page.goto('/dispatcher'); // Deve mostrar o dispatcher await expect(page.locator('h1, h2')).toContainText(/escolha.*destino|selecione.*papel/i); }); test('admin: redireciona para /admin/dashboard', async ({ page }) => { // TODO: Fazer login como admin // await page.goto('/dispatcher'); // await page.getByRole('button', { name: /administrador|admin/i }).click(); // await expect(page).toHaveURL(/\/admin\/dashboard/); }); test('professor: redireciona para /dashboard/teacher', async ({ page }) => { // TODO: Fazer login como professor // await page.goto('/dispatcher'); // await page.getByRole('button', { name: /professor/i }).click(); // await expect(page).toHaveURL(/\/dashboard\/teacher/); }); test('aluno: redireciona para /dashboard/student', async ({ page }) => { // TODO: Fazer login como aluno // await page.goto('/dispatcher'); // await page.getByRole('button', { name: /aluno/i }).click(); // await expect(page).toHaveURL(/\/dashboard\/student/); }); test('responsável: redireciona para /dashboard/guardian', async ({ page }) => { // TODO: Fazer login como responsável // await page.goto('/dispatcher'); // await page.getByRole('button', { name: /responsável|guardian/i }).click(); // await expect(page).toHaveURL(/\/dashboard\/guardian/); }); });