def test_superuser_or_admin_add_admins(self):
        current_admins = obj_build.create_dummy_users(2)
        self.course.admins.add(*current_admins)
        new_admin_names = ['steve', 'stave', 'stove', 'stive']
        new_admins = obj_build.create_dummy_users(2)

        for user in (self.superuser, current_admins[0]):
            self.assertEqual(len(current_admins), self.course.admins.count())

            self.client.force_authenticate(user)
            response = self.client.post(
                self.url, {
                    'new_admins':
                    new_admin_names + [user.username for user in new_admins]
                })

            self.assertEqual(status.HTTP_204_NO_CONTENT, response.status_code)

            expected_usernames = list(
                itertools.chain([user.username for user in current_admins],
                                new_admin_names,
                                [user.username for user in new_admins]))

            self.assertCountEqual(
                expected_usernames,
                [admin.username for admin in self.course.admins.all()])

            self.course.admins.set(current_admins, clear=True)
示例#2
0
    def setUp(self):
        super().setUp()

        self.remaining_students = obj_build.create_dummy_users(2)
        self.students_to_remove = obj_build.create_dummy_users(5)
        self.all_enrolled = self.remaining_students + self.students_to_remove
        self.total_num_enrolled = len(self.all_enrolled)

        self.course.students.add(*self.all_enrolled)

        self.request_body = {
            'remove_students':
                ag_serializers.UserSerializer(self.students_to_remove, many=True).data
        }
示例#3
0
    def setUp(self):
        super().setUp()

        self.remaining_handgraders = obj_build.create_dummy_users(2)
        self.handgraders_to_remove = obj_build.create_dummy_users(5)
        self.all_handgraders = self.remaining_handgraders + self.handgraders_to_remove
        self.total_num_handgraders = len(self.all_handgraders)

        self.course.handgraders.add(*self.all_handgraders)

        self.request_body = {
            "remove_handgraders":
            ag_serializers.UserSerializer(self.handgraders_to_remove,
                                          many=True).data
        }
示例#4
0
    def get_legal_members(self):
        if hasattr(self, '_legal_members'):
            return self._legal_members

        self.project.validate_and_update(max_group_size=3)
        self._legal_members = obj_build.create_dummy_users(2)
        self.project.course.students.add(*self._legal_members)
        return self._legal_members
    def test_admin_add_staff(self):
        current_staff = obj_build.create_dummy_users(2)
        self.course.staff.add(*current_staff)

        new_staff_names = (
            ['staffy1', 'staffy2'] +
            [user.username for user in obj_build.create_dummy_users(2)])

        self.assertEqual(len(current_staff), self.course.staff.count())

        self.client.force_authenticate(self.admin)
        response = self.client.post(self.url, {'new_staff': new_staff_names})
        self.assertEqual(status.HTTP_204_NO_CONTENT, response.status_code)

        new_staff = list(User.objects.filter(username__in=new_staff_names))

        self.assertCountEqual(current_staff + new_staff,
                              self.course.staff.all())
示例#6
0
    def test_admin_update_students(self):
        new_roster = obj_build.create_dummy_users(3)
        self.client.force_authenticate(self.admin)

        response = self.client.put(
            self.url,
            {'new_students':
                [user.username for user in new_roster]})
        self.assertEqual(status.HTTP_204_NO_CONTENT, response.status_code)
        self.assertCountEqual(new_roster, self.course.students.all())
示例#7
0
 def test_other_update_students_permission_denied(self):
     for user in self.staff, self.current_students[0], self.guest:
         self.client.force_authenticate(user)
         response = self.client.put(
             self.url,
             {'new_students':
                 [user.username for user in obj_build.create_dummy_users(2)]})
         self.assertEqual(status.HTTP_403_FORBIDDEN, response.status_code)
         self.assertCountEqual(self.current_students,
                               self.course.students.all())
示例#8
0
    def test_valid_override_group_max_size(self):
        self.student_users += obj_build.create_dummy_users(3)
        self.project.course.students.add(*self.student_users)
        group = ag_models.Group.objects.validate_and_create(
            members=self.student_users,
            project=self.project,
            check_group_size_limits=False)

        group.refresh_from_db()

        self.assertCountEqual(self.student_users, group.members.all())
示例#9
0
 def test_serialize(self):
     project = obj_build.build_project(project_kwargs={
         'max_group_size': 5,
         'guests_can_submit': True
     })
     invitation = ag_models.GroupInvitation.objects.validate_and_create(
         obj_build.create_dummy_user(),
         obj_build.create_dummy_users(2),
         project=project)
     self.do_basic_serialize_test(
         invitation, ag_serializers.SubmissionGroupInvitationSerializer)
示例#10
0
    def test_update_group_error_too_many_members(self):
        group = ag_models.Group.objects.validate_and_create(
            members=self.student_users,
            project=self.project)

        new_members = obj_build.create_dummy_users(5)
        self.project.course.students.add(*new_members)

        with self.assertRaises(exceptions.ValidationError) as cm:
            group.validate_and_update(members=new_members)

        self.assertTrue('members' in cm.exception.message_dict)
    def test_admin_or_staff_or_handgrader_list_staff(self):
        staff = obj_build.create_dummy_users(3)
        self.course.staff.add(*staff)

        expected_content = ag_serializers.UserSerializer(staff, many=True).data

        for user in self.admin, staff[0], self.handgrader:
            self.client.force_authenticate(user)

            response = self.client.get(self.url)

            self.assertEqual(status.HTTP_200_OK, response.status_code)
            self.assertCountEqual(expected_content, response.data)
    def setUp(self):
        super().setUp()

        self.remaining_admin = obj_build.create_dummy_user()
        self.current_admins = obj_build.create_dummy_users(3)
        self.all_admins = [self.remaining_admin] + self.current_admins
        self.total_num_admins = len(self.all_admins)

        self.course.admins.add(*self.all_admins)

        self.request_body = {
            'remove_admins':
            ag_serializers.UserSerializer(self.current_admins, many=True).data
        }
    def setUp(self):
        super().setUp()

        self.remaining_staff = obj_build.create_dummy_user()
        self.staff_to_remove = obj_build.create_dummy_users(3)
        self.all_staff = [self.remaining_staff] + self.staff_to_remove
        self.total_num_staff = len(self.all_staff)

        self.course.staff.add(*self.all_staff)

        self.request_body = {
            'remove_staff':
            ag_serializers.UserSerializer(self.staff_to_remove, many=True).data
        }
示例#14
0
    def test_admin_add_students(self):
        self.client.force_authenticate(self.admin)
        new_student_names = (
            ['steve', 'bill'] + [user.username for user in obj_build.create_dummy_users(3)])

        self.assertEqual(len(self.current_students), self.course.students.count())

        response = self.client.post(self.url, {'new_students': new_student_names})

        new_students = list(
            User.objects.filter(username__in=new_student_names))

        self.assertEqual(status.HTTP_204_NO_CONTENT, response.status_code)
        self.assertCountEqual(new_students + self.current_students,
                              self.course.students.all())
    def test_invalid_invitation_create_user_has_pending_invite_sent(self):
        ag_models.GroupInvitation.objects.validate_and_create(
            invited_users=self.to_invite,
            invitation_creator=self.invitation_creator,
            project=self.project)

        other_invitees = obj_build.create_dummy_users(len(self.to_invite))
        self.project.course.students.add(*other_invitees)

        with self.assertRaises(exceptions.ValidationError) as cm:
            ag_models.GroupInvitation.objects.validate_and_create(
                invitation_creator=self.invitation_creator,
                invited_users=other_invitees,
                project=self.project)

        self.assertIn('pending_invitation', cm.exception.message_dict)
示例#16
0
    def test_update_group_override_min_size(self):
        group = ag_models.Group.objects.validate_and_create(
            members=self.student_users,
            project=self.project)

        self.project.min_group_size = 10
        self.project.max_group_size = 10
        self.project.save()

        new_members = obj_build.create_dummy_users(2)
        self.project.course.students.add(*new_members)
        group.validate_and_update(members=new_members,
                                  check_group_size_limits=False)

        group.refresh_from_db()

        self.assertCountEqual(new_members, group.members.all())
    def setUp(self):
        super().setUp()

        self.to_invite = obj_build.create_dummy_users(3)
        self.to_invite_usernames = [user.username for user in self.to_invite]

        self.invitation_creator = obj_build.create_dummy_user()
        self.invitation_creator_username = self.invitation_creator.username

        self.project = obj_build.build_project(
            project_kwargs={
                'min_group_size': 1,
                'max_group_size': 4
            },
            course_kwargs={
                'students':
                list(itertools.chain([self.invitation_creator],
                                     self.to_invite))
            })
示例#18
0
    def setUp(self):
        super().setUp()

        self.current_students = obj_build.create_dummy_users(5)
        self.course.students.add(*self.current_students)
示例#19
0
    def setUp(self):
        super().setUp()

        self.current_handgraders = obj_build.create_dummy_users(2)
        self.course.handgraders.add(*self.current_handgraders)