From 311a14090d0e2586374ecf087c8b6144f77a92c1 Mon Sep 17 00:00:00 2001 From: Spark Date: Sun, 11 Oct 2026 23:18:01 -0400 Subject: [PATCH] =?UTF-8?q?test(0.18.0):=20activit=C3=A9,=20outils=20d'aff?= =?UTF-8?q?ichage,=20liste=20dense,=20actions=20rapides=20=E2=80=94=207=20?= =?UTF-8?q?tests,=20185=20au=20total?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/test_palier14.py | 74 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 tests/test_palier14.py diff --git a/tests/test_palier14.py b/tests/test_palier14.py new file mode 100644 index 0000000..fc67d11 --- /dev/null +++ b/tests/test_palier14.py @@ -0,0 +1,74 @@ +"""Palier 14 (0.18.0): vague 2 suite — activité 7 jours (#19), +tri/regroupement (#21), vue liste dense (#22), actions rapides (#23).""" + +from datetime import datetime, timedelta, timezone + +from app import models + + +def _ts(days_ago: int) -> str: + dt = datetime.now(timezone.utc) - timedelta(days=days_ago) + return dt.strftime("%Y-%m-%d 12:00:00") + + +def test_activity_line_recent_week(client, fake_gitea): + for _ in range(2): + models.log_event("Projets/demo", 1, "closed", + to_column="done", created_at=_ts(1)) + models.log_event("Projets/demo", 5, "moved", + from_column="backlog", to_column="todo", + created_at=_ts(0)) + page = client.get("/") + assert "2 fermée(s) · 1 déplacement(s) cette semaine" in page.text + + +def test_activity_line_idle_project(client, fake_gitea): + models.log_event("Projets/vieux", 9, "moved", + from_column="backlog", to_column="todo", + created_at=_ts(35)) + page = client.get("/") + assert "aucune activité kanban depuis 35 j" in page.text + + +def test_dashboard_display_tools_markup(client, fake_gitea): + page = client.get("/") + assert "dashState" in page.text + assert 'id="dash-sort"' in page.text + assert 'id="dash-group"' in page.text + assert "Grouper par propriétaire" in page.text + assert "setView('grid')" in page.text + assert "setView('list')" in page.text + + +def test_dense_list_view_tables(client, fake_gitea): + page = client.get("/") + assert page.text.count('class="proj-table"') == 3 + assert 'data-sort="open"' in page.text + assert 'data-sort="inflight"' in page.text + # La ligne dense de demo : lien page projet + compteurs. + assert 'href="/project/Projets/demo"' in page.text + + +def test_dashboard_js_contract(client, fake_gitea): + js = client.get("/static/js/dashboard.js") + assert js.status_code == 200 + assert "kanbante-dash-sort" in js.text + assert "kanbante-dash-group" in js.text + assert "owner-group" in js.text + assert "data-menu-btn" in js.text + + +def test_card_quick_actions_menu(client, fake_gitea): + page = client.get("/") + assert "data-menu-btn" in page.text + # urlencode de Jinja conserve les « / » : le lien est valide tel quel. + assert 'href="/capture?repo=Projets/demo"' in page.text + assert 'href="/triage/Projets/demo"' in page.text + assert 'href="/sprint/Projets/demo"' in page.text + assert 'href="/health/Projets/demo"' in page.text + + +def test_capture_prefilled_repo(client, fake_gitea): + page = client.get("/capture?repo=Projets/kanbante") + assert page.status_code == 200 + assert 'value="Projets/kanbante"' in page.text