import { expect, test } from '@playwright/test' test.describe('critical frontend flows', () => { test.beforeEach(async ({ page }) => { await page.goto('/') await page.evaluate(() => { localStorage.clear() }) }) test('player registration and demo login flow', async ({ page }) => { await page.goto('/') await page.evaluate(() => { localStorage.setItem('kf.playerName', 'E2E Player') }) await page.goto('/game') await expect(page).toHaveURL(/\/game$/) await page.goto('/profile') await expect(page.getByText('Connexion requise pour accéder au profil joueur.')).toBeVisible() await page.getByRole('button', { name: 'Se connecter (mode démo)' }).click() await expect(page.getByText('Statistiques joueur')).toBeVisible() }) test('complete game session flow', async ({ page }) => { await page.goto('/') await page.evaluate(() => { localStorage.setItem( 'kf.lastResult', JSON.stringify({ playerName: 'Game Runner', finalScore: 2, answered: 1, correct: 1, successRate: 100, durationSec: 45, leaderboardPosition: 1, finishedAt: new Date().toISOString(), }) ) }) await page.goto('/results') await expect(page).toHaveURL(/\/results$/) await expect(page.getByText('Score final : 2')).toBeVisible() }) test('leaderboard viewing flow', async ({ page }) => { await page.goto('/leaderboard') await expect(page.getByRole('heading', { name: 'Leaderboard' })).toBeVisible() await expect(page.getByRole('table', { name: 'top-10-leaderboard' })).toBeVisible() await expect(page.getByText('Alice')).toBeVisible() }) test('admin question management flow', async ({ page }) => { await page.goto('/admin/questions') await expect(page.getByText('Quel est le plus petit nombre premier ?')).toBeVisible() await page.getByRole('button', { name: 'Supprimer' }).first().click() await expect(page.getByText('Quel est le plus petit nombre premier ?')).toHaveCount(0) }) })