mirror of
https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot.git
synced 2026-01-20 03:40:26 +00:00
69 lines
2.0 KiB
Python
69 lines
2.0 KiB
Python
from unittest.mock import AsyncMock, MagicMock, patch
|
|
|
|
import pytest
|
|
from aiogram.types import CallbackQuery, InlineKeyboardMarkup, Message
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.database.models import User
|
|
from app.handlers.subscription.purchase import activate_trial
|
|
from app.services.trial_activation_service import TrialPaymentInsufficientFunds
|
|
|
|
|
|
@pytest.fixture
|
|
def trial_callback_query():
|
|
callback = AsyncMock(spec=CallbackQuery)
|
|
callback.message = AsyncMock(spec=Message)
|
|
callback.message.edit_text = AsyncMock()
|
|
callback.answer = AsyncMock()
|
|
return callback
|
|
|
|
|
|
@pytest.fixture
|
|
def trial_user():
|
|
user = MagicMock(spec=User)
|
|
user.subscription = None
|
|
user.has_had_paid_subscription = False
|
|
user.language = "ru"
|
|
return user
|
|
|
|
|
|
@pytest.fixture
|
|
def trial_db():
|
|
return AsyncMock(spec=AsyncSession)
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_activate_trial_uses_trial_price_for_topup_redirect(
|
|
trial_callback_query,
|
|
trial_user,
|
|
trial_db,
|
|
):
|
|
error = TrialPaymentInsufficientFunds(required_amount=15900, balance_amount=100)
|
|
|
|
mock_keyboard = InlineKeyboardMarkup(inline_keyboard=[])
|
|
|
|
with (
|
|
patch(
|
|
"app.handlers.subscription.purchase.preview_trial_activation_charge",
|
|
side_effect=error,
|
|
),
|
|
patch(
|
|
"app.handlers.subscription.purchase.get_texts",
|
|
return_value=MagicMock(
|
|
t=lambda key, default, **kwargs: default,
|
|
),
|
|
),
|
|
patch(
|
|
"app.handlers.subscription.purchase.get_insufficient_balance_keyboard",
|
|
return_value=mock_keyboard,
|
|
) as insufficient_keyboard,
|
|
):
|
|
await activate_trial(trial_callback_query, trial_user, trial_db)
|
|
|
|
insufficient_keyboard.assert_called_once_with(
|
|
trial_user.language,
|
|
amount_kopeks=error.required_amount,
|
|
)
|
|
trial_callback_query.message.edit_text.assert_called_once()
|
|
trial_callback_query.answer.assert_called_once()
|