From c43d8e1566e23577b164693f8d0373aa23c8dbd3 Mon Sep 17 00:00:00 2001 From: Peter Fogg Date: Thu, 9 Jun 2016 12:52:15 -0400 Subject: [PATCH] Fix 500 error when searching for a user without catalogs. ECOM-4653 --- .../djangoapps/api_admin/tests/test_views.py | 7 +++++++ openedx/core/djangoapps/api_admin/views.py | 16 +++++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/openedx/core/djangoapps/api_admin/tests/test_views.py b/openedx/core/djangoapps/api_admin/tests/test_views.py index 512b07a059..de475ec9f9 100644 --- a/openedx/core/djangoapps/api_admin/tests/test_views.py +++ b/openedx/core/djangoapps/api_admin/tests/test_views.py @@ -278,6 +278,13 @@ class CatalogListViewTest(CatalogTest): self.assertEqual(response.status_code, 200) self.assertIn(catalog.name, response.content.decode('utf-8')) + @httpretty.activate + def test_get_no_catalogs(self): + """Verify that the view works when no catalogs are set up.""" + self.mock_catalog_api('api/v1/catalogs/', {}, status_code=404) + response = self.client.get(self.url) + self.assertEqual(response.status_code, 200) + @httpretty.activate def test_post(self): catalog_data = { diff --git a/openedx/core/djangoapps/api_admin/views.py b/openedx/core/djangoapps/api_admin/views.py index c9b87cd963..c8d282c546 100644 --- a/openedx/core/djangoapps/api_admin/views.py +++ b/openedx/core/djangoapps/api_admin/views.py @@ -13,6 +13,7 @@ from django.views.generic.edit import CreateView from oauth2_provider.generators import generate_client_secret, generate_client_id from oauth2_provider.models import get_application_model from oauth2_provider.views import ApplicationRegistration +from slumber.exceptions import HttpNotFoundError from edxmako.shortcuts import render_to_response from openedx.core.djangoapps.api_admin.decorators import require_api_access @@ -140,11 +141,18 @@ class CatalogListView(View): template = 'api_admin/catalogs/list.html' + def _get_catalogs(self, client, username): + """Retrieve catalogs for a user. Returns the empty list if none are found.""" + try: + response = client.api.v1.catalogs.get(username=username) + return [Catalog(attributes=catalog) for catalog in response['results']] + except HttpNotFoundError: + return [] + def get(self, request, username): """Display a list of a user's catalogs.""" client = course_discovery_api_client(request.user) - response = client.api.v1.catalogs.get(username=username) - catalogs = [Catalog(attributes=catalog) for catalog in response['results']] + catalogs = self._get_catalogs(client, username) return render_to_response(self.template, { 'username': username, 'catalogs': catalogs, @@ -157,10 +165,8 @@ class CatalogListView(View): """Create a new catalog for a user.""" form = CatalogForm(request.POST) client = course_discovery_api_client(request.user) - if not form.is_valid(): - response = client.api.v1.catalogs.get(username=username) - catalogs = [Catalog(attributes=catalog) for catalog in response['results']] + catalogs = self._get_catalogs(client, username) return render_to_response(self.template, { 'form': form, 'catalogs': catalogs,