Kanbante 0.45.6 : barre commune v0.2.0 — onglet ShaarIt + garde data-theme (comportement visible) #78

Merged
bruno merged 6 commits from barre-v020-0-45-6 into main 2026-11-04 11:16:59 -05:00
Showing only changes of commit 86b12c1386 - Show all commits
+109
View File
@@ -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