def setUp(self): self.products = [ create_product(Decimal('5.00')), create_product(Decimal('10.00')) ] self.range = Range.objects.create(name="Some products") for product in self.products: self.range.included_products.add(product) self.range.included_products.add(product) self.basket = Basket.objects.create() self.cond = CoverageCondition(range=self.range, type="Coverage", value=2)
def test_correct_discount_is_returned(self): products = [ create_product(Decimal('8.00')), create_product(Decimal('4.00')) ] range = Range.objects.create(name="Dummy range") for product in products: range.included_products.add(product) range.included_products.add(product) basket = Basket.objects.create() [basket.add_product(p) for p in products] condition = CoverageCondition(range=range, type="Coverage", value=2) discount = self.benefit.apply(basket, condition) self.assertEquals(Decimal('2.00'), discount)
def test_consumed_items_checks_affected_items(self): # Create new offer range = Range.objects.create(name="All products", includes_all_products=True) cond = CoverageCondition(range=range, type="Coverage", value=2) # Get 4 distinct products in the basket self.products.extend([ create_product(Decimal('15.00')), create_product(Decimal('20.00')) ]) for product in self.products: self.basket.add_product(product) self.assertTrue(cond.is_satisfied(self.basket)) cond.consume_items(self.basket) self.assertEquals(2, self.basket.num_items_without_discount) self.assertTrue(cond.is_satisfied(self.basket)) cond.consume_items(self.basket) self.assertEquals(0, self.basket.num_items_without_discount)
def test_discount_when_more_products_than_required(self): products = [ create_product(Decimal('4.00')), create_product(Decimal('8.00')), create_product(Decimal('12.00')) ] # Create range that includes the products range = Range.objects.create(name="Dummy range") for product in products: range.included_products.add(product) condition = CoverageCondition(range=range, type="Coverage", value=3) # Create basket that satisfies condition but with one extra product basket = Basket.objects.create() [basket.add_product(p) for p in products] basket.add_product(products[0]) benefit = FixedPriceBenefit(range=range, type="FixedPrice", value=Decimal('20.00')) discount = benefit.apply(basket, condition) self.assertEquals(Decimal('4.00'), discount)