Initial commit
This commit is contained in:
@@ -0,0 +1,195 @@
|
||||
import { test, expect } from '@playwright/test';
|
||||
|
||||
test.describe('Admin - Turmas (Classes)', () => {
|
||||
// TODO: Fazer login como admin 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(/\/admin\/dashboard/);
|
||||
// });
|
||||
|
||||
test.describe('Lista de Turmas', () => {
|
||||
test.beforeEach(async ({ page }) => {
|
||||
await page.goto('/admin/dashboard/class');
|
||||
});
|
||||
|
||||
test('deve mostrar lista de turmas', async ({ page }) => {
|
||||
await expect(page.getByText(/turmas|classes/i)).toBeVisible();
|
||||
});
|
||||
|
||||
test('deve ter botão de adicionar nova turma', async ({ page }) => {
|
||||
await expect(page.getByRole('link', { name: /adicionar|nova|criar/i })).toBeVisible();
|
||||
});
|
||||
|
||||
test('deve ter busca funcionando', async ({ page }) => {
|
||||
const searchInput = page.getByPlaceholder(/buscar|pesquisar|search/i);
|
||||
if (await searchInput.isVisible()) {
|
||||
await searchInput.fill('Inglês');
|
||||
await page.waitForTimeout(500);
|
||||
// Verificar se filtrou
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
test.describe('Criar Nova Turma', () => {
|
||||
test.beforeEach(async ({ page }) => {
|
||||
await page.goto('/admin/dashboard/class/add');
|
||||
});
|
||||
|
||||
test('deve mostrar formulário de criação', async ({ page }) => {
|
||||
await expect(page.getByLabel(/tipo de classe|class type/i)).toBeVisible();
|
||||
await expect(page.getByLabel(/título/i)).toBeVisible();
|
||||
await expect(page.getByLabel(/data de início|start date/i)).toBeVisible();
|
||||
await expect(page.getByLabel(/horário|time/i)).toBeVisible();
|
||||
await expect(page.getByText(/dias da semana/i)).toBeVisible();
|
||||
await expect(page.getByText(/professores/i)).toBeVisible();
|
||||
});
|
||||
|
||||
test('deve validar campos obrigatórios', async ({ page }) => {
|
||||
await page.getByRole('button', { name: /salvar|criar/i }).click();
|
||||
|
||||
await expect(page.getByText(/obrigatório|required/i)).toBeVisible();
|
||||
});
|
||||
|
||||
test('deve validar data de término posterior a data de início', async ({ page }) => {
|
||||
await page.getByLabel(/data de início/i).fill('2025-01-10');
|
||||
await page.getByLabel(/data de término|end date/i).fill('2025-01-01');
|
||||
await page.getByRole('button', { name: /salvar|criar/i }).click();
|
||||
|
||||
await expect(page.getByText(/término não pode ser anterior|data inválida/i)).toBeVisible();
|
||||
});
|
||||
|
||||
test('deve criar turma com dados válidos', async ({ page }) => {
|
||||
const timestamp = Date.now();
|
||||
|
||||
// Selecionar tipo de classe
|
||||
await page.getByLabel(/tipo de classe/i).selectOption({ index: 0 });
|
||||
|
||||
// Preencher título
|
||||
await page.getByLabel(/título/i).fill(`Turma Teste ${timestamp}`);
|
||||
|
||||
// Data de início
|
||||
await page.getByLabel(/data de início/i).fill('2025-01-01');
|
||||
|
||||
// Horário
|
||||
await page.getByLabel(/horário/i).fill('19:00');
|
||||
|
||||
// Selecionar professores
|
||||
const teacherCheckbox = page.locator('input[type="checkbox"]').first();
|
||||
if (await teacherCheckbox.isVisible()) {
|
||||
await teacherCheckbox.check();
|
||||
}
|
||||
|
||||
// Selecionar dias da semana
|
||||
await page.getByText(/seg/i).click();
|
||||
|
||||
// Salvar
|
||||
await page.getByRole('button', { name: /salvar|criar/i }).click();
|
||||
|
||||
// Deve redirecionar para lista
|
||||
await expect(page).toHaveURL(/\/admin\/dashboard\/class/, { timeout: 15000 });
|
||||
});
|
||||
});
|
||||
|
||||
test.describe('Editar Turma Existente', () => {
|
||||
test('deve carregar dados da turma', async ({ page }) => {
|
||||
// TODO: Usar ID de turma de teste
|
||||
await page.goto('/admin/dashboard/class/edit/6975e7cfb41e291a99a79ece');
|
||||
|
||||
await expect(page.getByLabel(/título/i)).not.toBeEmpty();
|
||||
});
|
||||
|
||||
test('deve permitir modificar professores', async ({ page }) => {
|
||||
await page.goto('/admin/dashboard/class/edit/6975e7cfb41e291a99a79ece');
|
||||
|
||||
// Desmarcar professor selecionado
|
||||
const checkedTeacher = page.locator('input[type="checkbox"]:checked').first();
|
||||
if (await checkedTeacher.isVisible()) {
|
||||
await checkedTeacher.uncheck();
|
||||
}
|
||||
});
|
||||
|
||||
test('deve permitir adicionar alunos via select', async ({ page }) => {
|
||||
await page.goto('/admin/dashboard/class/edit/6975e7cfb41e291a99a79ece');
|
||||
|
||||
const studentSelect = page.getByRole('combobox').filter({ hasText: /adicionar aluno/i });
|
||||
if (await studentSelect.isVisible()) {
|
||||
// Selecionar primeiro aluno disponível
|
||||
await studentSelect.selectOption({ index: 1 });
|
||||
|
||||
// Verificar se apareceu tag do aluno
|
||||
await expect(page.locator('.student-tag')).toBeVisible();
|
||||
}
|
||||
});
|
||||
|
||||
test('deve permitir remover aluno da seleção', async ({ page }) => {
|
||||
await page.goto('/admin/dashboard/class/edit/6975e7cfb41e291a99a79ece');
|
||||
|
||||
// Se há tags de alunos, tentar remover
|
||||
const studentTag = page.locator('.student-tag').first();
|
||||
if (await studentTag.isVisible()) {
|
||||
await studentTag.getByRole('button').click();
|
||||
// Verificar se foi removido
|
||||
}
|
||||
});
|
||||
|
||||
test('deve salvar alterações com sucesso', async ({ page }) => {
|
||||
await page.goto('/admin/dashboard/class/edit/6975e7cfb41e291a99a79ece');
|
||||
|
||||
const originalTitle = await page.getByLabel(/título/i).inputValue();
|
||||
await page.getByLabel(/título/i).fill(`${originalTitle} (editado)`);
|
||||
|
||||
await page.getByRole('button', { name: /salvar|atualizar/i }).click();
|
||||
|
||||
await expect(page).toHaveURL(/\/admin\/dashboard\/class/, { timeout: 15000 });
|
||||
});
|
||||
});
|
||||
|
||||
test.describe('Dias da Semana - Checkbox', () => {
|
||||
test('deve mostrar todos os dias', async ({ page }) => {
|
||||
await page.goto('/admin/dashboard/class/add');
|
||||
|
||||
const days = ['Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sab', 'Dom'];
|
||||
for (const day of days) {
|
||||
await expect(page.getByText(day, { exact: true })).toBeVisible();
|
||||
}
|
||||
});
|
||||
|
||||
test('deve permitir selecionar múltiplos dias', async ({ page }) => {
|
||||
await page.goto('/admin/dashboard/class/add');
|
||||
|
||||
await page.getByText('Seg').click();
|
||||
await page.getByText('Qua').click();
|
||||
await page.getByText('Sex').click();
|
||||
|
||||
// Verificar se estão marcados
|
||||
const segCheckbox = page.getByText('Seg').locator('input[type="checkbox"]');
|
||||
await expect(segCheckbox).toBeChecked();
|
||||
});
|
||||
});
|
||||
|
||||
test.describe('Professores - Checkbox', () => {
|
||||
test('deve mostrar lista de professores disponíveis', async ({ page }) => {
|
||||
await page.goto('/admin/dashboard/class/add');
|
||||
|
||||
await expect(page.getByText(/professores/i)).toBeVisible();
|
||||
});
|
||||
|
||||
test('deve permitir selecionar múltiplos professores', async ({ page }) => {
|
||||
await page.goto('/admin/dashboard/class/add');
|
||||
|
||||
const checkboxes = page.locator('input[type="checkbox"]');
|
||||
const count = await checkboxes.count();
|
||||
|
||||
if (count >= 2) {
|
||||
await checkboxes.nth(0).check();
|
||||
await checkboxes.nth(1).check();
|
||||
|
||||
await expect(checkboxes.nth(0)).toBeChecked();
|
||||
await expect(checkboxes.nth(1)).toBeChecked();
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user