| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- from decimal import Decimal as D
-
- from django.test import TestCase
-
- from oscar.apps.offer import models
- from oscar.apps.basket.models import Basket
- from oscar.apps.partner import strategy
- from oscar.test.basket import add_product
-
-
- class TestAValueBasedOffer(TestCase):
-
- def setUp(self):
- # Get 20% if spending more than 20.00
- range = models.Range.objects.create(
- name="All products", includes_all_products=True)
- condition = models.Condition.objects.create(
- range=range,
- type=models.Condition.VALUE,
- value=D('10.00'))
- benefit = models.Benefit.objects.create(
- range=range,
- type=models.Benefit.PERCENTAGE,
- value=20)
- self.offer = models.ConditionalOffer.objects.create(
- name="Test",
- offer_type=models.ConditionalOffer.SITE,
- condition=condition,
- benefit=benefit)
- self.basket = Basket.objects.create()
-
- def test_respects_effective_price_when_taxes_not_known(self):
- # Assign US style strategy (no tax known)
- self.basket.strategy = strategy.US()
-
- # Add sufficient products to meet condition
- add_product(self.basket, price=D('6'), quantity=2)
-
- # Ensure discount is correct
- result = self.offer.apply_benefit(self.basket)
- self.assertEqual(D('2.40'), result.discount)
-
- def test_respects_effective_price_when_taxes_are_known(self):
- # Assign UK style strategy (20% tax)
- self.basket.strategy = strategy.UK()
-
- # Add sufficient products to meet condition
- add_product(self.basket, price=D('6'), quantity=2)
-
- # Ensure discount is calculated against tax-inclusive price
- result = self.offer.apply_benefit(self.basket)
- self.assertEqual(2 * D('6.00') * D('1.2') * D('0.20'), result.discount)
|