Merge pull request #4678 from edx/usman/lms11189-user-api-middleware-exception-2

Catch InvalidKeyError in UserTagsEventContextMiddleware and static_tab view.
This commit is contained in:
Usman Khalid
2014-08-07 17:18:14 +05:00
5 changed files with 31 additions and 5 deletions

View File

@@ -2,11 +2,14 @@
Middleware for user api.
Adds user's tags to tracking event context.
"""
from track.contexts import COURSE_REGEX
from eventtracking import tracker
from user_api.models import UserCourseTag
from opaque_keys import InvalidKeyError
from opaque_keys.edx.locations import SlashSeparatedCourseKey
from track.contexts import COURSE_REGEX
from user_api.models import UserCourseTag
class UserTagsEventContextMiddleware(object):
"""Middleware that adds a user's tags to tracking event context."""
@@ -20,7 +23,11 @@ class UserTagsEventContextMiddleware(object):
course_id = None
if match:
course_id = match.group('course_id')
course_key = SlashSeparatedCourseKey.from_deprecated_string(course_id)
try:
course_key = SlashSeparatedCourseKey.from_deprecated_string(course_id)
except InvalidKeyError:
course_id = None
course_key = None
context = {}

View File

@@ -92,6 +92,13 @@ class TagsMiddlewareTest(TestCase):
self.assertContextSetTo({})
def test_invalid_course_id(self):
self.request = self.request_factory.get('/courses/edX/101/')
self.request.user = self.user
self.process_request()
self.assertContextSetTo({})
def test_anonymous_user(self):
self.request.user = AnonymousUserFactory()

View File

@@ -49,9 +49,11 @@ def get_request_for_user(user):
request = RequestFactory()
request.user = user
request.COOKIES = {}
request.META = {}
request.is_secure = lambda: True
request.get_host = lambda: "edx.org"
request.method = 'GET'
return request

View File

@@ -4,8 +4,9 @@ Test cases for tabs.
from mock import MagicMock, Mock, patch
from courseware.courses import get_course_by_id
from courseware.views import get_static_tab_contents
from courseware.views import get_static_tab_contents, static_tab
from django.http import Http404
from django.test.utils import override_settings
from django.core.urlresolvers import reverse
@@ -43,6 +44,11 @@ class StaticTabDateTestCase(LoginEnrollmentTestCase, ModuleStoreTestCase):
self.assertEqual(resp.status_code, 200)
self.assertIn("OOGIE BLOOGIE", resp.content)
def test_invalid_course_key(self):
request = get_request_for_user(UserFactory.create())
with self.assertRaises(Http404):
static_tab(request, 'edX/toy', 'new_tab')
@override_settings(MODULESTORE=TEST_DATA_MIXED_MODULESTORE)
def test_get_static_tab_contents(self):
course = get_course_by_id(self.toy_course_key)

View File

@@ -549,7 +549,11 @@ def static_tab(request, course_id, tab_slug):
Assumes the course_id is in a valid format.
"""
course_key = SlashSeparatedCourseKey.from_deprecated_string(course_id)
try:
course_key = SlashSeparatedCourseKey.from_deprecated_string(course_id)
except InvalidKeyError:
raise Http404
course = get_course_with_access(request.user, 'load', course_key)
tab = CourseTabList.get_tab_by_slug(course.tabs, tab_slug)