diff --git a/common/djangoapps/util/request.py b/common/djangoapps/util/request.py index cdf052af6c..922d0c25e1 100644 --- a/common/djangoapps/util/request.py +++ b/common/djangoapps/util/request.py @@ -7,8 +7,8 @@ from microsite_configuration import microsite from opaque_keys import InvalidKeyError from opaque_keys.edx.locations import SlashSeparatedCourseKey -# accommodates course api urls, excluding /blocks routes. -COURSE_REGEX = re.compile(r'^(.*?/courses/)+(?!v[0-9]+/blocks){}'.format(settings.COURSE_ID_PATTERN)) +# accommodates course api urls, excluding any course api routes that do not fall under v*/courses, such as v1/blocks. +COURSE_REGEX = re.compile(r'^(.*?/courses/)(?!v[0-9]+/[^/]+){}'.format(settings.COURSE_ID_PATTERN)) def safe_get_host(request): diff --git a/common/djangoapps/util/tests/test_request.py b/common/djangoapps/util/tests/test_request.py index 6325ca8e7c..79e0e78f25 100644 --- a/common/djangoapps/util/tests/test_request.py +++ b/common/djangoapps/util/tests/test_request.py @@ -5,7 +5,6 @@ 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 @@ -51,25 +50,23 @@ class ResponseTestCase(unittest.TestCase): self.assertIsNone(course_id_from_url('/course/edX/maths/2020')) self.assertIsNone(course_id_from_url('/courses/edX/maths/')) self.assertIsNone(course_id_from_url('/api/courses/v1/blocks/edX/maths/2020')) - self.assertIsNone(course_id_from_url('/api/courses/v1/blocks/course-v1:edX+maths+2020')) - - 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') + self.assertIsNone(course_id_from_url('/api/courses/v1/blocks/course-v1:incidental+courseid+formatting')) + self.assertIsNone(course_id_from_url('/api/courses/v41/notcourses/course-v1:incidental+courseid+formatting')) course_id = course_id_from_url('/courses/course-v1:edX+maths+2020') - self.assertEqual(course_id.org, 'edX') - self.assertEqual(course_id.course, 'maths') - self.assertEqual(course_id.run, '2020') + self.assertCourseIdFieldsMatch(course_id=course_id, org="edX", course='maths', run='2020') + + course_id = course_id_from_url('/courses/edX/maths/2020') + self.assertCourseIdFieldsMatch(course_id=course_id, org='edX', course='maths', run='2020') course_id = course_id_from_url('/api/courses/v1/courses/course-v1:edX+maths+2020') - self.assertEqual(course_id.org, 'edX') - self.assertEqual(course_id.course, 'maths') - self.assertEqual(course_id.run, '2020') + self.assertCourseIdFieldsMatch(course_id=course_id, org='edX', course='maths', run='2020') course_id = course_id_from_url('/api/courses/v1/courses/edX/maths/2020') - self.assertEqual(course_id.org, 'edX') - self.assertEqual(course_id.course, 'maths') - self.assertEqual(course_id.run, '2020') + self.assertCourseIdFieldsMatch(course_id=course_id, org='edX', course='maths', run='2020') + def assertCourseIdFieldsMatch(self, course_id, org, course, run): + """ Asserts that the passed-in course id matches the specified fields""" + self.assertEqual(course_id.org, org) + self.assertEqual(course_id.course, course) + self.assertEqual(course_id.run, run)