test(e2e): configure CSRF_SECRET for E2E tests

This commit is contained in:
2026-07-27 01:55:36 +04:00
parent 71e367b86f
commit 3b074f00d8
+20
View File
@@ -71,6 +71,20 @@ def base_url():
port = _trouver_port()
url = f"http://{SERVER_HOST}:{port}"
# Les tokens CSRF stateless sont signés avec CSRF_SECRET. Sans configuration
# locale, getCsrfSecret() génère un secret éphémère par processus, ce qui
# rend les tokens invalides d'une requête à l'autre sous `php -S`.
# On crée donc une configuration locale temporaire avec un secret fixe.
config_local = PROJECT_ROOT / "includes" / "config.local.php"
config_local_exists = config_local.exists()
if not config_local_exists:
config_local.write_text(
"<?php\n"
"// Configuration temporaire pour les tests E2E.\n"
"define('CSRF_SECRET', 'e2e-test-secret-do-not-use-in-prod');\n",
encoding="utf-8",
)
log = tempfile.NamedTemporaryFile(
mode="w+", prefix="php-e2e-", suffix=".log", delete=False
)
@@ -103,6 +117,8 @@ def base_url():
if not pret:
proc.terminate()
if not config_local_exists:
config_local.unlink(missing_ok=True)
raise RuntimeError(
f"Le serveur PHP ne répond pas après {STARTUP_TIMEOUT} s"
)
@@ -114,6 +130,8 @@ def base_url():
raise RuntimeError(f"index.php a répondu HTTP {rep.status}")
except Exception:
proc.terminate()
if not config_local_exists:
config_local.unlink(missing_ok=True)
log.seek(0)
raise RuntimeError(
"Impossible de charger la page d'accueil :\n" + log.read()
@@ -126,6 +144,8 @@ def base_url():
proc.wait(timeout=10)
except subprocess.TimeoutExpired:
proc.kill()
if not config_local_exists:
config_local.unlink(missing_ok=True)
log.close()