diff --git a/lms/djangoapps/certificates/tests/test_support_views.py b/lms/djangoapps/certificates/tests/test_support_views.py index 1b2f1e5590..e46698df5c 100644 --- a/lms/djangoapps/certificates/tests/test_support_views.py +++ b/lms/djangoapps/certificates/tests/test_support_views.py @@ -159,6 +159,21 @@ class CertificateSearchTests(CertificateSupportTestCase): else: self.assertEqual(response.status_code, 400) + def test_search_with_plus_sign(self): + """ + Test that email address that contains '+' accepted by student support + """ + self.student.email = "student+student@example.com" + self.student.save() # pylint: disable=no-member + + response = self._search(self.student.email) + self.assertEqual(response.status_code, 200) + results = json.loads(response.content) + + self.assertEqual(len(results), 1) + retrieved_data = results[0] + self.assertEqual(retrieved_data["username"], self.STUDENT_USERNAME) + def test_results(self): response = self._search(self.STUDENT_USERNAME) self.assertEqual(response.status_code, 200) diff --git a/lms/djangoapps/certificates/views/support.py b/lms/djangoapps/certificates/views/support.py index 1c2fbc3e15..65d92adacf 100644 --- a/lms/djangoapps/certificates/views/support.py +++ b/lms/djangoapps/certificates/views/support.py @@ -85,7 +85,7 @@ def search_certificates(request): ] """ - user_filter = request.GET.get("user", "") + user_filter = urllib.unquote(urllib.quote_plus(request.GET.get("user", ""))) if not user_filter: msg = _("user is not given.") return HttpResponseBadRequest(msg) diff --git a/lms/djangoapps/support/views/certificate.py b/lms/djangoapps/support/views/certificate.py index 0cbdd13da1..b6f1a7e06d 100644 --- a/lms/djangoapps/support/views/certificate.py +++ b/lms/djangoapps/support/views/certificate.py @@ -6,6 +6,7 @@ from django.utils.decorators import method_decorator from edxmako.shortcuts import render_to_response from support.decorators import require_support_permission +import urllib class CertificatesSupportView(View): @@ -30,7 +31,7 @@ class CertificatesSupportView(View): def get(self, request): """Render the certificates support view. """ context = { - "user_filter": request.GET.get("user", ""), + "user_filter": urllib.unquote(urllib.quote_plus(request.GET.get("user", ""))), "course_filter": request.GET.get("course_id", "") } return render_to_response("support/certificates.html", context)