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_prepare_basket_applies_existing_basket_valid_voucher(self): """ Tests that prepare_basket applies an existing basket voucher that is valid for multiple products when used to purchase any of those products. """ product = ProductFactory(stockrecords__partner__short_code='test1', stockrecords__price_excl_tax=100) new_range = RangeFactory(products=[product]) voucher, __ = prepare_voucher(_range=new_range, benefit_value=10) basket = BasketFactory(owner=self.request.user, site=self.request.site) basket.vouchers.add(voucher) self.assertEqual(basket.vouchers.count(), 1) basket = prepare_basket(self.request, [product]) self.assertIsNotNone(basket) self.assertEqual(basket.vouchers.count(), 1) self.assertEqual(basket.lines.first().product, product) self.assertIsNotNone(basket.applied_offers()) self.assertEqual(basket.total_discount, 10.00)