From 8f233c79430f6ee024cba7f7ef2cc422af8879cf Mon Sep 17 00:00:00 2001 From: Christopher Neugebauer Date: Sat, 2 Apr 2016 13:14:34 +1100 Subject: [PATCH] =?UTF-8?q?available=5Fproducts=20now=20refers=20to=20the?= =?UTF-8?q?=20user=E2=80=99s=20product=20limits=20as=20well=20as=20enablin?= =?UTF-8?q?g=20conditions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- registrasion/controllers/category.py | 2 -- registrasion/controllers/product.py | 11 +++++++++-- registrasion/tests/test_cart.py | 29 ++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/registrasion/controllers/category.py b/registrasion/controllers/category.py index 53fe2872..7bd08283 100644 --- a/registrasion/controllers/category.py +++ b/registrasion/controllers/category.py @@ -21,6 +21,4 @@ class CategoryController(object): products=products, ) - print available - return set(i.category for i in available) diff --git a/registrasion/controllers/product.py b/registrasion/controllers/product.py index caeb0d54..abb5947d 100644 --- a/registrasion/controllers/product.py +++ b/registrasion/controllers/product.py @@ -32,16 +32,23 @@ class ProductController(object): out = [ product for product in all_products + if cls(product).user_can_add_within_limit(user, 1, past_carts=True) if cls(product).can_add_with_enabling_conditions(user, 0) ] out.sort(key=lambda product: product.order) return out - def user_can_add_within_limit(self, user, quantity): + def user_can_add_within_limit(self, user, quantity, past_carts=False): ''' Return true if the user is able to add _quantity_ to their count of this Product without exceeding _limit_per_user_.''' - carts = rego.Cart.objects.filter(user=user) + carts = rego.Cart.objects.filter( + user=user, + released=False, + ) + if past_carts: + carts = carts.filter(active=False) + items = rego.ProductItem.objects.filter( cart__in=carts, ) diff --git a/registrasion/tests/test_cart.py b/registrasion/tests/test_cart.py index 03d31b54..7c51c131 100644 --- a/registrasion/tests/test_cart.py +++ b/registrasion/tests/test_cart.py @@ -9,6 +9,7 @@ from django.test import TestCase from registrasion import models as rego from registrasion.controllers.cart import CartController +from registrasion.controllers.product import ProductController from patch_datetime import SetTimeMixin @@ -288,3 +289,31 @@ class BasicCartTests(RegistrationCartTestCase): with self.assertRaises(ValidationError): current_cart.set_quantity(self.PROD_4, 1) + + def __available_products_test(self, item, quantity): + self.set_limits() + + get_prods = lambda: ProductController.available_products( + self.USER_1, + products=[self.PROD_2, self.PROD_3, self.PROD_4], + ) + + current_cart = CartController.for_user(self.USER_1) + prods = get_prods() + self.assertTrue(item in prods) + current_cart.add_to_cart(item, quantity) + self.assertTrue(item in prods) + + current_cart.cart.active = False + current_cart.cart.save() + + current_cart = CartController.for_user(self.USER_1) + + prods = get_prods() + self.assertTrue(item not in prods) + + def test_available_products_respects_category_limits(self): + self.__available_products_test(self.PROD_3, 10) + + def test_available_products_respects_product_limits(self): + self.__available_products_test(self.PROD_4, 6)