Skip to content
This repository has been archived by the owner on Jan 25, 2018. It is now read-only.

Commit

Permalink
fall back to language portion of locale if available (bug 895195)
Browse files Browse the repository at this point in the history
  • Loading branch information
wraithan committed Jul 18, 2013
1 parent fe8151e commit d470211
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 8 deletions.
39 changes: 32 additions & 7 deletions webpay/pay/tasks.py
Expand Up @@ -66,13 +66,7 @@ def configure_transaction(request):
pass

# Localize the product before sending it off to solitude/bango.
if hasattr(request, 'locale'):
req = (request.session['notes'].get('pay_request', {})
.get('request', {}))
locale = req.get('locales', {}).get(request.locale)
if locale:
req['name'] = locale['name']
req['description'] = locale['description']
_localize_pay_request(request)

log.info('configuring payment in background for trans {0}'
.format(request.session['trans_id']))
Expand All @@ -81,6 +75,37 @@ def configure_transaction(request):
request.session['uuid'])


def _localize_pay_request(request):
if hasattr(request, 'locale'):
try:
pay_req = request.session['notes']['pay_request']
req = pay_req['request']
except KeyError:
return

trans_id = request.session.get('trans_id')

locales = req.get('locales')
if locales:
fallback = request.locale.split('-')[0]
if request.locale in locales:
loc = locales[request.locale]
elif fallback in locales:
log.info('Fell back from {0} to {1} (iss: {2}, trans_id: {3})'
.format(request.locale, fallback, pay_req.get('iss'),
trans_id))
loc = locales[fallback]
else:
log.info(('No localization found for {0} (iss: {2}, '
'trans_id: {3})').format(request.locale,
pay_req.get('iss'),
trans_id))
return

req['name'] = loc.get('name', req['name'])
req['description'] = loc.get('description', req['description'])


def get_secret(issuer_key):
"""Resolve the secret for this JWT."""
if is_marketplace(issuer_key):
Expand Down
57 changes: 56 additions & 1 deletion webpay/pay/tests/test_tasks.py
Expand Up @@ -393,7 +393,8 @@ def setUp(self):
'request': {'pricePoint': 1,
'id': 'generated-product-uuid',
'icons': {'64': 'http://app/i.png'},
'name': 'Virtual Sword'}}}
'name': 'Virtual Sword',
'description': 'A fancy sword'}}}
self.prices = {'prices': [{'amount': 1, 'currency': 'EUR'}]}


Expand Down Expand Up @@ -606,6 +607,60 @@ def test_use_locale_name(self, start_pay, marketplace, solitude):
eq_(start_pay.call_args[0][1]['pay_request']['request']['description'],
description)

class TestLocalizePayRequest(test_utils.TestCase):

def setUp(self):
self.request = RequestFactory().get('/')
self.request.session = {
'notes': {
'pay_request': {
'request': {
'name': 'Virtual Sword',
'description': 'A fancy sword',
'locales': {
'en': {
'name': 'English Virtual Sword',
'description': 'A fancy English sword'
},
'en-GB': {
'name': 'British Virtual Sword'
}
}
}
}
}
}

def _get_pay_request_details(self):
return self.request.session['notes']['pay_request']['request']

def test_no_locale(self):
tasks._localize_pay_request(self.request)
req = self._get_pay_request_details()
eq_(req['name'], 'Virtual Sword')
eq_(req['description'], 'A fancy sword')

def test_only_lang(self):
self.request.locale = 'en'
tasks._localize_pay_request(self.request)
req = self._get_pay_request_details()
eq_(req['name'], 'English Virtual Sword')
eq_(req['description'], 'A fancy English sword')

def test_lang_and_region(self):
self.request.locale = 'en-GB'
tasks._localize_pay_request(self.request)
req = self._get_pay_request_details()
eq_(req['name'], 'British Virtual Sword')
eq_(req['description'], 'A fancy sword')

def test_lang_and_unlocalized_region(self):
self.request.locale = 'en-US'
tasks._localize_pay_request(self.request)
req = self._get_pay_request_details()
eq_(req['name'], 'English Virtual Sword')
eq_(req['description'], 'A fancy English sword')


class TestGetIconURL(test_utils.TestCase):

Expand Down

0 comments on commit d470211

Please sign in to comment.