"""Tests E2E de la page d'accueil (index.php).""" import re import pytest def test_homepage_title(page, base_url, site_name): """Le titre de la page correspond au SITE_NAME configuré.""" page.goto(base_url + "/index.php", wait_until="domcontentloaded") assert page.title() == site_name def test_homepage_csrf_meta_token(page, base_url): """La balise meta csrf-token est présente au format 'timestamp:hmac'.""" page.goto(base_url + "/index.php", wait_until="domcontentloaded") token = page.locator('meta[name="csrf-token"]').get_attribute("content") assert token, "La balise meta csrf-token est absente ou vide" assert re.fullmatch(r"\d+:[0-9a-f]{64}", token), ( f"Format de token CSRF inattendu : {token!r}" ) def test_homepage_main_sections(page, base_url): """Les sections principales sont rendues côté serveur.""" page.goto(base_url + "/index.php", wait_until="domcontentloaded") # Titres de sections vidéo (identifiants stables du markup) assert page.locator("#shorts-heading").inner_text() == "Shorts" assert page.locator("#recent-videos-heading").inner_text() == "Dernières vidéos" assert page.locator("#trending-videos-heading").inner_text() == "Tendances" # Section du fil d'actualités Mastodon assert page.locator(".mastodon-section .mt-title").inner_text() != "" # Au moins une grille de vidéos assert page.locator(".video-section").count() >= 3 def test_homepage_view_more_buttons(page, base_url): """Chaque section vidéo propose un bouton 'Voir plus'.""" page.goto(base_url + "/index.php", wait_until="domcontentloaded") boutons = page.locator("button.view-more") # Sections 'Dernières vidéos' et 'Tendances' toujours présentes # (+ une par catégorie contenant des vidéos) assert boutons.count() >= 2 for i in range(boutons.count()): # text_content : le texte DOM brut (inner_text subit text-transform: uppercase) assert boutons.nth(i).text_content() == "Voir plus" def test_homepage_video_cards(page, base_url): """Des cartes vidéo remontent de l'API PeerTube (nécessite le réseau).""" page.goto(base_url + "/index.php", wait_until="domcontentloaded") cartes = page.locator(".video-card") if cartes.count() == 0: pytest.skip("Aucune vidéo reçue de l'API PeerTube (réseau indisponible ?)") # Chaque carte expose un identifiant vidéo exploitable for i in range(cartes.count()): assert cartes.nth(i).get_attribute("data-video-id")