def test_zero_tax_with_postage_and_discount(self):
     """test tax with postage and discount"""
     settings.CCCHECKOUT_TAX = Decimal('0.00')
     # make the postage
     line = Line()
     line.name='test postage'
     line.save()
     tier = LineTier()
     tier.price = Decimal('2.50')
     tier.minimum = 0
     tier.maximum = 100
     tier.line = line
     tier.save()
     # add the postages to the checkout
     self.checkout.postage = line
     self.checkout.postage_tier = tier
     self.checkout.save()
     # add a discount to the checkout
     d = DiscountCode()
     d.type = d.PERCENTAGE
     d.discount = Decimal('50.00')
     d.title = 'test discount'
     d.save()
     self.checkout.discount = d
     self.checkout.save()
     # now the tax should be 5,24
     self.assertEqual(Decimal('0.00'), self.checkout.total_tax())
 def test_discount_code_form(self):
     """ensure the discoint form works as expected"""
     # make a discount code
     d = DiscountCode()
     d.type = DiscountCode.PERCENTAGE
     d.discount = Decimal('50.00')
     d.title = 'test discount'
     d.code = 'test'
     d.save()
     # make the form and get the discount
     form = DiscountCodeForm({'code': 'test'})
     form.is_valid()
     discount = form.save()
     self.assertEqual(discount.pk, d.pk)
 def test_no_postage_with_discount(self):
     """test tax without postage and with discount"""
     # add a discount to the checkout
     d = DiscountCode()
     d.type = d.PERCENTAGE
     d.discount = Decimal('50.00')
     d.title = 'test discount'
     d.save()
     self.checkout.discount = d
     self.checkout.save()
     # now we should have half the tax - because of a 50% discount
     self.assertEqual(Decimal('2.20'), self.checkout.total_tax())
 def test_monetary_based_discount(self):
     """monetary based discounts behave correctly"""
     d = DiscountCode()
     d.title = 'test discount code'
     d.code = 'TEST'
     d.type = DiscountCode.MONETARY
     d.discount = Decimal('2.00')
     d.save()
     # make the request
     #settings.CCCHECKOUT_ADAPTER = 'cccheckout.tests.mock.testcase_adapter'
     post_request = self.rf.post('/yeah', {'code': 'TEST'})
     self.request = post_request
     self.request.session['cccheckout'] = self.checkout
     self.request.session.save()
     # get start page ad checkout total is now 9.00
     response = customer(self.request)
     self.assertEqual(self.request.session['cccheckout'].total_price(),
                     Decimal('8.00'))
    def test_percentage_based_discount(self):
        """percentage based discounts behave correctly"""
        d = DiscountCode()
        d.title = 'test discount code'
        d.code = 'TEST'
        d.type = DiscountCode.PERCENTAGE
        d.discount = 10
        d.save()
        # make the request

        post_request = self.rf.post('/yeah', {'code': 'TEST'})
        self.request = post_request
        self.request.session['cccheckout'] = self.checkout
        self.request.session.save()
        # get start page abd checkout total is now 9.00
        response = customer(self.request)
        self.assertEqual(self.request.session['cccheckout'].total_price(),
                        Decimal('9.00'))
 def test_setcheckout_with_discount(self):
     """test the set checkout with discounts"""
     # add a discount
     d = DiscountCode()
     d.type = DiscountCode.PERCENTAGE
     d.discount = Decimal('50.00')
     d.code = 'TEST'
     d.save()
     self.checkout.discount = d
     self.checkout.save()
     # get the api
     api = PaypalExpressCheckout(checkout=self.checkout)
     # make the setExpressCheckout call
     api.setExpressCheckout()
     # we now have a token
     self.assertTrue(api.token)
     # remove the discount
     self.checkout.discount = None
     self.checkout.save()