Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

applicator_tests.py 2.3KB

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