Files
remnawave-bedolaga-telegram…/tests/test_user_cart_service.py
Pavel Stryuk 427011fe41 1) Отображение скидки на кнопках (красивое!)
2) У промогрупп появится приоритет
3) У пользователя может быть несколько промогрупп, но влиять будет только с наивысшим приоритетом
4) К промокодам можно будет добавить промогруппу. Все активировавшие промокод получат её
5) При выводе пользователей с промогруппой будет также выводиться ссылка на каждого. Можно будет отследить сливы промокодов "для своих". Я в целом это добавлю во все места, где пользователь выводится в админке
6) Исправить баг исчезновения триалки при пополнении
7) Исправить падающие тесты и добавить новых
8) Трафик: 0 ГБ в тестовой подписке исправить на Трафик: Безлимит
2025-11-04 13:05:02 +01:00

139 lines
4.1 KiB
Python

import pytest
from unittest.mock import AsyncMock, MagicMock
from app.services.user_cart_service import UserCartService
from app.config import settings
# Мок для Redis клиента
class MockRedis:
def __init__(self):
self.storage = {}
async def setex(self, key, ttl, value):
self.storage[key] = value
return True
async def get(self, key):
return self.storage.get(key)
async def delete(self, key):
if key in self.storage:
del self.storage[key]
return 1
return 0
async def exists(self, key):
return 1 if key in self.storage else 0
@pytest.fixture
def mock_redis():
return MockRedis()
@pytest.fixture
def user_cart_service(mock_redis):
service = UserCartService()
service.redis_client = mock_redis
return service
async def test_save_user_cart(user_cart_service, mock_redis):
"""Тест сохранения корзины пользователя"""
user_id = 12345
cart_data = {
'period_days': 30,
'countries': ['ru', 'us'],
'devices': 3,
'traffic_gb': 10,
'total_price': 50000
}
result = await user_cart_service.save_user_cart(user_id, cart_data)
assert result is True
assert f"user_cart:{user_id}" in mock_redis.storage
assert cart_data == eval(mock_redis.storage[f"user_cart:{user_id}"])
async def test_get_user_cart(user_cart_service, mock_redis):
"""Тест получения корзины пользователя"""
user_id = 12345
cart_data = {
'period_days': 30,
'countries': ['ru', 'us'],
'devices': 3,
'traffic_gb': 10,
'total_price': 50000
}
# Сохраняем данные
await user_cart_service.save_user_cart(user_id, cart_data)
# Получаем данные
result = await user_cart_service.get_user_cart(user_id)
assert result == cart_data
async def test_get_user_cart_not_found(user_cart_service):
"""Тест получения несуществующей корзины пользователя"""
user_id = 99999
result = await user_cart_service.get_user_cart(user_id)
assert result is None
async def test_delete_user_cart(user_cart_service, mock_redis):
"""Тест удаления корзины пользователя"""
user_id = 12345
cart_data = {
'period_days': 30,
'countries': ['ru', 'us'],
'devices': 3,
'traffic_gb': 10,
'total_price': 50000
}
# Сохраняем данные
await user_cart_service.save_user_cart(user_id, cart_data)
assert f"user_cart:{user_id}" in mock_redis.storage
# Удаляем данные
result = await user_cart_service.delete_user_cart(user_id)
assert result is True
assert f"user_cart:{user_id}" not in mock_redis.storage
async def test_delete_user_cart_not_found(user_cart_service):
"""Тест удаления несуществующей корзины пользователя"""
user_id = 99999
result = await user_cart_service.delete_user_cart(user_id)
assert result is False
async def test_has_user_cart(user_cart_service, mock_redis):
"""Тест проверки наличия корзины пользователя"""
user_id = 12345
cart_data = {
'period_days': 30,
'countries': ['ru', 'us'],
'devices': 3,
'traffic_gb': 10,
'total_price': 50000
}
# Проверяем, что корзины нет
result = await user_cart_service.has_user_cart(user_id)
assert result is False
# Сохраняем данные
await user_cart_service.save_user_cart(user_id, cart_data)
# Проверяем, что корзина есть
result = await user_cart_service.has_user_cart(user_id)
assert result is True
async def test_has_user_cart_not_found(user_cart_service):
"""Тест проверки отсутствия корзины пользователя"""
user_id = 99999
result = await user_cart_service.has_user_cart(user_id)
assert result is False