"""Fusion ACC-4.4 — panneau de l'agent commun intégré à Flowdeck. Le panneau commun (composant partagé des quatre apps, contrat d'injection `dracodev-commons`) est intégré depuis la 7.81.0 (panneau v3), complété par le mode console (7.82.x) et la version du service affichée en mode sidebar (7.83.1, fusion #64). Ces tests figent le contrat d'intégration côté Flowdeck : - le gabarit de base charge les assets du panneau et injecte la configuration (URL du service d'agents résolue par configuration, jamais un nom public codé en dur dans le JS) ; - le panneau parle au service d'agents (conversation **commune** : même discussion perpétuelle que dans les autres apps) ; - les automatisations locales de Flowdeck restent locales (C5) : le panneau commun ne remplace pas le moteur d'agent local. """ from pathlib import Path RACINE = Path(__file__).resolve().parent.parent def test_gabarit_charge_le_panneau_et_injecte_la_config(): base = (RACINE / "app/templates/base.html").read_text(encoding="utf-8") assert "/static/css/draco-panneau.css" in base assert "/static/js/draco-panneau.js" in base assert "window.DRACO_PANNEAU_CONFIG" in base assert "draco_agent_url()" in base def test_panneau_parle_au_service_agent_conversation_commune(): js = (RACINE / "static/js/draco-panneau.js").read_text(encoding="utf-8") # Même conversation continue que dans les autres apps : le # panneau s'appuie sur l'API du service (contrat commons). assert "/api/v1/me" in js assert "/api/v1/chat" in js assert "/api/v1/conversations" in js # La configuration vient de l'hôte ; le seul repli est le nom # officiel — aucun nom public d'app en dur dans le composant. assert "DRACO_PANNEAU_CONFIG" in js for nom in ("flowdeck-dev", "og-dev", "tiktak-dev", "kanbante-dev", "agent-dev"): assert f"://{nom}." not in js # aucune URL publique -dev codée en dur def test_assets_panneau_servis(client): for chemin in ("/static/js/draco-panneau.js", "/static/css/draco-panneau.css"): r = client.get(chemin) assert r.status_code == 200, chemin def test_automatisations_locales_conservées(client): # C5 : l'agent local de Flowdeck (automatisations, gouvernance) # reste en place à côté du panneau commun. r = client.get("/api/v2/agent-approvals", params={"status": "pending"}) assert r.status_code == 200 assert "approvals" in r.json()