Ajout de la monétisation V0.1
This commit is contained in:
parent
cd0fc4c488
commit
879355f792
29 changed files with 698 additions and 72 deletions
200
test_premium.py
Normal file
200
test_premium.py
Normal file
|
|
@ -0,0 +1,200 @@
|
|||
import unittest
|
||||
from unittest.mock import AsyncMock, MagicMock, patch
|
||||
import os
|
||||
import json
|
||||
import asyncio
|
||||
|
||||
# Setup env variables before importing premium module
|
||||
os.environ["STARTER_SKU_ID"] = "111111"
|
||||
os.environ["MEDIUM_SKU_ID"] = "222222"
|
||||
os.environ["LARGE_SKU_ID"] = "333333"
|
||||
|
||||
from utils.premium import load_partners_whitelist, get_sku_ids, check_premium_tier, WHITELIST_PARTNERS_FILE
|
||||
|
||||
class TestPremiumSystem(unittest.IsolatedAsyncioTestCase):
|
||||
|
||||
def setUp(self):
|
||||
# Reset whitelist file before each test
|
||||
if os.path.exists(WHITELIST_PARTNERS_FILE):
|
||||
try:
|
||||
os.remove(WHITELIST_PARTNERS_FILE)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
def tearDown(self):
|
||||
# Clean up whitelist file
|
||||
if os.path.exists(WHITELIST_PARTNERS_FILE):
|
||||
try:
|
||||
os.remove(WHITELIST_PARTNERS_FILE)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
async def test_get_sku_ids(self):
|
||||
starter, medium, large = get_sku_ids()
|
||||
self.assertEqual(starter, 111111)
|
||||
self.assertEqual(medium, 222222)
|
||||
self.assertEqual(large, 333333)
|
||||
|
||||
async def test_load_partners_whitelist_empty(self):
|
||||
partners = await load_partners_whitelist()
|
||||
self.assertEqual(partners, [])
|
||||
self.assertTrue(os.path.exists(WHITELIST_PARTNERS_FILE))
|
||||
|
||||
async def test_load_partners_whitelist_with_data(self):
|
||||
with open(WHITELIST_PARTNERS_FILE, "w") as f:
|
||||
json.dump({"partners": [123, 456]}, f)
|
||||
partners = await load_partners_whitelist()
|
||||
self.assertEqual(partners, [123, 456])
|
||||
|
||||
async def test_check_premium_tier_dm_fails(self):
|
||||
interaction = MagicMock()
|
||||
interaction.guild = None
|
||||
interaction.response = MagicMock()
|
||||
interaction.response.send_message = AsyncMock()
|
||||
|
||||
decorator = check_premium_tier()
|
||||
predicate = decorator.predicate
|
||||
|
||||
result = await predicate(interaction)
|
||||
self.assertFalse(result)
|
||||
interaction.response.send_message.assert_called_once_with(
|
||||
"❌ Cette commande ne peut être exécutée que sur un serveur Discord.",
|
||||
ephemeral=True
|
||||
)
|
||||
|
||||
async def test_check_premium_tier_whitelist_passes(self):
|
||||
with open(WHITELIST_PARTNERS_FILE, "w") as f:
|
||||
json.dump({"partners": [12345]}, f)
|
||||
|
||||
interaction = MagicMock()
|
||||
interaction.guild = MagicMock()
|
||||
interaction.guild.id = 12345
|
||||
interaction.response = MagicMock()
|
||||
interaction.response.send_message = AsyncMock()
|
||||
|
||||
decorator = check_premium_tier()
|
||||
predicate = decorator.predicate
|
||||
|
||||
result = await predicate(interaction)
|
||||
self.assertTrue(result)
|
||||
interaction.response.send_message.assert_not_called()
|
||||
|
||||
async def test_check_premium_tier_invalid_member_count_fails(self):
|
||||
interaction = MagicMock()
|
||||
interaction.guild = MagicMock()
|
||||
interaction.guild.id = 999
|
||||
interaction.guild.member_count = None
|
||||
interaction.response = MagicMock()
|
||||
interaction.response.send_message = AsyncMock()
|
||||
|
||||
decorator = check_premium_tier()
|
||||
predicate = decorator.predicate
|
||||
|
||||
result = await predicate(interaction)
|
||||
self.assertFalse(result)
|
||||
interaction.response.send_message.assert_called_once_with(
|
||||
"❌ Impossible de vérifier la taille du serveur par sécurité. Veuillez réessayer plus tard.",
|
||||
ephemeral=True
|
||||
)
|
||||
|
||||
async def test_check_premium_tier_less_than_500_with_starter(self):
|
||||
interaction = MagicMock()
|
||||
interaction.guild = MagicMock()
|
||||
interaction.guild.id = 999
|
||||
interaction.guild.member_count = 100
|
||||
interaction.response = MagicMock()
|
||||
interaction.response.send_message = AsyncMock()
|
||||
|
||||
# Mock entitlements
|
||||
entitlement = MagicMock()
|
||||
entitlement.sku_id = 111111
|
||||
entitlement.is_active.return_value = True
|
||||
interaction.entitlements = [entitlement]
|
||||
|
||||
decorator = check_premium_tier()
|
||||
predicate = decorator.predicate
|
||||
|
||||
result = await predicate(interaction)
|
||||
self.assertTrue(result)
|
||||
|
||||
async def test_check_premium_tier_500_to_2500_with_starter_only_fails(self):
|
||||
interaction = MagicMock()
|
||||
interaction.guild = MagicMock()
|
||||
interaction.guild.id = 999
|
||||
interaction.guild.member_count = 1000
|
||||
interaction.response = MagicMock()
|
||||
interaction.response.send_message = AsyncMock()
|
||||
|
||||
entitlement = MagicMock()
|
||||
entitlement.sku_id = 111111
|
||||
entitlement.is_active.return_value = True
|
||||
interaction.entitlements = [entitlement]
|
||||
|
||||
decorator = check_premium_tier()
|
||||
predicate = decorator.predicate
|
||||
|
||||
result = await predicate(interaction)
|
||||
self.assertFalse(result)
|
||||
interaction.response.send_message.assert_called_once()
|
||||
self.assertIn("Palier Medium", interaction.response.send_message.call_args[0][0])
|
||||
|
||||
async def test_check_premium_tier_500_to_2500_with_medium_passes(self):
|
||||
interaction = MagicMock()
|
||||
interaction.guild = MagicMock()
|
||||
interaction.guild.id = 999
|
||||
interaction.guild.member_count = 1000
|
||||
interaction.response = MagicMock()
|
||||
interaction.response.send_message = AsyncMock()
|
||||
|
||||
entitlement = MagicMock()
|
||||
entitlement.sku_id = 222222
|
||||
entitlement.is_active.return_value = True
|
||||
interaction.entitlements = [entitlement]
|
||||
|
||||
decorator = check_premium_tier()
|
||||
predicate = decorator.predicate
|
||||
|
||||
result = await predicate(interaction)
|
||||
self.assertTrue(result)
|
||||
|
||||
async def test_check_premium_tier_above_2500_with_large_passes(self):
|
||||
interaction = MagicMock()
|
||||
interaction.guild = MagicMock()
|
||||
interaction.guild.id = 999
|
||||
interaction.guild.member_count = 3000
|
||||
interaction.response = MagicMock()
|
||||
interaction.response.send_message = AsyncMock()
|
||||
|
||||
entitlement = MagicMock()
|
||||
entitlement.sku_id = 333333
|
||||
entitlement.is_active.return_value = True
|
||||
interaction.entitlements = [entitlement]
|
||||
|
||||
decorator = check_premium_tier()
|
||||
predicate = decorator.predicate
|
||||
|
||||
result = await predicate(interaction)
|
||||
self.assertTrue(result)
|
||||
|
||||
async def test_check_premium_tier_above_2500_with_medium_fails(self):
|
||||
interaction = MagicMock()
|
||||
interaction.guild = MagicMock()
|
||||
interaction.guild.id = 999
|
||||
interaction.guild.member_count = 3000
|
||||
interaction.response = MagicMock()
|
||||
interaction.response.send_message = AsyncMock()
|
||||
|
||||
entitlement = MagicMock()
|
||||
entitlement.sku_id = 222222
|
||||
entitlement.is_active.return_value = True
|
||||
interaction.entitlements = [entitlement]
|
||||
|
||||
decorator = check_premium_tier()
|
||||
predicate = decorator.predicate
|
||||
|
||||
result = await predicate(interaction)
|
||||
self.assertFalse(result)
|
||||
self.assertIn("Palier Large", interaction.response.send_message.call_args[0][0])
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue