CI / test (push) Successful in 2m26s
- Barre de filtres en carte : recherche texte (titre, projet, #numéro, étiquettes ; accents/casse ignorés, raccourci /), listes Projet et Étiquette avec compteurs, chips de colonnes colorées multi-sélection, 4 tris. - Facettes calculées côté serveur ; filtrage instantané côté client (attributs data-*), compteur en direct, compteurs de section, état vide + réinitialisation. - Filtres structurels persistés en localStorage. - 281 tests verts (3 nouveaux, palier 22) ; vérifié en Chromium réel sur les vraies données (467 issues : recherche 'agent' -> 24 résultats instantanés).
40 lines
1.4 KiB
Python
40 lines
1.4 KiB
Python
"""Palier 22 (0.33.0): barre de filtres de la page Mes issues —
|
|
facettes serveur, lignes annotées, moteur client chargé."""
|
|
|
|
|
|
def test_my_page_has_filter_bar_and_facets(client):
|
|
r = client.get("/my")
|
|
assert r.status_code == 200
|
|
# La barre et ses contrôles.
|
|
assert 'id="my-filters"' in r.text
|
|
assert 'id="my-search"' in r.text
|
|
assert 'id="my-repo"' in r.text
|
|
assert 'id="my-label"' in r.text
|
|
assert 'id="my-sort"' in r.text
|
|
assert 'id="my-col-chips"' in r.text
|
|
assert 'id="my-count"' in r.text
|
|
assert 'id="my-reset"' in r.text
|
|
# Facettes avec compteurs (démo : 1 issue assignée,
|
|
# étiquette « bug »).
|
|
assert "Projets/demo (1)" in r.text
|
|
assert "bug (1)" in r.text
|
|
# Le moteur de filtrage est chargé, versionné.
|
|
assert "/static/js/my.js?v=" in r.text
|
|
|
|
|
|
def test_my_rows_carry_filter_attributes(client):
|
|
r = client.get("/my")
|
|
# Attributs data-* consommés par le moteur client.
|
|
assert 'data-column="backlog"' in r.text
|
|
assert 'data-search="#1 Tâche un Projets/demo bug"' in r.text
|
|
assert 'data-updated="2026-09-02T09:00:00Z"' in r.text
|
|
assert 'data-repo="Projets/demo"' in r.text
|
|
# Chips de colonnes présentes, avec compteurs.
|
|
assert 'data-col="backlog"' in r.text
|
|
assert 'data-col=""' in r.text # « Toutes les colonnes »
|
|
|
|
|
|
def test_my_empty_state_present_but_hidden(client):
|
|
r = client.get("/my")
|
|
assert 'id="my-empty" hidden' in r.text
|