您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

test_surcharges.py 2.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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,
  42. excl_tax=D('3.95'), tax=D('1.05'))
  43. price = percentage_surcharge.calculate(self.basket, shipping_charge=shipping_charge)
  44. self.assertEqual(self.basket.total_incl_tax, D(10))
  45. self.assertEqual(shipping_charge.incl_tax, D(5))
  46. self.assertEqual(price.incl_tax, D("0.6"))