88 lines
3.0 KiB
Python
88 lines
3.0 KiB
Python
"""Palier 13 (0.17.0): vague 2 — jalon sur la carte (#17), pastille
|
|
de santé (#18), épinglés via étoiles Gitea (#20), page Projet (#25)."""
|
|
|
|
from tests.conftest import csrf_from
|
|
|
|
|
|
def test_dashboard_shows_next_milestone(client, fake_gitea):
|
|
page = client.get("/")
|
|
assert page.status_code == 200
|
|
# Faux : Sprint 1, échéance 2026-10-20, 1 fermée / 2 au total.
|
|
assert "🎯 Sprint 1" in page.text
|
|
assert "1/2 terminées" in page.text
|
|
assert "échéance" in page.text
|
|
|
|
|
|
def test_dashboard_health_dot(client, fake_gitea):
|
|
page = client.get("/")
|
|
assert 'class="health-dot ' in page.text
|
|
assert 'href="/health/Projets/demo"' in page.text
|
|
|
|
|
|
def test_no_starred_section_by_default(client, fake_gitea):
|
|
page = client.get("/")
|
|
assert 'id="pinned-section" hidden' in page.text
|
|
assert 'data-starred="0"' in page.text
|
|
|
|
|
|
def test_starred_repo_is_pinned(client, fake_gitea):
|
|
fake_gitea.starred.add("Projets/demo")
|
|
page = client.get("/")
|
|
assert 'id="pinned-section" hidden' not in page.text
|
|
assert 'data-starred="1"' in page.text
|
|
# La carte épinglée sort de la grille de son onglet d'origine :
|
|
# une seule carte (div) pour demo — le bouton étoile porte aussi
|
|
# un data-full, on compte donc le motif de la carte elle-même.
|
|
assert page.text.count('data-full="Projets/demo" data-home') == 1
|
|
|
|
|
|
def test_star_toggle_endpoint(client, fake_gitea):
|
|
csrf = csrf_from(client)
|
|
denied = client.post(
|
|
"/api/projects/Projets/demo/star", data={"starred": "1"}
|
|
)
|
|
assert denied.status_code == 403
|
|
|
|
resp = client.post(
|
|
"/api/projects/Projets/demo/star",
|
|
data={"starred": "1", "csrf_token": csrf},
|
|
)
|
|
assert resp.status_code == 200
|
|
assert resp.json() == {"ok": True, "starred": True}
|
|
assert "Projets/demo" in fake_gitea.starred
|
|
|
|
resp = client.post(
|
|
"/api/projects/Projets/demo/star",
|
|
data={"starred": "0", "csrf_token": csrf},
|
|
)
|
|
assert resp.json() == {"ok": True, "starred": False}
|
|
assert "Projets/demo" not in fake_gitea.starred
|
|
|
|
|
|
def test_card_title_links_to_project_page(client, fake_gitea):
|
|
page = client.get("/")
|
|
assert 'href="/project/Projets/demo"' in page.text
|
|
assert 'href="/board/Projets/demo"' in page.text # accès board conservé
|
|
|
|
|
|
def test_project_page(client, fake_gitea):
|
|
from app import models
|
|
|
|
models.log_event("Projets/demo", 1, "created", to_column="backlog")
|
|
models.log_event(
|
|
"Projets/demo", 1, "moved",
|
|
from_column="backlog", to_column="in_progress",
|
|
)
|
|
page = client.get("/project/Projets/demo")
|
|
assert page.status_code == 200
|
|
assert "🎯 Jalons ouverts" in page.text
|
|
assert "Sprint 1" in page.text
|
|
assert "🩺 Santé du flux" in page.text
|
|
assert "🔮 Prévisions" in page.text
|
|
assert "🕘 Activité récente" in page.text
|
|
assert "📝 Notes du projet" in page.text
|
|
assert 'href="/board/Projets/demo"' in page.text
|
|
assert "/wall?repo=Projets/demo" in page.text
|
|
# Titre du projet et lien Gitea du faux.
|
|
assert "demo" in page.text
|