""" Unit тесты для сервисов подписок. """ import pytest from decimal import Decimal from django.utils import timezone from datetime import timedelta from apps.subscriptions.services import SubscriptionService, PaymentService, PromoCodeService from apps.subscriptions.models import SubscriptionPlan, Subscription, PromoCode @pytest.mark.django_db @pytest.mark.unit class TestSubscriptionService: """Тесты сервиса SubscriptionService.""" def test_calculate_price_with_discount(self, mentor_user): """Тест расчета цены со скидкой.""" plan = SubscriptionPlan.objects.create( name='Базовый', slug='basic', price=Decimal('1000.00'), duration_days=30 ) service = SubscriptionService() price = service.calculate_price( plan=plan, duration_days=90, student_count=5 ) assert price > 0 def test_create_subscription(self, mentor_user): """Тест создания подписки.""" plan = SubscriptionPlan.objects.create( name='Базовый', slug='basic', price=Decimal('1000.00'), duration_days=30 ) service = SubscriptionService() subscription = service.create_subscription( user=mentor_user, plan=plan, duration_days=30, student_count=5 ) assert subscription.user == mentor_user assert subscription.plan == plan assert subscription.status == 'pending' @pytest.mark.django_db @pytest.mark.unit class TestPromoCodeService: """Тесты сервиса PromoCodeService.""" def test_validate_promo_code(self): """Тест валидации промокода.""" promo = PromoCode.objects.create( code='TEST2024', discount_percent=20, is_active=True ) service = PromoCodeService() is_valid, discount = service.validate_promo_code('TEST2024') assert is_valid is True assert discount == 20 def test_invalid_promo_code(self): """Тест невалидного промокода.""" service = PromoCodeService() is_valid, discount = service.validate_promo_code('INVALID') assert is_valid is False assert discount == 0