Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

model_method_tests.py 5.6KB

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