def post(self, request, course_id, rolename): """ Implement a handler for the POST method. """ kwargs = self._get_request_kwargs(course_id, rolename) form = CourseDiscussionRolesForm(kwargs, request_user=request.user) if not form.is_valid(): raise ValidationError(form.errors) course_id = form.cleaned_data['course_key'] rolename = form.cleaned_data['rolename'] serializer = DiscussionRolesSerializer(data=request.data) if not serializer.is_valid(): raise ValidationError(serializer.errors) action = serializer.validated_data['action'] user = serializer.validated_data['user'] try: update_forum_role(course_id, user, rolename, action) except Role.DoesNotExist: raise ValidationError(u"Role '{}' does not exist".format(rolename)) role = form.cleaned_data['role'] data = {'course_id': course_id, 'users': role.users.all()} context = { 'course_discussion_settings': get_course_discussion_settings(course_id) } serializer = DiscussionRolesListSerializer(data, context=context) return Response(serializer.data)
def test_revoke_badrole(self): user = self.moderators[0] with pytest.raises(Role.DoesNotExist): update_forum_role(self.course.id, user, 'robot-not-a-real-role', 'allow')
def test_bad_mode(self): user = UserFactory() with pytest.raises(ValueError): update_forum_role(self.course.id, user, FORUM_ROLE_MODERATOR, 'robot-not-a-mode')
def test_revoke_twice(self): user = self.moderators[0] update_forum_role(self.course.id, user, FORUM_ROLE_MODERATOR, 'revoke') self.assertNotIn(user, self.mod_role.users.all()) update_forum_role(self.course.id, user, FORUM_ROLE_MODERATOR, 'revoke') self.assertNotIn(user, self.mod_role.users.all())
def test_revoke_notallowed(self): user = UserFactory() update_forum_role(self.course.id, user, FORUM_ROLE_MODERATOR, 'revoke') self.assertNotIn(user, self.mod_role.users.all())
def test_allow_twice(self): user = UserFactory.create() update_forum_role(self.course.id, user, FORUM_ROLE_MODERATOR, 'allow') self.assertIn(user, self.mod_role.users.all()) update_forum_role(self.course.id, user, FORUM_ROLE_MODERATOR, 'allow') self.assertIn(user, self.mod_role.users.all())
def test_allow_badrole(self): user = UserFactory.create() with pytest.raises(Role.DoesNotExist): update_forum_role(self.course.id, user, 'robot-not-a-real-role', 'allow')
def test_revoke(self): user = self.moderators[0] update_forum_role(self.course.id, user, FORUM_ROLE_MODERATOR, 'revoke') assert user not in self.mod_role.users.all()
def test_allow(self): user = UserFactory.create() update_forum_role(self.course.id, user, FORUM_ROLE_MODERATOR, 'allow') assert user in self.mod_role.users.all()
def test_bad_mode(self): user = UserFactory() update_forum_role(self.course.id, user, FORUM_ROLE_MODERATOR, 'robot-not-a-mode')
def test_revoke_badrole(self): user = self.moderators[0] update_forum_role(self.course.id, user, 'robot-not-a-real-role', 'allow')
def test_allow_badrole(self): user = UserFactory.create() update_forum_role(self.course.id, user, 'robot-not-a-real-role', 'allow')