feat: manage trial settings on tariffs page

This commit is contained in:
3252a8
2026-05-24 18:46:23 +03:00
parent 60d1ba4efc
commit d1b9990bac
11 changed files with 558 additions and 10 deletions
+51 -1
View File
@@ -198,7 +198,8 @@ class SubscriptionServiceActivationDispatchTests(unittest.IsolatedAsyncioTestCas
TRIAL_DURATION_DAYS=3,
TRIAL_TRAFFIC_LIMIT_GB=5,
TRIAL_TRAFFIC_STRATEGY="WEEK",
USER_SQUAD_UUIDS="trial-squad",
USER_SQUAD_UUIDS="fallback-squad",
TRIAL_SQUAD_UUIDS="trial-squad",
)
service = _make_service(settings)
service.has_had_any_subscription = AsyncMock(return_value=False)
@@ -241,6 +242,55 @@ class SubscriptionServiceActivationDispatchTests(unittest.IsolatedAsyncioTestCas
panel_payload = service.panel_service.update_user_details_on_panel.await_args.args[1]
self.assertEqual(panel_payload["trafficLimitStrategy"], "WEEK")
self.assertEqual(panel_payload["activeInternalSquads"], ["trial-squad"])
async def test_activate_trial_falls_back_to_default_user_squads(self):
with tempfile.TemporaryDirectory() as tmpdir:
settings = _make_settings(
_tariffs_config_payload(),
tmpdir,
TRIAL_ENABLED=True,
TRIAL_DURATION_DAYS=3,
USER_SQUAD_UUIDS="fallback-a,fallback-b",
TRIAL_SQUAD_UUIDS=" , ",
)
service = _make_service(settings)
service.has_had_any_subscription = AsyncMock(return_value=False)
service._get_or_create_panel_user_link_details = AsyncMock(
return_value=("panel-user", "panel-sub", "short", True)
)
service.panel_service.update_user_details_on_panel = AsyncMock(
return_value={"subscriptionUrl": "https://example.test/sub", "shortUuid": "short"}
)
session = AsyncMock()
db_user = SimpleNamespace(
user_id=42,
telegram_id=42,
email=None,
username="trial-user",
first_name="Trial",
last_name="User",
)
with (
patch(
"bot.services.subscription_service_impl.trial.user_dal.get_user_by_id",
AsyncMock(return_value=db_user),
),
patch(
"bot.services.subscription_service_impl.trial.subscription_dal.deactivate_other_active_subscriptions",
AsyncMock(),
),
patch(
"bot.services.subscription_service_impl.trial.subscription_dal.upsert_subscription",
AsyncMock(),
),
):
result = await service.activate_trial_subscription(session, user_id=42)
self.assertTrue(result["activated"])
panel_payload = service.panel_service.update_user_details_on_panel.await_args.args[1]
self.assertEqual(panel_payload["activeInternalSquads"], ["fallback-a", "fallback-b"])
async def test_activate_subscription_dispatches_traffic_sale_mode(self):
with tempfile.TemporaryDirectory() as tmpdir: