Message d'info pour les users en trial dans /compte/roadmap
This commit is contained in:
@@ -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
@@ -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(
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user