Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
 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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
    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)
Exemplo n.º 5
0
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) 
Exemplo n.º 6
0
    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) 
Exemplo n.º 7
0
    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)
Exemplo n.º 8
0
    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)
Exemplo n.º 9
0
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)
Exemplo n.º 10
0
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)