feat: split subscription stats by access type

This commit is contained in:
3252a8
2026-05-31 00:08:31 +03:00
parent e7f93a5f47
commit 93353db511
9 changed files with 243 additions and 33 deletions
+3 -1
View File
@@ -96,9 +96,11 @@ class AdminDbStatsCacheTests(unittest.IsolatedAsyncioTestCase):
"total_users": 10,
"banned_users": 1,
"active_today": 2,
"active_subscriptions": 8,
"paid_subscriptions": 7,
"trial_users": 1,
"inactive_users": 1,
"free_subscription_users": 0,
"inactive_users": 2,
"referral_users": 3,
}
)
+43
View File
@@ -27,6 +27,49 @@ class FakeResult:
return self._scalar_value
return [self._scalar_value]
def one(self):
return self._scalar_value
class UserDalStatisticsTests(unittest.IsolatedAsyncioTestCase):
async def test_get_enhanced_user_statistics_splits_paid_trial_and_free_users(self):
session = SimpleNamespace(
execute=AsyncMock(
side_effect=[
FakeResult((10, 1, 2, 3)),
FakeResult((8, 4, 2, 2)),
]
)
)
stats = await user_dal.get_enhanced_user_statistics(session)
self.assertEqual(
stats,
{
"total_users": 10,
"banned_users": 1,
"active_today": 2,
"active_subscriptions": 8,
"paid_subscriptions": 4,
"trial_users": 2,
"free_subscription_users": 2,
"inactive_users": 2,
"referral_users": 3,
},
)
stmt = session.execute.await_args_list[1].args[0]
sql = str(
stmt.compile(
dialect=postgresql.dialect(),
compile_kwargs={"literal_binds": True},
)
).upper()
self.assertIn("GROUP BY SUBSCRIPTIONS.USER_ID", sql)
self.assertIn("SUBSCRIPTIONS.PROVIDER", sql)
self.assertIn("TRIAL", sql)
class UserDalMergeTests(unittest.IsolatedAsyncioTestCase):
async def test_get_panel_user_uuids_for_user_includes_subscription_fallbacks_once(self):