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