Пример #1
0
    def test_copy_course(self):
        proj1 = obj_build.make_project()
        course = proj1.course
        proj2 = obj_build.make_project(course)

        admins = obj_build.make_admin_users(course, 4)
        staff = obj_build.make_staff_users(course, 3)
        students = obj_build.make_student_users(course, 5)
        handgraders = obj_build.make_handgrader_users(course, 2)

        self.assertNotEqual(0, course.staff.count())
        self.assertNotEqual(0, course.students.count())
        self.assertNotEqual(0, course.handgraders.count())

        name = 'stove'
        new_course = copy_course(course, name, Semester.summer, 2019)

        self.assertEqual(name, new_course.name)
        self.assertEqual(Semester.summer, new_course.semester)
        self.assertEqual(2019, new_course.year)

        self.assertCountEqual(admins, new_course.admins.all())
        self.assertSequenceEqual([], new_course.staff.all())
        self.assertSequenceEqual([], new_course.students.all())
        self.assertSequenceEqual([], new_course.handgraders.all())

        old_project_pks = {proj.pk for proj in course.projects.all()}
        new_project_pks = {proj.pk for proj in new_course.projects.all()}
        self.assertTrue(old_project_pks.isdisjoint(new_project_pks))

        self.assertSetEqual({proj.name
                             for proj in course.projects.all()},
                            {proj.name
                             for proj in new_course.projects.all()})
    def test_student_user_roles(self):
        [student] = obj_build.make_student_users(self.course, 1)

        expected = self.expected_response_base()
        expected['is_student'] = True

        self.do_get_object_test(self.client, student, self.url, expected)
Пример #3
0
    def setUp(self):
        super().setUp()

        self.project = obj_build.make_project(max_group_size=2)
        self.course = self.project.course

        self.student_users = unsorted_users(obj_build.make_student_users(self.course, 2))
        self.staff_users = unsorted_users(obj_build.make_staff_users(self.course, 2))
        self.guest_group = obj_build.make_users(2)
    def test_non_staff_get_order_permission_denied(self):
        [enrolled] = obj_build.make_student_users(self.course, 1)
        [handgrader] = obj_build.make_handgrader_users(self.course, 1)

        for user in enrolled, handgrader:
            self.client.force_authenticate(user)

            response = self.client.get(self.url)
            self.assertEqual(status.HTTP_403_FORBIDDEN, response.status_code)
    def test_student_not_in_group_get_handgrading_result_permission_denied(self):
        self.handgrading_rubric.validate_and_update(show_grades_and_rubric_to_students=True)
        self.project.validate_and_update(visible_to_students=True)

        [other_student] = obj_build.make_student_users(self.course, 1)
        self.client.force_authenticate(other_student)

        response = self.client.get(self.url)
        self.assertEqual(status.HTTP_403_FORBIDDEN, response.status_code)
Пример #6
0
    def test_non_admin_create_permission_denied(self):
        [staff] = obj_build.make_staff_users(self.project.course, 1)
        self.do_permission_denied_create_test(ag_models.AGTestSuite.objects,
                                              self.client, staff, self.url,
                                              self.create_data)

        [enrolled] = obj_build.make_student_users(self.project.course, 1)
        self.do_permission_denied_create_test(ag_models.AGTestSuite.objects,
                                              self.client, enrolled, self.url,
                                              self.create_data)
    def test_non_admin_create_permission_denied(self):
        data = {'name': 'advnaieroa'}

        [staff] = obj_build.make_staff_users(self.ag_test_suite.project.course, 1)
        self.do_permission_denied_create_test(
            ag_models.AGTestCase.objects, self.client, staff, self.url, data)

        [enrolled] = obj_build.make_student_users(self.ag_test_suite.project.course, 1)
        self.do_permission_denied_create_test(
            ag_models.AGTestCase.objects, self.client, enrolled, self.url, data)
    def setUp(self):
        super().setUp()
        self.course = obj_build.make_course()
        self.client = APIClient()
        self.url = reverse('course-staff', kwargs={'pk': self.course.pk})

        [self.admin] = obj_build.make_admin_users(self.course, 1)
        [self.student] = obj_build.make_student_users(self.course, 1)
        [self.guest] = obj_build.make_users(1)
        [self.handgrader] = obj_build.make_handgrader_users(self.course, 1)
Пример #9
0
    def test_non_admin_create_permission_denied(self):
        [enrolled] = obj_build.make_student_users(self.course, 1)
        [staff] = obj_build.make_staff_users(self.course, 1)
        [handgrader] = obj_build.make_users(1)
        self.project.course.handgraders.add(handgrader)

        for user in [enrolled, staff, handgrader]:
            self.do_permission_denied_create_test(
                handgrading_models.HandgradingRubric.objects, self.client,
                user, self.url, self.data)
    def test_non_admin_set_order_permission_denied(self):
        [staff] = obj_build.make_staff_users(self.course, 1)
        [enrolled] = obj_build.make_student_users(self.course, 1)
        [handgrader] = obj_build.make_handgrader_users(self.course, 1)

        for user in staff, enrolled, handgrader:
            self.client.force_authenticate(user)

            original_order = list(self.handgrading_rubric.get_criterion_order())
            response = self.client.put(self.url, original_order[::-1])

            self.assertEqual(status.HTTP_403_FORBIDDEN, response.status_code)
            self.assertSequenceEqual(original_order, self.handgrading_rubric.get_criterion_order())
    def test_non_admin_create_permission_denied(self):
        data = {
            'name': 'xcm,vnm,xczv',
            'cmd': 'echo "wow"',
        }

        [staff] = obj_build.make_staff_users(self.course, 1)
        self.do_permission_denied_create_test(
            ag_models.AGTestCommand.objects, self.client, staff, self.url, data)

        [enrolled] = obj_build.make_student_users(self.course, 1)
        self.do_permission_denied_create_test(
            ag_models.AGTestCommand.objects, self.client, enrolled, self.url, data)
Пример #12
0
    def test_normal_update_group(self):
        group = ag_models.Group.objects.validate_and_create(
            members=self.student_users,
            project=self.project)

        new_members = unsorted_users(obj_build.make_student_users(self.course, 2))

        group.validate_and_update(members=new_members)

        loaded_group = ag_models.Group.objects.get(pk=group.pk)
        self.assertCountEqual(new_members, loaded_group.members.all())
        self.assertSequenceEqual([user.username for user in sorted_users(new_members)],
                                 loaded_group.member_names)
Пример #13
0
    def setUp(self):
        super().setUp()
        self.handgrading_rubric = handgrading_models.HandgradingRubric.objects.validate_and_create(
            points_style=handgrading_models.PointsStyle.
            start_at_max_and_subtract,
            max_points=0,
            show_grades_and_rubric_to_students=False,
            handgraders_can_leave_comments=False,
            handgraders_can_adjust_points=True,
            project=obj_build.build_project())

        submission = obj_build.make_submission(
            submitted_filenames=["test.cpp"])

        self.handgrading_result = handgrading_models.HandgradingResult.objects.validate_and_create(
            submission=submission,
            group=submission.group,
            handgrading_rubric=self.handgrading_rubric)

        comment_data = {
            "location": {
                "first_line": 0,
                "last_line": 1,
                "filename": "test.cpp"
            },
            "text": "Sample comment text.",
            "handgrading_result": self.handgrading_result
        }

        self.comment = handgrading_models.Comment.objects.validate_and_create(
            **comment_data)
        self.comment2 = handgrading_models.Comment.objects.validate_and_create(
            **comment_data)
        self.course = self.handgrading_rubric.project.course
        self.client = APIClient()
        self.url = reverse('comment-detail', kwargs={'pk': self.comment.pk})

        [self.admin] = obj_build.make_admin_users(self.course, 1)
        [self.staff] = obj_build.make_staff_users(self.course, 1)
        [self.handgrader] = obj_build.make_handgrader_users(self.course, 1)
        [self.student] = obj_build.make_student_users(self.course, 1)
Пример #14
0
    def setUp(self):
        super().setUp()
        handgrading_rubric = handgrading_models.HandgradingRubric.objects.validate_and_create(
            points_style=handgrading_models.PointsStyle.
            start_at_max_and_subtract,
            max_points=0,
            show_grades_and_rubric_to_students=False,
            handgraders_can_leave_comments=True,
            handgraders_can_adjust_points=True,
            project=obj_build.build_project())

        criterion = handgrading_models.Criterion.objects.validate_and_create(
            points=0, handgrading_rubric=handgrading_rubric)

        submission = obj_build.make_submission(
            submitted_filenames=["test.cpp"])

        self.handgrading_result = handgrading_models.HandgradingResult.objects.validate_and_create(
            submission=submission,
            group=submission.group,
            handgrading_rubric=handgrading_rubric)

        criterion_result_data = {
            "selected": True,
            "criterion": criterion,
            "handgrading_result": self.handgrading_result
        }

        self.criterion_result = handgrading_models.CriterionResult.objects.validate_and_create(
            **criterion_result_data)

        self.course = handgrading_rubric.project.course
        self.client = APIClient()
        self.url = reverse('criterion-result-detail',
                           kwargs={'pk': self.criterion_result.pk})

        [self.admin] = obj_build.make_admin_users(self.course, 1)
        [self.handgrader] = obj_build.make_handgrader_users(self.course, 1)
        [self.staff] = obj_build.make_staff_users(self.course, 1)
        [self.enrolled] = obj_build.make_student_users(self.course, 1)
    def test_non_staff_list_cmds_permission_denied(self):
        [enrolled] = obj_build.make_student_users(self.course, 1)
        self.client.force_authenticate(enrolled)

        response = self.client.get(self.url)
        self.assertEqual(status.HTTP_403_FORBIDDEN, response.status_code)
 def test_non_staff_get_permission_denied(self):
     [enrolled] = obj_build.make_student_users(self.course, 1)
     self.do_permission_denied_get_test(self.client, enrolled, self.url)
    def test_student_delete_permission_denied(self):
        [student] = obj_build.make_student_users(self.course, 1)

        self.do_delete_object_permission_denied_test(self.applied_annotation,
                                                     self.client, student,
                                                     self.url)
Пример #18
0
 def test_student_create_permission_denied(self):
     [enrolled] = obj_build.make_student_users(self.course, 1)
     self.do_permission_denied_create_test(
         handgrading_models.CriterionResult.objects, self.client, enrolled,
         self.url, self.data)
 def test_non_admin_create_permission_denied(self):
     [enrolled] = obj_build.make_student_users(self.course, 1)
     self.do_permission_denied_create_test(
         hg_models.Criterion.objects, self.client, enrolled, self.url, self.data)
 def test_non_staff_non_handgrader_get_handgrading_results_permission_denied(self):
     [student] = obj_build.make_student_users(self.course, 1)
     self.client.force_authenticate(student)
     response = self.client.get(reverse('handgrading_results', kwargs={'pk': self.project.pk}))
     self.assertEqual(status.HTTP_403_FORBIDDEN, response.status_code)