Esempio n. 1
0
    def test_uses_offers_in_order_of_descending_priority(self):
        self.applicator.get_site_offers = Mock(
            return_value=[models.ConditionalOffer(
                name="offer1", condition=self.condition, benefit=self.benefit,
                priority=1)])

        self.applicator.get_user_offers = Mock(
            return_value=[models.ConditionalOffer(
                name="offer2", condition=self.condition, benefit=self.benefit,
                priority=-1)])

        offers = self.applicator.get_offers(self.basket)
        priorities = [offer.priority for offer in offers]
        self.assertEqual(sorted(priorities, reverse=True), priorities)
Esempio n. 2
0
 def test_applies_offer_multiple_times_by_default(self):
     self.basket.add_product(self.product, 5)
     offer = models.ConditionalOffer(id="test",
                                     condition=self.condition,
                                     benefit=self.benefit)
     discounts = self.applicator.get_basket_discounts(self.basket, [offer])
     self.assertEqual(5, discounts["test"]['freq'])
Esempio n. 3
0
 def test_applies_offer_multiple_times_by_default(self):
     add_product(self.basket, D('100'), 5)
     offer = models.ConditionalOffer(id="test",
                                     condition=self.condition,
                                     benefit=self.benefit)
     self.applicator.apply_offers(self.basket, [offer])
     applications = self.basket.offer_applications.applications
     self.assertEqual(5, applications["test"]['freq'])
Esempio n. 4
0
 def test_respects_maximum_applications_field(self):
     self.basket.add_product(self.product, 5)
     offer = models.ConditionalOffer(id="test",
                                     condition=self.condition,
                                     benefit=self.benefit,
                                     max_applications=1)
     discounts = self.applicator.get_basket_discounts(self.basket, [offer])
     self.assertEqual(1, discounts["test"]['freq'])
Esempio n. 5
0
 def test_respects_maximum_applications_field(self):
     add_product(self.basket, D('100'), 5)
     offer = models.ConditionalOffer(id="test",
                                     condition=self.condition,
                                     benefit=self.benefit,
                                     max_basket_applications=1)
     self.applicator.apply_offers(self.basket, [offer])
     applications = self.basket.offer_applications.applications
     self.assertEqual(1, applications["test"]['freq'])
 def setUp(self):
     range = models.Range.objects.create(name="All products",
                                         includes_all_products=True)
     self.condition = models.CountCondition.objects.create(
         range=range, type=models.Condition.COUNT, value=2)
     self.benefit = models.ShippingPercentageDiscountBenefit.objects.create(
         type=models.Benefit.SHIPPING_PERCENTAGE, value=50)
     self.offer = models.ConditionalOffer(condition=self.condition,
                                          benefit=self.benefit)
     self.basket = G(Basket)
    def setUp(self):
        range = models.Range.objects.create(name="All products",
                                            includes_all_products=True)
        self.condition = models.ValueCondition.objects.create(
            range=range, type=models.Condition.VALUE, value=D('10.00'))
        self.benefit = models.PercentageDiscountBenefit.objects.create(
            range=range, type=models.Benefit.PERCENTAGE, value=20)
        self.offer = models.ConditionalOffer(
            offer_type=models.ConditionalOffer.SITE,
            condition=self.condition,
            benefit=self.benefit)

        self.basket = factories.create_basket(empty=True)
Esempio n. 8
0
 def setUp(self):
     range = models.Range.objects.create(name="All products",
                                         includes_all_products=True)
     condition = models.CountCondition.objects.create(
         range=range, type=models.Condition.COUNT, value=3)
     benefit = models.PercentageDiscountBenefit.objects.create(
         range=range,
         type=models.Benefit.PERCENTAGE,
         value=20,
         max_affected_items=1)
     self.offer = models.ConditionalOffer(
         name="Test",
         offer_type=models.ConditionalOffer.SITE,
         condition=condition,
         benefit=benefit)
 def setUp(self):
     range = models.Range.objects.create(name="All products",
                                         includes_all_products=True)
     self.condition = models.CountCondition(range=range,
                                            type=models.Condition.COUNT,
                                            value=2)
     self.benefit = models.PercentageDiscountBenefit(
         range=range,
         type=models.Benefit.PERCENTAGE,
         value=20,
         max_affected_items=1)
     self.offer = models.ConditionalOffer(
         offer_type=models.ConditionalOffer.SITE,
         condition=self.condition,
         benefit=self.benefit)
     self.basket = factories.create_basket(empty=True)
Esempio n. 10
0
    def setUp(self):
        self.condition_product = factories.ProductFactory()
        condition_range = factories.RangeFactory()
        condition_range.add_product(self.condition_product)
        self.condition = models.CountCondition.objects.create(
            range=condition_range, type=models.Condition.COUNT, value=2)

        self.benefit_product = factories.ProductFactory()
        benefit_range = factories.RangeFactory()
        benefit_range.add_product(self.benefit_product)
        self.benefit = models.AbsoluteDiscountBenefit.objects.create(
            range=benefit_range, type=models.Benefit.FIXED, value=D('3.00'))

        self.offer = models.ConditionalOffer(id=1,
                                             condition=self.condition,
                                             benefit=self.benefit)
        self.basket = factories.create_basket(empty=True)

        self.applicator = Applicator()
Esempio n. 11
0
 def test_active_on_null_start_datetime(self):
     # null start_datetime means offer is active from the beginning of time
     offer = models.ConditionalOffer(start_datetime=None,
                                     end_datetime=self.end)
     test = datetime.date(2000, 3, 10)
     self.assertTrue(offer.is_available(test_date=test))
Esempio n. 12
0
 def setUp(self):
     self.applications = results.OfferApplications()
     self.offer = models.ConditionalOffer()
Esempio n. 13
0
 def setUp(self):
     self.offer = models.ConditionalOffer(max_discount=D('100.00'),
                                          total_discount=D('0.00'))
Esempio n. 14
0
 def setUp(self):
     self.condition = custom.create_condition(BasketOwnerCalledBarry)
     self.offer = models.ConditionalOffer(condition=self.condition)
     self.basket = Basket()
Esempio n. 15
0
 def setUp(self):
     self.offer = models.ConditionalOffer(
         status=models.ConditionalOffer.SUSPENDED)
Esempio n. 16
0
 def setUp(self):
     self.offer = models.ConditionalOffer(max_user_applications=1)
     self.user = UserFactory()
Esempio n. 17
0
 def setUp(self):
     condition, benefit = G(models.Condition), G(models.Benefit)
     self.offer = models.ConditionalOffer(
         offer_type=models.ConditionalOffer.SITE,
         condition=condition,
         benefit=benefit)
Esempio n. 18
0
 def setUp(self):
     self.start = datetime.date(2011, 1, 1)
     self.end = datetime.date(2011, 2, 1)
     self.offer = models.ConditionalOffer(start_datetime=self.start,
                                          end_datetime=self.end)
Esempio n. 19
0
 def test_active_on_null_end_datetime(self):
     # null end_datetime means offer should never expire
     offer = models.ConditionalOffer(start_datetime=self.start,
                                     end_datetime=None)
     test = datetime.date(2017, 3, 10)
     self.assertTrue(offer.is_available(test_date=test))
Esempio n. 20
0
 def setUp(self):
     offer = models.ConditionalOffer()
     self.applications = OfferApplications()
     for i in range(4):
         self.applications.add(offer, models.BasketDiscount(D('5.00')))
Esempio n. 21
0
 def test_active_on_null_start_and_end_datetime(self):
     # null datetimes - offer is always available
     offer = models.ConditionalOffer(start_datetime=None, end_datetime=None)
     test = datetime.date(2017, 3, 10)
     self.assertTrue(offer.is_available(test_date=test))
Esempio n. 22
0
 def setUp(self):
     self.offer = models.ConditionalOffer(max_global_applications=4)
Esempio n. 23
0
 def test_is_active(self):
     start = datetime.date(2011, 01, 01)
     test = datetime.date(2011, 01, 10)
     end = datetime.date(2011, 02, 01)
     offer = models.ConditionalOffer(start_date=start, end_date=end)
     self.assertTrue(offer.is_active(test))