Changeset - fc81f107eda1
[Not reviewed]
0 2 0
Christopher Neugebauer - 8 years ago 2016-09-15 06:33:19
chrisjrn@gmail.com
When setting quantities on products, only raise errors if they’re due to changes made during the current call to set_quantities.

Fixes #54
2 files changed with 23 insertions and 1 deletions:
0 comments (0 inline, 0 general)
registrasion/controllers/cart.py
Show inline comments
...
 
@@ -132,6 +132,7 @@ class CartController(object):
 

	
 
        product_quantities = list(product_quantities)
 

	
 

	
 
        # n.b need to add have the existing items first so that the new
 
        # items override the old ones.
 
        all_product_quantities = dict(itertools.chain(
...
 
@@ -140,7 +141,16 @@ class CartController(object):
 
        )).items()
 

	
 
        # Validate that the limits we're adding are OK
 
        self._test_limits(all_product_quantities)
 
        products = set(product for product, q in product_quantities)
 
        try:
 
            self._test_limits(all_product_quantities)
 
        except CartValidationError as ve:
 
            # Only raise errors for products that we're explicitly
 
            # Manipulating here.
 
            for ve_field in ve.error_list:
 
                product, message = ve_field.message
 
                if product in products:
 
                    raise ve
 

	
 
        new_items = []
 
        products = []
registrasion/tests/test_flag.py
Show inline comments
...
 
@@ -382,3 +382,15 @@ class FlagTestCases(RegistrationCartTestCase):
 

	
 
        with self.assertRaises(ValidationError):
 
            cart2.add_to_cart(self.PROD_1, 1)
 

	
 
    def test_flag_failures_only_break_affected_products(self):
 
        ''' If a flag fails, it should only affect its own products. '''
 

	
 
        self.add_product_flag()
 
        cart1 = TestingCartController.for_user(self.USER_1)
 
        cart1.add_to_cart(self.PROD_2, 1)
 
        cart1.add_to_cart(self.PROD_1, 1)
 
        cart1.set_quantity(self.PROD_2, 0)
 

	
 
        # The following should not fail, as PROD_3 is not affected by flag.
 
        cart1.add_to_cart(self.PROD_3, 1)
0 comments (0 inline, 0 general)