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)
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)
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)
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)
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)
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)
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)
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)