Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

test_combination.py 2.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. from decimal import Decimal as D
  2. from django.test import TestCase
  3. from oscar.apps.offer import models
  4. from oscar.test import factories
  5. from oscar.test.basket import add_product, add_products
  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.CountCondition.objects.create(
  11. range=range,
  12. type=models.Condition.COUNT,
  13. value=3)
  14. benefit = models.PercentageDiscountBenefit.objects.create(
  15. range=range,
  16. type=models.Benefit.PERCENTAGE,
  17. value=20,
  18. max_affected_items=1)
  19. self.offer = models.ConditionalOffer(
  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(1, basket.num_items_with_discount)
  31. self.assertEqual(2, 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(1, basket.num_items_with_discount)
  40. self.assertEqual(3, basket.num_items_without_discount)
  41. self.assertTrue(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. self.assertTrue(self.offer.is_condition_satisfied(basket))
  46. # First application
  47. discount = self.offer.apply_benefit(basket)
  48. self.assertTrue(discount.discount > 0)
  49. self.assertEqual(1, basket.num_items_with_discount)
  50. self.assertEqual(5, basket.num_items_without_discount)
  51. # Second application (no additional discounts)
  52. discount = self.offer.apply_benefit(basket)
  53. self.assertFalse(discount.discount > 0)
  54. self.assertEqual(1, basket.num_items_with_discount)
  55. self.assertEqual(5, basket.num_items_without_discount)