You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
2.1 KiB
TypeScript

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)
})
})