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

model_tests.py 4.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. from decimal import Decimal as D
  2. from django.db.models import get_model
  3. from django.test import TestCase
  4. from oscar.test import factories, decorators
  5. from oscar.apps.partner import abstract_models
  6. Partner = get_model('partner', 'Partner')
  7. PartnerAddress = get_model('partner', 'PartnerAddress')
  8. Country = get_model('address', 'Country')
  9. class DummyWrapper(object):
  10. def availability(self, stockrecord):
  11. return 'Dummy response'
  12. def dispatch_date(self, stockrecord):
  13. return "Another dummy response"
  14. class TestStockRecord(TestCase):
  15. def setUp(self):
  16. self.product = factories.create_product()
  17. self.stockrecord = factories.create_stockrecord(
  18. self.product, price_excl_tax=D('10.00'), num_in_stock=10)
  19. @decorators.ignore_deprecation_warnings
  20. def test_get_price_incl_tax_defaults_to_no_tax(self):
  21. self.assertEquals(D('10.00'), self.stockrecord.price_incl_tax)
  22. def test_get_price_excl_tax_returns_correct_value(self):
  23. self.assertEquals(D('10.00'), self.stockrecord.price_excl_tax)
  24. def test_net_stock_level_with_no_allocation(self):
  25. self.assertEquals(10, self.stockrecord.net_stock_level)
  26. def test_net_stock_level_with_allocation(self):
  27. self.stockrecord.allocate(5)
  28. self.assertEquals(10-5, self.stockrecord.net_stock_level)
  29. def test_allocated_does_not_alter_num_in_stock(self):
  30. self.stockrecord.allocate(5)
  31. self.assertEqual(10, self.stockrecord.num_in_stock)
  32. self.assertEqual(5, self.stockrecord.num_allocated)
  33. def test_allocation_handles_null_value(self):
  34. self.stockrecord.num_allocated = None
  35. self.stockrecord.allocate(5)
  36. def test_consuming_allocation(self):
  37. self.stockrecord.allocate(5)
  38. self.stockrecord.consume_allocation(3)
  39. self.assertEqual(2, self.stockrecord.num_allocated)
  40. self.assertEqual(7, self.stockrecord.num_in_stock)
  41. def test_cancelling_allocation(self):
  42. self.stockrecord.allocate(5)
  43. self.stockrecord.cancel_allocation(4)
  44. self.assertEqual(1, self.stockrecord.num_allocated)
  45. self.assertEqual(10, self.stockrecord.num_in_stock)
  46. def test_cancelling_allocation_ignores_too_big_allocations(self):
  47. self.stockrecord.allocate(5)
  48. self.stockrecord.cancel_allocation(6)
  49. self.assertEqual(0, self.stockrecord.num_allocated)
  50. self.assertEqual(10, self.stockrecord.num_in_stock)
  51. @decorators.ignore_deprecation_warnings
  52. def test_max_purchase_quantity(self):
  53. self.assertEqual(10, self.stockrecord.max_purchase_quantity())
  54. @decorators.ignore_deprecation_warnings
  55. class CustomWrapperTests(TestCase):
  56. """
  57. Partner wrappers are deprecated. This testcase will be removed/rewritten
  58. in Oscar 0.7.
  59. """
  60. def setUp(self):
  61. abstract_models.partner_wrappers = {1: DummyWrapper()}
  62. def tearDown(self):
  63. abstract_models.partner_wrappers = None
  64. def test_wrapper_availability_gets_called(self):
  65. product = factories.create_product(
  66. price=D('10.00'), partner="Acme", num_in_stock=10)
  67. stockrecord = product.stockrecords.all()[0]
  68. self.assertEquals(u"Dummy response",
  69. unicode(stockrecord.availability))
  70. def test_wrapper_dispatch_date_gets_called(self):
  71. product = factories.create_product(
  72. price=D('10.00'), partner="Acme", num_in_stock=10)
  73. stockrecord = product.stockrecords.all()[0]
  74. self.assertEquals("Another dummy response",
  75. stockrecord.dispatch_date)
  76. class TestPartnerAddress(TestCase):
  77. def setUp(self):
  78. self.partner = Partner._default_manager.create(
  79. name="Dummy partner")
  80. self.country = Country._default_manager.create(
  81. iso_3166_1_a2='GB', name="UNITED KINGDOM")
  82. self.address = PartnerAddress._default_manager.create(
  83. title="Dr",
  84. first_name="Barry",
  85. last_name="Barrington",
  86. country=self.country,
  87. postcode="LS1 2HA",
  88. partner=self.partner)
  89. def test_can_get_primary_address(self):
  90. self.assertEqual(self.partner.primary_address, self.address)
  91. def test_fails_on_two_addresses(self):
  92. self.address = PartnerAddress._default_manager.create(
  93. title="Mrs",
  94. first_name="Jane",
  95. last_name="Barrington",
  96. postcode="LS1 2HA",
  97. country=self.country,
  98. partner=self.partner)
  99. self.assertRaises(
  100. NotImplementedError, getattr, self.partner, 'primary_address')