Files
course-plat/tests/e2e/student/exams.spec.js
T
2026-08-31 14:10:20 -03:00

188 lines
7.0 KiB
JavaScript

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('[email protected]');
// 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();
});
});
});