def test_requires_4_digit_ccv_for_amex(self): today = datetime.date.today() data = { 'number': '378282246310005', 'ccv': '123', 'expiry_month_0': '01', 'expiry_month_1': today.year + 1, } form = forms.BankcardForm(data) self.assertFalse(form.is_valid())
def setUp(self): today = datetime.date.today() data = { 'number': '1000010000000007', 'ccv': '123', 'expiry_month_0': '01', 'expiry_month_1': today.year + 1 } self.form = forms.BankcardForm(data) self.assertTrue(self.form.is_valid())
def get_context_data(self, **kwargs): """ Add data for Paypal Express flow. """ # Override method so the bankcard and billing address forms can be # added to the context. ctx = super(PaymentDetailsView, self).get_context_data(**kwargs) ctx['bankcard_form'] = kwargs.get( 'bankcard_form', forms.BankcardForm()) ctx['billing_address_form'] = kwargs.get( 'billing_address_form', forms.BillingAddressForm()) return ctx
def do_place_order(self, request): # Helper method to check that the hidden forms wasn't tinkered # with. bankcard_form = forms.BankcardForm(request.POST) billing_address_form = forms.BillingAddressForm(request.POST) if not all([bankcard_form.is_valid(), billing_address_form.is_valid()]): messages.error(request, "Invalid submission") return HttpResponseRedirect(reverse('checkout:payment-details')) # Attempt to submit the order, passing the bankcard object so that it # gets passed back to the 'handle_payment' method below. submission = self.build_submission() submission['payment_kwargs']['bankcard'] = bankcard_form.bankcard submission['payment_kwargs']['billing_address'] = billing_address_form.cleaned_data return self.submit(**submission)
def post(self, request, *args, **kwargs): # Override so we can validate the bankcard/billingaddress submission. # If it is valid, we render the preview screen with the forms hidden # within it. When the preview is submitted, we pick up the 'action' # parameters and actually place the order. if request.POST.get('action', '') == 'place_order': return self.do_place_order(request) bankcard_form = forms.BankcardForm(request.POST) billing_address_form = forms.BillingAddressForm(request.POST) if not all([bankcard_form.is_valid(), billing_address_form.is_valid()]): # Form validation failed, render page again with errors self.preview = False ctx = self.get_context_data( bankcard_form=bankcard_form, billing_address_form=billing_address_form) return self.render_to_response(ctx) # Render preview with bankcard and billing address details hidden return self.render_preview(request, bankcard_form=bankcard_form, billing_address_form=billing_address_form)