mirror of
https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot.git
synced 2026-01-19 19:32:10 +00:00
Clear saved cart after subscription cancellation
This commit is contained in:
@@ -56,6 +56,7 @@ from app.services.subscription_checkout_service import (
|
||||
should_offer_checkout_resume,
|
||||
)
|
||||
from app.services.subscription_service import SubscriptionService
|
||||
from app.services.user_cart_service import user_cart_service
|
||||
from app.utils.miniapp_buttons import build_miniapp_or_callback_button
|
||||
from app.services.promo_offer_service import promo_offer_service
|
||||
from app.states import SubscriptionStates
|
||||
@@ -259,6 +260,9 @@ async def handle_subscription_cancel(
|
||||
await state.clear()
|
||||
await clear_subscription_checkout_draft(db_user.id)
|
||||
|
||||
# Удаляем сохраненную корзину, чтобы не показывать кнопку возврата
|
||||
await user_cart_service.delete_user_cart(db_user.id)
|
||||
|
||||
from app.handlers.menu import show_main_menu
|
||||
await show_main_menu(callback, db_user, db)
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ from aiogram.fsm.context import FSMContext
|
||||
from aiogram.types import CallbackQuery, User as TgUser, Message
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from app.handlers.subscription.purchase import save_cart_and_redirect_to_topup, return_to_saved_cart, clear_saved_cart
|
||||
from app.handlers.subscription.autopay import handle_subscription_cancel
|
||||
from app.database.models import User, Subscription
|
||||
|
||||
@pytest.fixture
|
||||
@@ -207,4 +208,26 @@ async def test_clear_saved_cart(mock_callback_query, mock_state, mock_user, mock
|
||||
mock_state.clear.assert_called_once()
|
||||
|
||||
# Проверяем, что вызван answer
|
||||
mock_callback_query.answer.assert_called_once()
|
||||
mock_callback_query.answer.assert_called_once()
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_handle_subscription_cancel_clears_saved_cart(mock_callback_query, mock_state, mock_user, mock_db):
|
||||
"""Отмена покупки должна очищать сохраненную корзину"""
|
||||
mock_clear_draft = AsyncMock()
|
||||
mock_show_main_menu = AsyncMock()
|
||||
|
||||
with patch('app.handlers.subscription.autopay.user_cart_service') as mock_cart_service, \
|
||||
patch('app.handlers.subscription.autopay.clear_subscription_checkout_draft', new=mock_clear_draft), \
|
||||
patch('app.localization.texts.get_texts', return_value=MagicMock()) as _, \
|
||||
patch('app.handlers.menu.show_main_menu', new=mock_show_main_menu):
|
||||
|
||||
mock_cart_service.delete_user_cart = AsyncMock(return_value=True)
|
||||
|
||||
await handle_subscription_cancel(mock_callback_query, mock_state, mock_user, mock_db)
|
||||
|
||||
mock_state.clear.assert_called_once()
|
||||
mock_clear_draft.assert_awaited_once_with(mock_user.id)
|
||||
mock_cart_service.delete_user_cart.assert_awaited_once_with(mock_user.id)
|
||||
mock_show_main_menu.assert_awaited_once_with(mock_callback_query, mock_user, mock_db)
|
||||
mock_callback_query.answer.assert_called_once_with("❌ Покупка отменена")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user