diff --git a/registrasion/controllers/cart.py b/registrasion/controllers/cart.py index 5fab4b30..f23de385 100644 --- a/registrasion/controllers/cart.py +++ b/registrasion/controllers/cart.py @@ -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. ''' diff --git a/registrasion/tests/cart_controller_helper.py b/registrasion/tests/cart_controller_helper.py new file mode 100644 index 00000000..9176f2c8 --- /dev/null +++ b/registrasion/tests/cart_controller_helper.py @@ -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) diff --git a/registrasion/tests/test_cart.py b/registrasion/tests/test_cart.py index c203c9b7..db90a723 100644 --- a/registrasion/tests/test_cart.py +++ b/registrasion/tests/test_cart.py @@ -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) diff --git a/registrasion/tests/test_ceilings.py b/registrasion/tests/test_ceilings.py index c39df39a..e65a9ecf 100644 --- a/registrasion/tests/test_ceilings.py +++ b/registrasion/tests/test_ceilings.py @@ -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) diff --git a/registrasion/tests/test_discount.py b/registrasion/tests/test_discount.py index f2eb36bb..1fb4225d 100644 --- a/registrasion/tests/test_discount.py +++ b/registrasion/tests/test_discount.py @@ -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() diff --git a/registrasion/tests/test_enabling_condition.py b/registrasion/tests/test_enabling_condition.py index aeec4708..e6c090dd 100644 --- a/registrasion/tests/test_enabling_condition.py +++ b/registrasion/tests/test_enabling_condition.py @@ -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, diff --git a/registrasion/tests/test_invoice.py b/registrasion/tests/test_invoice.py index 37265a2a..fd6c9cfb 100644 --- a/registrasion/tests/test_invoice.py +++ b/registrasion/tests/test_invoice.py @@ -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) diff --git a/registrasion/tests/test_refund.py b/registrasion/tests/test_refund.py index 0fe0648f..bde25929 100644 --- a/registrasion/tests/test_refund.py +++ b/registrasion/tests/test_refund.py @@ -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) diff --git a/registrasion/tests/test_voucher.py b/registrasion/tests/test_voucher.py index abc7c8c3..da12abb3 100644 --- a/registrasion/tests/test_voucher.py +++ b/registrasion/tests/test_voucher.py @@ -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)