Commit 14fcb3a1 by Peter Fogg

Merge pull request #12708 from edx/peter-fogg/fix-catalog-404

Fix 500 error when searching for a user without catalogs.
parents b4248d28 c43d8e15
...@@ -279,6 +279,13 @@ class CatalogListViewTest(CatalogTest): ...@@ -279,6 +279,13 @@ class CatalogListViewTest(CatalogTest):
self.assertIn(catalog.name, response.content.decode('utf-8')) self.assertIn(catalog.name, response.content.decode('utf-8'))
@httpretty.activate @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): def test_post(self):
catalog_data = { catalog_data = {
'name': 'test-catalog', 'name': 'test-catalog',
......
...@@ -13,6 +13,7 @@ from django.views.generic.edit import CreateView ...@@ -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.generators import generate_client_secret, generate_client_id
from oauth2_provider.models import get_application_model from oauth2_provider.models import get_application_model
from oauth2_provider.views import ApplicationRegistration from oauth2_provider.views import ApplicationRegistration
from slumber.exceptions import HttpNotFoundError
from edxmako.shortcuts import render_to_response from edxmako.shortcuts import render_to_response
from openedx.core.djangoapps.api_admin.decorators import require_api_access from openedx.core.djangoapps.api_admin.decorators import require_api_access
...@@ -140,11 +141,18 @@ class CatalogListView(View): ...@@ -140,11 +141,18 @@ class CatalogListView(View):
template = 'api_admin/catalogs/list.html' 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): def get(self, request, username):
"""Display a list of a user's catalogs.""" """Display a list of a user's catalogs."""
client = course_discovery_api_client(request.user) client = course_discovery_api_client(request.user)
response = client.api.v1.catalogs.get(username=username) catalogs = self._get_catalogs(client, username)
catalogs = [Catalog(attributes=catalog) for catalog in response['results']]
return render_to_response(self.template, { return render_to_response(self.template, {
'username': username, 'username': username,
'catalogs': catalogs, 'catalogs': catalogs,
...@@ -157,10 +165,8 @@ class CatalogListView(View): ...@@ -157,10 +165,8 @@ class CatalogListView(View):
"""Create a new catalog for a user.""" """Create a new catalog for a user."""
form = CatalogForm(request.POST) form = CatalogForm(request.POST)
client = course_discovery_api_client(request.user) client = course_discovery_api_client(request.user)
if not form.is_valid(): if not form.is_valid():
response = client.api.v1.catalogs.get(username=username) catalogs = self._get_catalogs(client, username)
catalogs = [Catalog(attributes=catalog) for catalog in response['results']]
return render_to_response(self.template, { return render_to_response(self.template, {
'form': form, 'form': form,
'catalogs': catalogs, 'catalogs': catalogs,
......
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