Changeset - 43649002cb03
[Not reviewed]
0 2 0
Christopher Neugebauer - 8 years ago 2016-09-03 06:18:27
chrisjrn@gmail.com
Makes ProductCondition work if you have both valid and cancelled instances of a product. Fixes #68
2 files changed with 16 insertions and 2 deletions:
0 comments (0 inline, 0 general)
registrasion/controllers/conditions.py
Show inline comments
...
 
@@ -169,17 +169,26 @@ class ProductConditionController(IsMetByFilter, ConditionController):
 
    def pre_filter(self, queryset, user):
 
        ''' Returns all of the items from queryset where the user has a
 
        product invoking that item's condition in one of their carts. '''
 

	
 
        in_user_carts = Q(enabling_products__productitem__cart__user=user)
 
        released = commerce.Cart.STATUS_RELEASED
 
        paid = commerce.Cart.STATUS_PAID
 
        active = commerce.Cart.STATUS_ACTIVE
 
        in_released_carts = Q(
 
            enabling_products__productitem__cart__status=released
 
        )
 
        not_in_paid_or_active_carts = ~(
 
            Q(enabling_products__productitem__cart__status=paid) |
 
            Q(enabling_products__productitem__cart__status=active)
 
        )
 

	
 
        queryset = queryset.filter(in_user_carts)
 
        queryset = queryset.exclude(in_released_carts)
 
        queryset = queryset.exclude(
 
            in_released_carts & not_in_paid_or_active_carts
 
        )
 

	
 
        return queryset
 

	
 

	
 
class TimeOrStockLimitConditionController(
 
            RemainderSetByFilter,
registrasion/tests/test_flag.py
Show inline comments
...
 
@@ -349,13 +349,13 @@ class FlagTestCases(RegistrationCartTestCase):
 

	
 
        # Should keep PROD_2 in the cart
 
        # and also PROD_1, which is now exhausted for user.
 
        items = commerce.ProductItem.objects.filter(cart=cart.cart)
 
        self.assertTrue([i for i in items if i.product == self.PROD_1])
 

	
 
    def test_oops(self):
 
    def test_product_stays_enabled_even_if_some_are_cancelled(self):
 
        ''' Flags should be enabled, even if *some* enabling products are cnx.
 
        Tests issue #68.
 
        '''
 

	
 
        self.add_product_flag()
 
        cart1 = TestingCartController.for_user(self.USER_1)
...
 
@@ -374,6 +374,11 @@ class FlagTestCases(RegistrationCartTestCase):
 

	
 
        inv.refund()
 

	
 
        # Even though cart1 has been cancelled, we have the item in cart2.
 
        # So we should be able to add PROD_1, which depends on PROD_2
 
        cart2.add_to_cart(self.PROD_1, 1)
 

	
 
        cart2.set_quantity(self.PROD_2, 0)
 

	
 
        with self.assertRaises(ValidationError):
 
            cart2.add_to_cart(self.PROD_1, 1)
0 comments (0 inline, 0 general)