add is_staff to roles api response

EDUCATOR-3796
This commit is contained in:
jansenk
2018-12-20 12:14:39 -05:00
parent 0eaa0f8752
commit eff58b289a
2 changed files with 45 additions and 17 deletions

View File

@@ -1424,6 +1424,8 @@ class UserRoleTest(ModuleStoreTestCase):
"""
USERNAME = "Bob"
EMAIL = "bob@example.com"
STAFF_USERNAME = "Bobstaff"
STAFF_EMAIL = "bobStaff@example.com"
PASSWORD = "edx"
ENABLED_CACHES = ['default']
@@ -1438,38 +1440,62 @@ class UserRoleTest(ModuleStoreTestCase):
email=self.EMAIL,
password=self.PASSWORD,
)
self.staff_user = UserFactory.create(
username=self.STAFF_USERNAME,
email=self.STAFF_EMAIL,
password=self.PASSWORD,
is_staff=True,
)
self.client.login(username=self.USERNAME, password=self.PASSWORD)
def _create_expected_role_dict(self, course, role):
""" Creates the expected role dict object that the view should return """
return {
'course_id': text_type(course.id),
'org': course.org,
'role': role.ROLE,
}
def _assert_roles(self, expected_response):
def _assert_roles(self, expected_roles, is_staff):
""" Asserts that the api call is successful and returns the expected roles """
response = self.client.get(reverse('roles'))
self.assertEqual(response.status_code, status.HTTP_200_OK)
response_data = json.loads(response.content)
self.assertEqual(response_data, expected_response)
sort_by_role_id = lambda r: r['course_id']
response_data['roles'] = sorted(response_data['roles'], key=sort_by_role_id)
expected_roles = sorted(expected_roles, key=sort_by_role_id)
expected = {'roles': expected_roles, 'is_staff': is_staff}
self.assertEqual(response_data, expected)
def _login(self, is_staff):
""" If is_staff is true, logs in the staff user. Otherwise, logs in the non-staff user """
logged_in_user = self.staff_user if is_staff else self.user
self.client.login(username=logged_in_user.username, password=self.PASSWORD)
return logged_in_user
def test_not_logged_in(self):
self.client.logout()
response = self.client.get(reverse('roles'))
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
def test_roles_no_roles(self):
self._assert_roles([])
@ddt.data(True, False)
def test_roles_no_roles(self, is_staff):
self._login(is_staff)
self._assert_roles([], is_staff)
def test_roles(self):
@ddt.data(True, False)
def test_roles(self, is_staff):
logged_in_user = self._login(is_staff)
role1 = CourseStaffRole(self.course1.id)
role1.add_users(self.user)
role1.add_users(logged_in_user)
expected_role1 = self._create_expected_role_dict(self.course1, role1)
self._assert_roles([expected_role1])
expected_roles = [expected_role1]
self._assert_roles(expected_roles, is_staff)
role2 = CourseStaffRole(self.course2.id)
role2.add_users(self.user)
role2.add_users(logged_in_user)
expected_role2 = self._create_expected_role_dict(self.course2, role2)
self._assert_roles([expected_role2, expected_role1])
expected_roles.append(expected_role2)
self._assert_roles(expected_roles, is_staff)
def test_roles_exception(self):
with patch('enrollment.api.get_user_roles') as mock_get_user_roles:

View File

@@ -244,14 +244,16 @@ class EnrollmentUserRolesView(APIView):
).format(username=request.user.username)
}
)
return Response([
{
"org": role.org,
"course_id": text_type(role.course_id),
"role": role.role
}
for role in roles_data
])
return Response({
'roles': [
{
"org": role.org,
"course_id": text_type(role.course_id),
"role": role.role
}
for role in roles_data],
'is_staff': request.user.is_staff,
})
@can_disable_rate_limit