Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

model_method_tests.py 5.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. from decimal import Decimal as D
  2. from django.test import TestCase
  3. from nose.plugins.attrib import attr
  4. from oscar.apps.shipping.models import OrderAndItemCharges, WeightBased
  5. from oscar.core.compat import get_user_model
  6. from oscar.test import factories
  7. User = get_user_model()
  8. @attr('shipping')
  9. class OrderAndItemChargesTests(TestCase):
  10. def setUp(self):
  11. self.method = OrderAndItemCharges(price_per_order=D('5.00'), price_per_item=D('1.00'))
  12. self.basket = factories.create_basket(empty=True)
  13. self.method.set_basket(self.basket)
  14. def test_order_level_charge_for_empty_basket(self):
  15. self.assertEquals(D('5.00'), self.method.charge_incl_tax)
  16. def test_single_item_basket(self):
  17. record = factories.create_stockrecord()
  18. self.basket.add_product(record.product)
  19. self.assertEquals(D('5.00') + D('1.00'),
  20. self.method.charge_incl_tax)
  21. def test_multi_item_basket(self):
  22. record = factories.create_stockrecord()
  23. self.basket.add_product(record.product, 7)
  24. self.assertEquals(D('5.00') + 7*D('1.00'), self.method.charge_incl_tax)
  25. @attr('shipping')
  26. class ZeroFreeThresholdTest(TestCase):
  27. def setUp(self):
  28. self.method = OrderAndItemCharges(price_per_order=D('10.00'), free_shipping_threshold=D('0.00'))
  29. self.basket = factories.create_basket(empty=True)
  30. self.method.set_basket(self.basket)
  31. def test_free_shipping_with_empty_basket(self):
  32. self.assertEquals(D('0.00'), self.method.charge_incl_tax)
  33. def test_free_shipping_with_nonempty_basket(self):
  34. record = factories.create_stockrecord(price_excl_tax=D('5.00'))
  35. self.basket.add_product(record.product)
  36. self.assertEquals(D('0.00'), self.method.charge_incl_tax)
  37. @attr('shipping')
  38. class NonZeroFreeThresholdTest(TestCase):
  39. def setUp(self):
  40. self.method = OrderAndItemCharges(
  41. price_per_order=D('10.00'), free_shipping_threshold=D('20.00'))
  42. self.basket = factories.create_basket(empty=True)
  43. self.method.set_basket(self.basket)
  44. def test_basket_below_threshold(self):
  45. record = factories.create_stockrecord(price_excl_tax=D('5.00'))
  46. self.basket.add_product(record.product)
  47. self.assertEquals(D('10.00'), self.method.charge_incl_tax)
  48. def test_basket_on_threshold(self):
  49. record = factories.create_stockrecord(price_excl_tax=D('5.00'))
  50. self.basket.add_product(record.product, quantity=4)
  51. self.assertEquals(D('0.00'), self.method.charge_incl_tax)
  52. def test_basket_above_threshold(self):
  53. record = factories.create_stockrecord(price_excl_tax=D('5.00'))
  54. self.basket.add_product(record.product, quantity=8)
  55. self.assertEquals(D('0.00'), self.method.charge_incl_tax)
  56. @attr('shipping')
  57. class WeightBasedMethodTests(TestCase):
  58. def setUp(self):
  59. self.standard = WeightBased.objects.create(name='Standard')
  60. self.express = WeightBased.objects.create(name='Express')
  61. def tearDown(self):
  62. self.standard.delete()
  63. self.express.delete()
  64. def test_get_band_for_lower_weight(self):
  65. band = self.standard.bands.create(upper_limit=1, charge=D('4.00'))
  66. fetched_band = self.standard.get_band_for_weight(0.5)
  67. self.assertEqual(band.id, fetched_band.id)
  68. def test_get_band_for_higher_weight(self):
  69. self.standard.bands.create(upper_limit=1, charge=D('4.00'))
  70. fetched_band = self.standard.get_band_for_weight(1.5)
  71. self.assertIsNone(fetched_band)
  72. def test_get_band_for_matching_weight(self):
  73. band = self.standard.bands.create(upper_limit=1, charge=D('4.00'))
  74. fetched_band = self.standard.get_band_for_weight(1)
  75. self.assertEqual(band.id, fetched_band.id)
  76. def test_weight_to_is_upper_bound(self):
  77. band = self.standard.bands.create(upper_limit=1, charge=D('4.00'))
  78. self.assertEqual(1, band.weight_to)
  79. def test_weight_from_for_single_band(self):
  80. band = self.standard.bands.create(upper_limit=1, charge=D('4.00'))
  81. self.assertEqual(0, band.weight_from)
  82. def test_weight_from_for_multiple_bands(self):
  83. self.standard.bands.create(upper_limit=1, charge=D('4.00'))
  84. band = self.express.bands.create(upper_limit=2, charge=D('8.00'))
  85. self.assertEqual(0, band.weight_from)
  86. def test_get_band_for_series_of_bands(self):
  87. self.standard.bands.create(upper_limit=1, charge=D('4.00'))
  88. self.standard.bands.create(upper_limit=2, charge=D('8.00'))
  89. self.standard.bands.create(upper_limit=3, charge=D('12.00'))
  90. self.assertEqual(D('4.00'), self.standard.get_band_for_weight(0.5).charge)
  91. self.assertEqual(D('8.00'), self.standard.get_band_for_weight(1.5).charge)
  92. self.assertEqual(D('12.00'), self.standard.get_band_for_weight(2.5).charge)
  93. def test_get_band_for_series_of_bands_from_different_methods(self):
  94. self.express.bands.create(upper_limit=2, charge=D('8.00'))
  95. self.standard.bands.create(upper_limit=1, charge=D('4.00'))
  96. self.standard.bands.create(upper_limit=3, charge=D('12.00'))
  97. self.assertEqual(D('12.00'), self.standard.get_band_for_weight(2.5).charge)
  98. def test_for_smoke_with_basket_charge(self):
  99. basket = factories.create_basket(empty=True)
  100. self.standard.set_basket(basket)
  101. charge = self.standard.charge_incl_tax
  102. self.assertEqual(D('0.00'), charge)