summaryrefslogtreecommitdiff
path: root/payments/stripe
diff options
context:
space:
mode:
authorPatryk Zawadzki <patrys@room-303.com>2014-11-03 18:11:58 +0100
committerPatryk Zawadzki <patrys@room-303.com>2014-11-03 18:11:58 +0100
commita65c26fd07ff4eb20aeec5e840e49d5c9e9449fd (patch)
tree2a2f587b6245b7d991a71b48fc07129c0b162866 /payments/stripe
parent2c6b7cb3d0fa2db19735919e5bbf72a4046abb6b (diff)
downloaddjango-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__.py2
-rw-r--r--payments/stripe/tests.py50
-rw-r--r--payments/stripe/widgets.py32
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/']