Merge pull request #4736 from edx/usman/lms11205-embargomiddleware-invalidkeyerror

Catch InvalidKeyError in course_id_from_url().
This commit is contained in:
Adam
2014-08-08 13:27:25 -04:00
3 changed files with 30 additions and 5 deletions

View File

@@ -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

View File

@@ -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')

View File

@@ -148,6 +148,10 @@ class ViewsTestCase(TestCase):
self.assertRaises(Http404, views.redirect_to_course_position,
mock_module, views.CONTENT_DEPTH)
def test_invalid_course_id(self):
response = self.client.get('/courses/MITx/3.091X/')
self.assertEqual(response.status_code, 404)
def test_index_invalid_position(self):
request_url = '/'.join([
'/courses',