75 lines
2.8 KiB
TypeScript
75 lines
2.8 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
import {
|
|
seedLoreWithFolder,
|
|
seedTemplate,
|
|
deleteLore,
|
|
getTemplateById,
|
|
type SeededLore,
|
|
type SeededTemplate,
|
|
} from '../../fixtures/api';
|
|
|
|
test.describe('Template edit', () => {
|
|
let seeded: SeededLore;
|
|
let template: SeededTemplate;
|
|
|
|
test.beforeEach(async ({ request }) => {
|
|
seeded = await seedLoreWithFolder(request);
|
|
template = await seedTemplate(request, {
|
|
loreId: seeded.id,
|
|
defaultNodeId: seeded.rootFolderId,
|
|
fieldNames: ['Nom', 'Description'],
|
|
});
|
|
});
|
|
|
|
test.afterEach(async ({ request }) => {
|
|
if (seeded?.id) await deleteLore(request, seeded.id);
|
|
});
|
|
|
|
test('form is prefilled with the current template data', async ({ page }) => {
|
|
await page.goto(`/lore/${seeded.id}/templates/${template.id}`);
|
|
|
|
await expect(page.getByLabel(/^Nom$/)).toHaveValue(template.name);
|
|
await expect(page.getByLabel(/Dossier par défaut/i)).toHaveValue(seeded.rootFolderId);
|
|
await expect(page.locator('.fields-list .field-chip', { hasText: 'Nom' })).toBeVisible();
|
|
await expect(page.locator('.fields-list .field-chip', { hasText: 'Description' })).toBeVisible();
|
|
});
|
|
|
|
test('renames the template and persists to API', async ({ page, request }) => {
|
|
const newName = `${template.name} renamed`;
|
|
|
|
await page.goto(`/lore/${seeded.id}/templates/${template.id}`);
|
|
|
|
const nameInput = page.getByLabel(/^Nom$/);
|
|
await nameInput.fill(newName);
|
|
await page.getByLabel(/Description/i).fill('Description mise à jour');
|
|
|
|
await page.getByRole('button', { name: /^Sauvegarder$/i }).click();
|
|
|
|
await expect(page).toHaveURL(new RegExp(`/lore/${seeded.id}$`));
|
|
|
|
const persisted = await getTemplateById(request, template.id);
|
|
expect(persisted.name).toBe(newName);
|
|
expect(persisted.description).toBe('Description mise à jour');
|
|
});
|
|
|
|
test('adds a new field, removes an existing one, and persists the order', async ({ page, request }) => {
|
|
await page.goto(`/lore/${seeded.id}/templates/${template.id}`);
|
|
|
|
const addInput = page.getByPlaceholder('+ Ajouter un champ');
|
|
await addInput.fill('Stats');
|
|
await addInput.press('Enter');
|
|
await expect(page.locator('.fields-list .field-chip', { hasText: 'Stats' })).toBeVisible();
|
|
|
|
const descriptionRow = page.locator('.fields-list .field-row', { hasText: 'Description' });
|
|
await descriptionRow.getByRole('button', { name: 'Supprimer' }).click();
|
|
await expect(page.locator('.fields-list .field-chip', { hasText: 'Description' })).toHaveCount(0);
|
|
|
|
await page.getByRole('button', { name: /^Sauvegarder$/i }).click();
|
|
await expect(page).toHaveURL(new RegExp(`/lore/${seeded.id}$`));
|
|
|
|
const persisted = await getTemplateById(request, template.id);
|
|
const names = persisted.fields.map((f) => f.name);
|
|
expect(names).toEqual(['Nom', 'Stats']);
|
|
});
|
|
});
|