Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

applicator_tests.py 2.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from decimal import Decimal as D
  2. from mock import Mock
  3. from django.test import TestCase
  4. from django_dynamic_fixture import G
  5. from oscar.apps.offer.utils import Applicator
  6. from oscar.apps.offer import models
  7. from oscar.test.basket import add_product
  8. from oscar.test import factories
  9. class TestOfferApplicator(TestCase):
  10. def setUp(self):
  11. self.applicator = Applicator()
  12. self.basket = factories.create_basket(empty=True)
  13. rng = G(models.Range, includes_all_products=True)
  14. self.condition = G(models.Condition, range=rng, type="Value",
  15. value=D('100'), proxy_class=None)
  16. self.benefit = G(models.Benefit, range=rng, type="Absolute",
  17. value=D('10'))
  18. def test_applies_offer_multiple_times_by_default(self):
  19. add_product(self.basket, D('100'), 5)
  20. offer = models.ConditionalOffer(
  21. id="test", condition=self.condition, benefit=self.benefit)
  22. self.applicator.apply_offers(self.basket, [offer])
  23. applications = self.basket.offer_applications.applications
  24. self.assertEqual(5, applications["test"]['freq'])
  25. def test_respects_maximum_applications_field(self):
  26. add_product(self.basket, D('100'), 5)
  27. offer = models.ConditionalOffer(
  28. id="test", condition=self.condition, benefit=self.benefit,
  29. max_basket_applications=1)
  30. self.applicator.apply_offers(self.basket, [offer])
  31. applications = self.basket.offer_applications.applications
  32. self.assertEqual(1, applications["test"]['freq'])
  33. def test_uses_offers_in_order_of_descending_priority(self):
  34. self.applicator.get_site_offers = Mock(
  35. return_value=[models.ConditionalOffer(
  36. name="offer1", condition=self.condition, benefit=self.benefit,
  37. priority=1)])
  38. self.applicator.get_user_offers = Mock(
  39. return_value=[models.ConditionalOffer(
  40. name="offer2", condition=self.condition, benefit=self.benefit,
  41. priority=-1)])
  42. offers = self.applicator.get_offers(Mock(), self.basket)
  43. priorities = [offer.priority for offer in offers]
  44. self.assertEqual(sorted(priorities, reverse=True), priorities)