"""TDD — résolution de l'URL serveur d'enrôlement depuis system_config.json. Câble l'éditeur adresses/ports du dashboard (`services.streaming`) vers le `RPA_SERVER_URL` généré pour chaque agent Léa. Priorité : config (`system_config.json`) > variable d'env > défaut. Un host loopback/vide dans la config = « non configuré » → fallback env, pour ne PAS régresser le déploiement actuel où l'URL vient de l'environnement. """ import os # L'import du dashboard est fail-closed sur l'auth → escape dev/test documenté. os.environ.setdefault("DASHBOARD_AUTH_DISABLED", "true") from web_dashboard import app as dash # noqa: E402 def test_resolve_url_from_config_streaming_host(monkeypatch): """La config (host streaming édité dans l'UI) prime, même si l'env existe.""" monkeypatch.setattr( dash, "load_system_config", lambda: {"services": {"streaming": {"host": "192.168.1.178", "port": 5005}}}, ) monkeypatch.setenv("RPA_SERVER_URL", "http://192.168.1.45:5005/api/v1") assert dash._resolve_public_server_url() == "http://192.168.1.178:5005/api/v1" def test_resolve_url_loopback_in_config_falls_back_to_env(monkeypatch): """host=localhost dans la config = non configuré → on garde l'env (pas de régression).""" monkeypatch.setattr( dash, "load_system_config", lambda: {"services": {"streaming": {"host": "localhost", "port": 5005}}}, ) monkeypatch.delenv("RPA_PUBLIC_URL", raising=False) monkeypatch.setenv("RPA_SERVER_URL", "http://192.168.1.45:5005/api/v1") assert dash._resolve_public_server_url() == "http://192.168.1.45:5005/api/v1" def test_resolve_url_no_config_uses_env(monkeypatch): """Aucune section streaming → fallback env, normalisé en /api/v1.""" monkeypatch.setattr(dash, "load_system_config", lambda: {"services": {}}) monkeypatch.delenv("RPA_PUBLIC_URL", raising=False) monkeypatch.setenv("RPA_SERVER_URL", "http://10.0.0.5:5005/api/v1") assert dash._resolve_public_server_url() == "http://10.0.0.5:5005/api/v1"