class TestOfferApplicator(TestCase): def setUp(self): self.applicator = Applicator() self.basket = BasketFactory() rng = RangeFactory(includes_all_products=True) self.condition = ConditionFactory( range=rng, type=ConditionFactory._meta.model.VALUE, value=D('100'), proxy_class=None) self.benefit = BenefitFactory( range=rng, type=BenefitFactory._meta.model.FIXED, value=D('10')) def test_applies_offer_multiple_times_by_default(self): add_product(self.basket, D('100'), 5) offer = ConditionalOfferFactory( pk=1, condition=self.condition, benefit=self.benefit) self.applicator.apply self.applicator.apply_offers(self.basket, [offer]) line = self.basket.all_lines()[0] self.assertTrue(line.quantity_with_offer_discount(offer) == 5) def test_respects_maximum_applications_field(self): add_product(self.basket, D('100'), 5) offer = ConditionalOfferFactory( pk=1, condition=self.condition, benefit=self.benefit, max_basket_applications=1) self.applicator.apply_offers(self.basket, [offer]) line = self.basket.all_lines()[0] self.assertTrue(line.quantity_with_offer_discount(offer) == 5) applications = self.basket.offer_applications.applications self.assertTrue(applications[1]['freq'] == 1) 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) def test_get_site_offers(self): models.ConditionalOffer.objects.create( name="globaloffer", condition=self.condition, benefit=self.benefit, offer_type=models.ConditionalOffer.SITE) models.ConditionalOffer.objects.create( name="sessionoffer", condition=self.condition, benefit=self.benefit, offer_type=models.ConditionalOffer.SESSION) site_offers = Applicator().get_site_offers() # Only one offer should be returned self.assertEqual(len(site_offers), 1) self.assertEqual(site_offers[0].name, "globaloffer")
class TestOfferApplicator(TestCase): def setUp(self): self.applicator = Applicator() self.basket = BasketFactory() rng = RangeFactory(includes_all_products=True) self.condition = ConditionFactory( range=rng, type=ConditionFactory._meta.model.VALUE, value=D('100'), proxy_class=None) self.benefit = BenefitFactory( range=rng, type=BenefitFactory._meta.model.FIXED, value=D('10')) def test_applies_offer_multiple_times_by_default(self): add_product(self.basket, D('100'), 5) offer = ConditionalOfferFactory( pk=1, condition=self.condition, benefit=self.benefit) self.applicator.apply self.applicator.apply_offers(self.basket, [offer]) line = self.basket.all_lines()[0] self.assertTrue(line.quantity_with_offer_discount(offer) == 5) def test_respects_maximum_applications_field(self): add_product(self.basket, D('100'), 5) offer = ConditionalOfferFactory( pk=1, condition=self.condition, benefit=self.benefit, max_basket_applications=1) self.applicator.apply_offers(self.basket, [offer]) line = self.basket.all_lines()[0] self.assertTrue(line.quantity_with_offer_discount(offer) == 5) applications = self.basket.offer_applications.applications self.assertTrue(applications[1]['freq'] == 1) 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) def test_get_site_offers(self): models.ConditionalOffer.objects.create( name="globaloffer", condition=self.condition, benefit=self.benefit, offer_type=models.ConditionalOffer.SITE) models.ConditionalOffer.objects.create( name="sessionoffer", condition=self.condition, benefit=self.benefit, offer_type=models.ConditionalOffer.SESSION) site_offers = Applicator().get_site_offers() # Only one offer should be returned self.assertEqual(len(site_offers), 1) self.assertEqual(site_offers[0].name, "globaloffer")
class TestOfferApplicator(TestCase): def setUp(self): self.applicator = Applicator() self.basket = BasketFactory() rng = RangeFactory(includes_all_products=True) self.condition = ConditionFactory( range=rng, type=ConditionFactory._meta.model.VALUE, value=D('100'), proxy_class=None) self.benefit = BenefitFactory(range=rng, type=BenefitFactory._meta.model.FIXED, value=D('10'), max_affected_items=1) def test_applies_offer_multiple_times_by_default(self): add_product(self.basket, D('100'), 5) offer = ConditionalOfferFactory(pk=1, condition=self.condition, benefit=self.benefit) self.applicator.apply_offers(self.basket, [offer]) applications = self.basket.offer_applications.applications self.assertEqual(5, applications[1]['freq']) def test_respects_maximum_applications_field(self): add_product(self.basket, D('100'), 5) offer = ConditionalOfferFactory(pk=1, 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[1]['freq']) 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)
class TestOfferApplicator(TestCase): def setUp(self): self.applicator = Applicator() self.basket = factories.create_basket(empty=True) rng = G(models.Range, includes_all_products=True) self.condition = G(models.Condition, range=rng, type="Value", value=D('100'), proxy_class=None) self.benefit = G(models.Benefit, range=rng, type="Absolute", value=D('10')) 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']) 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 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)
class TestOfferApplicator(TestCase): def setUp(self): self.applicator = Applicator() self.basket = BasketFactory() rng = RangeFactory(includes_all_products=True) self.condition = ConditionFactory( range=rng, type=ConditionFactory._meta.model.VALUE, value=D('100'), proxy_class=None) self.benefit = BenefitFactory( range=rng, type=BenefitFactory._meta.model.FIXED, value=D('10'), max_affected_items=1) def test_applies_offer_multiple_times_by_default(self): add_product(self.basket, D('100'), 5) offer = ConditionalOfferFactory( pk=1, condition=self.condition, benefit=self.benefit) self.applicator.apply_offers(self.basket, [offer]) applications = self.basket.offer_applications.applications self.assertEqual(5, applications[1]['freq']) def test_respects_maximum_applications_field(self): add_product(self.basket, D('100'), 5) offer = ConditionalOfferFactory( pk=1, 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[1]['freq']) 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)
class TestOfferApplicator(TestCase): def setUp(self): self.applicator = Applicator() self.basket = factories.create_basket(empty=True) rng = G(models.Range, includes_all_products=True) self.condition = G(models.Condition, range=rng, type="Value", value=D('100'), proxy_class=None) self.benefit = G(models.Benefit, range=rng, type="Absolute", value=D('10')) 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']) 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 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(Mock(), self.basket) priorities = [offer.priority for offer in offers] self.assertEqual(sorted(priorities, reverse=True), priorities)