You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

test_benefit.py 2.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. from decimal import ROUND_DOWN, Decimal
  2. from unittest.mock import patch
  3. import pytest
  4. from django.test import TestCase, override_settings
  5. from oscar.apps.offer.models import Benefit
  6. from oscar.test import factories
  7. @pytest.fixture
  8. def range():
  9. return factories.RangeFactory()
  10. @pytest.mark.django_db
  11. class TestBenefitProxyModels(object):
  12. """
  13. https://docs.djangoproject.com/en/1.11/topics/db/models/#proxy-models
  14. """
  15. def test_name_and_description(self, range):
  16. """
  17. Tests that the benefit proxy classes all return a name and
  18. description. Unfortunately, the current implementations means
  19. a valid range is required.w
  20. """
  21. for benefit_type, __ in Benefit.TYPE_CHOICES:
  22. benefit = Benefit(type=benefit_type, range=range)
  23. assert all([
  24. benefit.name,
  25. benefit.description,
  26. str(benefit)])
  27. def test_proxy(self, range):
  28. for benefit_type, __ in Benefit.TYPE_CHOICES:
  29. benefit = Benefit(
  30. type=benefit_type, value=10, range=range, max_affected_items=1)
  31. proxy = benefit.proxy()
  32. assert benefit.type == proxy.type
  33. assert benefit.value == proxy.value
  34. assert benefit.range == proxy.range
  35. assert benefit.max_affected_items == proxy.max_affected_items
  36. class TestBenefit(TestCase):
  37. def test_default_rounding(self):
  38. benefit = Benefit()
  39. decimal = Decimal(10.0570)
  40. self.assertEqual(
  41. benefit.round(decimal),
  42. decimal.quantize(Decimal('0.01'), ROUND_DOWN)
  43. )
  44. @override_settings(OSCAR_OFFER_ROUNDING_FUNCTION='tests._site.apps.offer.round.round_func')
  45. @patch('tests._site.apps.offer.round.round_func')
  46. def test_round_uses_function_defined_in_OSCAR_OFFER_ROUNDING_FUNCTION(self, round_func_mock):
  47. benefit = Benefit()
  48. decimal = Decimal(10.05)
  49. self.assertEqual(
  50. benefit.round(decimal),
  51. round_func_mock(decimal)
  52. )