From 51dad7936b091f55e6c54d77c55e511a14297192 Mon Sep 17 00:00:00 2001 From: Egor Date: Wed, 12 Nov 2025 03:03:34 +0300 Subject: [PATCH] Fix trial subscription status display in menu --- app/handlers/menu.py | 8 ++++++- tests/test_menu_subscription_status.py | 30 ++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 tests/test_menu_subscription_status.py diff --git a/app/handlers/menu.py b/app/handlers/menu.py index cf2ceab1..a23acab9 100644 --- a/app/handlers/menu.py +++ b/app/handlers/menu.py @@ -972,7 +972,13 @@ def _get_subscription_status(user: User, texts) -> str: "🔴 Истекла\n📅 {end_date}", ).format(end_date=end_date_text or "—") - if actual_status == "trial": + is_trial_subscription = getattr(subscription, "is_trial", False) + + is_trial_like_status = actual_status == "trial" or ( + is_trial_subscription and actual_status in {"active", "trial"} + ) + + if is_trial_like_status: if days_left > 1 and end_date_text: return texts.t( "SUB_STATUS_TRIAL_ACTIVE", diff --git a/tests/test_menu_subscription_status.py b/tests/test_menu_subscription_status.py new file mode 100644 index 00000000..f8832cc3 --- /dev/null +++ b/tests/test_menu_subscription_status.py @@ -0,0 +1,30 @@ +from datetime import datetime, timedelta +from unittest.mock import MagicMock + +from app.handlers.menu import _get_subscription_status + + +class DummyTexts: + def t(self, key: str, default: str): # pragma: no cover - simple stub + return default + + +def _build_user_with_subscription(actual_status: str, is_trial: bool, days_left: int): + subscription = MagicMock() + subscription.actual_status = actual_status + subscription.is_trial = is_trial + subscription.end_date = datetime.utcnow() + timedelta(days=days_left, hours=1) + + user = MagicMock() + user.subscription = subscription + return user + + +def test_get_subscription_status_marks_trial_as_trial(): + texts = DummyTexts() + user = _build_user_with_subscription(actual_status="active", is_trial=True, days_left=5) + + status_text = _get_subscription_status(user, texts) + + assert "Тестовая подписка" in status_text + assert "Активна" not in status_text