text: from decimal import Decimal as D
  
  from django.test import TestCase
  
  from wshop.apps.offer import models
  from wshop.apps.basket.models import Basket
  from wshop.apps.partner import strategy
  from wshop.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)
  