Files
annu-kute-ced/tests/e2e/test_homepage.py
T

63 lines
2.5 KiB
Python
Raw Normal View History

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