parent
bef692e71d
commit
db0bbdf21f
3 changed files with 389 additions and 2 deletions
@ -1,3 +1,336 @@ |
||||
from datetime import timedelta |
||||
|
||||
from django.test import TestCase |
||||
from django.utils.timezone import now |
||||
|
||||
from apps.payment.models import Discount |
||||
from project.tests.factories import CourseFactory, DiscountFactory, UserFactory, PackageFactory |
||||
|
||||
|
||||
class DiscountForCoursesModelTestCase(TestCase): |
||||
|
||||
def setUp(self): |
||||
self.user = UserFactory.create() |
||||
|
||||
def test_discounts_for_courses_without_user(self): |
||||
course_1 = CourseFactory.create() |
||||
course_2 = CourseFactory.create() |
||||
course_3 = CourseFactory.create() |
||||
|
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=30, course=course_1, |
||||
product=Discount.PRODUCT_ONE_COURSE) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=50, course=course_2, |
||||
product=Discount.PRODUCT_ONE_COURSE) |
||||
|
||||
all_curses_discounts, discounts_for_courses = Discount.objects.get_courses_discounts() |
||||
self.assertEqual(all_curses_discounts, {'max_discount': None}) |
||||
self.assertEqual(discounts_for_courses[0], {'course': course_1.pk, 'max_discount': 30}) |
||||
self.assertEqual(discounts_for_courses[1], {'course': course_2.pk, 'max_discount': 50}) |
||||
|
||||
def test_greater_value_discount_without_user(self): |
||||
course = CourseFactory.create() |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=30, course=course, |
||||
product=Discount.PRODUCT_ONE_COURSE) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=50, course=course, |
||||
product=Discount.PRODUCT_ONE_COURSE) |
||||
|
||||
all_curses_discounts, discounts_for_courses = Discount.objects.get_courses_discounts() |
||||
self.assertEqual(all_curses_discounts, {'max_discount': None}) |
||||
self.assertEqual(discounts_for_courses[0], {'course': course.pk, 'max_discount': 50}) |
||||
|
||||
def test_exclude_personal_discounts_without_user(self): |
||||
user_1 = UserFactory.create() |
||||
course = CourseFactory.create() |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=30, course=course, |
||||
product=Discount.PRODUCT_ONE_COURSE) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=50, course=course, |
||||
product=Discount.PRODUCT_ONE_COURSE, client=user_1) |
||||
all_curses_discounts, discounts_for_courses = Discount.objects.get_courses_discounts() |
||||
self.assertEqual(all_curses_discounts, {'max_discount': None}) |
||||
self.assertEqual(discounts_for_courses[0], {'course': course.pk, 'max_discount': 30}) |
||||
|
||||
def test_discount_for_one_course_and_all_courses(self): |
||||
course = CourseFactory.create() |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=30, course=course, |
||||
product=Discount.PRODUCT_ONE_COURSE) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=50, course=course, |
||||
product=Discount.PRODUCT_ONE_COURSE) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=10, product=Discount.PRODUCT_ALL_COURSES) |
||||
|
||||
all_curses_discounts, discounts_for_courses = Discount.objects.get_courses_discounts() |
||||
self.assertEqual(all_curses_discounts, {'max_discount': 10}) |
||||
self.assertEqual(discounts_for_courses[0], {'course': course.pk, 'max_discount': 50}) |
||||
|
||||
def test_personal_discounts(self): |
||||
course = CourseFactory.create() |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=30, course=course, |
||||
product=Discount.PRODUCT_ONE_COURSE) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=50, course=course, |
||||
product=Discount.PRODUCT_ONE_COURSE, client=self.user) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=10, product=Discount.PRODUCT_ALL_COURSES) |
||||
|
||||
all_curses_discounts, discounts_for_courses = Discount.objects.get_courses_discounts(user=self.user) |
||||
self.assertEqual(all_curses_discounts, {'max_discount': 10}) |
||||
self.assertEqual(discounts_for_courses[0], {'course': course.pk, 'max_discount': 50}) |
||||
|
||||
def test_personal_discounts_multiple_users(self): |
||||
user_1 = UserFactory() |
||||
course = CourseFactory.create() |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=30, course=course, |
||||
product=Discount.PRODUCT_ONE_COURSE, client=user_1) |
||||
|
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=50, course=course, |
||||
product=Discount.PRODUCT_ONE_COURSE, client=self.user) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=10, product=Discount.PRODUCT_ALL_COURSES, |
||||
client=self.user) |
||||
|
||||
all_curses_discounts, discounts_for_courses = Discount.objects.get_courses_discounts(user=self.user) |
||||
self.assertEqual(all_curses_discounts, {'max_discount': 10}) |
||||
self.assertEqual(discounts_for_courses[0], {'course': course.pk, 'max_discount': 50}) |
||||
|
||||
all_curses_discounts, discounts_for_courses = Discount.objects.get_courses_discounts(user=user_1) |
||||
self.assertEqual(all_curses_discounts, {'max_discount': None}) |
||||
self.assertEqual(discounts_for_courses[0], {'course': course.pk, 'max_discount': 30}) |
||||
|
||||
def test_discount_for_one_course_without_user(self): |
||||
course_1 = CourseFactory.create() |
||||
course_2 = CourseFactory.create() |
||||
course_3 = CourseFactory.create() |
||||
|
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=30, course=course_1, |
||||
product=Discount.PRODUCT_ONE_COURSE) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=50, course=course_2, |
||||
product=Discount.PRODUCT_ONE_COURSE) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=60, course=course_3, |
||||
product=Discount.PRODUCT_ONE_COURSE) |
||||
|
||||
all_curses_discounts, discounts_for_courses = Discount.objects.get_courses_discounts(user=None, course=course_1) |
||||
self.assertEqual(all_curses_discounts, {'max_discount': None}) |
||||
self.assertEqual(len(discounts_for_courses), 1) |
||||
self.assertEqual(discounts_for_courses[0], {'course': course_1.pk, 'max_discount': 30}) |
||||
|
||||
def test_discount_for_one_course_with_multiple_users(self): |
||||
user_1 = UserFactory.create() |
||||
course_1 = CourseFactory.create() |
||||
course_2 = CourseFactory.create() |
||||
|
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=10, product=Discount.PRODUCT_ALL_COURSES) |
||||
|
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=30, course=course_1, |
||||
product=Discount.PRODUCT_ONE_COURSE, client=user_1) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=50, course=course_2, |
||||
product=Discount.PRODUCT_ONE_COURSE, client=user_1) |
||||
|
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=30, course=course_1, |
||||
product=Discount.PRODUCT_ONE_COURSE, client=self.user) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=50, course=course_2, |
||||
product=Discount.PRODUCT_ONE_COURSE, client=self.user) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=50, product=Discount.PRODUCT_ALL_COURSES, |
||||
client=self.user) |
||||
|
||||
all_curses_discounts, discounts_for_courses = Discount.objects.get_courses_discounts(user=user_1, |
||||
course=course_1) |
||||
self.assertEqual(all_curses_discounts, {'max_discount': 10}) |
||||
self.assertEqual(len(discounts_for_courses), 1) |
||||
self.assertEqual(discounts_for_courses[0], {'course': course_1.pk, 'max_discount': 30}) |
||||
|
||||
all_curses_discounts, discounts_for_courses = Discount.objects.get_courses_discounts(user=self.user, |
||||
course=course_1) |
||||
self.assertEqual(all_curses_discounts, {'max_discount': 50}) |
||||
self.assertEqual(len(discounts_for_courses), 1) |
||||
self.assertEqual(discounts_for_courses[0], {'course': course_1.pk, 'max_discount': 30}) |
||||
|
||||
def test_not_active_discount(self): |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=60, product=Discount.PRODUCT_ALL_COURSES, |
||||
is_active=False) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=40, product=Discount.PRODUCT_ALL_COURSES) |
||||
|
||||
all_curses_discounts, discounts_for_courses = Discount.objects.get_courses_discounts() |
||||
|
||||
self.assertEqual(all_curses_discounts, {'max_discount': 40}) |
||||
self.assertEqual(len(discounts_for_courses), 0) |
||||
|
||||
def test_old_discount(self): |
||||
DiscountFactory.create(start=now() - timedelta(days=2), end=now() - timedelta(days=1), value=60, |
||||
product=Discount.PRODUCT_ALL_COURSES) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=40, product=Discount.PRODUCT_ALL_COURSES) |
||||
|
||||
all_curses_discounts, discounts_for_courses = Discount.objects.get_courses_discounts() |
||||
|
||||
self.assertEqual(all_curses_discounts, {'max_discount': 40}) |
||||
self.assertEqual(len(discounts_for_courses), 0) |
||||
|
||||
def test_discount_from_the_future(self): |
||||
DiscountFactory.create(start=now() + timedelta(days=2), end=now() + timedelta(days=3), value=60, |
||||
product=Discount.PRODUCT_ALL_COURSES) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=40, product=Discount.PRODUCT_ALL_COURSES) |
||||
|
||||
all_curses_discounts, discounts_for_courses = Discount.objects.get_courses_discounts() |
||||
|
||||
self.assertEqual(all_curses_discounts, {'max_discount': 40}) |
||||
self.assertEqual(len(discounts_for_courses), 0) |
||||
|
||||
|
||||
class DiscountForPackagesModelTestCase(TestCase): |
||||
|
||||
def setUp(self): |
||||
self.user = UserFactory.create() |
||||
|
||||
def test_discounts_for_packages_without_user(self): |
||||
package_1 = PackageFactory.create() |
||||
package_2 = PackageFactory.create() |
||||
package_3 = PackageFactory.create() |
||||
|
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=30, package=package_1, |
||||
product=Discount.PRODUCT_ONE_PACKAGE) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=50, package=package_2, |
||||
product=Discount.PRODUCT_ONE_PACKAGE) |
||||
|
||||
all_packages_discounts, discounts_for_packages = Discount.objects.get_packages_discounts() |
||||
self.assertEqual(all_packages_discounts, {'max_discount': None}) |
||||
self.assertEqual(discounts_for_packages[0], {'package': package_1.pk, 'max_discount': 30}) |
||||
self.assertEqual(discounts_for_packages[1], {'package': package_2.pk, 'max_discount': 50}) |
||||
|
||||
def test_greater_value_discount_without_user(self): |
||||
package = PackageFactory.create() |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=30, package=package, |
||||
product=Discount.PRODUCT_ONE_PACKAGE) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=50, package=package, |
||||
product=Discount.PRODUCT_ONE_PACKAGE) |
||||
|
||||
all_packages_discounts, discounts_for_packages = Discount.objects.get_packages_discounts() |
||||
self.assertEqual(all_packages_discounts, {'max_discount': None}) |
||||
self.assertEqual(discounts_for_packages[0], {'package': package.pk, 'max_discount': 50}) |
||||
|
||||
def test_exclude_personal_discounts_without_user(self): |
||||
user_1 = UserFactory.create() |
||||
package = PackageFactory.create() |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=30, package=package, |
||||
product=Discount.PRODUCT_ONE_PACKAGE) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=50, package=package, |
||||
product=Discount.PRODUCT_ONE_PACKAGE, client=user_1) |
||||
all_packages_discounts, discounts_for_packages = Discount.objects.get_packages_discounts() |
||||
self.assertEqual(all_packages_discounts, {'max_discount': None}) |
||||
self.assertEqual(discounts_for_packages[0], {'package': package.pk, 'max_discount': 30}) |
||||
|
||||
def test_discount_for_one_package_and_all_packages(self): |
||||
package = PackageFactory.create() |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=30, package=package, |
||||
product=Discount.PRODUCT_ONE_PACKAGE) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=50, package=package, |
||||
product=Discount.PRODUCT_ONE_PACKAGE) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=10, product=Discount.PRODUCT_ALL_PACKAGES) |
||||
|
||||
all_packages_discounts, discounts_for_packages = Discount.objects.get_packages_discounts() |
||||
self.assertEqual(all_packages_discounts, {'max_discount': 10}) |
||||
self.assertEqual(discounts_for_packages[0], {'package': package.pk, 'max_discount': 50}) |
||||
|
||||
def test_personal_discounts(self): |
||||
package = PackageFactory.create() |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=30, package=package, |
||||
product=Discount.PRODUCT_ONE_PACKAGE) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=50, package=package, |
||||
product=Discount.PRODUCT_ONE_PACKAGE, client=self.user) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=10, product=Discount.PRODUCT_ALL_PACKAGES) |
||||
|
||||
all_packages_discounts, discounts_for_packages = Discount.objects.get_packages_discounts(user=self.user) |
||||
self.assertEqual(all_packages_discounts, {'max_discount': 10}) |
||||
self.assertEqual(discounts_for_packages[0], {'package': package.pk, 'max_discount': 50}) |
||||
|
||||
def test_personal_discounts_multiple_users(self): |
||||
user_1 = UserFactory() |
||||
package = PackageFactory.create() |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=30, package=package, |
||||
product=Discount.PRODUCT_ONE_PACKAGE, client=user_1) |
||||
|
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=50, package=package, |
||||
product=Discount.PRODUCT_ONE_PACKAGE, client=self.user) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=10, product=Discount.PRODUCT_ALL_PACKAGES, |
||||
client=self.user) |
||||
|
||||
all_packages_discounts, discounts_for_packages = Discount.objects.get_packages_discounts(user=self.user) |
||||
self.assertEqual(all_packages_discounts, {'max_discount': 10}) |
||||
self.assertEqual(discounts_for_packages[0], {'package': package.pk, 'max_discount': 50}) |
||||
|
||||
all_packages_discounts, discounts_for_packages = Discount.objects.get_packages_discounts(user=user_1) |
||||
self.assertEqual(all_packages_discounts, {'max_discount': None}) |
||||
self.assertEqual(discounts_for_packages[0], {'package': package.pk, 'max_discount': 30}) |
||||
|
||||
def test_discount_for_one_package_without_user(self): |
||||
package_1 = PackageFactory.create() |
||||
package_2 = PackageFactory.create() |
||||
package_3 = PackageFactory.create() |
||||
|
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=30, package=package_1, |
||||
product=Discount.PRODUCT_ONE_PACKAGE) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=50, package=package_2, |
||||
product=Discount.PRODUCT_ONE_PACKAGE) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=60, package=package_3, |
||||
product=Discount.PRODUCT_ONE_PACKAGE) |
||||
|
||||
all_packages_discounts, discounts_for_packages = Discount.objects.get_packages_discounts(user=None, |
||||
package=package_1) |
||||
self.assertEqual(all_packages_discounts, {'max_discount': None}) |
||||
self.assertEqual(len(discounts_for_packages), 1) |
||||
self.assertEqual(discounts_for_packages[0], {'package': package_1.pk, 'max_discount': 30}) |
||||
|
||||
def test_discount_for_one_package_with_multiple_users(self): |
||||
user_1 = UserFactory.create() |
||||
package_1 = PackageFactory.create() |
||||
package_2 = PackageFactory.create() |
||||
|
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=10, product=Discount.PRODUCT_ALL_PACKAGES) |
||||
|
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=30, package=package_1, |
||||
product=Discount.PRODUCT_ONE_PACKAGE, client=user_1) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=50, package=package_2, |
||||
product=Discount.PRODUCT_ONE_PACKAGE, client=user_1) |
||||
|
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=30, package=package_1, |
||||
product=Discount.PRODUCT_ONE_PACKAGE, client=self.user) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=50, package=package_2, |
||||
product=Discount.PRODUCT_ONE_PACKAGE, client=self.user) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=50, product=Discount.PRODUCT_ALL_PACKAGES, |
||||
client=self.user) |
||||
|
||||
all_packages_discounts, discounts_for_packages = Discount.objects.get_packages_discounts(user=user_1, |
||||
package=package_1) |
||||
self.assertEqual(all_packages_discounts, {'max_discount': 10}) |
||||
self.assertEqual(len(discounts_for_packages), 1) |
||||
self.assertEqual(discounts_for_packages[0], {'package': package_1.pk, 'max_discount': 30}) |
||||
|
||||
all_packages_discounts, discounts_for_packages = Discount.objects.get_packages_discounts(user=self.user, |
||||
package=package_1) |
||||
self.assertEqual(all_packages_discounts, {'max_discount': 50}) |
||||
self.assertEqual(len(discounts_for_packages), 1) |
||||
self.assertEqual(discounts_for_packages[0], {'package': package_1.pk, 'max_discount': 30}) |
||||
|
||||
def test_not_active_discount(self): |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=60, product=Discount.PRODUCT_ALL_PACKAGES, |
||||
is_active=False) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=40, product=Discount.PRODUCT_ALL_PACKAGES) |
||||
|
||||
all_packages_discounts, discounts_for_packages = Discount.objects.get_packages_discounts() |
||||
|
||||
self.assertEqual(all_packages_discounts, {'max_discount': 40}) |
||||
self.assertEqual(len(discounts_for_packages), 0) |
||||
|
||||
def test_old_discount(self): |
||||
DiscountFactory.create(start=now() - timedelta(days=2), end=now() - timedelta(days=1), value=60, |
||||
product=Discount.PRODUCT_ALL_PACKAGES) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=40, product=Discount.PRODUCT_ALL_PACKAGES) |
||||
|
||||
all_packages_discounts, discounts_for_packages = Discount.objects.get_packages_discounts() |
||||
|
||||
self.assertEqual(all_packages_discounts, {'max_discount': 40}) |
||||
self.assertEqual(len(discounts_for_packages), 0) |
||||
|
||||
def test_discount_from_the_future(self): |
||||
DiscountFactory.create(start=now() + timedelta(days=2), end=now() + timedelta(days=3), value=60, |
||||
product=Discount.PRODUCT_ALL_PACKAGES) |
||||
DiscountFactory.create(end=now() + timedelta(days=5), value=40, product=Discount.PRODUCT_ALL_PACKAGES) |
||||
|
||||
all_packages_discounts, discounts_for_packages = Discount.objects.get_packages_discounts() |
||||
|
||||
# Create your tests here. |
||||
self.assertEqual(all_packages_discounts, {'max_discount': 40}) |
||||
self.assertEqual(len(discounts_for_packages), 0) |
||||
|
||||
Loading…
Reference in new issue