From 46960ef358c4b48861ee349ea79218d2bb98c1d4 Mon Sep 17 00:00:00 2001 From: zubair-arbi Date: Fri, 20 Apr 2018 16:40:34 +0500 Subject: [PATCH] ENT-960 Fix catalogs creation bug due to request data format --- openedx/core/djangoapps/api_admin/forms.py | 7 ++++-- .../djangoapps/api_admin/tests/test_forms.py | 24 ++++++++++++++++++- openedx/core/djangoapps/api_admin/views.py | 2 +- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/openedx/core/djangoapps/api_admin/forms.py b/openedx/core/djangoapps/api_admin/forms.py index 2c0c649b18..d936a11f24 100644 --- a/openedx/core/djangoapps/api_admin/forms.py +++ b/openedx/core/djangoapps/api_admin/forms.py @@ -38,8 +38,11 @@ class ApiAccessRequestForm(forms.ModelForm): class ViewersWidget(forms.widgets.TextInput): """Form widget to display a comma-separated list of usernames.""" - def render(self, name, value, attrs=None): - return super(ViewersWidget, self).render(name, ', '.join(value), attrs) + def format_value(self, value): + """ + Return a serialized value as it should appear when rendered in a template. + """ + return ', '.join(value) if isinstance(value, list) else value class ViewersField(forms.Field): diff --git a/openedx/core/djangoapps/api_admin/tests/test_forms.py b/openedx/core/djangoapps/api_admin/tests/test_forms.py index 6e676dd9a2..4c4ff65d8c 100644 --- a/openedx/core/djangoapps/api_admin/tests/test_forms.py +++ b/openedx/core/djangoapps/api_admin/tests/test_forms.py @@ -3,7 +3,7 @@ import ddt from django.test import TestCase -from openedx.core.djangoapps.api_admin.forms import ApiAccessRequestForm +from openedx.core.djangoapps.api_admin.forms import ApiAccessRequestForm, ViewersWidget from openedx.core.djangoapps.api_admin.tests.utils import VALID_DATA from openedx.core.djangolib.testing.utils import skip_unless_lms @@ -21,3 +21,25 @@ class ApiAccessFormTest(TestCase): def test_form_valid(self, data, is_valid): form = ApiAccessRequestForm(data) self.assertEqual(form.is_valid(), is_valid) + + +@skip_unless_lms +class ViewersWidgetTest(TestCase): + widget = ViewersWidget() + + def test_render_value(self): + """ + Verify that ViewersWidget always displays serialized value on rendering. + """ + dummy_string_value = 'staff, verified' + input_field_name = 'viewers' + expected_widget_html = ''.format( + input_field_name=input_field_name, + serialized_value=dummy_string_value, + ) + output = self.widget.render(name=input_field_name, value=dummy_string_value) + self.assertEqual(expected_widget_html, output) + + dummy_list_value = ['staff', 'verified'] + output = self.widget.render(name=input_field_name, value=dummy_list_value) + self.assertEqual(expected_widget_html, output) diff --git a/openedx/core/djangoapps/api_admin/views.py b/openedx/core/djangoapps/api_admin/views.py index e758b233f9..ca8fb2390c 100644 --- a/openedx/core/djangoapps/api_admin/views.py +++ b/openedx/core/djangoapps/api_admin/views.py @@ -178,7 +178,7 @@ class CatalogListView(CatalogApiMixin, View): if not form.is_valid(): return render_to_response(self.template, self.get_context_data(client, username, form), status=400) - attrs = form.instance.attributes + attrs = form.cleaned_data catalog = client.catalogs.post(attrs) return redirect(reverse('api_admin:catalog-edit', kwargs={'catalog_id': catalog['id']}))