def test_basket_offers_are_ordered(self):
        voucher = Voucher.objects.create(
            name="Test voucher",
            code="test",
            usage=Voucher.MULTI_USE,
            start_datetime=timezone.now(),
            end_datetime=timezone.now() + datetime.timedelta(days=12))

        voucher.offers.set([
            factories.create_offer(name="A", priority=0),
            factories.create_offer(name="B", priority=7),
            factories.create_offer(name="C", priority=5),
            factories.create_offer(name="D", priority=7),
            factories.create_offer(name="E", priority=1),
        ])

        basket = factories.create_basket()
        user = mock.Mock()

        # Apply voucher to basket
        basket.vouchers.add(voucher)

        offers = utils.Applicator().get_basket_offers(basket, user)
        ordered_names = [offer.name for offer in offers]
        self.assertEqual(["B", "D", "C", "E", "A"], ordered_names)
Exemplo n.º 2
0
    def test_wraps_shipping_method_from_repository(self):
        add_product(self.basket, D('12.00'), 1)
        utils.Applicator().apply(self.basket)
        methods = StubRepository().get_shipping_methods(self.basket)
        method = methods[0]

        charge = method.calculate(self.basket)
        self.assertEqual(D('1.00'), charge.incl_tax)
    def test_site_offers_are_ordered(self):
        factories.create_offer(name="A", priority=0)
        factories.create_offer(name="B", priority=7)
        factories.create_offer(name="C", priority=5)
        factories.create_offer(name="D", priority=7)
        factories.create_offer(name="E", priority=1)

        offers = utils.Applicator().get_site_offers()
        ordered_names = [offer.name for offer in offers]
        self.assertEqual(["B", "D", "C", "E", "A"], ordered_names)
Exemplo n.º 4
0
    def test_applies_correctly_to_shipping_method_without_tax(self):
        add_product(self.basket, D('12.00'), 3)

        # Apply offers to basket
        utils.Applicator().apply_offers(self.basket, [self.offer])

        repo = repository.Repository()
        raw_method = ExcludingTax()
        method = repo.prime_method(self.basket, raw_method)
        self.assertEqual(D('5.00'), method.charge_excl_tax)
Exemplo n.º 5
0
    def test_applies_correctly_to_shipping_method_with_tax(self):
        add_product(self.basket, D('12.00'), 3)

        # Apply offers to basket
        utils.Applicator().apply_offers(self.basket, [self.offer])

        repo = repository.Repository()
        raw_method = IncludingTax()
        method = repo.apply_shipping_offer(self.basket, raw_method, self.offer)
        charge = method.calculate(self.basket)
        self.assertEqual(D('6.00'), charge.incl_tax)
        self.assertEqual(D('5.00'), charge.excl_tax)
Exemplo n.º 6
0
    def test_has_discount_recorded_correctly_when_order_is_placed(self):
        add_product(self.basket, D('12.00'), 1)
        utils.Applicator().apply(self.basket)
        methods = StubRepository().get_shipping_methods(self.basket)
        method = methods[0]
        order = factories.create_order(basket=self.basket,
                                       shipping_method=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)
Exemplo n.º 7
0
    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)
def apply_offers(basket):
    req = RequestFactory().get('/')
    req.user = mock.Mock()
    utils.Applicator().apply(req, basket)
Exemplo n.º 9
0
 def test_applies_correctly_to_basket_which_exceeds_condition(self):
     add_product(self.basket, D('12.00'), 2)
     utils.Applicator().apply(self.basket)
     self.assertEqual(1, len(self.basket.offer_applications))
Exemplo n.º 10
0
 def setUp(self):
     self.basket = factories.create_basket(empty=True)
     add_product(self.basket, D('12.00'), 1)
     create_offer()
     utils.Applicator().apply(self.basket)