Refs #99 -- Improve support for currencies with less than 2 decimal places (#783)

* Refs #99 -- Fix stripe support for zero-decimal currencies

* Add new money formatting method

* Force decimal places in many places

* Locale-aware currency rendering

* Fix currencies in more places

* More currency fixes
This commit is contained in:
Raphael Michel
2018-02-26 10:46:07 +01:00
committed by GitHub
parent 29e22a0c6c
commit 3c3e59e932
49 changed files with 467 additions and 211 deletions

View File

@@ -77,6 +77,36 @@ def test_perform_success(env, factory, monkeypatch):
assert order.status == Order.STATUS_PAID
@pytest.mark.django_db
def test_perform_success_zero_decimal_currency(env, factory, monkeypatch):
event, order = env
event.currency = 'JPY'
event.save()
def charge_create(**kwargs):
assert kwargs['amount'] == 13
assert kwargs['currency'] == 'jpy'
assert kwargs['source'] == 'tok_189fTT2eZvKYlo2CvJKzEzeu'
c = MockedCharge()
c.status = 'succeeded'
c.paid = True
return c
monkeypatch.setattr("stripe.Charge.create", charge_create)
prov = StripeCC(event)
req = factory.post('/', {
'stripe_token': 'tok_189fTT2eZvKYlo2CvJKzEzeu',
'stripe_last4': '4242',
'stripe_brand': 'Visa'
})
req.session = {}
prov.checkout_prepare(req, {})
assert 'payment_stripe_token' in req.session
prov.payment_perform(req, order)
order.refresh_from_db()
assert order.status == Order.STATUS_PAID
@pytest.mark.django_db
def test_perform_card_error(env, factory, monkeypatch):
event, order = env

View File

@@ -1306,7 +1306,7 @@ class CheckoutTestCase(TestCase):
target_status_code=200)
response = self.client.get('/%s/%s/checkout/addons/' % (self.orga.slug, self.event.slug))
assert 'Workshop 1' in response.rendered_content
assert 'EUR 12.00' in response.rendered_content
assert '12.00' in response.rendered_content
def test_set_addons_included(self):
ItemAddOn.objects.create(base_item=self.ticket, addon_category=self.workshopcat, min_count=1,
@@ -1320,7 +1320,7 @@ class CheckoutTestCase(TestCase):
self.assertRedirects(response, '/%s/%s/checkout/addons/' % (self.orga.slug, self.event.slug),
target_status_code=200)
assert 'Workshop 1' in response.rendered_content
assert 'EUR 12.00' not in response.rendered_content
assert '12.00' not in response.rendered_content
def test_set_addons_subevent(self):
self.event.has_subevents = True
@@ -1340,7 +1340,7 @@ class CheckoutTestCase(TestCase):
response = self.client.get('/%s/%s/checkout/questions/' % (self.orga.slug, self.event.slug), follow=True)
self.assertRedirects(response, '/%s/%s/checkout/addons/' % (self.orga.slug, self.event.slug),
target_status_code=200)
assert 'Workshop 1 (+ EUR 42.00)' in response.rendered_content
assert 'Workshop 1 (+ 42.00)' in response.rendered_content
def test_set_addons_subevent_net_prices(self):
self.event.has_subevents = True
@@ -1365,8 +1365,8 @@ class CheckoutTestCase(TestCase):
response = self.client.get('/%s/%s/checkout/questions/' % (self.orga.slug, self.event.slug), follow=True)
self.assertRedirects(response, '/%s/%s/checkout/addons/' % (self.orga.slug, self.event.slug),
target_status_code=200)
assert 'Workshop 1 (+ EUR 35.29 plus 19.00% VAT)' in response.rendered_content
assert 'A (+ EUR 10.08 plus 19.00% VAT)' in response.rendered_content
assert 'Workshop 1 (+ 35.29 plus 19.00% VAT)' in response.rendered_content
assert 'A (+ 10.08 plus 19.00% VAT)' in response.rendered_content
def test_confirm_subevent_presale_not_yet(self):
self.event.has_subevents = True

View File

@@ -409,7 +409,7 @@ class OrdersTest(TestCase):
'/%s/%s/order/%s/%s/pay/change' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret),
)
assert 'Test dummy' in response.rendered_content
assert '+ 12.00' in response.rendered_content
assert '+ 12.00' in response.rendered_content
response = self.client.post(
'/%s/%s/order/%s/%s/pay/change' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret),
{