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