Skip to content
This repository was archived by the owner on Aug 26, 2023. It is now read-only.

Commit c8befa3

Browse files
Merge pull request #940 from dancerfly/hotfix/onetimepaymentform-missing-token
Made OneTimePaymentForm properly handle missing tokens in post_clean
2 parents ac703c8 + 11fd968 commit c8befa3

File tree

2 files changed

+29
-20
lines changed

2 files changed

+29
-20
lines changed

brambling/forms/orders.py

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -392,26 +392,27 @@ def __init__(self, order, *args, **kwargs):
392392
del self.fields['save_card']
393393

394394
def _post_clean(self):
395-
kwargs = {
396-
'amount': self.amount,
397-
'event': self.order.event,
398-
'order': self.order,
399-
}
400-
try:
401-
if self.cleaned_data.get('save_card'):
402-
self.card = self.add_card(self.cleaned_data['token'])
403-
self._charge = stripe_charge(self.card.id, customer=self.customer, **kwargs)
404-
else:
405-
self._charge = stripe_charge(self.cleaned_data['token'], **kwargs)
406-
self.card = self._charge.source
407-
except stripe.error.CardError, e:
408-
self.add_error(None, e.message)
409-
except stripe.error.APIError, e:
410-
self.add_error(None, STRIPE_API_ERROR)
411-
except stripe.error.InvalidRequestError, e:
412-
self.add_error(None, e.message)
413-
except InvalidAmountException, e:
414-
self.add_error(None, e.message)
395+
if 'token' in self.cleaned_data:
396+
kwargs = {
397+
'amount': self.amount,
398+
'event': self.order.event,
399+
'order': self.order,
400+
}
401+
try:
402+
if self.cleaned_data.get('save_card'):
403+
self.card = self.add_card(self.cleaned_data['token'])
404+
self._charge = stripe_charge(self.card.id, customer=self.customer, **kwargs)
405+
else:
406+
self._charge = stripe_charge(self.cleaned_data['token'], **kwargs)
407+
self.card = self._charge.source
408+
except stripe.error.CardError, e:
409+
self.add_error(None, e.message)
410+
except stripe.error.APIError, e:
411+
self.add_error(None, STRIPE_API_ERROR)
412+
except stripe.error.InvalidRequestError, e:
413+
self.add_error(None, e.message)
414+
except InvalidAmountException, e:
415+
self.add_error(None, e.message)
415416

416417
def save(self):
417418
if self.cleaned_data.get('save_card'):

brambling/tests/functional/test_order_forms.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,14 @@ def test_handles_invalidrequesterror(self, stripe_charge):
199199
self.assertTrue(form.errors)
200200
self.assertEqual(form.errors['__all__'], [error_message])
201201

202+
@patch('brambling.forms.orders.stripe_charge')
203+
def test_handles_missing_token(self, stripe_charge):
204+
form = OneTimePaymentForm(order=self.order, amount=Decimal('42.15'),
205+
data={}, user=self.person)
206+
self.assertTrue(form.is_bound)
207+
self.assertTrue(form.errors)
208+
self.assertEqual(form.errors['token'], [OneTimePaymentForm.base_fields['token'].error_messages['required']])
209+
202210

203211
class SavedCardPaymentFormTestCase(TestCase):
204212

0 commit comments

Comments
 (0)