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.

combination_tests.py 2.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. from decimal import Decimal as D
  2. from django.test import TestCase
  3. from oscar.apps.offer import models
  4. from oscar.test.basket import add_product, add_products
  5. from oscar.test import factories
  6. class TestACountConditionWithPercentageDiscount(TestCase):
  7. def setUp(self):
  8. range = models.Range.objects.create(
  9. name="All products", includes_all_products=True)
  10. condition = models.Condition.objects.create(
  11. range=range,
  12. type=models.Condition.COUNT,
  13. value=3)
  14. benefit = models.Benefit.objects.create(
  15. range=range,
  16. type=models.Benefit.PERCENTAGE,
  17. value=20,
  18. max_affected_items=1)
  19. self.offer = models.ConditionalOffer.objects.create(
  20. name="Test",
  21. offer_type=models.ConditionalOffer.SITE,
  22. condition=condition,
  23. benefit=benefit)
  24. def test_consumes_correct_number_of_products_for_3_product_basket(self):
  25. basket = factories.create_basket(empty=True)
  26. add_product(basket, D('1'), 3)
  27. self.assertTrue(self.offer.is_condition_satisfied(basket))
  28. discount = self.offer.apply_benefit(basket)
  29. self.assertTrue(discount.discount > 0)
  30. self.assertEqual(3, basket.num_items_with_discount)
  31. self.assertEqual(0, basket.num_items_without_discount)
  32. self.assertFalse(self.offer.is_condition_satisfied(basket))
  33. def test_consumes_correct_number_of_products_for_4_product_basket(self):
  34. basket = factories.create_basket(empty=True)
  35. add_products(basket, [(D('1'), 2), (D('1'), 2)])
  36. self.assertTrue(self.offer.is_condition_satisfied(basket))
  37. discount = self.offer.apply_benefit(basket)
  38. self.assertTrue(discount.discount > 0)
  39. self.assertEqual(3, basket.num_items_with_discount)
  40. self.assertEqual(1, basket.num_items_without_discount)
  41. self.assertFalse(self.offer.is_condition_satisfied(basket))
  42. def test_consumes_correct_number_of_products_for_6_product_basket(self):
  43. basket = factories.create_basket(empty=True)
  44. add_products(basket, [(D('1'), 3), (D('1'), 3)])
  45. # First application
  46. discount = self.offer.apply_benefit(basket)
  47. self.assertTrue(discount.discount > 0)
  48. self.assertEqual(3, basket.num_items_with_discount)
  49. self.assertEqual(3, basket.num_items_without_discount)
  50. # Second application
  51. discount = self.offer.apply_benefit(basket)
  52. self.assertTrue(discount.discount > 0)
  53. self.assertEqual(6, basket.num_items_with_discount)