Commit d45beaeb by Don Mitchell

Test the new RESTful course index and outline views.

parent 095a4e3d
"""
Unit tests for getting the list of courses and the course outline.
"""
from django.core.urlresolvers import reverse
import lxml
from contentstore.tests.utils import CourseTestCase
from xmodule.modulestore.django import loc_mapper
from django.core.exceptions import PermissionDenied
class TestCourseIndex(CourseTestCase):
"""
Unit tests for getting the list of courses and the course outline.
"""
def test_index(self):
"""
Test getting the list of courses and then pulling up their outlines
"""
index_url = reverse('contentstore.views.index')
index_response = self.client.get(index_url, {}, HTTP_ACCEPT='text/html')
parsed_html = lxml.html.fromstring(index_response.content)
course_link_eles = parsed_html.find_class('course-link')
for link in course_link_eles:
self.assertRegexpMatches(link.get("href"), r'course/\w+\.\w+\.\w+.*/branch/\w+/block/.*')
# now test that url
outline_response = self.client.get(link.get("href"), {}, HTTP_ACCEPT='text/html')
# ensure it has the expected 2 self referential links
outline_parsed = lxml.html.fromstring(outline_response.content)
outline_link = outline_parsed.find_class('course-link')[0]
self.assertEqual(outline_link.get("href"), link.get("href"))
course_menu_link = outline_parsed.find_class('nav-course-courseware-outline')[0]
self.assertEqual(course_menu_link.find("a").get("href"), link.get("href"))
def test_negative_conditions(self):
"""
Test the error conditions for the access
"""
locator = loc_mapper().translate_location(self.course.location.course_id, self.course.location, False, True)
outline_url = reverse('contentstore.views.course_handler', kwargs={'course_url': unicode(locator)})
# register a non-staff member and try to delete the course branch
non_staff_client = self.createNonStaffAuthedUserClient()
response = non_staff_client.delete(outline_url, {}, HTTP_ACCEPT='application/json')
self.assertEqual(response.status_code, 403)
...@@ -61,3 +61,21 @@ class CourseTestCase(ModuleStoreTestCase): ...@@ -61,3 +61,21 @@ class CourseTestCase(ModuleStoreTestCase):
number='999', number='999',
display_name='Robot Super Course', display_name='Robot Super Course',
) )
def createNonStaffAuthedUserClient(self):
"""
Create a non-staff user, log them in, and return the client to use for testing.
"""
uname = 'teststudent'
password = 'foo'
nonstaff = User.objects.create_user(uname, 'test+student@edx.org', password)
# Note that we do not actually need to do anything
# for registration if we directly mark them active.
nonstaff.is_active = True
nonstaff.is_staff = False
nonstaff.save()
client = Client()
client.login(username=uname, password=password)
return client
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