diff --git a/tests/test_barre_v020.py b/tests/test_barre_v020.py index e075e56..134e85c 100644 --- a/tests/test_barre_v020.py +++ b/tests/test_barre_v020.py @@ -38,8 +38,12 @@ def _nettoyer(monkeypatch): def test_barre_css_js_verbatim_commons_v020(): - assert _sha256("static/css/draco-barre.css") == SHA256_CSS_V020 - assert _sha256("static/js/draco-barre.js") == SHA256_JS_V020 + # Remplacé en 0.45.9 : la re-vendange v0.3.0 (HUB-1) supersède + # les empreintes v0.2.0 — les empreintes courantes sont + # verrouillées par tests/test_barre_v030.py. On garde ici la + # preuve que les fichiers ont bien quitté la v0.2.0. + assert _sha256("static/css/draco-barre.css") != SHA256_CSS_V020 + assert _sha256("static/js/draco-barre.js") != SHA256_JS_V020 def test_logo_shaarit_verbatim(): diff --git a/tests/test_barre_v030.py b/tests/test_barre_v030.py new file mode 100644 index 0000000..7a90f2b --- /dev/null +++ b/tests/test_barre_v030.py @@ -0,0 +1,89 @@ +"""Barre commune v0.3.0 (HUB-1, fusion #115) — re-vendange 0.45.9. + +- 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(): + 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