78 lines
2.7 KiB
TypeScript
78 lines
2.7 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
import { deleteLore } from '../../fixtures/api';
|
|
|
|
test.describe('Lore creation', () => {
|
|
const createdLoreIds: string[] = [];
|
|
|
|
test.afterEach(async ({ request }) => {
|
|
while (createdLoreIds.length) {
|
|
const id = createdLoreIds.pop()!;
|
|
await deleteLore(request, id);
|
|
}
|
|
});
|
|
|
|
test('opens the modal, creates a lore, and shows it in the grid', async ({ page, request }) => {
|
|
const loreName = `Univers E2E ${Date.now()}`;
|
|
const description = "Un univers créé par les tests automatisés.";
|
|
|
|
await page.goto('/lore');
|
|
|
|
await expect(page.getByRole('heading', { name: /Vos Univers/i })).toBeVisible();
|
|
|
|
await page.locator('.lore-card.card-new').click();
|
|
|
|
const modal = page.locator('.modal');
|
|
await expect(modal).toBeVisible();
|
|
await expect(modal.getByRole('heading', { name: /Créer un nouveau Lore/i })).toBeVisible();
|
|
|
|
await modal.getByLabel(/Nom de l'univers/i).fill(loreName);
|
|
await modal.getByLabel('Description').fill(description);
|
|
|
|
await modal.getByRole('button', { name: /^Créer le lore$/i }).click();
|
|
|
|
await expect(modal).not.toBeVisible();
|
|
|
|
const newCard = page.locator('.lore-card', { hasText: loreName });
|
|
await expect(newCard).toBeVisible();
|
|
await expect(newCard).toContainText(description);
|
|
|
|
const allLores = await request.get('/api/lores').then((r) => r.json());
|
|
const created = allLores.find((l: { name: string; id: string }) => l.name === loreName);
|
|
expect(created).toBeDefined();
|
|
createdLoreIds.push(created.id);
|
|
});
|
|
|
|
test('submit button is disabled when name is empty', async ({ page }) => {
|
|
await page.goto('/lore');
|
|
await page.locator('.lore-card.card-new').click();
|
|
|
|
const modal = page.locator('.modal');
|
|
const submit = modal.getByRole('button', { name: /^Créer le lore$/i });
|
|
|
|
await expect(submit).toBeDisabled();
|
|
|
|
await modal.getByLabel(/Nom de l'univers/i).fill('Quelque chose');
|
|
await expect(submit).toBeEnabled();
|
|
|
|
await modal.getByLabel(/Nom de l'univers/i).fill('');
|
|
await expect(submit).toBeDisabled();
|
|
});
|
|
|
|
test('clicking the backdrop closes the modal without creating', async ({ page }) => {
|
|
const typedButAbandoned = `Univers abandonné ${Date.now()}`;
|
|
|
|
await page.goto('/lore');
|
|
await page.locator('.lore-card.card-new').click();
|
|
|
|
const modal = page.locator('.modal');
|
|
await expect(modal).toBeVisible();
|
|
|
|
await modal.getByLabel(/Nom de l'univers/i).fill(typedButAbandoned);
|
|
|
|
await page.locator('.modal-backdrop').click({ position: { x: 5, y: 5 } });
|
|
await expect(modal).not.toBeVisible();
|
|
|
|
await expect(page.locator('.lore-card', { hasText: typedButAbandoned })).toHaveCount(0);
|
|
});
|
|
});
|