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.

model_tests.py 4.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  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.factories import create_product, create_stockrecord
  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 = create_product()
  17. self.stockrecord = create_stockrecord(
  18. self.product, price_excl_tax=D('10.00'), num_in_stock=10)
  19. def test_get_price_incl_tax_defaults_to_no_tax(self):
  20. self.assertEquals(D('10.00'), self.stockrecord.price_incl_tax)
  21. def test_get_price_excl_tax_returns_correct_value(self):
  22. self.assertEquals(D('10.00'), self.stockrecord.price_excl_tax)
  23. def test_net_stock_level_with_no_allocation(self):
  24. self.assertEquals(10, self.stockrecord.net_stock_level)
  25. def test_net_stock_level_with_allocation(self):
  26. self.stockrecord.allocate(5)
  27. self.assertEquals(10-5, self.stockrecord.net_stock_level)
  28. def test_allocated_does_not_alter_num_in_stock(self):
  29. self.stockrecord.allocate(5)
  30. self.assertEqual(10, self.stockrecord.num_in_stock)
  31. self.assertEqual(5, self.stockrecord.num_allocated)
  32. def test_allocation_handles_null_value(self):
  33. self.stockrecord.num_allocated = None
  34. self.stockrecord.allocate(5)
  35. def test_consuming_allocation(self):
  36. self.stockrecord.allocate(5)
  37. self.stockrecord.consume_allocation(3)
  38. self.assertEqual(2, self.stockrecord.num_allocated)
  39. self.assertEqual(7, self.stockrecord.num_in_stock)
  40. def test_cancelling_allocation(self):
  41. self.stockrecord.allocate(5)
  42. self.stockrecord.cancel_allocation(4)
  43. self.assertEqual(1, self.stockrecord.num_allocated)
  44. self.assertEqual(10, self.stockrecord.num_in_stock)
  45. def test_cancelling_allocation_ignores_too_big_allocations(self):
  46. self.stockrecord.allocate(5)
  47. self.stockrecord.cancel_allocation(6)
  48. self.assertEqual(0, self.stockrecord.num_allocated)
  49. self.assertEqual(10, self.stockrecord.num_in_stock)
  50. def test_max_purchase_quantity(self):
  51. self.assertEqual(10, self.stockrecord.max_purchase_quantity())
  52. class CustomWrapperTests(TestCase):
  53. def setUp(self):
  54. abstract_models.partner_wrappers = {1: DummyWrapper()}
  55. def tearDown(self):
  56. abstract_models.partner_wrappers = None
  57. def test_wrapper_availability_gets_called(self):
  58. product = create_product(
  59. price=D('10.00'), partner="Acme", num_in_stock=10)
  60. stockrecord = product.stockrecords.all()[0]
  61. self.assertEquals(u"Dummy response",
  62. unicode(stockrecord.availability))
  63. def test_wrapper_dispatch_date_gets_called(self):
  64. product = create_product(
  65. price=D('10.00'), partner="Acme", num_in_stock=10)
  66. stockrecord = product.stockrecords.all()[0]
  67. self.assertEquals("Another dummy response",
  68. stockrecord.dispatch_date)
  69. class TestPartnerAddress(TestCase):
  70. def setUp(self):
  71. self.partner = Partner._default_manager.create(
  72. name="Dummy partner")
  73. self.country = Country._default_manager.create(
  74. iso_3166_1_a2='GB', name="UNITED KINGDOM")
  75. self.address = PartnerAddress._default_manager.create(
  76. title="Dr",
  77. first_name="Barry",
  78. last_name="Barrington",
  79. country=self.country,
  80. postcode="LS1 2HA",
  81. partner=self.partner)
  82. def test_can_get_primary_address(self):
  83. self.assertEqual(self.partner.primary_address, self.address)
  84. def test_fails_on_two_addresses(self):
  85. self.address = PartnerAddress._default_manager.create(
  86. title="Mrs",
  87. first_name="Jane",
  88. last_name="Barrington",
  89. postcode="LS1 2HA",
  90. country=self.country,
  91. partner=self.partner)
  92. self.assertRaises(
  93. NotImplementedError, getattr, self.partner, 'primary_address')