Commit dfd5bd3e by estute Committed by GitHub

Merge pull request #12742 from edx/ahsan/fix-order-history-page-error

Fix order history page if order doesn't have any product
parents 68859e7c 39f8757f
...@@ -595,6 +595,29 @@ class AccountSettingsViewTest(ThirdPartyAuthTestMixin, TestCase, ProgramsApiConf ...@@ -595,6 +595,29 @@ class AccountSettingsViewTest(ThirdPartyAuthTestMixin, TestCase, ProgramsApiConf
self.assertEqual(order_detail, []) self.assertEqual(order_detail, [])
def test_order_history_with_no_product(self):
response = {
'results': [
factories.OrderFactory(
lines=[
factories.OrderLineFactory(
product=None
),
factories.OrderLineFactory(
product=factories.ProductFactory(attribute_values=[factories.ProductAttributeFactory(
name='certificate_type',
value='verified'
)])
)
]
)
]
}
with mock_get_orders(response=response):
order_detail = get_user_orders(self.user)
self.assertEqual(len(order_detail), 1)
@override_settings(SITE_NAME=settings.MICROSITE_LOGISTRATION_HOSTNAME) @override_settings(SITE_NAME=settings.MICROSITE_LOGISTRATION_HOSTNAME)
class MicrositeLogistrationTests(TestCase): class MicrositeLogistrationTests(TestCase):
......
...@@ -334,21 +334,25 @@ def get_user_orders(user): ...@@ -334,21 +334,25 @@ def get_user_orders(user):
for order in commerce_user_orders: for order in commerce_user_orders:
if order['status'].lower() == 'complete': if order['status'].lower() == 'complete':
for line in order['lines']: for line in order['lines']:
for attribute in line['product']['attribute_values']: product = line.get('product')
if attribute['name'] == 'certificate_type' and attribute['value'] in allowed_course_modes: if product:
try: for attribute in product['attribute_values']:
date_placed = datetime.strptime(order['date_placed'], "%Y-%m-%dT%H:%M:%SZ") if attribute['name'] == 'certificate_type' and attribute['value'] in allowed_course_modes:
order_data = { try:
'number': order['number'], date_placed = datetime.strptime(order['date_placed'], "%Y-%m-%dT%H:%M:%SZ")
'price': order['total_excl_tax'], order_data = {
'title': order['lines'][0]['title'], 'number': order['number'],
'order_date': strftime_localized(date_placed.replace(tzinfo=pytz.UTC), 'SHORT_DATE'), 'price': order['total_excl_tax'],
'receipt_url': commerce_configuration.receipt_page + order['number'] 'title': order['lines'][0]['title'],
} 'order_date': strftime_localized(
user_orders.append(order_data) date_placed.replace(tzinfo=pytz.UTC), 'SHORT_DATE'
except KeyError: ),
log.exception('Invalid order structure: %r', order) 'receipt_url': commerce_configuration.receipt_page + order['number']
return no_data }
user_orders.append(order_data)
except KeyError:
log.exception('Invalid order structure: %r', order)
return no_data
return user_orders return user_orders
...@@ -421,6 +425,13 @@ def account_settings_context(request): ...@@ -421,6 +425,13 @@ def account_settings_context(request):
user = request.user user = request.user
year_of_birth_options = [(unicode(year), unicode(year)) for year in UserProfile.VALID_YEARS] year_of_birth_options = [(unicode(year), unicode(year)) for year in UserProfile.VALID_YEARS]
try:
user_orders = get_user_orders(user)
except: # pylint: disable=bare-except
log.exception('Error fetching order history from Otto.')
# Return empty order list as account settings page expect a list and
# it will be broken if exception raised
user_orders = []
context = { context = {
'auth': {}, 'auth': {},
...@@ -447,7 +458,7 @@ def account_settings_context(request): ...@@ -447,7 +458,7 @@ def account_settings_context(request):
'user_preferences_api_url': reverse('preferences_api', kwargs={'username': user.username}), 'user_preferences_api_url': reverse('preferences_api', kwargs={'username': user.username}),
'disable_courseware_js': True, 'disable_courseware_js': True,
'show_program_listing': ProgramsApiConfig.current().show_program_listing, 'show_program_listing': ProgramsApiConfig.current().show_program_listing,
'order_history': get_user_orders(user) 'order_history': user_orders
} }
if third_party_auth.is_enabled(): if third_party_auth.is_enabled():
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment