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.

offer_tests.py 3.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import datetime
  2. from django.conf import settings
  3. from django.test import TestCase
  4. from oscar.apps.offer import models
  5. from oscar.test.helpers import create_product
  6. class WholeSiteRangeWithGlobalBlacklistTest(TestCase):
  7. def setUp(self):
  8. self.range = models.Range.objects.create(name="All products", includes_all_products=True)
  9. def tearDown(self):
  10. settings.OSCAR_OFFER_BLACKLIST_PRODUCT = None
  11. def test_blacklisting_prevents_products_being_in_range(self):
  12. settings.OSCAR_OFFER_BLACKLIST_PRODUCT = lambda p: True
  13. prod = create_product()
  14. self.assertFalse(self.range.contains_product(prod))
  15. def test_blacklisting_can_use_product_class(self):
  16. settings.OSCAR_OFFER_BLACKLIST_PRODUCT = lambda p: p.product_class.name == 'giftcard'
  17. prod = create_product(product_class="giftcard")
  18. self.assertFalse(self.range.contains_product(prod))
  19. def test_blacklisting_doesnt_exlude_everything(self):
  20. settings.OSCAR_OFFER_BLACKLIST_PRODUCT = lambda p: p.product_class.name == 'giftcard'
  21. prod = create_product(product_class="book")
  22. self.assertTrue(self.range.contains_product(prod))
  23. class WholeSiteRangeTest(TestCase):
  24. def setUp(self):
  25. self.range = models.Range.objects.create(name="All products", includes_all_products=True)
  26. self.prod = create_product()
  27. def test_all_products_range(self):
  28. self.assertTrue(self.range.contains_product(self.prod))
  29. def test_all_products_range_with_exception(self):
  30. self.range.excluded_products.add(self.prod)
  31. self.assertFalse(self.range.contains_product(self.prod))
  32. def test_whitelisting(self):
  33. self.range.included_products.add(self.prod)
  34. self.assertTrue(self.range.contains_product(self.prod))
  35. def test_blacklisting(self):
  36. self.range.excluded_products.add(self.prod)
  37. self.assertFalse(self.range.contains_product(self.prod))
  38. class PartialRangeTest(TestCase):
  39. def setUp(self):
  40. self.range = models.Range.objects.create(name="All products", includes_all_products=False)
  41. self.prod = create_product()
  42. def test_empty_list(self):
  43. self.assertFalse(self.range.contains_product(self.prod))
  44. def test_included_classes(self):
  45. self.range.classes.add(self.prod.product_class)
  46. self.assertTrue(self.range.contains_product(self.prod))
  47. def test_included_class_with_exception(self):
  48. self.range.classes.add(self.prod.product_class)
  49. self.range.excluded_products.add(self.prod)
  50. self.assertFalse(self.range.contains_product(self.prod))
  51. class ConditionalOfferTest(TestCase):
  52. def test_is_active(self):
  53. start = datetime.date(2011, 01, 01)
  54. test = datetime.date(2011, 01, 10)
  55. end = datetime.date(2011, 02, 01)
  56. offer = models.ConditionalOffer(start_date=start, end_date=end)
  57. self.assertTrue(offer.is_active(test))
  58. def test_is_inactive(self):
  59. start = datetime.date(2011, 01, 01)
  60. test = datetime.date(2011, 03, 10)
  61. end = datetime.date(2011, 02, 01)
  62. offer = models.ConditionalOffer(start_date=start, end_date=end)
  63. self.assertFalse(offer.is_active(test))