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_tax_mixin.py 1.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. from decimal import Decimal as D
  2. from unittest import mock
  3. from django.test import TestCase
  4. from oscar.apps.partner import strategy
  5. class TestNoTaxMixin(TestCase):
  6. def setUp(self):
  7. self.mixin = strategy.NoTax()
  8. self.product = mock.Mock()
  9. self.stockrecord = mock.Mock()
  10. self.stockrecord.price = D("12.00")
  11. def test_returns_no_prices_without_stockrecord(self):
  12. policy = self.mixin.pricing_policy(self.product, None)
  13. self.assertFalse(policy.exists)
  14. def test_returns_zero_tax(self):
  15. policy = self.mixin.pricing_policy(self.product, self.stockrecord)
  16. self.assertEqual(D("0.00"), policy.tax)
  17. def test_doesnt_add_tax_to_net_price(self):
  18. policy = self.mixin.pricing_policy(self.product, self.stockrecord)
  19. self.assertEqual(D("12.00"), policy.incl_tax)
  20. class TestFixedRateTaxMixin(TestCase):
  21. def setUp(self):
  22. self.mixin = strategy.FixedRateTax()
  23. self.mixin.rate = D("0.10")
  24. self.product = mock.Mock()
  25. self.stockrecord = mock.Mock()
  26. self.stockrecord.price = D("12.00")
  27. def test_returns_no_prices_without_stockrecord(self):
  28. policy = self.mixin.pricing_policy(self.product, None)
  29. self.assertFalse(policy.exists)
  30. def test_returns_correct_tax(self):
  31. policy = self.mixin.pricing_policy(self.product, self.stockrecord)
  32. expected_tax = self.stockrecord.price * self.mixin.get_rate(
  33. self.product, self.stockrecord
  34. )
  35. self.assertEqual(expected_tax, policy.tax)
  36. def test_adds_tax_to_net_price(self):
  37. policy = self.mixin.pricing_policy(self.product, self.stockrecord)
  38. self.assertEqual(D("13.20"), policy.incl_tax)