# -*- coding: utf-8 -*- import json 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 from apps.payment.models import CoursePayment, SchoolPayment, UserBonus, Payment from apps.user.models import User class AutoAddingUserBonusTestCase(TestCase): def test_adding_user_bonuses_after_paid_more_one(self): user = UserFactory.create(role=User.USER_ROLE, first_name='', last_name='', phone='') course = CourseFactory.create(price=1000) course2 = CourseFactory.create(price=1000) self.assertEqual(user.bonus, 0, 'При создании есть бонусы') cp = CoursePayment.objects.create(user=user, course=course, access_expire=now() + timedelta(100)) cp.status = Payment.PW_PAID_STATUSES[0] cp.save() del user.__dict__['bonus'] self.assertEqual(user.bonus, 0, 'Есть бонусы после покупки 1 курса') cp2 = CoursePayment.objects.create(user=user, course=course2, access_expire=now() + timedelta(100)) cp2.status = Payment.PW_PAID_STATUSES[0] cp2.save() del user.__dict__['bonus'] self.assertEqual(user.bonus, UserBonus.AMOUNT_PAID_ONE_MORE, 'Неверное кол-во бонусов после покупки 2 курсов') cp.delete() del user.__dict__['bonus'] self.assertEqual(user.bonus, UserBonus.AMOUNT_PAID_ONE_MORE, 'Изменились бонусы после удаления оплаты 1 курса') user.bonuses.all().delete() sp = SchoolPayment.objects.create(user=user, weekdays=[1, 2, 3], add_days=False, date_start=now().date(), date_end=(now() + timedelta(30)).date(), amount=1000, status=Payment.PW_PAID_STATUSES[0]) del user.__dict__['bonus'] self.assertEqual(user.bonus, UserBonus.AMOUNT_PAID_ONE_MORE, 'Неверное кол-во бонусов после покупки курса и школы') user.bonuses.all().delete() cp2.delete() sp2 = SchoolPayment.objects.create(user=user, weekdays=[1, 2, 3], add_days=False, date_start=(now() + timedelta(31)).date(), date_end=(now() + timedelta(60)).date(), amount=1000, status=Payment.PW_PAID_STATUSES[0]) del user.__dict__['bonus'] self.assertEqual(user.bonus, UserBonus.AMOUNT_PAID_ONE_MORE, 'Неверное кол-во бонусов после покупки 2 месяцев школы') User.objects.all().delete() CoursePayment.objects.all().delete() SchoolPayment.objects.all().delete() UserBonus.objects.all().delete() 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', '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) del user.__dict__['bonus'] self.assertEqual(user.bonus, UserBonus.AMOUNT_FILL_PROFILE, 'Неверное кол-во бонусов после заполнения профиля') User.objects.all().delete() UserBonus.objects.all().delete() 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, 'При создании есть бонусы') 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, 'Неверное кол-во бонусов после заполнения ссылки на отзыв') User.objects.all().delete() UserBonus.objects.all().delete()