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.2KB

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