Removes set_quantity and add_to_cart from CartController, and factors it into a test controller for testing
This commit is contained in:
parent
312fffd137
commit
eab1deff77
9 changed files with 125 additions and 119 deletions
|
@ -21,8 +21,8 @@ class CartController(object):
|
|||
def __init__(self, cart):
|
||||
self.cart = cart
|
||||
|
||||
@staticmethod
|
||||
def for_user(user):
|
||||
@classmethod
|
||||
def for_user(cls, user):
|
||||
''' Returns the user's current cart, or creates a new cart
|
||||
if there isn't one ready yet. '''
|
||||
|
||||
|
@ -35,7 +35,7 @@ class CartController(object):
|
|||
reservation_duration=datetime.timedelta(),
|
||||
)
|
||||
existing.save()
|
||||
return CartController(existing)
|
||||
return cls(existing)
|
||||
|
||||
def extend_reservation(self):
|
||||
''' Updates the cart's time last updated value, which is used to
|
||||
|
@ -163,25 +163,6 @@ class CartController(object):
|
|||
# TODO: batch errors
|
||||
raise ValidationError("An enabling condition failed")
|
||||
|
||||
def set_quantity(self, product, quantity, batched=False):
|
||||
''' Sets the _quantity_ of the given _product_ in the cart to the given
|
||||
_quantity_. '''
|
||||
|
||||
self.set_quantities(((product, quantity),))
|
||||
|
||||
def add_to_cart(self, product, quantity):
|
||||
''' Adds _quantity_ of the given _product_ to the cart. Raises
|
||||
ValidationError if constraints are violated.'''
|
||||
|
||||
try:
|
||||
product_item = rego.ProductItem.objects.get(
|
||||
cart=self.cart,
|
||||
product=product)
|
||||
old_quantity = product_item.quantity
|
||||
except ObjectDoesNotExist:
|
||||
old_quantity = 0
|
||||
self.set_quantity(product, old_quantity + quantity)
|
||||
|
||||
def apply_voucher(self, voucher_code):
|
||||
''' Applies the voucher with the given code to this cart. '''
|
||||
|
||||
|
|
25
registrasion/tests/cart_controller_helper.py
Normal file
25
registrasion/tests/cart_controller_helper.py
Normal file
|
@ -0,0 +1,25 @@
|
|||
from registrasion.controllers.cart import CartController
|
||||
from registrasion import models as rego
|
||||
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
|
||||
class TestingCartController(CartController):
|
||||
|
||||
def set_quantity(self, product, quantity, batched=False):
|
||||
''' Sets the _quantity_ of the given _product_ in the cart to the given
|
||||
_quantity_. '''
|
||||
|
||||
self.set_quantities(((product, quantity),))
|
||||
|
||||
def add_to_cart(self, product, quantity):
|
||||
''' Adds _quantity_ of the given _product_ to the cart. Raises
|
||||
ValidationError if constraints are violated.'''
|
||||
|
||||
try:
|
||||
product_item = rego.ProductItem.objects.get(
|
||||
cart=self.cart,
|
||||
product=product)
|
||||
old_quantity = product_item.quantity
|
||||
except ObjectDoesNotExist:
|
||||
old_quantity = 0
|
||||
self.set_quantity(product, old_quantity + quantity)
|
|
@ -8,9 +8,9 @@ from django.core.exceptions import ValidationError
|
|||
from django.test import TestCase
|
||||
|
||||
from registrasion import models as rego
|
||||
from registrasion.controllers.cart import CartController
|
||||
from registrasion.controllers.product import ProductController
|
||||
|
||||
from cart_controller_helper import TestingCartController
|
||||
from patch_datetime import SetTimeMixin
|
||||
|
||||
UTC = pytz.timezone('UTC')
|
||||
|
@ -73,11 +73,11 @@ class RegistrationCartTestCase(SetTimeMixin, TestCase):
|
|||
cls.PROD_4.save()
|
||||
|
||||
# Burn through some carts -- this made some past EC tests fail
|
||||
current_cart = CartController.for_user(cls.USER_1)
|
||||
current_cart = TestingCartController.for_user(cls.USER_1)
|
||||
current_cart.cart.active = False
|
||||
current_cart.cart.save()
|
||||
|
||||
current_cart = CartController.for_user(cls.USER_2)
|
||||
current_cart = TestingCartController.for_user(cls.USER_2)
|
||||
current_cart.cart.active = False
|
||||
current_cart.cart.save()
|
||||
|
||||
|
@ -129,21 +129,21 @@ class RegistrationCartTestCase(SetTimeMixin, TestCase):
|
|||
class BasicCartTests(RegistrationCartTestCase):
|
||||
|
||||
def test_get_cart(self):
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
|
||||
current_cart.cart.active = False
|
||||
current_cart.cart.save()
|
||||
|
||||
old_cart = current_cart
|
||||
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
self.assertNotEqual(old_cart.cart, current_cart.cart)
|
||||
|
||||
current_cart2 = CartController.for_user(self.USER_1)
|
||||
current_cart2 = TestingCartController.for_user(self.USER_1)
|
||||
self.assertEqual(current_cart.cart, current_cart2.cart)
|
||||
|
||||
def test_add_to_cart_collapses_product_items(self):
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
|
||||
# Add a product twice
|
||||
current_cart.add_to_cart(self.PROD_1, 1)
|
||||
|
@ -158,7 +158,7 @@ class BasicCartTests(RegistrationCartTestCase):
|
|||
self.assertEquals(2, item.quantity)
|
||||
|
||||
def test_set_quantity(self):
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
|
||||
def get_item():
|
||||
return rego.ProductItem.objects.get(
|
||||
|
@ -190,7 +190,7 @@ class BasicCartTests(RegistrationCartTestCase):
|
|||
self.assertEqual(2, get_item().quantity)
|
||||
|
||||
def test_add_to_cart_product_per_user_limit(self):
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
|
||||
# User should be able to add 1 of PROD_1 to the current cart.
|
||||
current_cart.add_to_cart(self.PROD_1, 1)
|
||||
|
@ -206,14 +206,14 @@ class BasicCartTests(RegistrationCartTestCase):
|
|||
current_cart.cart.active = False
|
||||
current_cart.cart.save()
|
||||
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
# User should not be able to add 10 of PROD_1 to the current cart now,
|
||||
# even though it's a new cart.
|
||||
with self.assertRaises(ValidationError):
|
||||
current_cart.add_to_cart(self.PROD_1, 10)
|
||||
|
||||
# Second user should not be affected by first user's limits
|
||||
second_user_cart = CartController.for_user(self.USER_2)
|
||||
second_user_cart = TestingCartController.for_user(self.USER_2)
|
||||
second_user_cart.add_to_cart(self.PROD_1, 10)
|
||||
|
||||
def set_limits(self):
|
||||
|
@ -230,7 +230,7 @@ class BasicCartTests(RegistrationCartTestCase):
|
|||
def test_per_user_product_limit_ignored_if_blank(self):
|
||||
self.set_limits()
|
||||
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
# There is no product limit on PROD_2, and there is no cat limit
|
||||
current_cart.add_to_cart(self.PROD_2, 1)
|
||||
# There is no product limit on PROD_3, but there is a cat limit
|
||||
|
@ -238,7 +238,7 @@ class BasicCartTests(RegistrationCartTestCase):
|
|||
|
||||
def test_per_user_category_limit_ignored_if_blank(self):
|
||||
self.set_limits()
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
# There is no product limit on PROD_2, and there is no cat limit
|
||||
current_cart.add_to_cart(self.PROD_2, 1)
|
||||
# There is no cat limit on PROD_1, but there is a prod limit
|
||||
|
@ -247,7 +247,7 @@ class BasicCartTests(RegistrationCartTestCase):
|
|||
def test_per_user_category_limit_only(self):
|
||||
self.set_limits()
|
||||
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
|
||||
# Cannot add to cart if category limit is filled by one product.
|
||||
current_cart.set_quantity(self.PROD_3, 10)
|
||||
|
@ -264,7 +264,7 @@ class BasicCartTests(RegistrationCartTestCase):
|
|||
current_cart.cart.active = False
|
||||
current_cart.cart.save()
|
||||
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
# The category limit should extend across carts
|
||||
with self.assertRaises(ValidationError):
|
||||
current_cart.add_to_cart(self.PROD_3, 10)
|
||||
|
@ -272,7 +272,7 @@ class BasicCartTests(RegistrationCartTestCase):
|
|||
def test_per_user_category_and_product_limits(self):
|
||||
self.set_limits()
|
||||
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
|
||||
# Hit both the product and category edges:
|
||||
current_cart.set_quantity(self.PROD_3, 4)
|
||||
|
@ -290,7 +290,7 @@ class BasicCartTests(RegistrationCartTestCase):
|
|||
current_cart.cart.active = False
|
||||
current_cart.cart.save()
|
||||
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
current_cart.set_quantity(self.PROD_3, 4)
|
||||
|
||||
with self.assertRaises(ValidationError):
|
||||
|
@ -308,7 +308,7 @@ class BasicCartTests(RegistrationCartTestCase):
|
|||
products=[self.PROD_2, self.PROD_3, self.PROD_4],
|
||||
)
|
||||
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
prods = get_prods()
|
||||
self.assertTrue(item in prods)
|
||||
current_cart.add_to_cart(item, quantity)
|
||||
|
@ -317,7 +317,7 @@ class BasicCartTests(RegistrationCartTestCase):
|
|||
current_cart.cart.active = False
|
||||
current_cart.cart.save()
|
||||
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
|
||||
prods = get_prods()
|
||||
self.assertTrue(item not in prods)
|
||||
|
|
|
@ -3,7 +3,7 @@ import pytz
|
|||
|
||||
from django.core.exceptions import ValidationError
|
||||
|
||||
from registrasion.controllers.cart import CartController
|
||||
from cart_controller_helper import TestingCartController
|
||||
|
||||
from test_cart import RegistrationCartTestCase
|
||||
|
||||
|
@ -22,7 +22,7 @@ class CeilingsTestCases(RegistrationCartTestCase):
|
|||
|
||||
def __add_to_cart_test(self):
|
||||
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
|
||||
# User should not be able to add 10 of PROD_1 to the current cart
|
||||
# because it is affected by limit_ceiling
|
||||
|
@ -46,7 +46,7 @@ class CeilingsTestCases(RegistrationCartTestCase):
|
|||
start_time=datetime.datetime(2015, 01, 01, tzinfo=UTC),
|
||||
end_time=datetime.datetime(2015, 02, 01, tzinfo=UTC))
|
||||
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
|
||||
# User should not be able to add whilst we're before start_time
|
||||
self.set_time(datetime.datetime(2014, 01, 01, tzinfo=UTC))
|
||||
|
@ -74,8 +74,8 @@ class CeilingsTestCases(RegistrationCartTestCase):
|
|||
|
||||
self.set_time(datetime.datetime(2015, 01, 01, tzinfo=UTC))
|
||||
|
||||
first_cart = CartController.for_user(self.USER_1)
|
||||
second_cart = CartController.for_user(self.USER_2)
|
||||
first_cart = TestingCartController.for_user(self.USER_1)
|
||||
second_cart = TestingCartController.for_user(self.USER_2)
|
||||
|
||||
first_cart.add_to_cart(self.PROD_1, 1)
|
||||
|
||||
|
@ -111,8 +111,8 @@ class CeilingsTestCases(RegistrationCartTestCase):
|
|||
def __validation_test(self):
|
||||
self.set_time(datetime.datetime(2015, 01, 01, tzinfo=UTC))
|
||||
|
||||
first_cart = CartController.for_user(self.USER_1)
|
||||
second_cart = CartController.for_user(self.USER_2)
|
||||
first_cart = TestingCartController.for_user(self.USER_1)
|
||||
second_cart = TestingCartController.for_user(self.USER_2)
|
||||
|
||||
# Adding a valid product should validate.
|
||||
first_cart.add_to_cart(self.PROD_1, 1)
|
||||
|
@ -136,13 +136,13 @@ class CeilingsTestCases(RegistrationCartTestCase):
|
|||
def test_items_released_from_ceiling_by_refund(self):
|
||||
self.make_ceiling("Limit ceiling", limit=1)
|
||||
|
||||
first_cart = CartController.for_user(self.USER_1)
|
||||
first_cart = TestingCartController.for_user(self.USER_1)
|
||||
first_cart.add_to_cart(self.PROD_1, 1)
|
||||
|
||||
first_cart.cart.active = False
|
||||
first_cart.cart.save()
|
||||
|
||||
second_cart = CartController.for_user(self.USER_2)
|
||||
second_cart = TestingCartController.for_user(self.USER_2)
|
||||
with self.assertRaises(ValidationError):
|
||||
second_cart.add_to_cart(self.PROD_1, 1)
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ from decimal import Decimal
|
|||
|
||||
from registrasion import models as rego
|
||||
from registrasion.controllers import discount
|
||||
from registrasion.controllers.cart import CartController
|
||||
from cart_controller_helper import TestingCartController
|
||||
from registrasion.controllers.invoice import InvoiceController
|
||||
|
||||
from test_cart import RegistrationCartTestCase
|
||||
|
@ -84,7 +84,7 @@ class DiscountTestCase(RegistrationCartTestCase):
|
|||
def test_discount_is_applied(self):
|
||||
self.add_discount_prod_1_includes_prod_2()
|
||||
|
||||
cart = CartController.for_user(self.USER_1)
|
||||
cart = TestingCartController.for_user(self.USER_1)
|
||||
cart.add_to_cart(self.PROD_1, 1)
|
||||
cart.add_to_cart(self.PROD_2, 1)
|
||||
|
||||
|
@ -94,7 +94,7 @@ class DiscountTestCase(RegistrationCartTestCase):
|
|||
def test_discount_is_applied_for_category(self):
|
||||
self.add_discount_prod_1_includes_cat_2()
|
||||
|
||||
cart = CartController.for_user(self.USER_1)
|
||||
cart = TestingCartController.for_user(self.USER_1)
|
||||
cart.add_to_cart(self.PROD_1, 1)
|
||||
cart.add_to_cart(self.PROD_3, 1)
|
||||
|
||||
|
@ -104,7 +104,7 @@ class DiscountTestCase(RegistrationCartTestCase):
|
|||
def test_discount_does_not_apply_if_not_met(self):
|
||||
self.add_discount_prod_1_includes_prod_2()
|
||||
|
||||
cart = CartController.for_user(self.USER_1)
|
||||
cart = TestingCartController.for_user(self.USER_1)
|
||||
cart.add_to_cart(self.PROD_2, 1)
|
||||
|
||||
# No discount should be applied as the condition is not met
|
||||
|
@ -113,7 +113,7 @@ class DiscountTestCase(RegistrationCartTestCase):
|
|||
def test_discount_applied_out_of_order(self):
|
||||
self.add_discount_prod_1_includes_prod_2()
|
||||
|
||||
cart = CartController.for_user(self.USER_1)
|
||||
cart = TestingCartController.for_user(self.USER_1)
|
||||
cart.add_to_cart(self.PROD_2, 1)
|
||||
cart.add_to_cart(self.PROD_1, 1)
|
||||
|
||||
|
@ -123,7 +123,7 @@ class DiscountTestCase(RegistrationCartTestCase):
|
|||
def test_discounts_collapse(self):
|
||||
self.add_discount_prod_1_includes_prod_2()
|
||||
|
||||
cart = CartController.for_user(self.USER_1)
|
||||
cart = TestingCartController.for_user(self.USER_1)
|
||||
cart.add_to_cart(self.PROD_1, 1)
|
||||
cart.add_to_cart(self.PROD_2, 1)
|
||||
cart.add_to_cart(self.PROD_2, 1)
|
||||
|
@ -134,7 +134,7 @@ class DiscountTestCase(RegistrationCartTestCase):
|
|||
def test_discounts_respect_quantity(self):
|
||||
self.add_discount_prod_1_includes_prod_2()
|
||||
|
||||
cart = CartController.for_user(self.USER_1)
|
||||
cart = TestingCartController.for_user(self.USER_1)
|
||||
cart.add_to_cart(self.PROD_1, 1)
|
||||
cart.add_to_cart(self.PROD_2, 3)
|
||||
|
||||
|
@ -147,7 +147,7 @@ class DiscountTestCase(RegistrationCartTestCase):
|
|||
discount_full = self.add_discount_prod_1_includes_prod_2()
|
||||
discount_half = self.add_discount_prod_1_includes_prod_2(Decimal(50))
|
||||
|
||||
cart = CartController.for_user(self.USER_1)
|
||||
cart = TestingCartController.for_user(self.USER_1)
|
||||
cart.add_to_cart(self.PROD_1, 1)
|
||||
cart.add_to_cart(self.PROD_2, 3)
|
||||
|
||||
|
@ -166,13 +166,13 @@ class DiscountTestCase(RegistrationCartTestCase):
|
|||
self.add_discount_prod_1_includes_prod_2()
|
||||
|
||||
# Enable the discount during the first cart.
|
||||
cart = CartController.for_user(self.USER_1)
|
||||
cart = TestingCartController.for_user(self.USER_1)
|
||||
cart.add_to_cart(self.PROD_1, 1)
|
||||
cart.cart.active = False
|
||||
cart.cart.save()
|
||||
|
||||
# Use the discount in the second cart
|
||||
cart = CartController.for_user(self.USER_1)
|
||||
cart = TestingCartController.for_user(self.USER_1)
|
||||
cart.add_to_cart(self.PROD_2, 1)
|
||||
|
||||
# The discount should be applied.
|
||||
|
@ -182,7 +182,7 @@ class DiscountTestCase(RegistrationCartTestCase):
|
|||
|
||||
# The discount should respect the total quantity across all
|
||||
# of the user's carts.
|
||||
cart = CartController.for_user(self.USER_1)
|
||||
cart = TestingCartController.for_user(self.USER_1)
|
||||
cart.add_to_cart(self.PROD_2, 2)
|
||||
|
||||
# Having one item in the second cart leaves one more item where
|
||||
|
@ -193,7 +193,7 @@ class DiscountTestCase(RegistrationCartTestCase):
|
|||
|
||||
def test_discount_applies_only_once_enabled(self):
|
||||
# Enable the discount during the first cart.
|
||||
cart = CartController.for_user(self.USER_1)
|
||||
cart = TestingCartController.for_user(self.USER_1)
|
||||
cart.add_to_cart(self.PROD_1, 1)
|
||||
# This would exhaust discount if present
|
||||
cart.add_to_cart(self.PROD_2, 2)
|
||||
|
@ -201,7 +201,7 @@ class DiscountTestCase(RegistrationCartTestCase):
|
|||
cart.cart.save()
|
||||
|
||||
self.add_discount_prod_1_includes_prod_2()
|
||||
cart = CartController.for_user(self.USER_1)
|
||||
cart = TestingCartController.for_user(self.USER_1)
|
||||
cart.add_to_cart(self.PROD_2, 2)
|
||||
|
||||
discount_items = list(cart.cart.discountitem_set.all())
|
||||
|
@ -209,7 +209,7 @@ class DiscountTestCase(RegistrationCartTestCase):
|
|||
|
||||
def test_category_discount_applies_once_per_category(self):
|
||||
self.add_discount_prod_1_includes_cat_2(quantity=1)
|
||||
cart = CartController.for_user(self.USER_1)
|
||||
cart = TestingCartController.for_user(self.USER_1)
|
||||
cart.add_to_cart(self.PROD_1, 1)
|
||||
|
||||
# Add two items from category 2
|
||||
|
@ -223,7 +223,7 @@ class DiscountTestCase(RegistrationCartTestCase):
|
|||
|
||||
def test_category_discount_applies_to_highest_value(self):
|
||||
self.add_discount_prod_1_includes_cat_2(quantity=1)
|
||||
cart = CartController.for_user(self.USER_1)
|
||||
cart = TestingCartController.for_user(self.USER_1)
|
||||
cart.add_to_cart(self.PROD_1, 1)
|
||||
|
||||
# Add two items from category 2, add the less expensive one first
|
||||
|
@ -241,7 +241,7 @@ class DiscountTestCase(RegistrationCartTestCase):
|
|||
# Both users should be able to apply the same discount
|
||||
# in the same way
|
||||
for user in (self.USER_1, self.USER_2):
|
||||
cart = CartController.for_user(user)
|
||||
cart = TestingCartController.for_user(user)
|
||||
cart.add_to_cart(self.PROD_1, 1) # Enable the discount
|
||||
cart.add_to_cart(self.PROD_3, 1)
|
||||
|
||||
|
@ -270,7 +270,7 @@ class DiscountTestCase(RegistrationCartTestCase):
|
|||
def test_category_discount_appears_once_if_met_twice(self):
|
||||
self.add_discount_prod_1_includes_cat_2(quantity=1)
|
||||
|
||||
cart = CartController.for_user(self.USER_1)
|
||||
cart = TestingCartController.for_user(self.USER_1)
|
||||
cart.add_to_cart(self.PROD_1, 1) # Enable the discount
|
||||
|
||||
discounts = discount.available_discounts(
|
||||
|
@ -283,7 +283,7 @@ class DiscountTestCase(RegistrationCartTestCase):
|
|||
def test_category_discount_appears_with_category(self):
|
||||
self.add_discount_prod_1_includes_cat_2(quantity=1)
|
||||
|
||||
cart = CartController.for_user(self.USER_1)
|
||||
cart = TestingCartController.for_user(self.USER_1)
|
||||
cart.add_to_cart(self.PROD_1, 1) # Enable the discount
|
||||
|
||||
discounts = discount.available_discounts(self.USER_1, [self.CAT_2], [])
|
||||
|
@ -292,7 +292,7 @@ class DiscountTestCase(RegistrationCartTestCase):
|
|||
def test_category_discount_appears_with_product(self):
|
||||
self.add_discount_prod_1_includes_cat_2(quantity=1)
|
||||
|
||||
cart = CartController.for_user(self.USER_1)
|
||||
cart = TestingCartController.for_user(self.USER_1)
|
||||
cart.add_to_cart(self.PROD_1, 1) # Enable the discount
|
||||
|
||||
discounts = discount.available_discounts(
|
||||
|
@ -305,7 +305,7 @@ class DiscountTestCase(RegistrationCartTestCase):
|
|||
def test_category_discount_appears_once_with_two_valid_product(self):
|
||||
self.add_discount_prod_1_includes_cat_2(quantity=1)
|
||||
|
||||
cart = CartController.for_user(self.USER_1)
|
||||
cart = TestingCartController.for_user(self.USER_1)
|
||||
cart.add_to_cart(self.PROD_1, 1) # Enable the discount
|
||||
|
||||
discounts = discount.available_discounts(
|
||||
|
@ -318,7 +318,7 @@ class DiscountTestCase(RegistrationCartTestCase):
|
|||
def test_product_discount_appears_with_product(self):
|
||||
self.add_discount_prod_1_includes_prod_2(quantity=1)
|
||||
|
||||
cart = CartController.for_user(self.USER_1)
|
||||
cart = TestingCartController.for_user(self.USER_1)
|
||||
cart.add_to_cart(self.PROD_1, 1) # Enable the discount
|
||||
|
||||
discounts = discount.available_discounts(
|
||||
|
@ -331,7 +331,7 @@ class DiscountTestCase(RegistrationCartTestCase):
|
|||
def test_product_discount_does_not_appear_with_category(self):
|
||||
self.add_discount_prod_1_includes_prod_2(quantity=1)
|
||||
|
||||
cart = CartController.for_user(self.USER_1)
|
||||
cart = TestingCartController.for_user(self.USER_1)
|
||||
cart.add_to_cart(self.PROD_1, 1) # Enable the discount
|
||||
|
||||
discounts = discount.available_discounts(self.USER_1, [self.CAT_1], [])
|
||||
|
@ -340,7 +340,7 @@ class DiscountTestCase(RegistrationCartTestCase):
|
|||
def test_discount_quantity_is_correct_before_first_purchase(self):
|
||||
self.add_discount_prod_1_includes_cat_2(quantity=2)
|
||||
|
||||
cart = CartController.for_user(self.USER_1)
|
||||
cart = TestingCartController.for_user(self.USER_1)
|
||||
cart.add_to_cart(self.PROD_1, 1) # Enable the discount
|
||||
cart.add_to_cart(self.PROD_3, 1) # Exhaust the quantity
|
||||
|
||||
|
@ -353,7 +353,7 @@ class DiscountTestCase(RegistrationCartTestCase):
|
|||
def test_discount_quantity_is_correct_after_first_purchase(self):
|
||||
self.test_discount_quantity_is_correct_before_first_purchase()
|
||||
|
||||
cart = CartController.for_user(self.USER_1)
|
||||
cart = TestingCartController.for_user(self.USER_1)
|
||||
cart.add_to_cart(self.PROD_3, 1) # Exhaust the quantity
|
||||
|
||||
discounts = discount.available_discounts(self.USER_1, [self.CAT_2], [])
|
||||
|
@ -369,7 +369,7 @@ class DiscountTestCase(RegistrationCartTestCase):
|
|||
|
||||
def test_product_discount_enabled_twice_appears_twice(self):
|
||||
self.add_discount_prod_1_includes_prod_3_and_prod_4(quantity=2)
|
||||
cart = CartController.for_user(self.USER_1)
|
||||
cart = TestingCartController.for_user(self.USER_1)
|
||||
cart.add_to_cart(self.PROD_1, 1) # Enable the discount
|
||||
discounts = discount.available_discounts(
|
||||
self.USER_1,
|
||||
|
@ -380,7 +380,7 @@ class DiscountTestCase(RegistrationCartTestCase):
|
|||
|
||||
def test_discounts_are_released_by_refunds(self):
|
||||
self.add_discount_prod_1_includes_prod_2(quantity=2)
|
||||
cart = CartController.for_user(self.USER_1)
|
||||
cart = TestingCartController.for_user(self.USER_1)
|
||||
cart.add_to_cart(self.PROD_1, 1) # Enable the discount
|
||||
discounts = discount.available_discounts(
|
||||
self.USER_1,
|
||||
|
@ -392,7 +392,7 @@ class DiscountTestCase(RegistrationCartTestCase):
|
|||
cart.cart.active = False # Keep discount enabled
|
||||
cart.cart.save()
|
||||
|
||||
cart = CartController.for_user(self.USER_1)
|
||||
cart = TestingCartController.for_user(self.USER_1)
|
||||
cart.add_to_cart(self.PROD_2, 2) # The discount will be exhausted
|
||||
cart.cart.active = False
|
||||
cart.cart.save()
|
||||
|
|
|
@ -4,7 +4,7 @@ from django.core.exceptions import ValidationError
|
|||
|
||||
from registrasion import models as rego
|
||||
from registrasion.controllers.category import CategoryController
|
||||
from registrasion.controllers.cart import CartController
|
||||
from cart_controller_helper import TestingCartController
|
||||
from registrasion.controllers.product import ProductController
|
||||
|
||||
from test_cart import RegistrationCartTestCase
|
||||
|
@ -56,7 +56,7 @@ class EnablingConditionTestCases(RegistrationCartTestCase):
|
|||
self.add_product_enabling_condition()
|
||||
|
||||
# Cannot buy PROD_1 without buying PROD_2
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
with self.assertRaises(ValidationError):
|
||||
current_cart.add_to_cart(self.PROD_1, 1)
|
||||
|
||||
|
@ -66,20 +66,20 @@ class EnablingConditionTestCases(RegistrationCartTestCase):
|
|||
def test_product_enabled_by_product_in_previous_cart(self):
|
||||
self.add_product_enabling_condition()
|
||||
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
current_cart.add_to_cart(self.PROD_2, 1)
|
||||
current_cart.cart.active = False
|
||||
current_cart.cart.save()
|
||||
|
||||
# Create new cart and try to add PROD_1
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
current_cart.add_to_cart(self.PROD_1, 1)
|
||||
|
||||
def test_product_enabling_condition_enables_category(self):
|
||||
self.add_product_enabling_condition_on_category()
|
||||
|
||||
# Cannot buy PROD_1 without buying item from CAT_2
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
with self.assertRaises(ValidationError):
|
||||
current_cart.add_to_cart(self.PROD_1, 1)
|
||||
|
||||
|
@ -90,7 +90,7 @@ class EnablingConditionTestCases(RegistrationCartTestCase):
|
|||
self.add_category_enabling_condition()
|
||||
|
||||
# Cannot buy PROD_1 without buying PROD_2
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
with self.assertRaises(ValidationError):
|
||||
current_cart.add_to_cart(self.PROD_1, 1)
|
||||
|
||||
|
@ -101,13 +101,13 @@ class EnablingConditionTestCases(RegistrationCartTestCase):
|
|||
def test_product_enabled_by_category_in_previous_cart(self):
|
||||
self.add_category_enabling_condition()
|
||||
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
current_cart.add_to_cart(self.PROD_3, 1)
|
||||
current_cart.cart.active = False
|
||||
current_cart.cart.save()
|
||||
|
||||
# Create new cart and try to add PROD_1
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
current_cart.add_to_cart(self.PROD_1, 1)
|
||||
|
||||
def test_multiple_non_mandatory_conditions(self):
|
||||
|
@ -115,7 +115,7 @@ class EnablingConditionTestCases(RegistrationCartTestCase):
|
|||
self.add_category_enabling_condition()
|
||||
|
||||
# User 1 is testing the product enabling condition
|
||||
cart_1 = CartController.for_user(self.USER_1)
|
||||
cart_1 = TestingCartController.for_user(self.USER_1)
|
||||
# Cannot add PROD_1 until a condition is met
|
||||
with self.assertRaises(ValidationError):
|
||||
cart_1.add_to_cart(self.PROD_1, 1)
|
||||
|
@ -123,7 +123,7 @@ class EnablingConditionTestCases(RegistrationCartTestCase):
|
|||
cart_1.add_to_cart(self.PROD_1, 1)
|
||||
|
||||
# User 2 is testing the category enabling condition
|
||||
cart_2 = CartController.for_user(self.USER_2)
|
||||
cart_2 = TestingCartController.for_user(self.USER_2)
|
||||
# Cannot add PROD_1 until a condition is met
|
||||
with self.assertRaises(ValidationError):
|
||||
cart_2.add_to_cart(self.PROD_1, 1)
|
||||
|
@ -134,7 +134,7 @@ class EnablingConditionTestCases(RegistrationCartTestCase):
|
|||
self.add_product_enabling_condition(mandatory=True)
|
||||
self.add_category_enabling_condition(mandatory=True)
|
||||
|
||||
cart_1 = CartController.for_user(self.USER_1)
|
||||
cart_1 = TestingCartController.for_user(self.USER_1)
|
||||
# Cannot add PROD_1 until both conditions are met
|
||||
with self.assertRaises(ValidationError):
|
||||
cart_1.add_to_cart(self.PROD_1, 1)
|
||||
|
@ -148,7 +148,7 @@ class EnablingConditionTestCases(RegistrationCartTestCase):
|
|||
self.add_product_enabling_condition(mandatory=False)
|
||||
self.add_category_enabling_condition(mandatory=True)
|
||||
|
||||
cart_1 = CartController.for_user(self.USER_1)
|
||||
cart_1 = TestingCartController.for_user(self.USER_1)
|
||||
# Cannot add PROD_1 until both conditions are met
|
||||
with self.assertRaises(ValidationError):
|
||||
cart_1.add_to_cart(self.PROD_1, 1)
|
||||
|
@ -199,7 +199,7 @@ class EnablingConditionTestCases(RegistrationCartTestCase):
|
|||
def test_available_products_on_category_works_when_condition_is_met(self):
|
||||
self.add_product_enabling_condition(mandatory=False)
|
||||
|
||||
cart_1 = CartController.for_user(self.USER_1)
|
||||
cart_1 = TestingCartController.for_user(self.USER_1)
|
||||
cart_1.add_to_cart(self.PROD_2, 1)
|
||||
|
||||
prods = ProductController.available_products(
|
||||
|
@ -224,7 +224,7 @@ class EnablingConditionTestCases(RegistrationCartTestCase):
|
|||
def test_available_products_on_products_works_when_condition_is_met(self):
|
||||
self.add_product_enabling_condition(mandatory=False)
|
||||
|
||||
cart_1 = CartController.for_user(self.USER_1)
|
||||
cart_1 = TestingCartController.for_user(self.USER_1)
|
||||
cart_1.add_to_cart(self.PROD_2, 1)
|
||||
|
||||
prods = ProductController.available_products(
|
||||
|
@ -238,13 +238,13 @@ class EnablingConditionTestCases(RegistrationCartTestCase):
|
|||
def test_category_enabling_condition_fails_if_cart_refunded(self):
|
||||
self.add_category_enabling_condition(mandatory=False)
|
||||
|
||||
cart = CartController.for_user(self.USER_1)
|
||||
cart = TestingCartController.for_user(self.USER_1)
|
||||
cart.add_to_cart(self.PROD_3, 1)
|
||||
|
||||
cart.cart.active = False
|
||||
cart.cart.save()
|
||||
|
||||
cart_2 = CartController.for_user(self.USER_1)
|
||||
cart_2 = TestingCartController.for_user(self.USER_1)
|
||||
cart_2.add_to_cart(self.PROD_1, 1)
|
||||
cart_2.set_quantity(self.PROD_1, 0)
|
||||
|
||||
|
@ -257,13 +257,13 @@ class EnablingConditionTestCases(RegistrationCartTestCase):
|
|||
def test_product_enabling_condition_fails_if_cart_refunded(self):
|
||||
self.add_product_enabling_condition(mandatory=False)
|
||||
|
||||
cart = CartController.for_user(self.USER_1)
|
||||
cart = TestingCartController.for_user(self.USER_1)
|
||||
cart.add_to_cart(self.PROD_2, 1)
|
||||
|
||||
cart.cart.active = False
|
||||
cart.cart.save()
|
||||
|
||||
cart_2 = CartController.for_user(self.USER_1)
|
||||
cart_2 = TestingCartController.for_user(self.USER_1)
|
||||
cart_2.add_to_cart(self.PROD_1, 1)
|
||||
cart_2.set_quantity(self.PROD_1, 0)
|
||||
|
||||
|
@ -276,7 +276,7 @@ class EnablingConditionTestCases(RegistrationCartTestCase):
|
|||
def test_available_categories(self):
|
||||
self.add_product_enabling_condition_on_category(mandatory=False)
|
||||
|
||||
cart_1 = CartController.for_user(self.USER_1)
|
||||
cart_1 = TestingCartController.for_user(self.USER_1)
|
||||
|
||||
cats = CategoryController.available_categories(
|
||||
self.USER_1,
|
||||
|
|
|
@ -5,7 +5,7 @@ from decimal import Decimal
|
|||
from django.core.exceptions import ValidationError
|
||||
|
||||
from registrasion import models as rego
|
||||
from registrasion.controllers.cart import CartController
|
||||
from cart_controller_helper import TestingCartController
|
||||
from registrasion.controllers.invoice import InvoiceController
|
||||
|
||||
from test_cart import RegistrationCartTestCase
|
||||
|
@ -16,7 +16,7 @@ UTC = pytz.timezone('UTC')
|
|||
class InvoiceTestCase(RegistrationCartTestCase):
|
||||
|
||||
def test_create_invoice(self):
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
|
||||
# Should be able to create an invoice after the product is added
|
||||
current_cart.add_to_cart(self.PROD_1, 1)
|
||||
|
@ -49,11 +49,11 @@ class InvoiceTestCase(RegistrationCartTestCase):
|
|||
def test_create_invoice_fails_if_cart_invalid(self):
|
||||
self.make_ceiling("Limit ceiling", limit=1)
|
||||
self.set_time(datetime.datetime(2015, 01, 01, tzinfo=UTC))
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
current_cart.add_to_cart(self.PROD_1, 1)
|
||||
|
||||
self.add_timedelta(self.RESERVATION * 2)
|
||||
cart_2 = CartController.for_user(self.USER_2)
|
||||
cart_2 = TestingCartController.for_user(self.USER_2)
|
||||
cart_2.add_to_cart(self.PROD_1, 1)
|
||||
|
||||
# Now try to invoice the first user
|
||||
|
@ -61,7 +61,7 @@ class InvoiceTestCase(RegistrationCartTestCase):
|
|||
InvoiceController.for_cart(current_cart.cart)
|
||||
|
||||
def test_paying_invoice_makes_new_cart(self):
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
current_cart.add_to_cart(self.PROD_1, 1)
|
||||
|
||||
invoice = InvoiceController.for_cart(current_cart.cart)
|
||||
|
@ -74,7 +74,7 @@ class InvoiceTestCase(RegistrationCartTestCase):
|
|||
self.assertFalse(invoice.invoice.cart.active)
|
||||
|
||||
# Asking for a cart should generate a new one
|
||||
new_cart = CartController.for_user(self.USER_1)
|
||||
new_cart = TestingCartController.for_user(self.USER_1)
|
||||
self.assertNotEqual(current_cart.cart, new_cart.cart)
|
||||
|
||||
def test_invoice_includes_discounts(self):
|
||||
|
@ -96,7 +96,7 @@ class InvoiceTestCase(RegistrationCartTestCase):
|
|||
quantity=1
|
||||
).save()
|
||||
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
current_cart.apply_voucher(voucher.code)
|
||||
|
||||
# Should be able to create an invoice after the product is added
|
||||
|
@ -112,7 +112,7 @@ class InvoiceTestCase(RegistrationCartTestCase):
|
|||
invoice_1.invoice.value)
|
||||
|
||||
def test_invoice_voids_self_if_cart_is_invalid(self):
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
|
||||
# Should be able to create an invoice after the product is added
|
||||
current_cart.add_to_cart(self.PROD_1, 1)
|
||||
|
@ -134,7 +134,7 @@ class InvoiceTestCase(RegistrationCartTestCase):
|
|||
self.assertFalse(invoice_2_new.invoice.void)
|
||||
|
||||
def test_voiding_invoice_creates_new_invoice(self):
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
|
||||
# Should be able to create an invoice after the product is added
|
||||
current_cart.add_to_cart(self.PROD_1, 1)
|
||||
|
@ -147,7 +147,7 @@ class InvoiceTestCase(RegistrationCartTestCase):
|
|||
self.assertNotEqual(invoice_1.invoice, invoice_2.invoice)
|
||||
|
||||
def test_cannot_pay_void_invoice(self):
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
|
||||
# Should be able to create an invoice after the product is added
|
||||
current_cart.add_to_cart(self.PROD_1, 1)
|
||||
|
@ -159,7 +159,7 @@ class InvoiceTestCase(RegistrationCartTestCase):
|
|||
invoice_1.pay("Reference", invoice_1.invoice.value)
|
||||
|
||||
def test_cannot_void_paid_invoice(self):
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
|
||||
# Should be able to create an invoice after the product is added
|
||||
current_cart.add_to_cart(self.PROD_1, 1)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import pytz
|
||||
|
||||
from registrasion.controllers.cart import CartController
|
||||
from cart_controller_helper import TestingCartController
|
||||
from registrasion.controllers.invoice import InvoiceController
|
||||
|
||||
from test_cart import RegistrationCartTestCase
|
||||
|
@ -11,7 +11,7 @@ UTC = pytz.timezone('UTC')
|
|||
class RefundTestCase(RegistrationCartTestCase):
|
||||
|
||||
def test_refund_marks_void_and_unpaid_and_cart_released(self):
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
|
||||
# Should be able to create an invoice after the product is added
|
||||
current_cart.add_to_cart(self.PROD_1, 1)
|
||||
|
|
|
@ -6,7 +6,7 @@ from django.core.exceptions import ValidationError
|
|||
from django.db import IntegrityError
|
||||
|
||||
from registrasion import models as rego
|
||||
from registrasion.controllers.cart import CartController
|
||||
from cart_controller_helper import TestingCartController
|
||||
from registrasion.controllers.invoice import InvoiceController
|
||||
|
||||
from test_cart import RegistrationCartTestCase
|
||||
|
@ -31,12 +31,12 @@ class VoucherTestCases(RegistrationCartTestCase):
|
|||
|
||||
self.set_time(datetime.datetime(2015, 01, 01, tzinfo=UTC))
|
||||
|
||||
cart_1 = CartController.for_user(self.USER_1)
|
||||
cart_1 = TestingCartController.for_user(self.USER_1)
|
||||
cart_1.apply_voucher(voucher.code)
|
||||
self.assertIn(voucher, cart_1.cart.vouchers.all())
|
||||
|
||||
# Second user should not be able to apply this voucher (it's exhausted)
|
||||
cart_2 = CartController.for_user(self.USER_2)
|
||||
cart_2 = TestingCartController.for_user(self.USER_2)
|
||||
with self.assertRaises(ValidationError):
|
||||
cart_2.apply_voucher(voucher.code)
|
||||
|
||||
|
@ -66,7 +66,7 @@ class VoucherTestCases(RegistrationCartTestCase):
|
|||
enabling_condition.save()
|
||||
|
||||
# Adding the product without a voucher will not work
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
with self.assertRaises(ValidationError):
|
||||
current_cart.add_to_cart(self.PROD_1, 1)
|
||||
|
||||
|
@ -90,7 +90,7 @@ class VoucherTestCases(RegistrationCartTestCase):
|
|||
).save()
|
||||
|
||||
# Having PROD_1 in place should add a discount
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
current_cart.apply_voucher(voucher.code)
|
||||
current_cart.add_to_cart(self.PROD_1, 1)
|
||||
self.assertEqual(1, len(current_cart.cart.discountitem_set.all()))
|
||||
|
@ -106,19 +106,19 @@ class VoucherTestCases(RegistrationCartTestCase):
|
|||
|
||||
def test_vouchers_case_insensitive(self):
|
||||
voucher = self.new_voucher(code="VOUCHeR")
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
current_cart.apply_voucher(voucher.code.lower())
|
||||
|
||||
def test_voucher_can_only_be_applied_once(self):
|
||||
voucher = self.new_voucher(limit=2)
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
current_cart.apply_voucher(voucher.code)
|
||||
with self.assertRaises(ValidationError):
|
||||
current_cart.apply_voucher(voucher.code)
|
||||
|
||||
def test_voucher_can_only_be_applied_once_across_multiple_carts(self):
|
||||
voucher = self.new_voucher(limit=2)
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
current_cart.apply_voucher(voucher.code)
|
||||
|
||||
inv = InvoiceController.for_cart(current_cart.cart)
|
||||
|
@ -131,13 +131,13 @@ class VoucherTestCases(RegistrationCartTestCase):
|
|||
|
||||
def test_refund_releases_used_vouchers(self):
|
||||
voucher = self.new_voucher(limit=2)
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
current_cart.apply_voucher(voucher.code)
|
||||
|
||||
inv = InvoiceController.for_cart(current_cart.cart)
|
||||
inv.pay("Hello!", inv.invoice.value)
|
||||
|
||||
current_cart = CartController.for_user(self.USER_1)
|
||||
current_cart = TestingCartController.for_user(self.USER_1)
|
||||
with self.assertRaises(ValidationError):
|
||||
current_cart.apply_voucher(voucher.code)
|
||||
|
||||
|
|
Loading…
Reference in a new issue