// @ts-check import { test, expect } from '@playwright/test' test.describe('Portail (build statique)', () => { test('accueil : titre, intro, liens rapides, grille présentations', async ({ page }) => { await page.goto('/') await expect(page.getByRole('heading', { name: 'Talks', level: 1 })).toBeVisible() await expect(page.getByRole('heading', { name: 'À propos de ce site' })).toBeVisible() await expect(page.getByRole('heading', { name: 'Liens rapides' })).toBeVisible() await expect(page.getByRole('heading', { name: 'Présentations' })).toBeVisible() const qrCanvases = page.locator('.qr-section canvas') // Un seul QR sur l’accueil quand talkRepoUrl est vide (QR dépôt optionnel). await expect(qrCanvases).toHaveCount(1) const cards = page.locator('.talks-section--home .talk-card') await expect(cards).toHaveCount(2) }) test('navigation : liste → fiche → href slides cohérents', async ({ page }) => { await page.goto('/presentations/') await expect(page.getByRole('heading', { name: 'Présentations', level: 1 })).toBeVisible() await expect(page.locator('article.talk-card--list')).toHaveCount(2) await page .locator('article.talk-card--list') .filter({ hasText: 'Kubernetes Operators' }) .getByRole('link', { name: 'Kubernetes Operators' }) .click() await expect(page).toHaveURL(/\/presentations\/kubernetes-operators\/?$/) const slidesLink = page.getByRole('link', { name: 'Voir les slides' }) await expect(slidesLink).toHaveAttribute('href', /\/slides\/kubernetes-operators\/1\/?$/) }) test('fiche kubernetes-operators : clic « Voir les slides » ouvre la 1ère planche Slidev', async ({ page }) => { await page.goto('/presentations/kubernetes-operators/') await expect(page.getByRole('heading', { name: 'Kubernetes Operators', level: 1 })).toBeVisible() await page.getByRole('link', { name: 'Voir les slides' }).click() await expect(page).toHaveURL(/\/slides\/kubernetes-operators\/1\/?$/) await expect(page.locator('#app')).toBeAttached() await expect(page).toHaveTitle(/Kubernetes Operators/i) }) test('fiche : boutons slides + bloc QR deck', async ({ page }) => { await page.goto('/presentations/spring-ai/') await expect(page.getByRole('heading', { name: 'Spring AI', level: 1 })).toBeVisible() await expect(page.getByRole('link', { name: 'Voir les slides' })).toHaveAttribute( 'href', /\/slides\/spring-ai\/1\/?$/, ) await expect(page.getByRole('heading', { name: 'Partager les slides' })).toBeVisible() await expect(page.locator('.qr-deck canvas')).toHaveCount(1) }) test('deck Slidev servi sous /slides//1', async ({ page }) => { await page.goto('/slides/kubernetes-operators/1') await expect(page.locator('#app')).toBeAttached() await expect(page).toHaveTitle(/Kubernetes Operators/i) }) test('lien accueil → liste complète', async ({ page }) => { await page.goto('/') await page.getByRole('link', { name: /Voir toutes les présentations/ }).click() await expect(page).toHaveURL(/\/presentations\/?$/) }) })