diff --git a/AUTHORS b/AUTHORS index 5e34d439d6..3c4935b686 100644 --- a/AUTHORS +++ b/AUTHORS @@ -260,3 +260,4 @@ Jacek Bzdak Jillian Vogel Dan Powell Mariana Araújo +Muhammad Ayub Khan diff --git a/lms/djangoapps/courseware/courses.py b/lms/djangoapps/courseware/courses.py index abaee4bb01..23ecc390bc 100644 --- a/lms/djangoapps/courseware/courses.py +++ b/lms/djangoapps/courseware/courses.py @@ -242,7 +242,7 @@ def get_course_about_section(request, course, section_key): raise KeyError("Invalid about key " + str(section_key)) -def get_course_info_section_module(request, course, section_key): +def get_course_info_section_module(request, user, course, section_key): """ This returns the course info module for a given section_key. @@ -255,10 +255,10 @@ def get_course_info_section_module(request, course, section_key): usage_key = course.id.make_usage_key('course_info', section_key) # Use an empty cache - field_data_cache = FieldDataCache([], course.id, request.user) + field_data_cache = FieldDataCache([], course.id, user) return get_module( - request.user, + user, request, usage_key, field_data_cache, @@ -269,7 +269,7 @@ def get_course_info_section_module(request, course, section_key): ) -def get_course_info_section(request, course, section_key): +def get_course_info_section(request, user, course, section_key): """ This returns the snippet of html to be rendered on the course info page, given the key for the section. @@ -280,7 +280,7 @@ def get_course_info_section(request, course, section_key): - updates - guest_updates """ - info_module = get_course_info_section_module(request, course, section_key) + info_module = get_course_info_section_module(request, user, course, section_key) html = '' if info_module is not None: diff --git a/lms/djangoapps/courseware/tests/test_courses.py b/lms/djangoapps/courseware/tests/test_courses.py index c7f8bab7fc..32788027a6 100644 --- a/lms/djangoapps/courseware/tests/test_courses.py +++ b/lms/djangoapps/courseware/tests/test_courses.py @@ -277,7 +277,7 @@ class CoursesRenderTest(ModuleStoreTestCase): def test_get_course_info_section_render(self): # Test render works okay - course_info = get_course_info_section(self.request, self.course, 'handouts') + course_info = get_course_info_section(self.request, self.request.user, self.course, 'handouts') self.assertEqual(course_info, u"Sample") # Test when render raises an exception @@ -285,7 +285,7 @@ class CoursesRenderTest(ModuleStoreTestCase): mock_module_render.return_value = mock.MagicMock( render=mock.Mock(side_effect=Exception('Render failed!')) ) - course_info = get_course_info_section(self.request, self.course, 'handouts') + course_info = get_course_info_section(self.request, self.request.user, self.course, 'handouts') self.assertIn("this module is temporarily unavailable", course_info) def test_get_course_about_section_render(self): @@ -315,7 +315,7 @@ class XmlCoursesRenderTest(ModuleStoreTestCase): request = get_request_for_user(UserFactory.create()) # Test render works okay. Note the href is different in XML courses. - course_info = get_course_info_section(request, course, 'handouts') + course_info = get_course_info_section(request, request.user, course, 'handouts') self.assertEqual(course_info, "Sample") # Test when render raises an exception @@ -323,7 +323,7 @@ class XmlCoursesRenderTest(ModuleStoreTestCase): mock_module_render.return_value = mock.MagicMock( render=mock.Mock(side_effect=Exception('Render failed!')) ) - course_info = get_course_info_section(request, course, 'handouts') + course_info = get_course_info_section(request, request.user, course, 'handouts') self.assertIn("this module is temporarily unavailable", course_info) diff --git a/lms/djangoapps/courseware/tests/test_masquerade.py b/lms/djangoapps/courseware/tests/test_masquerade.py index 6b58f2b857..14c92a7657 100644 --- a/lms/djangoapps/courseware/tests/test_masquerade.py +++ b/lms/djangoapps/courseware/tests/test_masquerade.py @@ -41,6 +41,11 @@ class MasqueradeTestCase(ModuleStoreTestCase, LoginEnrollmentTestCase): # working properly, we must use start dates and set a start date in the past (otherwise the access # checks exist prematurely). self.course = CourseFactory.create(number='masquerade-test', metadata={'start': datetime.now(UTC())}) + # Creates info page and puts random data in it for specific student info page test + self.info_page = ItemFactory.create( + category="course_info", parent_location=self.course.location, + data="OOGIE BLOOGIE", display_name="updates" + ) self.chapter = ItemFactory.create( parent_location=self.course.location, category="chapter", @@ -89,6 +94,18 @@ class MasqueradeTestCase(ModuleStoreTestCase, LoginEnrollmentTestCase): ) return self.client.get(url) + def get_course_info_page(self): + """ + Returns the server response for course info page. + """ + url = reverse( + 'info', + kwargs={ + 'course_id': unicode(self.course.id), + } + ) + return self.client.get(url) + def _create_mock_json_request(self, user, body, method='POST', session=None): """ Returns a mock JSON request for the specified user @@ -298,6 +315,24 @@ class TestStaffMasqueradeAsSpecificStudent(StaffMasqueradeTestCase, ProblemSubmi self.login_student() self.assertEqual(self.get_progress_detail(), u'2/2') + @patch.dict('django.conf.settings.FEATURES', {'DISABLE_START_DATES': False}) + def test_masquerade_as_specific_student_course_info(self): + """ + Test masquerading as a specific user for course info page. + + We login with login_staff and check course info page content if it's working and then we + set masquerade to view same page as a specific student and test if it's working or not. + """ + # Log in as staff, and check we can see the info page. + self.login_staff() + content = self.get_course_info_page().content + self.assertIn("OOGIE BLOOGIE", content) + + # Masquerade as the student, and check we can see the info page. + self.update_masquerade(role='student', user_name=self.student_user.username) + content = self.get_course_info_page().content + self.assertIn("OOGIE BLOOGIE", content) + @attr('shard_1') class TestGetMasqueradingGroupId(StaffMasqueradeTestCase): diff --git a/lms/djangoapps/courseware/tests/test_module_render.py b/lms/djangoapps/courseware/tests/test_module_render.py index 9970580737..91e96a58d3 100644 --- a/lms/djangoapps/courseware/tests/test_module_render.py +++ b/lms/djangoapps/courseware/tests/test_module_render.py @@ -1152,7 +1152,7 @@ class TestHtmlModifiers(ModuleStoreTestCase): def test_get_course_info_section(self): self.course.static_asset_path = "toy_course_dir" - get_course_info_section(self.request, self.course, "handouts") + get_course_info_section(self.request, self.request.user, self.course, "handouts") # NOTE: check handouts output...right now test course seems to have no such content # at least this makes sure get_course_info_section returns without exception diff --git a/lms/djangoapps/courseware/views.py b/lms/djangoapps/courseware/views.py index c86064d880..9d1685935a 100644 --- a/lms/djangoapps/courseware/views.py +++ b/lms/djangoapps/courseware/views.py @@ -704,9 +704,9 @@ def course_info(request, course_id): url_to_enroll = marketing_link('COURSES') show_enroll_banner = request.user.is_authenticated() and not CourseEnrollment.is_enrolled(user, course.id) - context = { 'request': request, + 'masquerade_user': user, 'course_id': course_key.to_deprecated_string(), 'cache': None, 'course': course, diff --git a/lms/djangoapps/mobile_api/course_info/views.py b/lms/djangoapps/mobile_api/course_info/views.py index dcffdd9a97..4142fde11f 100644 --- a/lms/djangoapps/mobile_api/course_info/views.py +++ b/lms/djangoapps/mobile_api/course_info/views.py @@ -37,7 +37,7 @@ class CourseUpdatesList(generics.ListAPIView): @mobile_course_access() def list(self, request, course, *args, **kwargs): - course_updates_module = get_course_info_section_module(request, course, 'updates') + course_updates_module = get_course_info_section_module(request, request.user, course, 'updates') update_items = get_course_update_items(course_updates_module) updates_to_show = [ @@ -77,7 +77,7 @@ class CourseHandoutsList(generics.ListAPIView): @mobile_course_access() def list(self, request, course, *args, **kwargs): - course_handouts_module = get_course_info_section_module(request, course, 'handouts') + course_handouts_module = get_course_info_section_module(request, request.user, course, 'handouts') if course_handouts_module: handouts_html = course_handouts_module.data handouts_html = replace_static_urls( diff --git a/lms/templates/courseware/info.html b/lms/templates/courseware/info.html index 0b9b20f39c..ef19081884 100644 --- a/lms/templates/courseware/info.html +++ b/lms/templates/courseware/info.html @@ -58,7 +58,7 @@ $(document).ready(function(){ % endif

${_("Course Updates & News")}

- ${get_course_info_section(request, course, 'updates')} + ${get_course_info_section(request, masquerade_user, course, 'updates')}
% if False: @@ -67,16 +67,16 @@ $(document).ready(function(){ % endif

${_(course.info_sidebar_name)}

- ${get_course_info_section(request, course, 'handouts')} + ${get_course_info_section(request, masquerade_user, course, 'handouts')}
% else:

${_("Course Updates & News")}

- ${get_course_info_section(request, course, 'guest_updates')} + ${get_course_info_section(request, masquerade_user, course, 'guest_updates')}

${_("Course Handouts")}

- ${get_course_info_section(request, course, 'guest_handouts')} + ${get_course_info_section(request, masquerade_user, course, 'guest_handouts')}
% endif