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
81 lines
3.2 KiB
TypeScript
81 lines
3.2 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
import {
|
|
seedCampaign,
|
|
seedArc,
|
|
deleteCampaign,
|
|
getArcById,
|
|
type SeededCampaign,
|
|
type SeededArc,
|
|
} from '../../fixtures/api';
|
|
|
|
test.describe('Arc edit', () => {
|
|
let campaign: SeededCampaign;
|
|
let arc: SeededArc;
|
|
|
|
test.beforeEach(async ({ request }) => {
|
|
campaign = await seedCampaign(request);
|
|
arc = await seedArc(request, { campaignId: campaign.id });
|
|
});
|
|
|
|
test.afterEach(async ({ request }) => {
|
|
if (campaign?.id) await deleteCampaign(request, campaign.id);
|
|
});
|
|
|
|
test('form is prefilled with the arc name', async ({ page }) => {
|
|
await page.goto(`/campaigns/${campaign.id}/arcs/${arc.id}/edit`);
|
|
await expect(page.getByLabel(/Titre de l'arc/i)).toHaveValue(arc.name);
|
|
});
|
|
|
|
test('edits all narrative fields and persists them to API', async ({ page, request }) => {
|
|
const newName = `${arc.name} renamed`;
|
|
const values = {
|
|
description: "Un arc sombre où la trahison s'installe.",
|
|
themes: 'Trahison, rédemption, dette de sang.',
|
|
stakes: 'La survie du royaume est en jeu.',
|
|
gmNotes: 'Révéler le traître en scène 3.',
|
|
rewards: 'Relique ancienne + alliance avec le clan nordique.',
|
|
resolution: 'Le héros pardonne au traître ou le tue.',
|
|
};
|
|
|
|
await page.goto(`/campaigns/${campaign.id}/arcs/${arc.id}/edit`);
|
|
// Attend que le formulaire soit prerempli par le ngOnInit (HTTP async) avant
|
|
// de fill — sinon le patchValue du load arrive APRES nos fills et ecrase
|
|
// les valeurs, le test echoue alors a la verif persisted.name.
|
|
await expect(page.getByLabel(/Titre de l'arc/i)).toHaveValue(arc.name);
|
|
|
|
await page.getByLabel(/Titre de l'arc/i).fill(newName);
|
|
await page.getByLabel(/Synopsis de l'arc/i).fill(values.description);
|
|
await page.getByLabel(/Thèmes principaux/i).fill(values.themes);
|
|
await page.getByLabel(/Enjeux globaux/i).fill(values.stakes);
|
|
await page.getByLabel(/Notes et planification du MJ/i).fill(values.gmNotes);
|
|
await page.getByLabel(/Récompenses et progression/i).fill(values.rewards);
|
|
await page.getByLabel(/Dénouement prévu/i).fill(values.resolution);
|
|
|
|
await page.getByRole('button', { name: /^Sauvegarder$/i }).click();
|
|
|
|
await expect(page).toHaveURL(new RegExp(`/campaigns/${campaign.id}/arcs/${arc.id}$`));
|
|
|
|
const persisted = await getArcById(request, arc.id);
|
|
expect(persisted.name).toBe(newName);
|
|
expect(persisted.description).toBe(values.description);
|
|
expect(persisted.themes).toBe(values.themes);
|
|
expect(persisted.stakes).toBe(values.stakes);
|
|
expect(persisted.gmNotes).toBe(values.gmNotes);
|
|
expect(persisted.rewards).toBe(values.rewards);
|
|
expect(persisted.resolution).toBe(values.resolution);
|
|
});
|
|
|
|
test('save button is disabled when name is empty', async ({ page }) => {
|
|
await page.goto(`/campaigns/${campaign.id}/arcs/${arc.id}/edit`);
|
|
|
|
const nameField = page.getByLabel(/Titre de l'arc/i);
|
|
const saveBtn = page.getByRole('button', { name: /^Sauvegarder$/i });
|
|
|
|
await expect(saveBtn).toBeEnabled();
|
|
await nameField.fill('');
|
|
await expect(saveBtn).toBeDisabled();
|
|
await nameField.fill('Valid');
|
|
await expect(saveBtn).toBeEnabled();
|
|
});
|
|
});
|