Merge branch 'chrisjrn/fix_68'
This commit is contained in:
commit
7e39339ed9
2 changed files with 42 additions and 1 deletions
|
@ -172,11 +172,20 @@ class ProductConditionController(IsMetByFilter, ConditionController):
|
||||||
|
|
||||||
in_user_carts = Q(enabling_products__productitem__cart__user=user)
|
in_user_carts = Q(enabling_products__productitem__cart__user=user)
|
||||||
released = commerce.Cart.STATUS_RELEASED
|
released = commerce.Cart.STATUS_RELEASED
|
||||||
|
paid = commerce.Cart.STATUS_PAID
|
||||||
|
active = commerce.Cart.STATUS_ACTIVE
|
||||||
in_released_carts = Q(
|
in_released_carts = Q(
|
||||||
enabling_products__productitem__cart__status=released
|
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.filter(in_user_carts)
|
||||||
queryset = queryset.exclude(in_released_carts)
|
queryset = queryset.exclude(
|
||||||
|
in_released_carts & not_in_paid_or_active_carts
|
||||||
|
)
|
||||||
|
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@ from registrasion.models import commerce
|
||||||
from registrasion.models import conditions
|
from registrasion.models import conditions
|
||||||
from registrasion.controllers.category import CategoryController
|
from registrasion.controllers.category import CategoryController
|
||||||
from controller_helpers import TestingCartController
|
from controller_helpers import TestingCartController
|
||||||
|
from controller_helpers import TestingInvoiceController
|
||||||
from registrasion.controllers.product import ProductController
|
from registrasion.controllers.product import ProductController
|
||||||
|
|
||||||
from test_cart import RegistrationCartTestCase
|
from test_cart import RegistrationCartTestCase
|
||||||
|
@ -350,3 +351,34 @@ class FlagTestCases(RegistrationCartTestCase):
|
||||||
# and also PROD_1, which is now exhausted for user.
|
# and also PROD_1, which is now exhausted for user.
|
||||||
items = commerce.ProductItem.objects.filter(cart=cart.cart)
|
items = commerce.ProductItem.objects.filter(cart=cart.cart)
|
||||||
self.assertTrue([i for i in items if i.product == self.PROD_1])
|
self.assertTrue([i for i in items if i.product == self.PROD_1])
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
with self.assertRaises(ValidationError):
|
||||||
|
# Can't do this without PROD_2
|
||||||
|
cart1.add_to_cart(self.PROD_1, 1)
|
||||||
|
|
||||||
|
cart1.add_to_cart(self.PROD_2, 1)
|
||||||
|
|
||||||
|
inv = TestingInvoiceController.for_cart(cart1.cart)
|
||||||
|
inv.pay("Lol", inv.invoice.value)
|
||||||
|
|
||||||
|
cart2 = TestingCartController.for_user(self.USER_1)
|
||||||
|
cart2.add_to_cart(self.PROD_2, 1)
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
Loading…
Reference in a new issue