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 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)
class CoverageConditionTest(TestCase): def setUp(self): self.products = [create_product(Decimal('5.00')), create_product(Decimal('10.00'))] self.range = Range.objects.create(name="All 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_empty_basket_fails(self): self.assertFalse(self.cond.is_satisfied(self.basket)) def test_single_item_fails(self): self.basket.add_product(self.products[0]) self.assertFalse(self.cond.is_satisfied(self.basket)) def test_duplicate_item_fails(self): self.basket.add_product(self.products[0]) self.basket.add_product(self.products[0]) self.assertFalse(self.cond.is_satisfied(self.basket)) def test_covering_items_pass(self): self.basket.add_product(self.products[0]) self.basket.add_product(self.products[1]) self.assertTrue(self.cond.is_satisfied(self.basket)) def test_covering_items_are_consumed(self): self.basket.add_product(self.products[0]) self.basket.add_product(self.products[1]) self.cond.consume_items(self.basket) self.assertEquals(0, self.basket.num_items_without_discount)
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)
class CoverageConditionTest(TestCase): 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_empty_basket_fails(self): self.assertFalse(self.cond.is_satisfied(self.basket)) def test_single_item_fails(self): self.basket.add_product(self.products[0]) self.assertFalse(self.cond.is_satisfied(self.basket)) def test_duplicate_item_fails(self): self.basket.add_product(self.products[0]) self.basket.add_product(self.products[0]) self.assertFalse(self.cond.is_satisfied(self.basket)) def test_covering_items_pass(self): self.basket.add_product(self.products[0]) self.basket.add_product(self.products[1]) self.assertTrue(self.cond.is_satisfied(self.basket)) def test_covering_items_are_consumed(self): self.basket.add_product(self.products[0]) self.basket.add_product(self.products[1]) self.cond.consume_items(self.basket) self.assertEquals(0, self.basket.num_items_without_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_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_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)
class CoverageConditionTest(TestCase): def setUp(self): self.products = [ create_product(Decimal('5.00')), create_product(Decimal('10.00')) ] self.range = Range.objects.create(name="All 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_empty_basket_fails(self): self.assertFalse(self.cond.is_satisfied(self.basket)) def test_single_item_fails(self): self.basket.add_product(self.products[0]) self.assertFalse(self.cond.is_satisfied(self.basket)) def test_duplicate_item_fails(self): self.basket.add_product(self.products[0]) self.basket.add_product(self.products[0]) self.assertFalse(self.cond.is_satisfied(self.basket)) def test_covering_items_pass(self): self.basket.add_product(self.products[0]) self.basket.add_product(self.products[1]) self.assertTrue(self.cond.is_satisfied(self.basket)) def test_covering_items_are_consumed(self): self.basket.add_product(self.products[0]) self.basket.add_product(self.products[1]) self.cond.consume_items(self.basket) self.assertEquals(0, self.basket.num_items_without_discount)
class CoverageConditionTest(TestCase): 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_empty_basket_fails(self): self.assertFalse(self.cond.is_satisfied(self.basket)) def test_empty_basket_fails_partial_condition(self): self.assertFalse(self.cond.is_partially_satisfied(self.basket)) def test_single_item_fails(self): self.basket.add_product(self.products[0]) self.assertFalse(self.cond.is_satisfied(self.basket)) def test_single_item_passes_partial_condition(self): self.basket.add_product(self.products[0]) self.assertTrue(self.cond.is_partially_satisfied(self.basket)) def test_upsell_message(self): self.basket.add_product(self.products[0]) self.assertTrue( 'Buy 1 more' in self.cond.get_upsell_message(self.basket)) def test_duplicate_item_fails(self): self.basket.add_product(self.products[0]) self.basket.add_product(self.products[0]) self.assertFalse(self.cond.is_satisfied(self.basket)) def test_duplicate_item_passes_partial_condition(self): self.basket.add_product(self.products[0], 2) self.assertTrue(self.cond.is_partially_satisfied(self.basket)) def test_covering_items_pass(self): self.basket.add_product(self.products[0]) self.basket.add_product(self.products[1]) self.assertTrue(self.cond.is_satisfied(self.basket)) def test_covering_items_fail_partial_condition(self): self.basket.add_product(self.products[0]) self.basket.add_product(self.products[1]) self.assertFalse(self.cond.is_partially_satisfied(self.basket)) def test_covering_items_are_consumed(self): self.basket.add_product(self.products[0]) self.basket.add_product(self.products[1]) self.cond.consume_items(self.basket) self.assertEquals(0, self.basket.num_items_without_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)