def apply_voucher_to_basket(self, voucher): """ Validates and applies voucher on basket. """ self.request.basket.clear_vouchers() username = self.request.user and self.request.user.username is_valid, message = validate_voucher(voucher, self.request.user, self.request.basket, self.request.site) if not is_valid: logger.warning( '[Code Redemption Failure] The voucher is not valid for this basket. ' 'User: %s, Basket: %s, Code: %s, Message: %s', username, self.request.basket.id, voucher.code, message) messages.error(self.request, message) self.request.basket.vouchers.remove(voucher) return valid, msg = apply_voucher_on_basket_and_check_discount( voucher, self.request, self.request.basket) if not valid: logger.warning( '[Code Redemption Failure] The voucher could not be applied to this basket. ' 'User: %s, Basket: %s, Code: %s, Message: %s', username, self.request.basket.id, voucher.code, msg) messages.warning(self.request, msg) self.request.basket.vouchers.remove(voucher) else: messages.info(self.request, msg)
def _apply_voucher(self, voucher): username = self.request.user and self.request.user.username valid, message = apply_voucher_on_basket_and_check_discount(voucher, self.request, self.request.basket) if not valid: logger.warning('[Code Redemption Failure] The voucher could not be applied to this basket. ' 'User: %s, Basket: %s, Code: %s, Message: %s', username, self.request.basket.id, voucher.code, message) messages.warning(self.request, message) self.request.basket.vouchers.remove(voucher) else: messages.info(self.request, message)
def test_apply_voucher_on_basket_and_check_discount_with_valid_voucher(self): """ Tests apply_voucher_on_basket_and_check_discount when called with valid voucher applies voucher and returns the correct values. """ basket = BasketFactory(owner=self.request.user, site=self.request.site) voucher, product = prepare_voucher() basket.add_product(product, 1) applied, msg = apply_voucher_on_basket_and_check_discount(voucher, self.request, basket) self.assertEqual(applied, True) self.assertIsNotNone(basket.applied_offers()) self.assertEqual(msg, "Coupon code '{code}' added to basket.".format(code=voucher.code))
def test_apply_voucher_on_basket_and_check_discount_with_invalid_product(self): """ Tests apply_voucher_on_basket_and_check_discount when called with invalid product does not apply voucher and returns the correct values. """ basket = BasketFactory(owner=self.request.user, site=self.request.site) product = ProductFactory(stockrecords__partner__short_code='test1', stockrecords__price_excl_tax=0) voucher, __ = prepare_voucher(_range=RangeFactory(products=[product])) basket.add_product(product, 1) applied, msg = apply_voucher_on_basket_and_check_discount(voucher, self.request, basket) self.assertEqual(applied, False) self.assertEqual(basket.applied_offers(), {}) self.assertEqual(msg, 'Basket does not qualify for coupon code {code}.'.format(code=voucher.code))
def test_apply_voucher_on_basket_and_check_discount_with_multiple_vouchers(self): """ Tests apply_voucher_on_basket_and_check_discount when called with a basket already containing a valid voucher it only checks the new voucher. """ basket = BasketFactory(owner=self.request.user, site=self.request.site) product = ProductFactory(stockrecords__partner__short_code='test1', stockrecords__price_excl_tax=10) invalid_voucher, __ = prepare_voucher(code='TEST1') valid_voucher, __ = prepare_voucher(code='TEST2', _range=RangeFactory(products=[product])) basket.add_product(product, 1) basket.vouchers.add(valid_voucher) applied, msg = apply_voucher_on_basket_and_check_discount(invalid_voucher, self.request, basket) self.assertEqual(applied, False) self.assertEqual(msg, 'Basket does not qualify for coupon code {code}.'.format(code=invalid_voucher.code))
def apply_voucher_to_basket(self, voucher): """ Validates and applies voucher on basket. Returns: message (dict): Dict containing `user_message` and `message_type` (e.g. 'error', 'warning', or 'info') """ self.request.basket.clear_vouchers() username = self.request.user and self.request.user.username is_valid, message = validate_voucher(voucher, self.request.user, self.request.basket, self.request.site) if not is_valid: logger.warning( '[Code Redemption Failure] The voucher is not valid for this basket. ' 'User: %s, Basket: %s, Code: %s, Message: %s', username, self.request.basket.id, voucher.code, message) message_response = { 'message_type': 'error', 'user_message': message, } self.request.basket.vouchers.remove(voucher) return message_response valid, message = apply_voucher_on_basket_and_check_discount( voucher, self.request, self.request.basket) if not valid: logger.warning( '[Code Redemption Failure] The voucher could not be applied to this basket. ' 'User: %s, Basket: %s, Code: %s, Message: %s', username, self.request.basket.id, voucher.code, message) message_response = { 'message_type': 'warning', 'user_message': message, } self.request.basket.vouchers.remove(voucher) else: message_response = { 'message_type': 'info', 'user_message': message, } return message_response
def apply_voucher_to_basket(self, voucher): """ Validates and applies voucher on basket. """ self.request.basket.clear_vouchers() is_valid, message = validate_voucher(voucher, self.request.user, self.request.basket, self.request.site) if not is_valid: messages.error(self.request, message) self.request.basket.vouchers.remove(voucher) return valid, msg = apply_voucher_on_basket_and_check_discount(voucher, self.request, self.request.basket) if not valid: messages.warning(self.request, msg) self.request.basket.vouchers.remove(voucher) else: messages.info(self.request, msg)