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

model_tests.py 3.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. from decimal import Decimal as D
  2. from django.test import TestCase
  3. from oscar.test.factories import create_product, create_stockrecord
  4. from oscar.apps.partner import abstract_models
  5. class DummyWrapper(object):
  6. def availability(self, stockrecord):
  7. return 'Dummy response'
  8. def dispatch_date(self, stockrecord):
  9. return "Another dummy response"
  10. class TestStockRecord(TestCase):
  11. def setUp(self):
  12. self.product = create_product()
  13. self.stockrecord = create_stockrecord(
  14. self.product, price_excl_tax=D('10.00'), num_in_stock=10)
  15. def test_get_price_incl_tax_defaults_to_no_tax(self):
  16. self.assertEquals(D('10.00'), self.stockrecord.price_incl_tax)
  17. def test_get_price_excl_tax_returns_correct_value(self):
  18. self.assertEquals(D('10.00'), self.stockrecord.price_excl_tax)
  19. def test_net_stock_level_with_no_allocation(self):
  20. self.assertEquals(10, self.stockrecord.net_stock_level)
  21. def test_net_stock_level_with_allocation(self):
  22. self.stockrecord.allocate(5)
  23. self.assertEquals(10-5, self.stockrecord.net_stock_level)
  24. def test_allocated_does_not_alter_num_in_stock(self):
  25. self.stockrecord.allocate(5)
  26. self.assertEqual(10, self.stockrecord.num_in_stock)
  27. self.assertEqual(5, self.stockrecord.num_allocated)
  28. def test_allocation_handles_null_value(self):
  29. self.stockrecord.num_allocated = None
  30. self.stockrecord.allocate(5)
  31. def test_consuming_allocation(self):
  32. self.stockrecord.allocate(5)
  33. self.stockrecord.consume_allocation(3)
  34. self.assertEqual(2, self.stockrecord.num_allocated)
  35. self.assertEqual(7, self.stockrecord.num_in_stock)
  36. def test_cancelling_allocation(self):
  37. self.stockrecord.allocate(5)
  38. self.stockrecord.cancel_allocation(4)
  39. self.assertEqual(1, self.stockrecord.num_allocated)
  40. self.assertEqual(10, self.stockrecord.num_in_stock)
  41. def test_cancelling_allocation_ignores_too_big_allocations(self):
  42. self.stockrecord.allocate(5)
  43. self.stockrecord.cancel_allocation(6)
  44. self.assertEqual(0, self.stockrecord.num_allocated)
  45. self.assertEqual(10, self.stockrecord.num_in_stock)
  46. def test_max_purchase_quantity(self):
  47. self.assertEqual(10, self.stockrecord.max_purchase_quantity())
  48. class CustomWrapperTests(TestCase):
  49. def setUp(self):
  50. abstract_models.partner_wrappers = {1: DummyWrapper()}
  51. def tearDown(self):
  52. abstract_models.partner_wrappers = None
  53. def test_wrapper_availability_gets_called(self):
  54. product = create_product(
  55. price=D('10.00'), partner="Acme", num_in_stock=10)
  56. stockrecord = product.stockrecords.all()[0]
  57. self.assertEquals(u"Dummy response",
  58. unicode(stockrecord.availability))
  59. def test_wrapper_dispatch_date_gets_called(self):
  60. product = create_product(
  61. price=D('10.00'), partner="Acme", num_in_stock=10)
  62. stockrecord = product.stockrecords.all()[0]
  63. self.assertEquals("Another dummy response",
  64. stockrecord.dispatch_date)