Message d'info pour les users en trial dans /compte/roadmap

This commit is contained in:
Colin Maudry
2026-07-14 11:48:29 +02:00
parent ea95431eae
commit ad293acd88
3 changed files with 60 additions and 2 deletions
+6 -1
View File
@@ -22,10 +22,15 @@ def layout(**_):
return guard return guard
balance = subs_db.credit_pending(current_user.id) balance = subs_db.credit_pending(current_user.id)
next_recharge = subs_db.next_recharge_at(current_user.id) next_recharge = subs_db.next_recharge_at(current_user.id)
sub = subs_db.get_current(current_user.id)
return account_shell( return account_shell(
"roadmap", "roadmap",
roadmap_ui.roadmap_content( roadmap_ui.roadmap_content(
editable=True, balance=balance, next_recharge=next_recharge editable=True,
balance=balance,
next_recharge=next_recharge,
sub_status=sub["status"] if sub else None,
trial_ends_at=sub["current_period_end"] if sub else None,
), ),
) )
+22 -1
View File
@@ -106,8 +106,26 @@ def _en_cours_items(en_cours: list[dict]) -> list:
] ]
def _trial_hint(sub_status: str | None, trial_ends_at: str | None):
if sub_status != "trial" or not trial_ends_at:
return None
try:
end_date = datetime.fromisoformat(trial_ends_at).strftime("%d/%m/%Y")
except (ValueError, TypeError):
return None
return dbc.Alert(
f"Vous pourrez voter à la fin de votre période d'essai, le {end_date}.",
color="info",
className="mb-3",
)
def roadmap_content( def roadmap_content(
editable: bool, balance: int | None = None, next_recharge: datetime | None = None editable: bool,
balance: int | None = None,
next_recharge: datetime | None = None,
sub_status: str | None = None,
trial_ends_at: str | None = None,
) -> html.Div: ) -> html.Div:
try: try:
issues = github.fetch_roadmap_issues() issues = github.fetch_roadmap_issues()
@@ -126,6 +144,9 @@ def roadmap_content(
"Les abonné·es votent pour les fonctionnalités à développer en priorité." "Les abonné·es votent pour les fonctionnalités à développer en priorité."
) )
) )
trial_hint = _trial_hint(sub_status, trial_ends_at) if editable else None
if trial_hint is not None:
body.append(trial_hint)
body.append( body.append(
html.Div( html.Div(
dbc.ListGroup( dbc.ListGroup(
+32
View File
@@ -44,3 +44,35 @@ def test_roadmap_content_renders(monkeypatch):
assert "Au vote Y" in s assert "Au vote Y" in s
assert "Votes restants" in s assert "Votes restants" in s
assert "value='2'" in s assert "value='2'" in s
def test_roadmap_content_shows_trial_hint(monkeypatch):
monkeypatch.setattr(
ui.github,
"fetch_roadmap_issues",
lambda: {"en_cours": [], "au_vote": []},
)
monkeypatch.setattr(ui.roadmap_db, "vote_counts", lambda: {})
content = ui.roadmap_content(
editable=True,
balance=0,
sub_status="trial",
trial_ends_at="2026-07-20T10:00:00+00:00",
)
assert "20/07/2026" in str(content)
def test_roadmap_content_no_trial_hint_when_active(monkeypatch):
monkeypatch.setattr(
ui.github,
"fetch_roadmap_issues",
lambda: {"en_cours": [], "au_vote": []},
)
monkeypatch.setattr(ui.roadmap_db, "vote_counts", lambda: {})
content = ui.roadmap_content(
editable=True,
balance=3,
sub_status="active",
trial_ends_at=None,
)
assert "période d'essai" not in str(content)