From 86b12c1386d7f389540b718ee54112a7e85e3667 Mon Sep 17 00:00:00 2001 From: Spark Date: Wed, 4 Nov 2026 03:44:35 +0000 Subject: [PATCH] Kanbante 0.45.6 : tests barre v0.2.0, garde data-theme et URL ShaarIt (tests/test_barre_v020.py) --- tests/test_barre_v020.py | 109 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 tests/test_barre_v020.py diff --git a/tests/test_barre_v020.py b/tests/test_barre_v020.py new file mode 100644 index 0000000..e075e56 --- /dev/null +++ b/tests/test_barre_v020.py @@ -0,0 +1,109 @@ +"""Barre commune v0.2.0 (phase 3 ShaarIt) — re-vendange 0.45.6. + +- CSS/JS vendangés VERBATIM depuis dracodev-commons @70c837a + (ui/barre-apps/barre-apps.css / .js) ; logo shaarit.svg idem. +- GARDE data-theme (changement de comportement visible) : avant + la v0.2.0, le CSS vendangé appliquait le sombre système dès + ``prefers-color-scheme: dark``, même avec un thème clair + explicite (html[data-theme="light"]) ; la v0.2.0 conditionne + les deux blocs à ``html:not([data-theme])``. +- Onglet ShaarIt : présent dans le rendu, APRÈS Kanbante et + AVANT l'agent, URL résolue par le même mécanisme que les + autres apps (explicite DRACO_SHAARIT_URL > hôte de la + requête > dérivation par l'agent > défaut officiel). +""" +import hashlib +from pathlib import Path + +R = Path(__file__).resolve().parents[1] + +SHA256_CSS_V020 = "abc0c3b2a282566013bd121b0c46b133700f20be78cf44128bebdf19b7e05fab" +SHA256_JS_V020 = "24efe399823eed21add535c081ea153ae97afe128744aed9b628cf855e6b50e1" +SHA256_LOGO_SHAARIT = "faf0c8a17e7cb82d0884f598eadf2c4fee7a603bfdc3a2ecfdac1e750316db34" + +_ENV_BARRE = ( + "DRACO_SSO_URL", "DRACO_FLOWDECK_URL", "DRACO_TIKTAK_URL", + "DRACO_SHAARIT_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_v020(): + 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(): + assert _sha256("static/img/logos/shaarit.svg") == SHA256_LOGO_SHAARIT + + +def test_garde_data_theme_apportee_par_la_v020(): + css = (R / "static/css/draco-barre.css").read_text(encoding="utf-8") + # Les deux blocs système sont gardés ; le sombre forcé reste. + assert "html:not([data-theme]) .draco-bar" in css + assert "html:not([data-theme]) .draco-bar .draco-brand-mark img" in css + assert '[data-theme="dark"] .draco-bar' in css + assert "@media (prefers-color-scheme: dark) {\n .draco-bar" not in css + + +def test_url_shaarit_defaut_officiel(monkeypatch): + from app.config import _env_settings, resoudre_urls_draco + + _nettoyer(monkeypatch) + assert _env_settings().shaarit_url == "https://shaarit.dracodev.net" + assert resoudre_urls_draco().shaarit_url == "https://shaarit.dracodev.net" + + +def test_url_shaarit_derivee_du_seul_agent_evenements(monkeypatch): + from app.config import _env_settings + + _nettoyer(monkeypatch) + monkeypatch.setenv( + "AGENT_EVENEMENTS_URL", + "https://agent-dev.dracodev.net/api/v1/evenements", + ) + assert _env_settings().shaarit_url == "https://shaarit-dev.dracodev.net" + + +def test_url_shaarit_explicite_prioritaire(monkeypatch): + from app.config import _env_settings + + _nettoyer(monkeypatch) + monkeypatch.setenv( + "AGENT_EVENEMENTS_URL", + "https://agent-dev.dracodev.net/api/v1/evenements", + ) + monkeypatch.setenv("DRACO_SHAARIT_URL", "https://signets.example.test") + assert _env_settings().shaarit_url == "https://signets.example.test" + + +def test_url_shaarit_par_hote_de_requete(monkeypatch): + from app.config import resoudre_urls_draco, suffixe_environnement_requete + + _nettoyer(monkeypatch) + assert suffixe_environnement_requete("shaarit-dev.dracodev.net") == "-dev" + urls = resoudre_urls_draco("kanbante-dev.dracodev.net") + assert urls.shaarit_url == "https://shaarit-dev.dracodev.net" + urls = resoudre_urls_draco("kanbante.dracodev.net") + assert urls.shaarit_url == "https://shaarit.dracodev.net" + + +def test_onglet_shaarit_dans_le_rendu(client): + r = client.get("/") + assert r.status_code == 200 + assert 'data-app="shaarit"' in r.text + assert "https://shaarit.dracodev.net/" in r.text + assert "/static/img/logos/shaarit.svg" in r.text + # Ordre : Kanbante < ShaarIt < Console Spark (agent). + assert r.text.index('data-app="kanbante"') < r.text.index('data-app="shaarit"') + assert r.text.index('data-app="shaarit"') < r.text.index('data-app="agent"') + assert client.get("/static/img/logos/shaarit.svg").status_code == 200