c4aa90b0d1
- Votes cappés à VOTES_PER_WEEK (pas d'accumulation) pour valoriser les connexions régulières - Solde de votes affiché dans la liste (input inéditable) à la place du bandeau Alert, avec date de prochain rechargement - Compteur de votes par feature affiché comme input inéditable en fin de ligne (avant le bouton "+") - Animation FLIP JS (roadmap_flip.js) : seules les lignes qui changent de position sont animées après un vote - Renommage votes_credited_until → votes_last_credited_at (migration 0005) - Constantes du module utilisées dans les assertions de tests Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
47 lines
1.5 KiB
Python
47 lines
1.5 KiB
Python
from dash import dcc, html
|
|
|
|
from src.roadmap import ui
|
|
|
|
|
|
def test_vote_items_sorted_by_count_desc():
|
|
au_vote = [
|
|
{"number": 1, "title": "A", "html_url": "u1"},
|
|
{"number": 2, "title": "B", "html_url": "u2"},
|
|
]
|
|
counts = {1: 1, 2: 5}
|
|
items = ui.vote_items(au_vote, counts, editable=False)
|
|
# le plus voté (numéro 2) vient en premier
|
|
assert "B" in str(items[0])
|
|
assert "A" in str(items[1])
|
|
|
|
|
|
def test_vote_items_buttons_only_when_editable():
|
|
au_vote = [{"number": 1, "title": "A", "html_url": "u1"}]
|
|
assert "roadmap-vote" in str(ui.vote_items(au_vote, {1: 0}, editable=True))
|
|
assert "roadmap-vote" not in str(ui.vote_items(au_vote, {1: 0}, editable=False))
|
|
|
|
|
|
def test_changelog_markdown_returns_component():
|
|
comp = ui.changelog_markdown()
|
|
assert isinstance(comp, dcc.Markdown)
|
|
assert "##" in comp.children # le CHANGELOG.md contient des titres markdown
|
|
|
|
|
|
def test_roadmap_content_renders(monkeypatch):
|
|
monkeypatch.setattr(
|
|
ui.github,
|
|
"fetch_roadmap_issues",
|
|
lambda: {
|
|
"en_cours": [{"number": 9, "title": "En cours X", "html_url": "u9"}],
|
|
"au_vote": [{"number": 5, "title": "Au vote Y", "html_url": "u5"}],
|
|
},
|
|
)
|
|
monkeypatch.setattr(ui.roadmap_db, "vote_counts", lambda: {5: 3})
|
|
content = ui.roadmap_content(editable=True, balance=2)
|
|
s = str(content)
|
|
assert isinstance(content, html.Div)
|
|
assert "En cours X" in s
|
|
assert "Au vote Y" in s
|
|
assert "Votes restants" in s
|
|
assert "value='2'" in s
|