97 lines
3.3 KiB
TypeScript
97 lines
3.3 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
import {
|
|
seedLoreWithFolder,
|
|
deleteLore,
|
|
deleteCampaign,
|
|
getCampaigns,
|
|
type SeededLore,
|
|
} from '../../fixtures/api';
|
|
|
|
test.describe('Campaign creation', () => {
|
|
const createdCampaignIds: string[] = [];
|
|
let linkedLore: SeededLore;
|
|
|
|
test.beforeEach(async ({ request }) => {
|
|
linkedLore = await seedLoreWithFolder(request);
|
|
});
|
|
|
|
test.afterEach(async ({ request }) => {
|
|
while (createdCampaignIds.length) {
|
|
await deleteCampaign(request, createdCampaignIds.pop()!);
|
|
}
|
|
if (linkedLore?.id) await deleteLore(request, linkedLore.id);
|
|
});
|
|
|
|
test('creates a standalone campaign (no lore, no system) and shows it in the grid', async ({
|
|
page,
|
|
request,
|
|
}) => {
|
|
const campaignName = `Campagne E2E ${Date.now()}`;
|
|
const description = 'Une campagne créée par les tests automatisés.';
|
|
|
|
await page.goto('/campaigns');
|
|
await expect(page.getByRole('heading', { name: /Vos Campagnes|Campagnes/i })).toBeVisible();
|
|
|
|
await page.locator('.campaign-card.card-new').click();
|
|
|
|
const modal = page.locator('.modal');
|
|
await expect(modal).toBeVisible();
|
|
|
|
await modal.getByLabel(/Nom de la campagne/i).fill(campaignName);
|
|
await modal.getByLabel(/Description/i).fill(description);
|
|
await modal.getByLabel(/Nombre de joueurs/i).fill('5');
|
|
|
|
await modal.getByRole('button', { name: /^Créer la campagne$/i }).click();
|
|
|
|
await expect(modal).not.toBeVisible();
|
|
|
|
const newCard = page.locator('.campaign-card', { hasText: campaignName });
|
|
await expect(newCard).toBeVisible();
|
|
|
|
const campaigns = await getCampaigns(request);
|
|
const created = campaigns.find((c) => c.name === campaignName);
|
|
expect(created).toBeDefined();
|
|
expect(created!.loreId).toBeNull();
|
|
createdCampaignIds.push(created!.id);
|
|
});
|
|
|
|
test('creates a campaign linked to an existing lore', async ({ page, request }) => {
|
|
const campaignName = `Campagne liée ${Date.now()}`;
|
|
|
|
await page.goto('/campaigns');
|
|
await page.locator('.campaign-card.card-new').click();
|
|
|
|
const modal = page.locator('.modal');
|
|
await modal.getByLabel(/Nom de la campagne/i).fill(campaignName);
|
|
await modal.getByLabel(/Univers associé/i).selectOption({ label: linkedLore.name });
|
|
|
|
await modal.getByRole('button', { name: /^Créer la campagne$/i }).click();
|
|
await expect(modal).not.toBeVisible();
|
|
|
|
const campaigns = await getCampaigns(request);
|
|
const created = campaigns.find((c) => c.name === campaignName);
|
|
expect(created).toBeDefined();
|
|
expect(created!.loreId).toBe(linkedLore.id);
|
|
createdCampaignIds.push(created!.id);
|
|
});
|
|
|
|
test('submit is disabled without a name and when player count is invalid', async ({ page }) => {
|
|
await page.goto('/campaigns');
|
|
await page.locator('.campaign-card.card-new').click();
|
|
|
|
const modal = page.locator('.modal');
|
|
const submit = modal.getByRole('button', { name: /^Créer la campagne$/i });
|
|
|
|
await expect(submit).toBeDisabled();
|
|
|
|
await modal.getByLabel(/Nom de la campagne/i).fill('Valid name');
|
|
await expect(submit).toBeEnabled();
|
|
|
|
await modal.getByLabel(/Nombre de joueurs/i).fill('0');
|
|
await expect(submit).toBeDisabled();
|
|
|
|
await modal.getByLabel(/Nombre de joueurs/i).fill('3');
|
|
await expect(submit).toBeEnabled();
|
|
});
|
|
});
|