@@ -12,7 +12,7 @@ class MeAPITest(BaseAuthorizedAPITest): cls.host_user = CustomUserModel.objects.create_user(email='test_2@test.test', password='test_2') cls.host = BusinessUserHost.objects.create(user=cls.host_user) cls.host_payment_plan = PaymentPlan.objects.create( - price=1000, tokens_per_plan=900, is_corporate=True, title='Test plan 2' + price=1000, tokens_per_plan=900, is_corporate=True ) cls.host_user.payment_plan.plan = cls.host_payment_plan cls.host_user.payment_plan.save() @@ -20,7 +20,7 @@ class MeAPITest(BaseAuthorizedAPITest): @classmethod def setup_test_data(cls) -> None: cls.payment_plan, _ = PaymentPlan.objects.update_or_create( - price=0, tokens_per_plan=10, defaults={'title': 'Test plan 1'} + price=0, tokens_per_plan=10, defaults={} ) cls.setup_host() @@ -86,9 +86,9 @@ class MeAPITest(BaseAuthorizedAPITest): self.assertFalse(show_balance) def test_payment_plan(self) -> None: - payment_plan_title = self.get().json()['payment_plan']['plan']['title'] - self.assertEqual(payment_plan_title, 'Test plan 1') + payment_plan_uid = self.get().json()['payment_plan']['plan']['uid'] + self.assertEqual(str(payment_plan_uid), str(self.payment_plan.uid)) BusinessAccount.objects.create(user=self.user, parent_company=self.host) - payment_plan_title = self.get().json()['payment_plan']['plan']['title'] - self.assertEqual(payment_plan_title, 'Test plan 2') + payment_plan_uid = self.get().json()['payment_plan']['plan']['uid'] + self.assertEqual(str(payment_plan_uid), str(self.host_payment_plan.uid)) @@ -43,14 +43,13 @@ PATH_PREFETCH_MAP = { 'parent_company__user__uid', ), *_gen_only('payment_plan', 'uid', 'last_payment_at', 'next_payment_at'), - *_gen_only('payment_plan__plan', 'uid', 'title', 'price', 'tokens_per_plan', 'duration'), + *_gen_only('payment_plan__plan', 'uid', 'price', 'tokens_per_plan', 'duration'), *_gen_only( 'business_account__parent_company__user__payment_plan', 'uid', 'last_payment_at', 'next_payment_at', 'plan__uid', - 'plan__title', 'plan__price', 'plan__tokens_per_plan', 'plan__duration', @@ -0,0 +1,17 @@ +# Generated by Django 5.0.11 on 2026-02-07 12:11 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('payments', '0025_update_videos_quantity'), + ] + + operations = [ + migrations.RemoveField( + model_name='paymentplan', + name='title', + ), + ] @@ -25,7 +25,6 @@ class PaymentPlan(BaseModel): is_corporate = models.BooleanField(default=False, verbose_name=_('Is corporate')) individual = models.BooleanField(default=False, verbose_name=_('Individual')) is_recurrent = models.BooleanField(default=False, verbose_name=_('Is recurrent')) - title = models.CharField(verbose_name=_('Title'), max_length=120, null=True, blank=True) duration = models.CharField( verbose_name=_('Duration'), max_length=100, @@ -47,7 +46,7 @@ class PaymentPlan(BaseModel): return NeuronModel.objects.filter(pk__in=ids) def __str__(self) -> str: - return f'{self.title or "Ошибка"}' + return f'{self.uid}' class Meta: ordering = ['price'] @@ -27,7 +27,7 @@ class PaymentPlanFeature(OrderedModel): order_with_respect_to = ('plan', 'model__category') def __str__(self) -> str: - return f'{self.plan.title} ({self.model.title})' + return f'{self.plan.uid} ({self.model.title})' class Meta(OrderedModel.Meta): verbose_name = _('Payment plan feature') @@ -147,7 +147,6 @@ async def list_payment_plans(request): result.append( PaymentPlanSchema( uid=plan.uid, - title=plan.title, price=plan.price, tokens_per_plan=plan.tokens_per_plan, duration=plan.duration, @@ -15,7 +15,7 @@ class PlansAPITest(BaseAuthorizedAPITest): @classmethod def setup_test_data(cls) -> None: cls.free_plan, created = PaymentPlan.objects.update_or_create( - tokens_per_plan=10, defaults={'title': 'Zero Price Plan'} + price=0, tokens_per_plan=10, defaults={} ) cls.category_chat_bots = ModelCategory.objects.create( @@ -51,7 +51,6 @@ class PlansAPITest(BaseAuthorizedAPITest): ) cls.regular_plan1 = PaymentPlan.objects.create( - title='Regular Plan 1', price=1000, tokens_per_plan=100, is_corporate=False, @@ -59,7 +58,6 @@ class PlansAPITest(BaseAuthorizedAPITest): ) cls.regular_plan2 = PaymentPlan.objects.create( - title='Regular Plan 2', price=2000, tokens_per_plan=200, is_corporate=False, @@ -86,22 +84,20 @@ class PlansAPITest(BaseAuthorizedAPITest): ) cls.corporate_plan1 = PaymentPlan.objects.create( - title='Corporate Plan 1', price=10000, tokens_per_plan=1000, is_corporate=True, is_visible=True, ) cls.corporate_plan2 = PaymentPlan.objects.create( - title='Corporate Plan 2', price=20000, tokens_per_plan=2000, is_corporate=True, is_visible=True, ) - PaymentPlan.objects.create( - title='Hidden Plan', price=500, tokens_per_plan=50, is_corporate=False, is_visible=False + cls.hidden_plan = PaymentPlan.objects.create( + price=500, tokens_per_plan=50, is_corporate=False, is_visible=False ) def test_unauthorized_status_code(self) -> None: @@ -131,7 +127,6 @@ class PlansAPITest(BaseAuthorizedAPITest): keys, [ 'uid', - 'title', 'price', 'tokens_per_plan', 'duration', @@ -144,24 +139,26 @@ class PlansAPITest(BaseAuthorizedAPITest): def test_regular_plans(self) -> None: plans = self.get().json() - plan_titles = [plan['title'] for plan in plans] - self.assertSetEqual({'Regular Plan 2', 'Regular Plan 1'}, set(plan_titles)) + plan_uids = [str(plan['uid']) for plan in plans] + self.assertIn(str(self.regular_plan1.uid), plan_uids) + self.assertIn(str(self.regular_plan2.uid), plan_uids) def test_hidden_plans(self) -> None: plans = self.get().json() - plan_titles = [plan['title'] for plan in plans] - self.assertNotIn('Hidden Plan', plan_titles) + plan_uids = [str(plan['uid']) for plan in plans] + self.assertNotIn(str(self.hidden_plan.uid), plan_uids) def test_zero_price_plans(self) -> None: plans = self.get().json() - plan_titles = [plan['title'] for plan in plans] - self.assertNotIn('Zero Price Plan', plan_titles) + plan_uids = [str(plan['uid']) for plan in plans] + self.assertNotIn(str(self.free_plan.uid), plan_uids) def test_corporate_plans(self) -> None: BusinessUserHost.objects.create(user=self.user) plans = self.get().json() - plan_titles = [plan['title'] for plan in plans] - self.assertSetEqual({'Corporate Plan 1', 'Corporate Plan 2'}, set(plan_titles)) + plan_uids = [str(plan['uid']) for plan in plans] + self.assertIn(str(self.corporate_plan1.uid), plan_uids) + self.assertIn(str(self.corporate_plan2.uid), plan_uids) def test_grouped_features_structure(self) -> None: plans = self.get().json() @@ -218,7 +215,7 @@ class PlansAPITest(BaseAuthorizedAPITest): def test_accessed_models(self) -> None: plans = self.get().json() - plan_with_models = [p for p in plans if p['title'] == 'Regular Plan 1'][0] + plan_with_models = [p for p in plans if str(p['uid']) == str(self.regular_plan1.uid)][0] self.assertIsNotNone(plan_with_models) accessed_models = plan_with_models['accessed_models'] @@ -14,14 +14,14 @@ class BalanceAPITest(BaseAuthorizedAPITest): cls.host_user = CustomUserModel.objects.create_user(email='test_2@test.test', password='test_2') cls.host = BusinessUserHost.objects.create(user=cls.host_user) cls.host_payment_plan = PaymentPlan.objects.create( - price=1000, tokens_per_plan=900, is_corporate=True, title='Test plan 2' + price=1000, tokens_per_plan=900, is_corporate=True ) cls.host_user.payment_plan.plan = cls.host_payment_plan cls.host_user.payment_plan.save() @classmethod def setup_test_data(cls) -> None: - PaymentPlan.objects.update_or_create(price=0, tokens_per_plan=10, defaults={'title': 'Test plan 1'}) + PaymentPlan.objects.update_or_create(price=0, tokens_per_plan=10, defaults={}) cls.setup_host() def test_unauthorized_status_code(self) -> None: @@ -44,7 +44,7 @@ class PaymentAdmin(admin.ModelAdmin): @admin.register(PaymentPlan) class PaymentPlanAdmin(OrderedInlineModelAdminMixin, admin.ModelAdmin): list_display = [ - 'title', + 'uid', 'price', 'tokens_per_plan', 'duration', @@ -22,7 +22,6 @@ class GroupedPlanFeatureSchema(Schema): class PaymentPlanSchema(Schema): uid: UUID - title: str price: condecimal(max_digits=10, decimal_places=2) tokens_per_plan: condecimal(max_digits=10, decimal_places=2) duration: str @@ -7,7 +7,6 @@ from payments.models.referral_account import ReferralAccount class PaymentPlanSerializer(serializers.Serializer): uid = serializers.UUIDField() - title = serializers.CharField() price = serializers.DecimalField(max_digits=10, decimal_places=2) tokens_per_plan = serializers.DecimalField(max_digits=50, decimal_places=2) duration = serializers.CharField(read_only=True)