-changed method name from "from_string_or_404" to "course_key_from_string_or_404".

-Updated method "course_key_from_string_or_404" to raise message too.
-Wrote tests for "course_key_from_string_or_404" when exception message is given.
-Modified existing methods to use "ddt.data".
-Used Splunk logs to find exectly where we were getting "Invalid Key Error"
-Updated Views where we were getting "Invalid Key Error" in splunk logs.
-Wrote tests for those View End points where we were getting "Invalid Key Error"
This commit is contained in:
Ayub-khan
2016-04-14 15:57:39 +05:00
parent a2c686cf6f
commit d8464dbfb0
8 changed files with 75 additions and 33 deletions

View File

@@ -14,7 +14,8 @@ from edxmako.shortcuts import render_to_response
from xmodule.modulestore.django import modulestore
from xmodule.modulestore import ModuleStoreEnum
from xmodule.tabs import CourseTabList, CourseTab, InvalidTabsException, StaticTab
from opaque_keys.edx.keys import CourseKey, UsageKey
from opaque_keys.edx.keys import UsageKey
from util.course_key_utils import course_key_from_string_or_404
from ..utils import get_lms_link_for_item
@@ -39,7 +40,7 @@ def tabs_handler(request, course_key_string):
Creating a tab, deleting a tab, or changing its contents is not supported through this method.
Instead use the general xblock URL (see item.xblock_handler).
"""
course_key = CourseKey.from_string(course_key_string)
course_key = course_key_from_string_or_404(course_key_string)
if not has_course_author_access(request.user, course_key):
raise PermissionDenied()

View File

@@ -10,6 +10,7 @@ from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from xmodule.tabs import CourseTabList
from xmodule.modulestore.django import modulestore
from django.http import Http404
class TabsPageTests(CourseTestCase):
@@ -191,6 +192,13 @@ class TabsPageTests(CourseTestCase):
self.assertIn('<span class="sr">Delete this component</span>', html)
self.assertIn('<span data-tooltip="Drag to reorder" class="drag-handle action"></span>', html)
def test_invalid_course_id(self):
""" Asserts that Http404 is raised when the course id is not valid. """
invalid_tab_url = reverse_course_url('tabs_handler', "/some.invalid.key/TTT/CS01/2015_T0")
with self.assertRaises(Http404):
self.client.get(invalid_tab_url)
class PrimitiveTabEdit(ModuleStoreTestCase):
"""Tests for the primitive tab edit data manipulations"""

View File

@@ -9,6 +9,7 @@ from django.contrib.auth.models import User
from student.models import CourseEnrollment
from student.roles import CourseStaffRole, CourseInstructorRole
from student import auth
from django.http import Http404
class UsersTestCase(CourseTestCase):
@@ -315,3 +316,12 @@ class UsersTestCase(CourseTestCase):
CourseEnrollment.is_enrolled(self.ext_user, self.course.id),
'User ext_user should have been enrolled in the course'
)
def test_invalid_course_id(self):
""" Asserts that Http404 is raised when the course id is not valid. """
wrong_url = reverse_course_url(
'course_team_handler', "/some.invalid.key/TTT/CS01/2015_T0",
kwargs={'email': self.ext_user.email}
)
with self.assertRaises(Http404):
self.client.get(wrong_url)

View File

@@ -8,7 +8,7 @@ from django.views.decorators.csrf import ensure_csrf_cookie
from edxmako.shortcuts import render_to_response
from xmodule.modulestore.django import modulestore
from opaque_keys.edx.keys import CourseKey
from util.course_key_utils import course_key_from_string_or_404
from opaque_keys.edx.locator import LibraryLocator
from util.json_request import JsonResponse, expect_json
from student.roles import CourseInstructorRole, CourseStaffRole, LibraryUserRole
@@ -49,7 +49,7 @@ def course_team_handler(request, course_key_string=None, email=None):
DELETE:
json: remove a particular course team member from the course team (email is required).
"""
course_key = CourseKey.from_string(course_key_string) if course_key_string else None
course_key = course_key_from_string_or_404(course_key_string) if course_key_string else None
# No permissions check here - each helper method does its own check.
if 'application/json' in request.META.get('HTTP_ACCEPT', 'application/json'):