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.

test_availability.py 3.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. from django.test import TestCase
  2. from oscar.apps.partner import availability
  3. class TestBasePolicy(TestCase):
  4. def setUp(self):
  5. self.availability = availability.Base()
  6. def test_does_not_allow_any_purchases(self):
  7. result, __ = self.availability.is_purchase_permitted(1)
  8. self.assertFalse(result)
  9. def test_is_not_available_to_buy(self):
  10. result = self.availability.is_available_to_buy
  11. self.assertFalse(result)
  12. class TestUnavailablePolicy(TestCase):
  13. def setUp(self):
  14. self.availability = availability.Unavailable()
  15. def test_is_unavailable(self):
  16. self.assertFalse(self.availability.is_available_to_buy)
  17. def test_does_not_allow_any_purchases(self):
  18. result, __ = self.availability.is_purchase_permitted(1)
  19. self.assertFalse(result)
  20. def test_gives_a_reason_for_unavailability(self):
  21. __, msg = self.availability.is_purchase_permitted(1)
  22. self.assertEqual("unavailable", msg)
  23. def test_returns_availability_code(self):
  24. self.assertEqual('unavailable', self.availability.code)
  25. class TestStockRequiredWrapperForRecordWithStock(TestCase):
  26. def setUp(self):
  27. self.availability = availability.StockRequired(5)
  28. def test_is_available_to_buy(self):
  29. self.assertTrue(self.availability.is_available_to_buy)
  30. def test_permits_purchases_up_to_stock_level(self):
  31. for x in range(0, 6):
  32. is_permitted, __ = self.availability.is_purchase_permitted(x)
  33. self.assertTrue(is_permitted)
  34. def test_forbids_purchases_over_stock_level(self):
  35. is_permitted, msg = self.availability.is_purchase_permitted(7)
  36. self.assertFalse(is_permitted)
  37. self.assertEqual(msg, "a maximum of 5 can be bought")
  38. def test_returns_correct_code(self):
  39. self.assertEqual('instock', self.availability.code)
  40. def test_returns_correct_message(self):
  41. self.assertEqual('In stock (5 available)', self.availability.message)
  42. def test_returns_correct_message_when_allocation_higher_than_stock(self):
  43. # this is the value passed when stock lower than allocation by 1
  44. self.availability.num_available = -1
  45. is_permitted, msg = self.availability.is_purchase_permitted(1)
  46. self.assertFalse(is_permitted)
  47. self.assertEqual(msg, "no stock available")
  48. class TestStockRequiredWrapperForRecordWithoutStock(TestCase):
  49. def setUp(self):
  50. self.availability = availability.StockRequired(0)
  51. def test_is_available_to_buy(self):
  52. self.assertFalse(self.availability.is_available_to_buy)
  53. def test_forbids_purchases(self):
  54. is_permitted, __ = self.availability.is_purchase_permitted(1)
  55. self.assertFalse(is_permitted)
  56. def test_returns_correct_code(self):
  57. self.assertEqual('outofstock', self.availability.code)
  58. def test_returns_correct_message(self):
  59. self.assertEqual('Unavailable', self.availability.message)
  60. class TestAvailableWrapper(TestCase):
  61. def setUp(self):
  62. self.availability = availability.Available()
  63. def test_is_available_to_buy(self):
  64. self.assertTrue(self.availability.is_available_to_buy)
  65. def test_permits_any_purchase(self):
  66. is_permitted, __ = self.availability.is_purchase_permitted(10000)
  67. self.assertTrue(is_permitted)
  68. def test_returns_correct_code(self):
  69. self.assertEqual('available', self.availability.code)
  70. def test_returns_correct_message(self):
  71. self.assertEqual('Available', self.availability.message)