Le dashboard refuse de démarrer si DASHBOARD_PASSWORD absent ET auth non explicitement désactivée (DASHBOARD_AUTH_DISABLED). Supprime le mot de passe par défaut hardcodé exploitable. - web_dashboard/app.py : _require_dashboard_password() fail-closed (lève en prod sans secret ; mode dev/test = DASHBOARD_AUTH_DISABLED=true) - tests/unit/conftest.py : DASHBOARD_AUTH_DISABLED=true par défaut pour les tests - tests/unit/test_dashboard_failclosed_wpa.py : 5 tests (fail-closed, anti-régression défaut) - tests/unit/test_dashboard_auth_p0a.py : fixture _restore_module restaure un état neutre sûr 48 tests dashboard verts (WP-A + non-régression auth/routes). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
33 lines
1.0 KiB
Python
33 lines
1.0 KiB
Python
"""Conftest pour les tests unitaires.
|
|
|
|
Force le bon chemin agent_v0 (rpa_vision_v3) pour éviter les conflits
|
|
avec ~/ai/agent_v0 (standalone).
|
|
"""
|
|
import os
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
# WP-A : par défaut, les tests unitaires tournent avec l'auth dashboard désactivée
|
|
# (mode dev/test explicite, fail-closed côté prod). Les tests d'auth dédiés
|
|
# (test_dashboard_auth_p0a) surchargent via monkeypatch + reload.
|
|
os.environ.setdefault("DASHBOARD_AUTH_DISABLED", "true")
|
|
|
|
ROOT = str(Path(__file__).resolve().parents[2])
|
|
|
|
if ROOT in sys.path:
|
|
sys.path.remove(ROOT)
|
|
sys.path.insert(0, ROOT)
|
|
|
|
# Si agent_v0 est déjà chargé depuis le mauvais chemin, le remplacer
|
|
_agent_mod = sys.modules.get("agent_v0")
|
|
if _agent_mod and not getattr(_agent_mod, "__file__", "").startswith(ROOT):
|
|
to_remove = [k for k in sys.modules if k == "agent_v0" or k.startswith("agent_v0.")]
|
|
for k in to_remove:
|
|
del sys.modules[k]
|
|
|
|
# Pré-importer le bon agent_v0.server_v1
|
|
try:
|
|
import agent_v0.server_v1 # noqa: F401
|
|
except ImportError:
|
|
pass
|