Commit 32e00212 by Don Mitchell

Create mapping for previously unmapped locations in order to get

course_id

STUD-1212
parent 7bdcc848
...@@ -168,7 +168,7 @@ class CourseRole(GroupBasedRole): ...@@ -168,7 +168,7 @@ class CourseRole(GroupBasedRole):
else: else:
groupnames.append('{0}_{1}'.format(role, course_context)) groupnames.append('{0}_{1}'.format(role, course_context))
try: try:
locator = loc_mapper().translate_location(course_context, self.location, False, False) locator = loc_mapper().translate_location(course_context, self.location, True, True)
groupnames.append('{0}_{1}'.format(role, locator.package_id)) groupnames.append('{0}_{1}'.format(role, locator.package_id))
except (InvalidLocationError, ItemNotFoundError): except (InvalidLocationError, ItemNotFoundError):
# if it's never been mapped, the auth won't be via the Locator syntax # if it's never been mapped, the auth won't be via the Locator syntax
......
...@@ -8,7 +8,9 @@ from xmodule.modulestore import Location ...@@ -8,7 +8,9 @@ from xmodule.modulestore import Location
from courseware.tests.factories import UserFactory, StaffFactory, InstructorFactory from courseware.tests.factories import UserFactory, StaffFactory, InstructorFactory
from student.tests.factories import AnonymousUserFactory from student.tests.factories import AnonymousUserFactory
from student.roles import GlobalStaff, CourseRole from student.roles import GlobalStaff, CourseRole, CourseStaffRole
from xmodule.modulestore.django import loc_mapper
from xmodule.modulestore.locator import BlockUsageLocator
class RolesTestCase(TestCase): class RolesTestCase(TestCase):
...@@ -45,3 +47,40 @@ class RolesTestCase(TestCase): ...@@ -45,3 +47,40 @@ class RolesTestCase(TestCase):
self.assertTrue(CourseRole("role", lowercase_loc).has_user(uppercase_user)) self.assertTrue(CourseRole("role", lowercase_loc).has_user(uppercase_user))
self.assertTrue(CourseRole("role", uppercase_loc).has_user(uppercase_user)) self.assertTrue(CourseRole("role", uppercase_loc).has_user(uppercase_user))
def test_course_role(self):
"""
Test that giving a user a course role enables access appropriately
"""
course_locator = loc_mapper().translate_location(
self.course.course_id, self.course, add_entry_if_missing=True
)
self.assertFalse(
CourseStaffRole(course_locator).has_user(self.student),
"Student has premature access to {}".format(unicode(course_locator))
)
self.assertFalse(
CourseStaffRole(self.course).has_user(self.student),
"Student has premature access to {}".format(self.course.url())
)
CourseStaffRole(course_locator).add_users(self.student)
self.assertTrue(
CourseStaffRole(course_locator).has_user(self.student),
"Student doesn't have access to {}".format(unicode(course_locator))
)
self.assertTrue(
CourseStaffRole(self.course).has_user(self.student),
"Student doesn't have access to {}".format(unicode(self.course.url()))
)
# now try accessing something internal to the course
vertical_locator = BlockUsageLocator(
package_id=course_locator.package_id, branch='published', block_id='madeup'
)
vertical_location = self.course.replace(category='vertical', name='madeuptoo')
self.assertTrue(
CourseStaffRole(vertical_locator).has_user(self.student),
"Student doesn't have access to {}".format(unicode(vertical_locator))
)
self.assertTrue(
CourseStaffRole(vertical_location, course_context=self.course.course_id).has_user(self.student),
"Student doesn't have access to {}".format(unicode(vertical_location.url()))
)
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