diff --git a/common/djangoapps/util/request.py b/common/djangoapps/util/request.py index d99962a76d..ed46d48b8f 100644 --- a/common/djangoapps/util/request.py +++ b/common/djangoapps/util/request.py @@ -2,7 +2,9 @@ import re from django.conf import settings + from microsite_configuration import microsite +from opaque_keys import InvalidKeyError from opaque_keys.edx.locations import SlashSeparatedCourseKey @@ -41,4 +43,7 @@ def course_id_from_url(url): if course_id is None: return None - return SlashSeparatedCourseKey.from_deprecated_string(course_id) + try: + return SlashSeparatedCourseKey.from_deprecated_string(course_id) + except InvalidKeyError: + return None diff --git a/common/djangoapps/util/tests/test_request.py b/common/djangoapps/util/tests/test_request.py index 76bd9b527f..b023d03ad9 100644 --- a/common/djangoapps/util/tests/test_request.py +++ b/common/djangoapps/util/tests/test_request.py @@ -1,9 +1,13 @@ -from django.test.client import RequestFactory -from django.conf import settings -from util.request import safe_get_host -from django.core.exceptions import SuspiciousOperation +"""Tests for util.request module.""" + import unittest +from django.conf import settings +from django.core.exceptions import SuspiciousOperation +from django.test.client import RequestFactory + +from util.request import course_id_from_url, safe_get_host + class ResponseTestCase(unittest.TestCase): """ Tests for response-related utility functions """ @@ -37,3 +41,15 @@ class ResponseTestCase(unittest.TestCase): settings.ALLOWED_HOSTS = ["the_valid_website.com"] with self.assertRaises(SuspiciousOperation): safe_get_host(request) + + def test_course_id_from_url(self): + """ Test course_id_from_url(). """ + + self.assertIsNone(course_id_from_url('/login')) + self.assertIsNone(course_id_from_url('/course/edX/maths/2020')) + self.assertIsNone(course_id_from_url('/courses/edX/maths/')) + + course_id = course_id_from_url('/courses/edX/maths/2020') + self.assertEqual(course_id.org, 'edX') + self.assertEqual(course_id.course, 'maths') + self.assertEqual(course_id.run, '2020')