From 1ff4151c6192a2dc4ad5b86c165083ff259431b9 Mon Sep 17 00:00:00 2001 From: gzbender Date: Wed, 10 Apr 2019 03:01:38 +0500 Subject: [PATCH] =?UTF-8?q?=D0=BD=D0=B0=D1=87=D0=B8=D1=81=D0=BB=D1=8F?= =?UTF-8?q?=D1=82=D1=8C=20=D0=BB=D0=B8=D0=BB=D0=B8=D0=BA=D0=B8=20=D1=81=20?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=BC=D0=B0=D1=86=D0=B8=D0=B5=D0=B9=20=D0=B8?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=BF=D0=B0=D0=BF=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/v1/views.py | 10 ++++++ apps/user/models.py | 13 -------- apps/user/views.py | 11 +++++-- .../templates/blocks/popup_bonuses_came.html | 2 +- project/tests/test_features.py | 33 ++++++++++++++----- 5 files changed, 45 insertions(+), 24 deletions(-) diff --git a/api/v1/views.py b/api/v1/views.py index 50e0d848..47a507ee 100644 --- a/api/v1/views.py +++ b/api/v1/views.py @@ -432,6 +432,16 @@ class UserViewSet(ExtendedModelViewSet): # 'delete': IsAdmin, # } + def update(self, *args, **kwargs): + response = super().update(*args, **kwargs) + instance = self.get_object() + + if instance.review_url and not instance.bonuses.filter(is_service=True, + action_name=UserBonus.ACTION_HAVE_REVIEW).count(): + UserBonus.objects.create(user=instance, amount=UserBonus.AMOUNT_HAVE_REVIEW, is_service=True, + action_name=UserBonus.ACTION_HAVE_REVIEW) + return response + def list(self, request, *args, **kwargs): queryset = self.filter_queryset(self.get_queryset()) diff --git a/apps/user/models.py b/apps/user/models.py index 4991a6fb..aca57b23 100644 --- a/apps/user/models.py +++ b/apps/user/models.py @@ -155,19 +155,6 @@ class User(AbstractUser): course_payment_cnt = CoursePayment.objects.filter(status__in=Payment.PW_PAID_STATUSES, user=self).count() return school_payments_cnt > 1 or course_payment_cnt > 1 or (school_payments_cnt and course_payment_cnt) - def save(self, *args, **kwargs): - super().save(*args, **kwargs) - from apps.payment.models import UserBonus - # начисляемм бонусы, если заполнил профиль - if self.phone and self.first_name and self.last_name and not self.bonuses.filter( - is_service=True, action_name=UserBonus.ACTION_FILL_PROFILE).count(): - UserBonus.objects.create(user=self, amount=UserBonus.AMOUNT_FILL_PROFILE, is_service=True, - action_name=UserBonus.ACTION_FILL_PROFILE) - if self.review_url and not self.bonuses.filter(is_service=True, - action_name=UserBonus.ACTION_HAVE_REVIEW).count(): - UserBonus.objects.create(user=self, amount=UserBonus.AMOUNT_HAVE_REVIEW, is_service=True, - action_name=UserBonus.ACTION_HAVE_REVIEW) - @receiver(post_save, sender=User) def create_auth_token(sender, instance=None, created=False, **kwargs): diff --git a/apps/user/views.py b/apps/user/views.py index 1c244b01..e2571acc 100644 --- a/apps/user/views.py +++ b/apps/user/views.py @@ -24,7 +24,7 @@ from apps.config.models import Config from apps.course.models import Course from apps.notification.utils import send_email from apps.school.models import SchoolSchedule -from apps.payment.models import AuthorBalance, CoursePayment, SchoolPayment, Payment, UserGiftCertificate +from apps.payment.models import AuthorBalance, CoursePayment, SchoolPayment, Payment, UserGiftCertificate, UserBonus from apps.user.models import AuthorRequest, EmailSubscription, SubscriptionCategory from .forms import AuthorRequesForm, UserEditForm, WithdrawalForm @@ -245,7 +245,14 @@ class ProfileEditView(UpdateView): else: messages.error(request, 'Неверный пароль.') messages.info(request, 'Данные сохранены.') - return super().post(request, *args, **kwargs) + response = super().post(request, *args, **kwargs) + user = User.objects.get(pk=request.user.id) + # начисляемм бонусы, если заполнил профиль + if user.phone and user.first_name and user.last_name and not user.bonuses.filter( + is_service=True, action_name=UserBonus.ACTION_FILL_PROFILE).count(): + UserBonus.objects.create(user=user, amount=UserBonus.AMOUNT_FILL_PROFILE, is_service=True, + action_name=UserBonus.ACTION_FILL_PROFILE) + return response def get_success_url(self): return reverse('user-edit-profile') diff --git a/project/templates/blocks/popup_bonuses_came.html b/project/templates/blocks/popup_bonuses_came.html index 2f29bd70..2c2415a5 100644 --- a/project/templates/blocks/popup_bonuses_came.html +++ b/project/templates/blocks/popup_bonuses_came.html @@ -11,7 +11,7 @@
Вам начислено
лиликов
-
Приглашайте друзей в Lil School и получайте 30% от суммы их первой покупки. +
Приглашайте друзей в Lil School и получайте {{ config.REFERRER_BONUS }}% от суммы их первой покупки. Накапливайте монеты и тратьте их на оплату школы и курсов.
Узнать больше про Лилики
diff --git a/project/tests/test_features.py b/project/tests/test_features.py index c2263bb2..dba636a6 100644 --- a/project/tests/test_features.py +++ b/project/tests/test_features.py @@ -1,9 +1,11 @@ # -*- coding: utf-8 -*- +import json -from datetime import datetime, timedelta +from datetime import timedelta from django.test import TestCase from django.utils.timezone import now +from django.shortcuts import reverse from factory.faker import Faker from project.tests.factories import UserFactory, CourseFactory @@ -56,11 +58,25 @@ class AutoAddingUserBonusTestCase(TestCase): def test_adding_user_bonuses_after_fill_profile(self): user = UserFactory.create(role=User.USER_ROLE, first_name='', last_name='', phone='') self.assertEqual(user.bonus, 0, 'При создании есть бонусы') + self.client.force_login(user) + data = {k: user.__dict__[k] for k in ['email', 'slug', 'child_first_name', + 'child_last_name', 'child_birthday', 'child_gender', 'city', + 'country', 'birthday', 'gender', 'about', 'instagram', 'facebook', + 'twitter', 'pinterest', 'youtube', 'vkontakte', 'site']} + + data.update({ + 'first_name': Faker('first_name').generate({}), + 'last_name': Faker('last_name').generate({}), + 'phone': '+79123456789', + 'old_password': '', + 'new_password1': '', + 'new_password2': '', + }) + for k, v in data.items(): + if v is None: + data[k] = '' + self.client.post(reverse('user-edit-profile'), data) - user.first_name = Faker('first_name').generate({}) - user.last_name = Faker('last_name').generate({}) - user.phone = '+7123456789' - user.save() del user.__dict__['bonus'] self.assertEqual(user.bonus, UserBonus.AMOUNT_FILL_PROFILE, 'Неверное кол-во бонусов после заполнения профиля') @@ -70,9 +86,10 @@ class AutoAddingUserBonusTestCase(TestCase): def test_adding_user_bonuses_after_fill_review_url(self): user = UserFactory.create(role=User.USER_ROLE, first_name='', last_name='', phone='') self.assertEqual(user.bonus, 0, 'При создании есть бонусы') - - user.review_url = 'http://youtube.com/review_url' - user.save() + self.client.force_login(user) + self.client.patch('/api/v1/users/%d/' % user.id, json.dumps({ + 'review_url': 'http://youtube.com/review_url', + }), 'application/json') del user.__dict__['bonus'] self.assertEqual(user.bonus, UserBonus.AMOUNT_HAVE_REVIEW, 'Неверное кол-во бонусов после заполнения ссылки на отзыв')