"""Barre commune v0.3.0 (HUB-1, fusion #115) — re-vendange 0.45.10. - CSS/JS vendangés VERBATIM depuis dracodev-commons, branche hub-menu-compte-v0-3-0 (PR commons #9), ui/barre-apps/. - Menu compte : liens Hub (Télécharger, À Propos, Aides) et Profil devenu lien vers /profil. Point explicite du chantier : Kanbante traitait l'action relayée « profil » vers sa page /profile propre — ce comportement est REMPLACÉ par le lien Hub (un seul Profil, celui du Hub). La branche onAction("profil") du gabarit est retirée ; la page /profile elle-même continue d'exister. « Déconnexion » reste relayée. - URL Hub résolue par le même mécanisme que les autres apps (explicite DRACO_HUB_URL > hôte de la requête > dérivation par l'agent > défaut officiel), exposée au gabarit (draco_urls.hub) et passée en urls.hub de DRACO_BAR_CONFIG. """ import hashlib from pathlib import Path R = Path(__file__).resolve().parents[1] # Empreintes SHA-256 de la source commons v0.3.0 # (Projets/dracodev-commons, ui/barre-apps/, branche # hub-menu-compte-v0-3-0 @ff92ece). SHA256_CSS_V030 = "4ac2ed2ee04549f40c71e5700149271d5b07b04e4ab88073e94328fcbf9475b0" SHA256_JS_V030 = "9d84617bfb4346d6a17d769da83d04ebc9bc38d40962c58dd7347f13a6c74da5" _ENV_BARRE = ( "DRACO_SSO_URL", "DRACO_FLOWDECK_URL", "DRACO_TIKTAK_URL", "DRACO_SHAARIT_URL", "DRACO_HUB_URL", "KANBANTE_PUBLIC_URL", "AGENT_URL", "AGENT_EVENEMENTS_URL", ) def _sha256(chemin): return hashlib.sha256((R / chemin).read_bytes()).hexdigest() def _nettoyer(monkeypatch): for nom in _ENV_BARRE: monkeypatch.delenv(nom, raising=False) def test_barre_css_js_verbatim_commons_v030(): # Remplacé en 0.45.11 : la re-vendange v0.4.0 (HUB-11) # supersède les empreintes v0.3.0 — les empreintes courantes # sont verrouillées par tests/test_barre_v040.py. On garde ici # la preuve que les fichiers ont bien quitté la v0.3.0. assert _sha256("static/css/draco-barre.css") != SHA256_CSS_V030 assert _sha256("static/js/draco-barre.js") != SHA256_JS_V030 def test_js_liens_hub_et_profil_lien(): js = (R / "static/js/draco-barre.js").read_text(encoding="utf-8") assert 'hub: "https://hub.dracodev.net/"' in js assert 'hub: "https://hub-dev.dracodev.net/"' in js assert '"telecharger", "Télécharger"' in js assert '"a-propos", "À Propos"' in js assert '"aide", "Aides"' in js assert '"profil", "Profil"' in js assert "data-hub-link" in js assert 'data-compte-act", "profil"' not in js assert 'data-compte-act", "deconnexion"' in js def test_gabarit_branche_hub_et_retire_profil_relaye(): gabarit = (R / "app/templates/_draco_bar.html").read_text(encoding="utf-8") assert 'urls: { hub: "{{ draco_urls.hub }}/" }' in gabarit # La branche relayée vers /profile a disparu du onAction… assert 'if (act === "profil")' not in gabarit # …mais la déconnexion relayée est intacte. assert 'if (act === "deconnexion") { location.href = "/logout"; return; }' \ in gabarit def test_hub_resolution_meme_mecanisme(monkeypatch): _nettoyer(monkeypatch) from app.config import resoudre_urls_draco assert resoudre_urls_draco().hub_url == "https://hub.dracodev.net" assert resoudre_urls_draco("kanbante-dev.dracodev.net").hub_url == \ "https://hub-dev.dracodev.net" assert resoudre_urls_draco("kanbante.dracodev.net").hub_url == \ "https://hub.dracodev.net" monkeypatch.setenv("DRACO_HUB_URL", "https://hub.example.net/") assert resoudre_urls_draco("kanbante-dev.dracodev.net").hub_url == \ "https://hub.example.net" def test_page_profile_existe_toujours(): # La page propre à Kanbante n'est pas supprimée : seul le # menu compte de la barre ne la cible plus. main = (R / "app/main.py").read_text(encoding="utf-8") assert '@app.get("/profile")' in main