Correction de plusieurs anomalies : problème de switch entre 2 templates (par exemple si on était sur un template 1 et qu'on voulait passer directement au 2, ce dernier ne chargeait pas) ; correction du soucis d'apparition de la sidebar à gauche qui disparaissait sans explication ; problème de redirection : lorsqu'on terminait de créer un PJ / PNJ ; on arrivait sur l'accueil de la campagne au lieu de voir le résultat de la création. Problème de redirection également lors du clique sur un PNJ / PJ sur le coté : on arrivait sur l'édition au lieu de la présentation. Correction de la première lettre stylisée : tout est au même style comme ça plus de probleme de lecture. Nouveautées : stylisation des modales (notamment suppression, warning.....) avec en prime l'ajout d'un warning lors du changement de système pour avertir que les fiches persos ne sont pas conservées. Ajout d'une option pour créer un game system directement à la création d'une campagne afin de faciliter la mise en place de cette dernière. Ajout d'un bouton pour créer un nouveau template directement lorsqu'on créer une page : ça permet de créer un template et de revenir sur la page qu'on était en train de créer sans perdre le titre. Passage en bêta 0.8.4
78 lines
2.9 KiB
TypeScript
78 lines
2.9 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
import {
|
|
seedCampaign,
|
|
deleteCampaign,
|
|
getNpcsByCampaign,
|
|
type SeededCampaign,
|
|
} from '../../fixtures/api';
|
|
|
|
test.describe('NPC creation', () => {
|
|
let campaign: SeededCampaign;
|
|
|
|
test.beforeEach(async ({ request }) => {
|
|
campaign = await seedCampaign(request);
|
|
});
|
|
|
|
test.afterEach(async ({ request }) => {
|
|
if (campaign?.id) await deleteCampaign(request, campaign.id);
|
|
});
|
|
|
|
test('creates an NPC and redirects to the NPC detail page', async ({ page, request }) => {
|
|
// Note : depuis la refonte 2026-04-30 les fiches PNJ utilisent des champs
|
|
// templates dynamiques pilotes par le GameSystem (plus de markdownContent
|
|
// libre). La campagne seedee n'a pas de GameSystem donc on ne fill que le
|
|
// nom — c'est suffisant pour valider la creation + la redirection.
|
|
const npcName = `Borin le forgeron ${Date.now()}`;
|
|
|
|
await page.goto(`/campaigns/${campaign.id}/npcs/create`);
|
|
await expect(page.getByRole('heading', { name: /Nouveau PNJ/i })).toBeVisible();
|
|
|
|
await page.getByLabel(/Nom du PNJ/i).fill(npcName);
|
|
|
|
await page.getByRole('button', { name: /^Créer$/i }).click();
|
|
|
|
// Redirection vers la fiche du PNJ après création
|
|
await expect(page).toHaveURL(new RegExp(`/campaigns/${campaign.id}/npcs/\\d+$`));
|
|
|
|
// Persistance vérifiée via API
|
|
const npcs = await getNpcsByCampaign(request, campaign.id);
|
|
const created = npcs.find((n) => n.name === npcName);
|
|
expect(created).toBeDefined();
|
|
});
|
|
|
|
test('submit is disabled when name is empty', async ({ page }) => {
|
|
await page.goto(`/campaigns/${campaign.id}/npcs/create`);
|
|
|
|
const submit = page.getByRole('button', { name: /^Créer$/i });
|
|
await expect(submit).toBeDisabled();
|
|
|
|
await page.getByLabel(/Nom du PNJ/i).fill('Elara');
|
|
await expect(submit).toBeEnabled();
|
|
|
|
await page.getByLabel(/Nom du PNJ/i).fill(' ');
|
|
await expect(submit).toBeDisabled();
|
|
});
|
|
|
|
test('NPC appears in the sidebar PNJ branch', async ({ page, request }) => {
|
|
const npcName = `Sidebar test ${Date.now()}`;
|
|
|
|
await page.goto(`/campaigns/${campaign.id}/npcs/create`);
|
|
await page.getByLabel(/Nom du PNJ/i).fill(npcName);
|
|
await page.getByRole('button', { name: /^Créer$/i }).click();
|
|
|
|
await expect(page).toHaveURL(new RegExp(`/campaigns/${campaign.id}/npcs/\\d+$`));
|
|
|
|
// Le nœud "PNJ" doit apparaître dans la sidebar avec le nouveau PNJ.
|
|
// On clique sur le nœud PNJ pour le déplier au cas où il serait fermé,
|
|
// puis on vérifie que le PNJ est listé.
|
|
const pnjNode = page.getByRole('button', { name: /^PNJ\b/ }).or(
|
|
page.locator('.tree-item', { hasText: 'PNJ' }).first(),
|
|
);
|
|
await expect(pnjNode.first()).toBeVisible();
|
|
|
|
// Vérification fallback via API : la liste contient bien le PNJ créé.
|
|
const npcs = await getNpcsByCampaign(request, campaign.id);
|
|
expect(npcs.map((n) => n.name)).toContain(npcName);
|
|
});
|
|
});
|