| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- from decimal import Decimal as D
-
- from django.test import TestCase
- from django.test.client import RequestFactory
- import mock
-
- from oscar.apps.offer import models, utils, custom
- from oscar.test import factories
- from oscar.test.basket import add_product
-
-
- class CustomAction(models.Benefit):
-
- class Meta:
- proxy = True
-
- def apply(self, basket, condition, offer):
- condition.consume_items(offer, basket, ())
- return models.PostOrderAction(
- "Something will happen")
-
- def apply_deferred(self, basket, order, application):
- return "Something happened"
-
- @property
- def description(self):
- return "Will do something"
-
-
- def create_offer():
- range = models.Range.objects.create(
- name="All products", includes_all_products=True)
- condition = models.CountCondition.objects.create(
- range=range,
- type=models.Condition.COUNT,
- value=1)
- benefit = custom.create_benefit(CustomAction)
- return models.ConditionalOffer.objects.create(
- condition=condition,
- benefit=benefit,
- offer_type=models.ConditionalOffer.SITE)
-
-
- def apply_offers(basket):
- req = RequestFactory().get('/')
- req.user = mock.Mock()
- utils.Applicator().apply(req, basket)
-
-
- class TestAnOfferWithAPostOrderAction(TestCase):
-
- def setUp(self):
- self.basket = factories.create_basket(empty=True)
- add_product(self.basket, D('12.00'), 1)
- create_offer()
- apply_offers(self.basket)
-
- def test_applies_correctly_to_basket_which_meets_condition(self):
- self.assertEqual(1, len(self.basket.offer_applications))
- self.assertEqual(
- 1, len(self.basket.offer_applications.post_order_actions))
- action = self.basket.offer_applications.post_order_actions[0]
- self.assertEqual('Something will happen', action['description'])
-
- def test_has_discount_recorded_correctly_when_order_is_placed(self):
- order = factories.create_order(basket=self.basket)
-
- discounts = order.discounts.all()
- self.assertEqual(1, len(discounts))
- self.assertEqual(1, len(order.post_order_actions))
-
- discount = discounts[0]
- self.assertTrue(discount.is_post_order_action)
- self.assertEqual(D('0.00'), discount.amount)
- self.assertEqual('Something happened', discount.message)
|