def test_get_first_valid_shipping_method(self): """Test utils.get_first_valid_shipping_method """ # Prepare request user = User.objects.get(username="******") request = DummyRequest(user=user) # Create a weigth criterion and add it to the shipping method 1. c = WeightCriterion.objects.create(weight=5.0, operator=GREATER_THAN) c = WeightCriterion.objects.create(weight=10.0, operator=LESS_THAN) co = CriteriaObjects(criterion=c, content=self.sm1) co.save() # Create a weigth criterion and add it to the shipping method 2. c = WeightCriterion.objects.create(weight=10.0, operator=GREATER_THAN) co = CriteriaObjects(criterion=c, content=self.sm2) co.save() # For product 1 (weight: 6.0) the sm1 is the first valid (weight: 5.0 - 10.0) result = utils.get_first_valid_shipping_method(request, product=self.p1) self.assertEqual(result, self.sm1) # For product 1 (weight: 12.0) the sm1 is the first valid (weigth: > 10.0) result = utils.get_first_valid_shipping_method(request, product=self.p2) self.assertEqual(result, self.sm2)
def test_get_product_delivery_time_1(self): """Tests the product delivery time for the *product view*. """ request = create_request() request.user = AnonymousUser() customer = customer_utils.get_or_create_customer(request) customer.selected_shipping_method = self.sm1 customer.save() # We select a explicitely shipping method for the customer. For the # product view this shouldn't make a difference. It should always the # first valid shipping method be taken to display the delivery time. customer.selected_shipping_method = self.sm2 customer.save() # Create a weigth criterion and add it to the shipping method 1. c = WeightCriterion.objects.create(weight=10.0, operator=GREATER_THAN) co = CriteriaObjects(criterion=c, content=self.sm1) co.save() # Create a weigth criterion and add it to the shipping method 2. c = WeightCriterion.objects.create(weight=10.0, operator=LESS_THAN) co = CriteriaObjects(criterion=c, content=self.sm2) co.save() # Now we ask for the delivery time for product 1. As sm1 is not valid # (p1 has an weight of 6.0) we should get the delivery time from sm2, # which is dt2 dt = utils.get_product_delivery_time(request, self.p1) self.assertEqual(dt.min, self.dt2.min) self.assertEqual(dt.max, self.dt2.max) self.assertEqual(dt.unit, self.dt2.unit) # For product 2 sm1 is valid (p2 has an weight of 11.0), hence we should # get dt1. dt = utils.get_product_delivery_time(request, self.p2) self.assertEqual(dt.min, self.dt1.min) self.assertEqual(dt.max, self.dt1.max) self.assertEqual(dt.unit, self.dt1.unit) # Now we switch to manual delivery time self.p1.manual_delivery_time = True self.p1.delivery_time = self.dt3 self.p1.save() dt = utils.get_product_delivery_time(request, self.p1) self.assertEqual(dt.min, self.dt3.min) self.assertEqual(dt.max, self.dt3.max) self.assertEqual(dt.unit, self.dt3.unit)
def test_valid_shipping_methods_2(self): """Tests valid shipping methods. Test with a cart price criterion. """ user = User.objects.get(username="******") request = DummyRequest(user=user) # Create a cart price criterion and add it to the shipping method 1 c = CartPriceCriterion.objects.create(price=10.0, operator=GREATER_THAN) co = CriteriaObjects(criterion=c, content=self.sm1) co.save() # Cart price is 0.0 sms1 is not valid sms = utils.get_valid_shipping_methods(request) self.assertEqual(len(sms), 1) # Add some products to the cart cart = cart_utils.create_cart(request) # Cart price is still under 10 - sms1 is not valid CartItem.objects.create(cart=cart, product=self.p1, amount=1) update_cart_cache(cart) sms = utils.get_valid_shipping_methods(request) self.assertEqual(len(sms), 1) # Cart price is greater than 10.0 now - sms1 is valid CartItem.objects.create(cart=cart, product=self.p2, amount=1) update_cart_cache(cart) sms = utils.get_valid_shipping_methods(request) self.assertEqual(len(sms), 2)
def test_criteria(self): """ """ c = WeightCriterion.objects.create(weight=10.0, operator=GREATER_THAN) co = CriteriaObjects(criterion=c, content=self.d) co.save() self.assertEqual(self.d.is_valid(self.request), False) self.assertEqual(self.d.is_valid(self.request, self.p), True)
def test_get_product_delivery_time_2(self): """Tests the product delivery time for the *cart view*. """ request = create_request() request.user = AnonymousUser() customer = customer_utils.get_or_create_customer(request) customer.selected_shipping_method = self.sm1 customer.save() dt = utils.get_product_delivery_time(request, self.p1, for_cart=True) self.assertEqual(dt.min, self.dt1.min) self.assertEqual(dt.max, self.dt1.max) self.assertEqual(dt.unit, self.dt1.unit) dt = utils.get_product_delivery_time(request, self.p2, for_cart=True) self.assertEqual(dt.min, self.dt1.min) self.assertEqual(dt.max, self.dt1.max) self.assertEqual(dt.unit, self.dt1.unit) customer.selected_shipping_method = self.sm2 customer.save() # As the customer has now selected sm2 explicitely the delivery method # for the products is dt2 although the default shipping method is # sm1. dt = utils.get_product_delivery_time(request, self.p1, for_cart=True) self.assertEqual(dt.min, self.dt2.min) self.assertEqual(dt.max, self.dt2.max) self.assertEqual(dt.unit, self.dt2.unit) # For product 2 sm1 is valid, hence we should get dt1 dt = utils.get_product_delivery_time(request, self.p2, for_cart=True) self.assertEqual(dt.min, self.dt2.min) self.assertEqual(dt.max, self.dt2.max) self.assertEqual(dt.unit, self.dt2.unit) # Create a weigth criterion and add it to the shipping method 1. That # means sm1 is not valid anymore for p1. c = WeightCriterion.objects.create(weight=10.0, operator=GREATER_THAN) co = CriteriaObjects(criterion=c, content=self.sm1) co.save() # And even if the customer select sm1 explicitely ... customer.selected_shipping_method = self.sm1 customer.save() # ... the shipping method for p1 is sm2 and hence the delivery time is # dt1 dt = utils.get_product_delivery_time(request, self.p1, for_cart=True) self.assertEqual(dt.min, self.dt2.min) self.assertEqual(dt.max, self.dt2.max) self.assertEqual(dt.unit, self.dt2.unit)
def test_valid_shipping_methods_3(self): """Test with a given product. """ # Prepare request user = User.objects.get(username="******") request = DummyRequest(user=user) # Create a weigth criterion and add it to the shipping method 1. c = WeightCriterion.objects.create(weight=10.0, operator=GREATER_THAN) co = CriteriaObjects(criterion=c, content=self.sm1) co.save() # As the product has a weigth of 6.0 the shipping method is not valid result = c.is_valid(request, product=self.p1) self.assertEqual(result, False) # As product 2 has a weigth of 12.0 the shipping method is valid result = c.is_valid(request, product=self.p1) self.assertEqual(result, False)