Removes set_quantity and add_to_cart from CartController, and factors it into a test controller for testing

This commit is contained in:
Christopher Neugebauer 2016-04-03 10:06:35 +10:00
parent 312fffd137
commit eab1deff77
9 changed files with 125 additions and 119 deletions

View file

@ -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. '''

View 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)

View file

@ -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)

View file

@ -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)

View file

@ -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()

View file

@ -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,

View file

@ -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)

View file

@ -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)

View file

@ -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)