From 5cee619dd016c945d758da64c6055dad601ddde9 Mon Sep 17 00:00:00 2001 From: 3252a8 <3252a8@proton.me> Date: Sun, 7 Jun 2026 22:28:30 +0300 Subject: [PATCH] fix: assign default tariff to referral welcome bonuses --- backend/bot/app/web/webapp/auth.py | 5 ++ backend/bot/handlers/user/start.py | 5 ++ tests/test_start_referral_welcome_bonus.py | 83 +++++++++++++++++++++ tests/test_webapp_referral_welcome_bonus.py | 2 + 4 files changed, 95 insertions(+) create mode 100644 tests/test_start_referral_welcome_bonus.py diff --git a/backend/bot/app/web/webapp/auth.py b/backend/bot/app/web/webapp/auth.py index 88f6de4..136bbd2 100644 --- a/backend/bot/app/web/webapp/auth.py +++ b/backend/bot/app/web/webapp/auth.py @@ -1497,6 +1497,10 @@ async def _grant_referral_welcome_bonus_if_eligible( return None subscription_service: SubscriptionService = request.app["subscription_service"] + default_tariff_key = None + tariffs_config = getattr(settings, "tariffs_config", None) + if tariffs_config: + default_tariff_key = getattr(tariffs_config, "default_tariff", None) try: if await subscription_service.has_active_subscription(session, int(user.user_id)): return None @@ -1508,6 +1512,7 @@ async def _grant_referral_welcome_bonus_if_eligible( int(user.user_id), referral_welcome_days, reason="referral_welcome_bonus", + tariff_key=default_tariff_key, ) diff --git a/backend/bot/handlers/user/start.py b/backend/bot/handlers/user/start.py index 18dcace..afbb4c9 100644 --- a/backend/bot/handlers/user/start.py +++ b/backend/bot/handlers/user/start.py @@ -658,12 +658,17 @@ async def start_command_handler( ) if referred_by_user_id and referral_welcome_days > 0: try: + default_tariff_key = None + tariffs_config = getattr(settings, "tariffs_config", None) + if tariffs_config: + default_tariff_key = getattr(tariffs_config, "default_tariff", None) referral_bonus_end_date = ( await subscription_service.extend_active_subscription_days( session, user_id, referral_welcome_days, reason="referral_welcome_bonus", + tariff_key=default_tariff_key, ) ) if referral_bonus_end_date: diff --git a/tests/test_start_referral_welcome_bonus.py b/tests/test_start_referral_welcome_bonus.py new file mode 100644 index 0000000..d7d56b9 --- /dev/null +++ b/tests/test_start_referral_welcome_bonus.py @@ -0,0 +1,83 @@ +from datetime import datetime, timezone +from types import SimpleNamespace +from unittest import IsolatedAsyncioTestCase +from unittest.mock import AsyncMock, Mock, patch + +from bot.handlers.user.start import start_command_handler + + +class StartReferralWelcomeBonusTests(IsolatedAsyncioTestCase): + async def test_start_referral_welcome_bonus_passes_default_tariff(self): + end_date = datetime(2026, 1, 9, tzinfo=timezone.utc) + settings = SimpleNamespace( + DEFAULT_LANGUAGE="en", + ADMIN_IDS=[], + DISABLE_WELCOME_MESSAGE=False, + REFERRAL_WELCOME_BONUS_DAYS=3, + tariffs_config=SimpleNamespace(default_tariff="standard"), + ) + i18n = SimpleNamespace(gettext=lambda lang, key, **kw: key) + subscription_service = SimpleNamespace( + extend_active_subscription_days=AsyncMock(return_value=end_date) + ) + session = AsyncMock() + message = SimpleNamespace( + from_user=SimpleNamespace( + id=42, + username="alice", + first_name="Alice", + last_name="Example", + full_name="Alice Example", + ), + bot=AsyncMock(), + answer=AsyncMock(), + ) + state = SimpleNamespace(clear=AsyncMock()) + ref_match = Mock() + ref_match.group.return_value = "ABC123" + created_user = SimpleNamespace(user_id=42, referred_by_id=7) + + with ( + patch( + "bot.handlers.user.start._resolve_referrer_from_start_ref", + AsyncMock(return_value=7), + ), + patch( + "bot.handlers.user.start.user_dal.get_user_by_id", + AsyncMock(return_value=None), + ), + patch( + "bot.handlers.user.start.user_dal.create_user", + AsyncMock(return_value=(created_user, True)), + ), + patch( + "bot.handlers.user.start.ensure_required_channel_subscription", + AsyncMock(return_value=True), + ), + patch( + "bot.handlers.user.start.send_main_menu", + AsyncMock(), + ), + patch( + "bot.services.notification_service.NotificationService", + return_value=SimpleNamespace(notify_new_user_registration=AsyncMock()), + ), + ): + await start_command_handler( + message=message, + state=state, + settings=settings, + i18n_data={"current_language": "en", "i18n_instance": i18n}, + subscription_service=subscription_service, + referral_service=AsyncMock(), + session=session, + ref_match=ref_match, + ) + + subscription_service.extend_active_subscription_days.assert_awaited_once_with( + session, + 42, + 3, + reason="referral_welcome_bonus", + tariff_key="standard", + ) diff --git a/tests/test_webapp_referral_welcome_bonus.py b/tests/test_webapp_referral_welcome_bonus.py index c161f7a..bc5f715 100644 --- a/tests/test_webapp_referral_welcome_bonus.py +++ b/tests/test_webapp_referral_welcome_bonus.py @@ -45,6 +45,7 @@ class WebAppReferralWelcomeBonusTests(IsolatedAsyncioTestCase): REFERRAL_WELCOME_BONUS_DAYS=3, REFERRAL_WELCOME_BONUS_WITHOUT_TELEGRAM_ENABLED=True, DISPOSABLE_EMAIL_DOMAINS="mailinator.com", + tariffs_config=SimpleNamespace(default_tariff="standard"), ) user = SimpleNamespace( user_id=42, @@ -75,4 +76,5 @@ class WebAppReferralWelcomeBonusTests(IsolatedAsyncioTestCase): 42, 3, reason="referral_welcome_bonus", + tariff_key="standard", )