63 lines
2.5 KiB
Python
63 lines
2.5 KiB
Python
"""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")
|