Ajout de tests playwright et correction de tests non passant (pour les tests ajoutés : partie game system ).
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
This commit is contained in:
111
web/e2e/tests/game-system/game-system-sections.spec.ts
Normal file
111
web/e2e/tests/game-system/game-system-sections.spec.ts
Normal file
@@ -0,0 +1,111 @@
|
||||
import { test, expect } from '@playwright/test';
|
||||
import {
|
||||
seedGameSystem,
|
||||
deleteGameSystem,
|
||||
type SeededGameSystem,
|
||||
} from '../../fixtures/api';
|
||||
|
||||
test.describe('GameSystem rule sections editor', () => {
|
||||
let gs: SeededGameSystem;
|
||||
|
||||
test.beforeEach(async ({ request }) => {
|
||||
// On part d'un GameSystem vide (pas de regles seedees) — chaque test gere
|
||||
// ses propres ajouts pour eviter les couplages.
|
||||
gs = await seedGameSystem(request);
|
||||
});
|
||||
|
||||
test.afterEach(async ({ request }) => {
|
||||
if (gs?.id) await deleteGameSystem(request, gs.id);
|
||||
});
|
||||
|
||||
test('adds a suggested section, fills it, and persists it', async ({ page, request }) => {
|
||||
const sectionContent = 'Initiative à d20, action+bonus+mouvement, dégâts par dés.';
|
||||
|
||||
await page.goto(`/game-systems/${gs.id}/edit`);
|
||||
// Attendre le chargement du form (nom prerempli).
|
||||
await expect(page.getByLabel(/^Nom/i)).toHaveValue(gs.name);
|
||||
|
||||
// Empty state visible tant qu'aucune section n'est ajoutee.
|
||||
await expect(page.locator('.section-list .empty-hint')).toBeVisible();
|
||||
|
||||
// Ajout via la chip suggeree "Combat".
|
||||
await page.locator('.add-row .chip', { hasText: 'Combat' }).click();
|
||||
|
||||
// Une section-card est apparue avec titre "Combat" prerempli + textarea visible.
|
||||
const card = page.locator('.section-card').first();
|
||||
await expect(card).toBeVisible();
|
||||
await expect(card.locator('.section-title-input')).toHaveValue('Combat');
|
||||
await card.locator('.section-content').fill(sectionContent);
|
||||
|
||||
// Save + retour a la liste.
|
||||
await page.getByRole('button', { name: /^Enregistrer$/i }).click();
|
||||
await expect(page).toHaveURL(/\/game-systems$/);
|
||||
|
||||
// Verification cote API : le markdown contient bien la section + son contenu.
|
||||
const persisted = await request.get(`/api/game-systems/${gs.id}`).then((r) => r.json());
|
||||
expect(persisted.rulesMarkdown).toContain('## Combat');
|
||||
expect(persisted.rulesMarkdown).toContain(sectionContent);
|
||||
});
|
||||
|
||||
test('disables a suggested chip after it has been used', async ({ page }) => {
|
||||
await page.goto(`/game-systems/${gs.id}/edit`);
|
||||
await expect(page.getByLabel(/^Nom/i)).toHaveValue(gs.name);
|
||||
|
||||
const combatChip = page.locator('.add-row .chip', { hasText: 'Combat' });
|
||||
await expect(combatChip).toBeEnabled();
|
||||
|
||||
await combatChip.click();
|
||||
|
||||
// Apres ajout, la chip "Combat" est desactivee (suggestion deja utilisee).
|
||||
await expect(combatChip).toBeDisabled();
|
||||
});
|
||||
|
||||
test('adds a custom blank section via "Autre…" and lets the user name it', async ({ page }) => {
|
||||
await page.goto(`/game-systems/${gs.id}/edit`);
|
||||
await expect(page.getByLabel(/^Nom/i)).toHaveValue(gs.name);
|
||||
|
||||
await page.locator('.add-row .chip-custom', { hasText: /Autre/i }).click();
|
||||
|
||||
// Section vierge ajoutee : titre vide, prete a remplir.
|
||||
const card = page.locator('.section-card').first();
|
||||
await expect(card).toBeVisible();
|
||||
const titleInput = card.locator('.section-title-input');
|
||||
await expect(titleInput).toHaveValue('');
|
||||
await titleInput.fill('Sorts');
|
||||
await expect(titleInput).toHaveValue('Sorts');
|
||||
});
|
||||
|
||||
test('removes a section', async ({ page }) => {
|
||||
await page.goto(`/game-systems/${gs.id}/edit`);
|
||||
await expect(page.getByLabel(/^Nom/i)).toHaveValue(gs.name);
|
||||
|
||||
await page.locator('.add-row .chip', { hasText: 'Combat' }).click();
|
||||
await page.locator('.add-row .chip', { hasText: 'Classes' }).click();
|
||||
|
||||
await expect(page.locator('.section-card')).toHaveCount(2);
|
||||
|
||||
// Supprime la premiere section (Combat).
|
||||
await page.locator('.section-card').first().locator('.btn-remove').click();
|
||||
await expect(page.locator('.section-card')).toHaveCount(1);
|
||||
await expect(page.locator('.section-card').first().locator('.section-title-input')).toHaveValue('Classes');
|
||||
});
|
||||
|
||||
test('collapses and expands a section', async ({ page }) => {
|
||||
await page.goto(`/game-systems/${gs.id}/edit`);
|
||||
await expect(page.getByLabel(/^Nom/i)).toHaveValue(gs.name);
|
||||
|
||||
await page.locator('.add-row .chip', { hasText: 'Combat' }).click();
|
||||
const card = page.locator('.section-card').first();
|
||||
|
||||
// Par defaut deployee : textarea visible.
|
||||
await expect(card.locator('.section-content')).toBeVisible();
|
||||
|
||||
// Clic sur le bouton collapse → textarea masquee.
|
||||
await card.locator('.btn-collapse').click();
|
||||
await expect(card.locator('.section-content')).toHaveCount(0);
|
||||
|
||||
// Re-clic → re-deployee.
|
||||
await card.locator('.btn-collapse').click();
|
||||
await expect(card.locator('.section-content')).toBeVisible();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user