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_surcharges.py 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. from decimal import Decimal as D
  2. from django.test import TestCase
  3. from oscar.core import prices
  4. from oscar.core.loading import get_class
  5. from oscar.test import factories
  6. from oscar.test.basket import add_product
  7. SurchargeApplicator = get_class("checkout.applicator", "SurchargeApplicator")
  8. PercentageCharge = get_class("checkout.surcharges", "PercentageCharge")
  9. FlatCharge = get_class("checkout.surcharges", "FlatCharge")
  10. class TestSurcharges(TestCase):
  11. def setUp(self):
  12. self.applicator = SurchargeApplicator()
  13. self.basket = factories.create_basket(empty=True)
  14. def test_stock_surcharges(self):
  15. add_product(self.basket, D("12.00"))
  16. surcharges = self.applicator.get_applicable_surcharges(self.basket)
  17. self.assertEqual(surcharges.total.excl_tax, D("20.0"))
  18. self.assertEqual(surcharges.total.incl_tax, D("22.0"))
  19. def test_percentage_surcharge(self):
  20. percentage_surcharge = PercentageCharge(percentage=D(10))
  21. add_product(self.basket, D(12))
  22. price = percentage_surcharge.calculate(self.basket)
  23. self.assertEqual(self.basket.total_incl_tax, D(12))
  24. self.assertEqual(price.incl_tax, D("1.20"))
  25. def test_percentage_empty_basket(self):
  26. percentage_surcharge = PercentageCharge(percentage=D(10))
  27. price = percentage_surcharge.calculate(self.basket)
  28. self.assertEqual(self.basket.total_incl_tax, D(0))
  29. self.assertEqual(price.incl_tax, D(0))
  30. def test_flat_surcharge(self):
  31. flat_surcharge = FlatCharge(excl_tax=D(1), incl_tax=D("1.21"))
  32. add_product(self.basket, D(12))
  33. price = flat_surcharge.calculate(self.basket)
  34. self.assertEqual(self.basket.total_incl_tax, D(12))
  35. self.assertEqual(price.incl_tax, D("1.21"))
  36. self.assertEqual(price.excl_tax, D(1))
  37. def test_percentage_with_shipping_charge(self):
  38. percentage_surcharge = PercentageCharge(percentage=D(4))
  39. add_product(self.basket, D(10))
  40. shipping_charge = prices.Price(
  41. currency=self.basket.currency, excl_tax=D("3.95"), tax=D("1.05")
  42. )
  43. price = percentage_surcharge.calculate(
  44. self.basket, shipping_charge=shipping_charge
  45. )
  46. self.assertEqual(self.basket.total_incl_tax, D(10))
  47. self.assertEqual(shipping_charge.incl_tax, D(5))
  48. self.assertEqual(price.incl_tax, D("0.6"))