import { test, expect } from '@playwright/test'; test.describe('Aluno - Provas', () => { // TODO: Fazer login como aluno antes de cada teste // test.beforeEach(async ({ page }) => { // await page.goto('/auth/login'); // await page.getByLabel(/email/i).fill('student@teste.com'); // await page.getByLabel(/senha/i).fill('123456'); // await page.getByRole('button', { name: /entrar/i }).click(); // await page.waitForURL(/\/dashboard\/student/); // }); test.describe('Dashboard do Aluno', () => { test.beforeEach(async ({ page }) => { await page.goto('/dashboard/student'); }); test('deve mostrar turmas matriculadas', async ({ page }) => { await expect(page.getByText(/turmas|classes|minhas turmas/i)).toBeVisible(); }); test('deve mostrar seção de provas disponíveis', async ({ page }) => { await expect(page.getByText(/provas|exames|avaliações/i)).toBeVisible(); }); }); test.describe('Lista de Provas Disponíveis', () => { test('deve mostrar provas para fazer', async ({ page }) => { await page.goto('/dashboard/student/assignments'); await expect(page.getByText(/provas|exames/i)).toBeVisible(); }); test('deve mostrar informações da prova', async ({ page }) => { await page.goto('/dashboard/student/assignments'); const examCard = page.locator('[data-testid="assignment-card"]').first(); if (await examCard.isVisible()) { await expect(examCard.getByText(/título/i)).toBeVisible(); await expect(examCard.getByText(/prazo|deadline/i)).toBeVisible(); await expect(examCard.getByText(/tempo|time/i)).toBeVisible(); } }); test('deve ter botão para iniciar prova', async ({ page }) => { await page.goto('/dashboard/student/assignments'); const startButton = page.getByRole('link', { name: /iniciar|começar|fazer/i }).first(); if (await startButton.isVisible()) { await startButton.click(); await expect(page).toHaveURL(/\/assignments\/\w+\/take/); } }); }); test.describe('Fazendo Prova', () => { test.beforeEach(async ({ page }) => { // TODO: Navegar para uma prova específica // await page.goto('/dashboard/student/assignments/assignment-id/take'); }); test('deve mostrar título e instruções da prova', async ({ page }) => { // await expect(page.getByText(/título/i)).toBeVisible(); // await expect(page.getByText(/instruções/i)).toBeVisible(); }); test('deve mostrar timer de contagem regressiva', async ({ page }) => { // await expect(page.getByText(/\d+:\d+|\d+ min/i)).toBeVisible(); }); test('deve mostrar questões', async ({ page }) => { // await expect(page.getByText(/questão|pergunta/i)).toBeVisible(); }); test('deve responder múltipla escolha', async ({ page }) => { // const firstOption = page.locator('input[type="radio"]').first(); // await firstOption.check(); // await expect(firstOption).toBeChecked(); }); test('deve responder questão textual', async ({ page }) => { // const textAnswer = page.getByPlaceholder(/digite|escreva/i).first(); // if (await textAnswer.isVisible()) { // await textAnswer.fill('Resposta de teste'); // } }); test('deve navegar entre questões', async ({ page }) => { // const nextButton = page.getByRole('button', { name: /próxima|avançar/i }); // if (await nextButton.isVisible()) { // await nextButton.click(); // // Verificar se mudou de questão // } }); test('deve submeter prova com confirmação', async ({ page }) => { // Responder pelo menos uma questão // const firstOption = page.locator('input[type="radio"]').first(); // if (await firstOption.isVisible()) { // await firstOption.check(); // } // Clicar em submeter // await page.getByRole('button', { name: /submeter|enviar|finalizar/i }).click(); // Confirmar // await expect(page.getByText(/tem certeza|confirma/i)).toBeVisible(); // await page.getByRole('button', { name: /confirmar|sim/i }).click(); // Deve redirecionar // await expect(page).toHaveURL(/\/dashboard\/student/); }); test('não deve editar após submeter', async ({ page }) => { // Tentar acessar prova já submetida // await page.goto('/dashboard/student/assignments/submitted-id/take'); // Deve mostrar mensagem ou redirecionar // await expect(page.getByText(/já submetida|não disponível/i)).toBeVisible(); }); }); test.describe('Resultados de Provas', () => { test('deve mostrar provas corrigidas', async ({ page }) => { // TODO: Navegar para resultados // await page.goto('/dashboard/student/results'); // await expect(page.getByText(/resultados|notas/i)).toBeVisible(); }); test('deve mostrar nota obtida', async ({ page }) => { // const resultCard = page.locator('[data-testid="result-card"]').first(); // await expect(resultCard.getByText(/\d+\/\d+/)).toBeVisible(); }); test('deve mostrar porcentagem', async ({ page }) => { // const resultCard = page.locator('[data-testid="result-card"]').first(); // await expect(resultCard.getByText(/\d+%/)).toBeVisible(); }); test('deve mostrar correção do professor', async ({ page }) => { // const viewButton = page.getByRole('button', { name: /ver|detalhes/i }).first(); // await viewButton.click(); // await expect(page.getByText(/correção|feedback/i)).toBeVisible(); }); test('deve mostrar respostas corretas e erradas', async ({ page }) => { // await page.goto('/dashboard/student/results/result-id'); // const correctAnswer = page.locator('[data-testid="correct-answer"]').first(); // if (await correctAnswer.isVisible()) { // await expect(correctAnswer).toHaveClass(/emerald|green|success/i); // } // const wrongAnswer = page.locator('[data-testid="wrong-answer"]').first(); // if (await wrongAnswer.isVisible()) { // await expect(wrongAnswer).toHaveClass(/red|error|danger/i); // } }); }); test.describe('Timer da Prova', () => { test('deve contar regressivamente', async ({ page }) => { // await page.goto('/dashboard/student/assignments/assignment-id/take'); // const initialTime = await page.getByText(/\d+:\d+/).textContent(); // await page.waitForTimeout(60000); // Esperar 1 minuto // const newTime = await page.getByText(/\d+:\d+/).textContent(); // expect(newTime).not.toBe(initialTime); }); test('deve submeter automaticamente quando timer acabar', async ({ page }) => { // TODO: Testar com prova curta }); }); test.describe('Prova após prazo', () => { test('não deve permitir iniciar prova após prazo', async ({ page }) => { // TODO: Tentar acessar prova expirada // await page.goto('/dashboard/student/assignments/expired-id/take'); // await expect(page.getByText(/prazo expirado|não disponível/i)).toBeVisible(); }); }); });