From 26b533716ac8add9f618f124f44762c58a1c65e3 Mon Sep 17 00:00:00 2001 From: admin Date: Thu, 29 Oct 2026 20:00:26 +0200 Subject: [PATCH] fix(subscription): grant one day for one-star plan --- VERSION | 2 +- payments.py | 12 +----------- tests/test_payments.py | 9 +++++---- 3 files changed, 7 insertions(+), 16 deletions(-) diff --git a/VERSION b/VERSION index ca47100..ec9f8e3 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.1.0+71 +0.1.0+72 diff --git a/payments.py b/payments.py index 89b33b2..f57cc85 100644 --- a/payments.py +++ b/payments.py @@ -152,17 +152,7 @@ async def handle_successful_payment(message: Message) -> None: return if days == 0: - await asyncio.to_thread( - save_payment, - charge_id, - message.from_user.id, - payment.invoice_payload, - payment.currency, - payment.total_amount, - db_path, - ) - await message.answer("Оплата 1 ⭐ получена. Срок подписки не изменён.") - return + days = 1 await asyncio.to_thread(ensure_subscription, message.from_user.id) days_left = await asyncio.to_thread(activate_subscription_days, message.from_user.id, days) diff --git a/tests/test_payments.py b/tests/test_payments.py index edd7b51..1cfcf24 100644 --- a/tests/test_payments.py +++ b/tests/test_payments.py @@ -261,20 +261,21 @@ class SubscribeCommandTests(unittest.IsolatedAsyncioTestCase): to_thread.assert_not_awaited() callback.answer.assert_awaited_once_with("Dev-оплата подтверждена. Срок подписки не изменён.") - async def test_zero_day_plan_is_a_one_star_invoice_without_access_grant(self): + async def test_zero_day_plan_is_a_one_star_invoice_and_grants_one_day(self): self.assertEqual(payments.plan_for_payload("sub:0:20261001120000"), (0, 1)) message = _paid_message(amount=1, payload="sub:0:20261001120000") self.db = _db() + user_store.ensure_subscription(42, self.db) with ( patch.dict(os.environ, {"BOT_DB_PATH": self.db}), patch.object(payments.asyncio, "to_thread", new=_direct_thread_mock()), - patch.object(payments, "activate_subscription_days") as activate, + patch.object(payments, "activate_subscription_days", wraps=user_store.activate_subscription_days) as activate, ): await payments.handle_successful_payment(message) - activate.assert_not_called() + activate.assert_called_once_with(42, 1) self.assertTrue(payments.payment_recorded("charge1", self.db)) - self.assertIn("Срок подписки не изменён", message.answers[0]) + self.assertIn("Подписка активна", message.answers[0]) async def test_dev_confirmation_activates_selected_term_and_replies_with_status(self): callback = AsyncMock()