Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

strategy_tests.py 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. from django.test import TestCase
  2. from decimal import Decimal as D
  3. from oscar.apps.partner import strategy
  4. from oscar.apps.catalogue import models
  5. from oscar.test import factories
  6. from oscar.apps.basket.models import Line
  7. class TestDefaultStrategy(TestCase):
  8. def setUp(self):
  9. self.strategy = strategy.Default()
  10. def test_no_stockrecords(self):
  11. product = factories.create_product()
  12. info = self.strategy.fetch_for_product(product)
  13. self.assertFalse(info.availability.is_available_to_buy)
  14. self.assertIsNone(info.price.incl_tax)
  15. def test_one_stockrecord(self):
  16. product = factories.create_product(price=D('1.99'), num_in_stock=4)
  17. info = self.strategy.fetch_for_product(product)
  18. self.assertTrue(info.availability.is_available_to_buy)
  19. self.assertEquals(D('1.99'), info.price.excl_tax)
  20. self.assertEquals(D('1.99'), info.price.incl_tax)
  21. def test_product_which_doesnt_track_stock(self):
  22. product_class = models.ProductClass.objects.create(
  23. name="Digital", track_stock=False)
  24. product = factories.create_product(
  25. product_class=product_class,
  26. price=D('1.99'), num_in_stock=None)
  27. info = self.strategy.fetch_for_product(product)
  28. self.assertTrue(info.availability.is_available_to_buy)
  29. def test_line_method_is_same_as_product_one(self):
  30. product = factories.create_product()
  31. line = Line(product=product)
  32. info = self.strategy.fetch_for_line(line)
  33. self.assertFalse(info.availability.is_available_to_buy)
  34. self.assertIsNone(info.price.incl_tax)
  35. class TestDefaultStrategyForParentProductWhoseVariantsHaveNoStockRecords(TestCase):
  36. def setUp(self):
  37. self.strategy = strategy.Default()
  38. parent = factories.create_product()
  39. for x in range(3):
  40. factories.create_product(parent=parent)
  41. self.info = self.strategy.fetch_for_group(parent)
  42. def test_specifies_product_is_unavailable(self):
  43. self.assertFalse(self.info.availability.is_available_to_buy)
  44. def test_specifies_correct_availability_code(self):
  45. self.assertEquals('unavailable', self.info.availability.code)
  46. def test_specifies_product_has_no_price(self):
  47. self.assertFalse(self.info.price.exists)
  48. class TestDefaultStrategyForParentProductWithInStockVariant(TestCase):
  49. def setUp(self):
  50. self.strategy = strategy.Default()
  51. parent = factories.create_product()
  52. factories.create_product(parent=parent, price=D('10.00'),
  53. num_in_stock=3)
  54. for x in range(2):
  55. factories.create_product(parent=parent)
  56. self.info = self.strategy.fetch_for_group(parent)
  57. def test_specifies_product_is_available(self):
  58. self.assertTrue(self.info.availability.is_available_to_buy)
  59. def test_specifies_correct_availability_code(self):
  60. self.assertEquals('available', self.info.availability.code)
  61. def test_specifies_product_has_correct_price(self):
  62. self.assertEquals(D('10.00'), self.info.price.incl_tax)
  63. class TestDefaultStrategyForParentProductWithOutOfStockVariant(TestCase):
  64. def setUp(self):
  65. self.strategy = strategy.Default()
  66. parent = factories.create_product()
  67. factories.create_product(parent=parent, price=D('10.00'),
  68. num_in_stock=0)
  69. for x in range(2):
  70. factories.create_product(parent=parent)
  71. self.info = self.strategy.fetch_for_group(parent)
  72. def test_specifies_product_is_unavailable(self):
  73. self.assertFalse(self.info.availability.is_available_to_buy)
  74. def test_specifies_correct_availability_code(self):
  75. self.assertEquals('unavailable', self.info.availability.code)
  76. def test_specifies_product_has_correct_price(self):
  77. self.assertEquals(D('10.00'), self.info.price.incl_tax)