diff options
author | Patryk Zawadzki <patrys@room-303.com> | 2014-11-03 18:11:58 +0100 |
---|---|---|
committer | Patryk Zawadzki <patrys@room-303.com> | 2014-11-03 18:11:58 +0100 |
commit | a65c26fd07ff4eb20aeec5e840e49d5c9e9449fd (patch) | |
tree | 2a2f587b6245b7d991a71b48fc07129c0b162866 /payments/stripe | |
parent | 2c6b7cb3d0fa2db19735919e5bbf72a4046abb6b (diff) | |
download | django-payments-taler-a65c26fd07ff4eb20aeec5e840e49d5c9e9449fd.tar.gz django-payments-taler-a65c26fd07ff4eb20aeec5e840e49d5c9e9449fd.tar.bz2 django-payments-taler-a65c26fd07ff4eb20aeec5e840e49d5c9e9449fd.zip |
Automatically render the script button
Diffstat (limited to 'payments/stripe')
-rw-r--r-- | payments/stripe/__init__.py | 2 | ||||
-rw-r--r-- | payments/stripe/tests.py | 50 | ||||
-rw-r--r-- | payments/stripe/widgets.py | 32 |
3 files changed, 76 insertions, 8 deletions
diff --git a/payments/stripe/__init__.py b/payments/stripe/__init__.py index f7fdb6a..7113e85 100644 --- a/payments/stripe/__init__.py +++ b/payments/stripe/__init__.py @@ -12,6 +12,8 @@ class StripeProvider(BasicProvider): def __init__(self, *args, **kwargs): self.secret_key = kwargs.pop('secret_key') self.public_key = kwargs.pop('public_key') + self.image = kwargs.pop('image', '') + self.name = kwargs.pop('name', '') super(StripeProvider, self).__init__(*args, **kwargs) if not self._capture: raise ImproperlyConfigured( diff --git a/payments/stripe/tests.py b/payments/stripe/tests.py new file mode 100644 index 0000000..b757e78 --- /dev/null +++ b/payments/stripe/tests.py @@ -0,0 +1,50 @@ +from __future__ import unicode_literals +import time +from decimal import Decimal +from unittest import TestCase + +from django.http import HttpResponse, HttpResponseForbidden +from mock import MagicMock + +from . import StripeProvider + + +class Payment(object): + + id = 1 + description = 'payment' + currency = 'USD' + delivery = Decimal(10) + status = 'waiting' + tax = Decimal(10) + total = Decimal(100) + + def change_status(self, status): + self.status = status + + def get_failure_url(self): + return 'http://cancel.com' + + def get_process_url(self): + return 'http://example.com' + + def get_purchased_items(self): + return [] + + def save(self): + return self + + def get_success_url(self): + return 'http://success.com' + + +class TestStripeProvider(TestCase): + + def test_form(self): + payment = Payment() + provider = StripeProvider( + payment=payment, name='Example.com store', + secret_key='123', public_key='abc') + form = provider.get_form() + self.assertTrue( + '<script data-amount="10000" data-currency="USD" data-description="payment" data-image="" data-key="abc" data-name="Example.com store" src="https://checkout.stripe.com/checkout.js"></script>' in str(form)) diff --git a/payments/stripe/widgets.py b/payments/stripe/widgets.py index 8b84456..8ef0299 100644 --- a/payments/stripe/widgets.py +++ b/payments/stripe/widgets.py @@ -1,24 +1,40 @@ from __future__ import unicode_literals -from django.forms.widgets import HiddenInput +from django.forms.util import flatatt +from django.forms.widgets import Input +from django.utils.html import format_html +from django.utils.encoding import force_text from django.utils.translation import ugettext_lazy as _ -class StripeWidget(HiddenInput): +class StripeWidget(Input): + is_hidden = True def __init__(self, provider, payment, *args, **kwargs): attrs = kwargs.get('attrs', {}) kwargs['attrs'] = { 'id': 'stripe-id', - 'data_key': provider.public_key, - 'data_description': payment.description or _('Total payment'), + 'data-key': provider.public_key, + 'data-image': provider.image, + 'data-name': provider.name, + 'data-description': payment.description or _('Total payment'), # Stripe accepts cents - 'data_amount': int(payment.total * 100), - 'data_currency': payment.currency + 'data-amount': int(payment.total * 100), + 'data-currency': payment.currency } kwargs['attrs'].update(attrs) super(StripeWidget, self).__init__(*args, **kwargs) + def render(self, name, value, attrs=None): + if value is None: + value = '' + final_attrs = self.build_attrs( + attrs, src="https://checkout.stripe.com/checkout.js") + del final_attrs['id'] + if value != '': + # Only add the 'value' attribute if a value is non-empty. + final_attrs['value'] = force_text(self._format_value(value)) + return format_html('<script{0}></script>', flatatt(final_attrs)) + class Media: - js = ['https://checkout.stripe.com/v2/checkout.js', - 'https://js.stripe.com/v2/'] + js = ['https://js.stripe.com/v2/'] |