Commit 7a9991e9 by Mushtaq Ali

Studio homepage escaping

parent a26d5764
...@@ -9,6 +9,9 @@ from mock import patch, Mock ...@@ -9,6 +9,9 @@ from mock import patch, Mock
import ddt import ddt
from django.test import RequestFactory from django.test import RequestFactory
from django.test.client import Client
from common.test.utils import XssTestMixin
from xmodule.course_module import CourseSummary from xmodule.course_module import CourseSummary
from contentstore.views.course import (_accessible_courses_list, _accessible_courses_list_from_groups, from contentstore.views.course import (_accessible_courses_list, _accessible_courses_list_from_groups,
...@@ -30,7 +33,7 @@ USER_COURSES_COUNT = 50 ...@@ -30,7 +33,7 @@ USER_COURSES_COUNT = 50
@ddt.ddt @ddt.ddt
class TestCourseListing(ModuleStoreTestCase): class TestCourseListing(ModuleStoreTestCase, XssTestMixin):
""" """
Unit tests for getting the list of courses for a logged in user Unit tests for getting the list of courses for a logged in user
""" """
...@@ -72,6 +75,30 @@ class TestCourseListing(ModuleStoreTestCase): ...@@ -72,6 +75,30 @@ class TestCourseListing(ModuleStoreTestCase):
self.client.logout() self.client.logout()
ModuleStoreTestCase.tearDown(self) ModuleStoreTestCase.tearDown(self)
def test_course_listing_is_escaped(self):
"""
Tests course listing returns escaped data.
"""
escaping_content = "<script>alert('ESCAPE')</script>"
# Make user staff to access course listing
self.user.is_staff = True
self.user.save() # pylint: disable=no-member
self.client = Client()
self.client.login(username=self.user.username, password='test')
# Change 'display_coursenumber' field and update the course.
course = CourseFactory.create()
course.display_coursenumber = escaping_content
course = self.store.update_item(course, self.user.id) # pylint: disable=no-member
self.assertEqual(course.display_coursenumber, escaping_content)
# Check if response is escaped
response = self.client.get('/home')
self.assertEqual(response.status_code, 200)
self.assert_no_xss(response, escaping_content)
def test_get_course_list(self): def test_get_course_list(self):
""" """
Test getting courses with new access group format e.g. 'instructor_edx.course.run' Test getting courses with new access group format e.g. 'instructor_edx.course.run'
......
...@@ -10,6 +10,7 @@ from provider.constants import CONFIDENTIAL ...@@ -10,6 +10,7 @@ from provider.constants import CONFIDENTIAL
from openedx.core.djangoapps.programs.models import ProgramsApiConfig from openedx.core.djangoapps.programs.models import ProgramsApiConfig
from openedx.core.djangoapps.programs.tests.mixins import ProgramsApiConfigMixin, ProgramsDataMixin from openedx.core.djangoapps.programs.tests.mixins import ProgramsApiConfigMixin, ProgramsDataMixin
from openedx.core.djangolib.markup import escape
from student.tests.factories import UserFactory from student.tests.factories import UserFactory
from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase
...@@ -63,7 +64,7 @@ class TestProgramListing(ProgramsApiConfigMixin, ProgramsDataMixin, SharedModule ...@@ -63,7 +64,7 @@ class TestProgramListing(ProgramsApiConfigMixin, ProgramsDataMixin, SharedModule
self.mock_programs_api(data={'results': []}) self.mock_programs_api(data={'results': []})
response = self.client.get(self.studio_home) response = self.client.get(self.studio_home)
self.assertIn("You haven't created any programs yet.", response.content) self.assertIn(escape("You haven't created any programs yet."), response.content)
# When data is provided, expect a program listing. # When data is provided, expect a program listing.
self.mock_programs_api() self.mock_programs_api()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment