FlowDeck CI / test (push) Failing after 3s
FlowDeck CI / docker (push) Skipped
FlowDeck CI / lint (push) Failing after 1s
FlowDeck CI / test (pull_request) Failing after 1s
FlowDeck CI / docker (pull_request) Skipped
FlowDeck CI / lint (pull_request) Failing after 1m53s
49 lines
2.0 KiB
Python
49 lines
2.0 KiB
Python
"""Barre d'apps Flowdeck : aucun texte de chantier rendu hors commentaire.
|
|
|
|
Defaut 5 : les lignes « Chantier 5 (fusion #69/#71, sans bump) : ... »
|
|
etaient placees APRES la fermeture `#}` du commentaire Jinja d'en-tete
|
|
de `app/templates/_draco_bar.html` (lignes 9-11) : elles etaient donc
|
|
rendues telles quelles, juste au-dessus du <header> de la barre, sur
|
|
toutes les pages (la barre est incluse par base.html).
|
|
|
|
Test sans dependance (lecture du gabarit seul, comme
|
|
test_draco_alertes.py) : il tourne sans serveur ni base, donc aussi
|
|
en sandbox. La note documentaire peut vivre DANS le commentaire Jinja
|
|
(jamais rendu) ; elle ne doit jamais en sortir.
|
|
"""
|
|
|
|
import re
|
|
from pathlib import Path
|
|
|
|
ROOT = Path(__file__).resolve().parent.parent
|
|
|
|
|
|
def _hors_commentaires(texte):
|
|
"""Texte du gabarit sans les commentaires Jinja {# ... #}."""
|
|
return re.sub(r"\{#.*?#\}", "", texte, flags=re.S)
|
|
|
|
|
|
def test_aucun_texte_chantier_rendu():
|
|
gabarit = (ROOT / "app/templates/_draco_bar.html").read_text()
|
|
rendu = _hors_commentaires(gabarit)
|
|
assert "Chantier 5 (fusion" not in rendu
|
|
assert "sans bump" not in rendu
|
|
# Aucune ligne de texte libre entre le commentaire d'en-tete et <link> :
|
|
# le rendu doit commencer (apres commentaires) par <link> ou <header>.
|
|
assert rendu.lstrip().startswith("<link")
|
|
|
|
|
|
def test_barre_intacte_apres_suppression():
|
|
"""Le 5e onglet Console Spark et la marque survivent a la suppression."""
|
|
gabarit = (ROOT / "app/templates/_draco_bar.html").read_text()
|
|
rendu = _hors_commentaires(gabarit)
|
|
nav = rendu.split('<nav class="draco-apptabs"')[1].split("</nav>")[0]
|
|
assert nav.index('data-app="kanbante"') < nav.index('data-app="agent"')
|
|
assert "Console Spark" in nav
|
|
assert 'data-app="agent"' in nav
|
|
assert 'class="draco-brand"' in rendu
|
|
# L'entree « Console Spark » du menu de la marque est construite par
|
|
# draco-barre.js depuis les onglets : l'onglet agent suffit a l'alimenter.
|
|
js_barre = (ROOT / "static/js/vendor/draco-barre.js").read_text()
|
|
assert "Console Spark" in js_barre
|