| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- from decimal import Decimal as D
-
- from django.test import TestCase
-
- from oscar.apps.offer import models, utils
- from oscar.apps.shipping.repository import Repository
- from oscar.apps.shipping.models import WeightBased
- from oscar.test.basket import add_product
- from oscar.test import factories
-
-
- 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 = models.ShippingFixedPriceBenefit.objects.create(
- type=models.Benefit.SHIPPING_FIXED_PRICE,
- value=D('1.00'))
- return models.ConditionalOffer.objects.create(
- condition=condition,
- benefit=benefit,
- offer_type=models.ConditionalOffer.SITE)
-
-
- class TestWeightBasedShippingBenefit(TestCase):
-
- def setUp(self):
- product = factories.create_product(attributes={'weight': 5}, num_in_stock=10)
- factories.create_shipping_weight_band(10, 10)
- self.basket = factories.create_basket(empty=True)
- self.basket.add_product(product)
- self.offer = create_offer()
-
- def test_has_discount_recorded_correctly_when_order_is_placed(self):
- add_product(self.basket, D('12.00'), 1)
- utils.Applicator().apply(self.basket)
- self.assertEqual(1, len(self.basket.offer_applications))
-
- shipping_method = WeightBased.objects.first()
- shipping_method = Repository().apply_shipping_offer(
- self.basket, shipping_method, self.offer)
- order = factories.create_order(basket=self.basket,
- shipping_method=shipping_method)
-
- discounts = order.discounts.all()
- self.assertEqual(1, len(discounts))
-
- discount = discounts[0]
- self.assertTrue(discount.is_shipping_discount)
- self.assertEqual(D('9.00'), discount.amount)
|