Files
kanbante/tests/test_barre_v030.py
T

90 lines
3.6 KiB
Python

"""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 <hub>/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