Пример #1
0
 def test_select_candidate(self):
     testassignment = mommy.make('core.Assignment')
     testgroup = mommy.make('core.AssignmentGroup',
                            parentnode=testassignment)
     candidate1 = core_mommy.candidate(group=testgroup,
                                       shortname='mrcool',
                                       fullname='Mr. Cool')
     candidate2 = core_mommy.candidate(group=testgroup,
                                       shortname='mrman',
                                       fullname='Mr. Man')
     candidate3 = core_mommy.candidate(group=testgroup,
                                       shortname='sirtoby',
                                       fullname='sir. Toby')
     mockresponse = self.mock_http200_getrequest_htmls(
         cradmin_role=testassignment,
         cradmin_instance=self.__mockinstance_with_devilryrole(
             'departmentadmin'),
         viewkwargs={'pk': testgroup.id})
     selectlist = [
         elem.alltext_normalized
         for elem in mockresponse.selector.list('#id_students > option')
     ]
     self.assertIn(candidate1.relatedstudent.user.get_displayname(),
                   selectlist)
     self.assertIn(candidate2.relatedstudent.user.get_displayname(),
                   selectlist)
     self.assertIn(candidate3.relatedstudent.user.get_displayname(),
                   selectlist)
Пример #2
0
 def test_send_invite_mail(self):
     assignment = mommy.make(
         'core.Assignment',
         long_name='Assignment 1',
         short_name='assignment1',
         parentnode__long_name='Spring2017',
         parentnode__short_name='s17',
         parentnode__parentnode__long_name='DUCK1010 - Object Oriented Programming',
         parentnode__parentnode__short_name='Duck1010',
         students_can_create_groups=True,
     )
     testgroup = mommy.make('core.AssignmentGroup', parentnode=assignment)
     testgroup1 = mommy.make('core.AssignmentGroup', parentnode=assignment)
     sent_by = core_mommy.candidate(testgroup, shortname="*****@*****.**", fullname="April").relatedstudent.user
     sent_to = core_mommy.candidate(testgroup1, shortname="*****@*****.**", fullname="Dewey").relatedstudent.user
     mommy.make('devilry_account.UserEmail', user=sent_to, email="*****@*****.**")
     invite = GroupInvite(group=testgroup, sent_by=sent_by, sent_to=sent_to)
     invite.full_clean()
     invite.save()
     request = self.__fake_request()
     invite.send_invite_notification(request)
     self.assertEqual(len(mail.outbox), 1)
     self.assertEqual(mail.outbox[0].subject, '[Devilry] Project group invite for Duck1010.s17.assignment1')
     url = request.build_absolute_uri(
         reverse('devilry_student_groupinvite_respond', kwargs={'invite_id': invite.id}))
     self.assertIn(url, mail.outbox[0].body)
Пример #3
0
 def test_validation_user_id_send_to_error_already_in_group(self):
     assignment = mommy.make('core.Assignment', students_can_create_groups=True)
     testgroup = mommy.make('core.AssignmentGroup', parentnode=assignment)
     core_mommy.candidate(testgroup)
     sent_to = core_mommy.candidate(testgroup)
     with self.assertRaisesMessage(ValidationError, 'The selected student is not eligible to join the group.'):
         GroupInvite.validate_candidate_id_sent_to(testgroup, sent_to.id)
Пример #4
0
 def test_send_accept_mail(self):
     assignment = mommy.make(
         'core.Assignment',
         long_name='Assignment 1',
         short_name='assignment1',
         parentnode__long_name='Spring2017',
         parentnode__short_name='s17',
         parentnode__parentnode__long_name='DUCK1010 - Object Oriented Programming',
         parentnode__parentnode__short_name='Duck1010',
         students_can_create_groups=True,
     )
     testgroup = mommy.make('core.AssignmentGroup', parentnode=assignment)
     testgroup1 = mommy.make('core.AssignmentGroup', parentnode=assignment)
     sent_by = core_mommy.candidate(testgroup, shortname="*****@*****.**", fullname="April").relatedstudent.user
     sent_to = core_mommy.candidate(testgroup1, shortname="*****@*****.**", fullname="Dewey").relatedstudent.user
     mommy.make('devilry_account.UserEmail', user=sent_to, email="*****@*****.**")
     mommy.make('devilry_account.UserEmail', user=sent_by, email="*****@*****.**")
     invite = GroupInvite(
         group=testgroup,
         sent_by=sent_by,
         sent_to=sent_to
     )
     invite.full_clean()
     invite.save()
     invite.send_invite_notification(self.__fake_request())
     invite.respond(True)
     self.assertEqual(len(mail.outbox), 2)
     self.assertEqual(mail.outbox[1].subject, '[Devilry] Dewey accepted your project group invite')
Пример #5
0
 def test_send_accept_mail(self):
     assignment = mommy.make(
         'core.Assignment',
         long_name='Assignment 1',
         short_name='assignment1',
         parentnode__long_name='Spring2017',
         parentnode__short_name='s17',
         parentnode__parentnode__long_name=
         'DUCK1010 - Object Oriented Programming',
         parentnode__parentnode__short_name='Duck1010',
         students_can_create_groups=True,
     )
     testgroup = mommy.make('core.AssignmentGroup', parentnode=assignment)
     testgroup1 = mommy.make('core.AssignmentGroup', parentnode=assignment)
     sent_by = core_mommy.candidate(testgroup,
                                    shortname="*****@*****.**",
                                    fullname="April").relatedstudent.user
     sent_to = core_mommy.candidate(testgroup1,
                                    shortname="*****@*****.**",
                                    fullname="Dewey").relatedstudent.user
     mommy.make('devilry_account.UserEmail',
                user=sent_to,
                email="*****@*****.**")
     mommy.make('devilry_account.UserEmail',
                user=sent_by,
                email="*****@*****.**")
     invite = GroupInvite(group=testgroup, sent_by=sent_by, sent_to=sent_to)
     invite.full_clean()
     invite.save()
     invite.send_invite_notification(self.__fake_request())
     invite.respond(True)
     self.assertEqual(len(mail.outbox), 2)
     self.assertEqual(mail.outbox[1].subject,
                      '[Devilry] Dewey accepted your project group invite')
Пример #6
0
 def test_success_merge_2_groups_message(self):
     testuser = mommy.make(settings.AUTH_USER_MODEL)
     testassignment = mommy.make_recipe(
         'devilry.apps.core.assignment_activeperiod_start')
     group1 = mommy.make('core.AssignmentGroup',
                         parentnode=testassignment,
                         id=10)
     group2 = mommy.make('core.AssignmentGroup',
                         parentnode=testassignment,
                         id=11)
     core_mommy.candidate(group=group1,
                          shortname='*****@*****.**',
                          fullname='April')
     core_mommy.candidate(group=group2,
                          shortname='*****@*****.**',
                          fullname='Dewey')
     messagesmock = mock.MagicMock()
     self.mock_http302_postrequest(
         cradmin_role=testassignment,
         cradmin_instance=self.__mockinstance_with_devilryrole(
             'departmentadmin'),
         requestuser=testuser,
         messagesmock=messagesmock,
         requestkwargs={'data': {
             'selected_items': [10, 11]
         }})
     messagesmock.add.assert_called_once_with(
         messages.SUCCESS,
         'A group with [email protected], [email protected] has been created!',
         '')
Пример #7
0
 def test_success_merge_2_groups_db(self):
     testuser = mommy.make(settings.AUTH_USER_MODEL)
     testassignment = mommy.make_recipe(
         'devilry.apps.core.assignment_activeperiod_start')
     group1 = mommy.make('core.AssignmentGroup',
                         parentnode=testassignment,
                         id=10)
     group2 = mommy.make('core.AssignmentGroup',
                         parentnode=testassignment,
                         id=11)
     core_mommy.candidate(group=group1)
     core_mommy.candidate(group=group2)
     self.mock_http302_postrequest(
         cradmin_role=testassignment,
         cradmin_instance=self.__mockinstance_with_devilryrole(
             'departmentadmin'),
         requestuser=testuser,
         requestkwargs={'data': {
             'selected_items': [10, 11]
         }})
     self.assertTrue(AssignmentGroup.objects.filter(id=group1.id).exists())
     self.assertFalse(AssignmentGroup.objects.filter(id=group2.id).exists())
     self.assertEqual(
         AssignmentGroup.objects.get(id=group1.id).candidates.count(), 2)
     self.assertEqual(
         AssignmentGroup.objects.get(id=group1.id).feedbackset_set.count(),
         3)
    def test_warning_some_candidates_does_not_qualify(self):
        testassignment1 = mommy.make_recipe(
            'devilry.apps.core.assignment_oldperiod_start',
            short_name='cool',
            passing_grade_min_points=1,
            max_points=1,
        )
        group1 = mommy.make('core.AssignmentGroup', parentnode=testassignment1)
        candidate1 = core_mommy.candidate(group=group1, shortname='april', fullname='April Duck')
        group_mommy.feedbackset_first_attempt_published(group=group1, grading_points=1)

        group2 = mommy.make('core.AssignmentGroup', parentnode=testassignment1)
        candidate2 = core_mommy.candidate(group=group2, shortname='donald', fullname='Donald Duck')
        group_mommy.feedbackset_first_attempt_published(group=group2, grading_points=1)

        testassignment0 = mommy.make_recipe(
            'devilry.apps.core.assignment_oldperiod_middle',
            short_name='imba',
            parentnode__parentnode=testassignment1.parentnode.parentnode,
            passing_grade_min_points=1,
            max_points=1,
        )

        group3 = mommy.make('core.AssignmentGroup', parentnode=testassignment0)
        candidate3 = core_mommy.candidate(group=group3, shortname='dewey', fullname='Dewey Duck')
        group_mommy.feedbackset_first_attempt_published(group=group3, grading_points=1)

        testassignment2 = mommy.make_recipe(
            'devilry.apps.core.assignment_activeperiod_start',
            short_name='cool',
            parentnode__parentnode=testassignment1.parentnode.parentnode,
            passing_grade_min_points=2,
            max_points=3,
        )
        new_group1 = mommy.make('core.AssignmentGroup', parentnode=testassignment2)
        mommy.make('core.Candidate', assignment_group=new_group1, relatedstudent__user=candidate1.relatedstudent.user)

        new_group2 = mommy.make('core.AssignmentGroup', parentnode=testassignment2)
        mommy.make('core.Candidate', assignment_group=new_group2, relatedstudent__user=candidate2.relatedstudent.user)

        new_group3 = mommy.make('core.AssignmentGroup', parentnode=testassignment2)
        mommy.make('core.Candidate', assignment_group=new_group3, relatedstudent__user=candidate3.relatedstudent.user)

        messagesmock = mock.MagicMock()
        self.mock_http302_postrequest(
            cradmin_role=testassignment2,
            viewkwargs={'period_id': testassignment1.parentnode.id},
            messagesmock=messagesmock,
            requestkwargs={
                'data': {
                    'candidates': '[{}, {}, {}]'.format(candidate1.id, candidate2.id, candidate3.id)
                }
            },
            cradmin_instance=self.__mockinstance_with_devilryrole('departmentadmin')
        )
        messagesmock.add.assert_called_once_with(
            messages.WARNING,
            'Some students does not qualify to pass the assignment.',
            ''
        )
Пример #9
0
    def test_filter_unanswered_received_invites(self):
        group = mommy.make('core.AssignmentGroup')
        sent_by = core_mommy.candidate(group=group).relatedstudent.user
        sent_to = core_mommy.candidate(group=group).relatedstudent.user
        mommy.make('core.GroupInvite',
                   sent_by=sent_by,
                   sent_to=sent_to,
                   accepted=False,
                   id=10)
        mommy.make('core.GroupInvite',
                   sent_by=sent_by,
                   sent_to=sent_to,
                   accepted=None,
                   id=11)
        mommy.make('core.GroupInvite',
                   sent_by=sent_by,
                   sent_to=sent_to,
                   accepted=True,
                   id=100)
        mommy.make('core.GroupInvite',
                   sent_by=sent_by,
                   sent_to=sent_to,
                   accepted=None,
                   id=101)

        self.assertEqual(
            set(invite.id for invite in GroupInvite.objects.
                filter_unanswered_received_invites(sent_to)), {11, 101})
Пример #10
0
 def test_validate_user_id_send_to(self):
     assignment = mommy.make('core.Assignment', students_can_create_groups=True)
     testgroup = mommy.make('core.AssignmentGroup', parentnode=assignment)
     testgroup1 = mommy.make('core.AssignmentGroup', parentnode=assignment)
     core_mommy.candidate(testgroup)
     sent_to = core_mommy.candidate(testgroup1)
     with self.assertNumQueries(1):
         GroupInvite.validate_candidate_id_sent_to(testgroup, sent_to.id)
Пример #11
0
 def test_num_queries_reject(self):
     group1 = mommy.make('core.AssignmentGroup', parentnode__students_can_create_groups=True)
     group2 = mommy.make('core.AssignmentGroup', parentnode=group1.parentnode)
     student1 = core_mommy.candidate(group=group1).relatedstudent.user
     student2 = core_mommy.candidate(group=group2).relatedstudent.user
     invite = mommy.make('core.GroupInvite', sent_by=student1, sent_to=student2, group=group1)
     with self.assertNumQueries(9):
         invite.respond(False)
Пример #12
0
 def test_invite_has_already_been_declined(self):
     testgroup = mommy.make('core.AssignmentGroup', parentnode__students_can_create_groups=True)
     testgroup1 = mommy.make('core.AssignmentGroup', parentnode=testgroup.parentnode)
     sent_by = core_mommy.candidate(testgroup).relatedstudent.user
     sent_to = core_mommy.candidate(testgroup1).relatedstudent.user
     invite = mommy.make('core.GroupInvite', group=testgroup, sent_by=sent_by, sent_to=sent_to, accepted=False)
     with self.assertRaisesMessage(ValidationError, 'This invite has already been declined.'):
         invite.respond(False)
    def test_multiple_title(self):
        testassignment1 = mommy.make_recipe(
            'devilry.apps.core.assignment_oldperiod_start',
            short_name='cool',
            parentnode__short_name='s16',
            parentnode__long_name='spring16',
            passing_grade_min_points=1,
            max_points=1,
        )
        group1 = mommy.make('core.AssignmentGroup', parentnode=testassignment1)
        candidate1 = core_mommy.candidate(group=group1, shortname='april', fullname='April Duck')
        group_mommy.feedbackset_first_attempt_published(group=group1, grading_points=1)

        group2 = mommy.make('core.AssignmentGroup', parentnode=testassignment1)
        candidate2 = core_mommy.candidate(group=group2, shortname='donald', fullname='Donald Duck')
        group_mommy.feedbackset_first_attempt_published(group=group2, grading_points=1)

        group3 = mommy.make('core.AssignmentGroup', parentnode=testassignment1)
        candidate3 = core_mommy.candidate(group=group3, shortname='dewey', fullname='Dewey Duck')
        group_mommy.feedbackset_first_attempt_published(group=group3, grading_points=1)

        testassignment2 = mommy.make_recipe(
            'devilry.apps.core.assignment_activeperiod_start',
            short_name='cool',
            parentnode__parentnode=testassignment1.parentnode.parentnode,
            passing_grade_min_points=2,
            max_points=3,
        )
        new_group1 = mommy.make('core.AssignmentGroup', parentnode=testassignment2)
        mommy.make('core.Candidate', assignment_group=new_group1, relatedstudent__user=candidate1.relatedstudent.user)

        new_group2 = mommy.make('core.AssignmentGroup', parentnode=testassignment2)
        mommy.make('core.Candidate', assignment_group=new_group2, relatedstudent__user=candidate2.relatedstudent.user)

        new_group3 = mommy.make('core.AssignmentGroup', parentnode=testassignment2)
        mommy.make('core.Candidate', assignment_group=new_group3, relatedstudent__user=candidate3.relatedstudent.user)

        mockresponse = self.mock_http200_getrequest_htmls(
            cradmin_role=testassignment2,
            viewkwargs={'period_id': testassignment1.parentnode.id},
            cradmin_instance=self.__mockinstance_with_devilryrole('departmentadmin')
        )

        valuelist = [elem.alltext_normalized for elem in mockresponse.selector.list(
            '.django-cradmin-listbuilder-itemvalue-titledescription-title')]
        self.assertEqual(3, len(valuelist))
        self.assertIn(
            '{}({})'.format(candidate1.relatedstudent.user.fullname, candidate1.relatedstudent.user.shortname),
            valuelist
        )
        self.assertIn(
            '{}({})'.format(candidate2.relatedstudent.user.fullname, candidate2.relatedstudent.user.shortname),
            valuelist
        )
        self.assertIn(
            '{}({})'.format(candidate3.relatedstudent.user.fullname, candidate3.relatedstudent.user.shortname),
            valuelist
        )
Пример #14
0
 def test_validate_user_id_send_to(self):
     assignment = mommy.make('core.Assignment',
                             students_can_create_groups=True)
     testgroup = mommy.make('core.AssignmentGroup', parentnode=assignment)
     testgroup1 = mommy.make('core.AssignmentGroup', parentnode=assignment)
     core_mommy.candidate(testgroup)
     sent_to = core_mommy.candidate(testgroup1)
     with self.assertNumQueries(1):
         GroupInvite.validate_candidate_id_sent_to(testgroup, sent_to.id)
Пример #15
0
 def test_validation_user_id_send_to_error_already_in_group(self):
     assignment = mommy.make('core.Assignment',
                             students_can_create_groups=True)
     testgroup = mommy.make('core.AssignmentGroup', parentnode=assignment)
     core_mommy.candidate(testgroup)
     sent_to = core_mommy.candidate(testgroup)
     with self.assertRaisesMessage(
             ValidationError,
             'The selected student is not eligible to join the group.'):
         GroupInvite.validate_candidate_id_sent_to(testgroup, sent_to.id)
Пример #16
0
 def test_h1(self):
     testgroup = mommy.make('core.AssignmentGroup')
     devilry_core_mommy_factories.candidate(group=testgroup,
                                            fullname='Test User')
     mockresponse = self.mock_http200_getrequest_htmls(
         cradmin_role=testgroup.assignment,
         cradmin_instance=self.__mockinstance_with_devilryrole('subjectadmin'),
         viewkwargs={'pk': testgroup.id})
     self.assertEqual(
         'Test User',
         mockresponse.selector.one('h1').alltext_normalized)
Пример #17
0
 def test_respond_reject(self):
     group1 = mommy.make('core.AssignmentGroup', parentnode__students_can_create_groups=True)
     group2 = mommy.make('core.AssignmentGroup', parentnode=group1.parentnode)
     student1 = core_mommy.candidate(group=group1).relatedstudent.user
     student2 = core_mommy.candidate(group=group2).relatedstudent.user
     invite = mommy.make('core.GroupInvite', sent_by=student1, sent_to=student2, group=group1)
     invite.respond(False)
     self.assertFalse(GroupInvite.objects.get(id=invite.id).accepted)
     group = AssignmentGroup.objects.filter_user_is_candidate(student2)
     self.assertEqual(group.count(), 1)
     self.assertEqual(group.first().id, group2.id)
Пример #18
0
 def test_h1(self):
     testgroup = mommy.make('core.AssignmentGroup')
     devilry_core_mommy_factories.candidate(group=testgroup,
                                            fullname='Test User')
     mockresponse = self.mock_http200_getrequest_htmls(
         cradmin_role=testgroup.assignment,
         cradmin_instance=self.__mockinstance_with_devilryrole(
             'subjectadmin'),
         viewkwargs={'pk': testgroup.id})
     self.assertEqual('Test User',
                      mockresponse.selector.one('h1').alltext_normalized)
Пример #19
0
    def test_student_already_member_of_the_group(self):
        testgroup = mommy.make('core.AssignmentGroup')
        sent_by = core_mommy.candidate(testgroup).relatedstudent.user
        sent_to = core_mommy.candidate(testgroup).relatedstudent.user

        with self.assertRaisesMessage(
                ValidationError,
                'The student is already a member of the group.'):
            invite = GroupInvite(group=testgroup,
                                 sent_by=sent_by,
                                 sent_to=sent_to)
            invite.full_clean()
Пример #20
0
    def test_filter_unanswered_received_invites(self):
        group = mommy.make('core.AssignmentGroup')
        sent_by = core_mommy.candidate(group=group).relatedstudent.user
        sent_to = core_mommy.candidate(group=group).relatedstudent.user
        mommy.make('core.GroupInvite', sent_by=sent_by, sent_to=sent_to, accepted=False, id=10)
        mommy.make('core.GroupInvite', sent_by=sent_by, sent_to=sent_to, accepted=None, id=11)
        mommy.make('core.GroupInvite', sent_by=sent_by, sent_to=sent_to, accepted=True, id=100)
        mommy.make('core.GroupInvite', sent_by=sent_by, sent_to=sent_to, accepted=None, id=101)

        self.assertEqual(
            set(invite.id for invite in GroupInvite.objects.filter_unanswered_received_invites(sent_to)),
            {11, 101}
        )
Пример #21
0
 def test_num_queries_reject(self):
     group1 = mommy.make('core.AssignmentGroup',
                         parentnode__students_can_create_groups=True)
     group2 = mommy.make('core.AssignmentGroup',
                         parentnode=group1.parentnode)
     student1 = core_mommy.candidate(group=group1).relatedstudent.user
     student2 = core_mommy.candidate(group=group2).relatedstudent.user
     invite = mommy.make('core.GroupInvite',
                         sent_by=student1,
                         sent_to=student2,
                         group=group1)
     with self.assertNumQueries(9):
         invite.respond(False)
Пример #22
0
 def test_sanity(self):
     testgroup = mommy.make('core.AssignmentGroup',
                            parentnode__students_can_create_groups=True)
     testgroup1 = mommy.make('core.AssignmentGroup',
                             parentnode=testgroup.parentnode)
     sent_by = core_mommy.candidate(testgroup).relatedstudent.user
     sent_to = core_mommy.candidate(testgroup1).relatedstudent.user
     invite = GroupInvite(group=testgroup, sent_by=sent_by, sent_to=sent_to)
     invite.full_clean()
     self.assertEqual(invite.sent_to, sent_to)
     self.assertEqual(invite.sent_by, sent_by)
     self.assertEqual(invite.group, testgroup)
     self.assertIsNotNone(invite.sent_datetime)
Пример #23
0
 def test_success_merge_multiple_groups_db(self):
     testuser = mommy.make(settings.AUTH_USER_MODEL)
     testassignment = mommy.make_recipe(
         'devilry.apps.core.assignment_activeperiod_start')
     group1 = mommy.make('core.AssignmentGroup', parentnode=testassignment)
     group2 = mommy.make('core.AssignmentGroup', parentnode=testassignment)
     group3 = mommy.make('core.AssignmentGroup', parentnode=testassignment)
     group4 = mommy.make('core.AssignmentGroup', parentnode=testassignment)
     core_mommy.candidate(group=group1)
     core_mommy.candidate(group=group2)
     core_mommy.candidate(group=group3)
     core_mommy.candidate(group=group4)
     core_mommy.examiner(group=group1)
     core_mommy.examiner(group=group2)
     core_mommy.examiner(group=group3)
     core_mommy.examiner(group=group4)
     self.mock_http302_postrequest(
         cradmin_role=testassignment,
         cradmin_instance=self.__mockinstance_with_devilryrole(
             'departmentadmin'),
         requestuser=testuser,
         requestkwargs={
             'data': {
                 'selected_items':
                 [group1.id, group2.id, group3.id, group4.id]
             }
         })
     self.assertFalse(AssignmentGroup.objects.filter(id=group2.id).exists())
     self.assertFalse(AssignmentGroup.objects.filter(id=group3.id).exists())
     self.assertFalse(AssignmentGroup.objects.filter(id=group4.id).exists())
     self.assertTrue(AssignmentGroup.objects.filter(id=group1.id).exists())
Пример #24
0
    def test_student_already_member_of_the_group(self):
        testgroup = mommy.make('core.AssignmentGroup')
        sent_by = core_mommy.candidate(testgroup).relatedstudent.user
        sent_to = core_mommy.candidate(testgroup).relatedstudent.user

        with self.assertRaisesMessage(
                ValidationError,
                'The student is already a member of the group.'):
            invite = GroupInvite(
                group=testgroup,
                sent_by=sent_by,
                sent_to=sent_to
            )
            invite.full_clean()
Пример #25
0
    def test_student_sent_to_is_not_registerd_on_assignment(self):
        testgroup = mommy.make('core.AssignmentGroup',
                               parentnode__students_can_create_groups=True)
        testgroup1 = mommy.make('core.AssignmentGroup')
        sent_by = core_mommy.candidate(testgroup).relatedstudent.user
        sent_to = core_mommy.candidate(testgroup1).relatedstudent.user

        with self.assertRaisesMessage(
                ValidationError,
                'The invited student is not registered on this assignment.'):
            invite = GroupInvite(group=testgroup,
                                 sent_by=sent_by,
                                 sent_to=sent_to)
            invite.full_clean()
Пример #26
0
 def test_success_merge_multiple_groups_db(self):
     testuser = mommy.make(settings.AUTH_USER_MODEL)
     testassignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start')
     group1 = mommy.make('core.AssignmentGroup', parentnode=testassignment)
     group2 = mommy.make('core.AssignmentGroup', parentnode=testassignment)
     group3 = mommy.make('core.AssignmentGroup', parentnode=testassignment)
     group4 = mommy.make('core.AssignmentGroup', parentnode=testassignment)
     core_mommy.candidate(group=group1)
     core_mommy.candidate(group=group2)
     core_mommy.candidate(group=group3)
     core_mommy.candidate(group=group4)
     core_mommy.examiner(group=group1)
     core_mommy.examiner(group=group2)
     core_mommy.examiner(group=group3)
     core_mommy.examiner(group=group4)
     self.mock_http302_postrequest(
         cradmin_role=testassignment,
         cradmin_instance=self.__mockinstance_with_devilryrole('departmentadmin'),
         requestuser=testuser,
         requestkwargs={
             'data': {
                 'selected_items': [group1.id, group2.id, group3.id, group4.id]
             }
         })
     self.assertFalse(AssignmentGroup.objects.filter(id=group2.id).exists())
     self.assertFalse(AssignmentGroup.objects.filter(id=group3.id).exists())
     self.assertFalse(AssignmentGroup.objects.filter(id=group4.id).exists())
     self.assertTrue(AssignmentGroup.objects.filter(id=group1.id).exists())
Пример #27
0
 def test_select_candidate(self):
     testassignment = mommy.make('core.Assignment')
     testgroup = mommy.make('core.AssignmentGroup', parentnode=testassignment)
     candidate1 = core_mommy.candidate(group=testgroup, shortname='mrcool', fullname='Mr. Cool')
     candidate2 = core_mommy.candidate(group=testgroup, shortname='mrman', fullname='Mr. Man')
     candidate3 = core_mommy.candidate(group=testgroup, shortname='sirtoby', fullname='sir. Toby')
     mockresponse = self.mock_http200_getrequest_htmls(
         cradmin_role=testassignment,
         cradmin_instance=self.__mockinstance_with_devilryrole('departmentadmin'),
         viewkwargs={'pk': testgroup.id}
     )
     selectlist = [elem.alltext_normalized for elem in mockresponse.selector.list('#id_students > option')]
     self.assertIn(candidate1.relatedstudent.user.get_displayname(), selectlist)
     self.assertIn(candidate2.relatedstudent.user.get_displayname(), selectlist)
     self.assertIn(candidate3.relatedstudent.user.get_displayname(), selectlist)
Пример #28
0
 def test_sanity(self):
     testgroup = mommy.make('core.AssignmentGroup', parentnode__students_can_create_groups=True)
     testgroup1 = mommy.make('core.AssignmentGroup', parentnode=testgroup.parentnode)
     sent_by = core_mommy.candidate(testgroup).relatedstudent.user
     sent_to = core_mommy.candidate(testgroup1).relatedstudent.user
     invite = GroupInvite(
         group=testgroup,
         sent_by=sent_by,
         sent_to=sent_to
     )
     invite.full_clean()
     self.assertEqual(invite.sent_to, sent_to)
     self.assertEqual(invite.sent_by, sent_by)
     self.assertEqual(invite.group, testgroup)
     self.assertIsNotNone(invite.sent_datetime)
Пример #29
0
    def test_student_sent_to_is_not_registerd_on_assignment(self):
        testgroup = mommy.make('core.AssignmentGroup', parentnode__students_can_create_groups=True)
        testgroup1 = mommy.make('core.AssignmentGroup')
        sent_by = core_mommy.candidate(testgroup).relatedstudent.user
        sent_to = core_mommy.candidate(testgroup1).relatedstudent.user

        with self.assertRaisesMessage(
                ValidationError,
                'The invited student is not registered on this assignment.'):
            invite = GroupInvite(
                group=testgroup,
                sent_by=sent_by,
                sent_to=sent_to
            )
            invite.full_clean()
Пример #30
0
 def test_invite_has_already_been_declined(self):
     testgroup = mommy.make('core.AssignmentGroup',
                            parentnode__students_can_create_groups=True)
     testgroup1 = mommy.make('core.AssignmentGroup',
                             parentnode=testgroup.parentnode)
     sent_by = core_mommy.candidate(testgroup).relatedstudent.user
     sent_to = core_mommy.candidate(testgroup1).relatedstudent.user
     invite = mommy.make('core.GroupInvite',
                         group=testgroup,
                         sent_by=sent_by,
                         sent_to=sent_to,
                         accepted=False)
     with self.assertRaisesMessage(
             ValidationError, 'This invite has already been declined.'):
         invite.respond(False)
    def test_simple_description(self):
        testassignment1 = mommy.make_recipe(
            'devilry.apps.core.assignment_oldperiod_start',
            short_name='cool',
            parentnode__short_name='s16',
            parentnode__long_name='spring16',
            passing_grade_min_points=1,
            max_points=1,
        )
        group1 = mommy.make('core.AssignmentGroup', parentnode=testassignment1)
        candidate1 = core_mommy.candidate(group=group1, shortname='april', fullname='April Duck')
        group_mommy.feedbackset_first_attempt_published(group=group1, grading_points=1)

        testassignment2 = mommy.make_recipe(
            'devilry.apps.core.assignment_activeperiod_start',
            short_name='cool',
            parentnode__parentnode=testassignment1.parentnode.parentnode,
            passing_grade_min_points=2,
            max_points=3,
        )
        group2 = mommy.make('core.AssignmentGroup', parentnode=testassignment2)
        mommy.make('core.Candidate', assignment_group=group2, relatedstudent__user=candidate1.relatedstudent.user)

        mockresponse = self.mock_http200_getrequest_htmls(
            cradmin_role=testassignment2,
            viewkwargs={'period_id': testassignment1.parentnode.id},
            cradmin_instance=self.__mockinstance_with_devilryrole('departmentadmin')
        )

        valuelist = [elem.alltext_normalized for elem in mockresponse.selector.list(
            '.django-cradmin-listbuilder-itemvalue-titledescription-description')]
        self.assertEqual(3, len(valuelist))
        self.assertIn('{} - {}'.format(testassignment1.long_name, testassignment1.parentnode.long_name), valuelist)
        self.assertIn('01.1000 - 12.1999 (semester start/semester end)', valuelist)
        self.assertIn('passed (1/1) passed (3/3)', valuelist)
Пример #32
0
    def test_user_sending_is_not_part_of_the_group(self):
        testgroup = mommy.make('core.AssignmentGroup')
        testgroup1 = mommy.make('core.AssignmentGroup', parentnode=testgroup.parentnode)
        testgroup2 = mommy.make('core.AssignmentGroup', parentnode=testgroup.parentnode)
        sent_by = core_mommy.candidate(testgroup1).relatedstudent.user
        sent_to = core_mommy.candidate(testgroup2).relatedstudent.user

        with self.assertRaisesMessage(
                ValidationError,
                'The user sending an invite must be a Candiate on the group.'):
            invite = GroupInvite(
                group=testgroup,
                sent_by=sent_by,
                sent_to=sent_to
            )
            invite.full_clean()
Пример #33
0
    def test_assignment_does_not_allow_students_to_form_groups(self):
        testgroup = mommy.make('core.AssignmentGroup',
                               parentnode__students_can_create_groups=False)
        testgroup1 = mommy.make('core.AssignmentGroup',
                                parentnode=testgroup.parentnode)
        sent_by = core_mommy.candidate(testgroup).relatedstudent.user
        sent_to = core_mommy.candidate(testgroup1).relatedstudent.user

        with self.assertRaisesMessage(
                ValidationError,
                'This assignment does not allow students to form project groups on their own.'
        ):
            invite = GroupInvite(group=testgroup,
                                 sent_by=sent_by,
                                 sent_to=sent_to)
            invite.full_clean()
Пример #34
0
    def test_student_already_invited_but_not_responded(self):
        testgroup = mommy.make('core.AssignmentGroup', parentnode__students_can_create_groups=True)
        testgroup1 = mommy.make('core.AssignmentGroup', parentnode=testgroup.parentnode)
        sent_by = core_mommy.candidate(testgroup).relatedstudent.user
        sent_to = core_mommy.candidate(testgroup1).relatedstudent.user
        mommy.make('core.GroupInvite', group=testgroup, sent_by=sent_by, sent_to=sent_to)

        with self.assertRaisesMessage(
                ValidationError,
                'The student is already invited to join the group, but they have not responded yet.'):
            invite = GroupInvite(
                group=testgroup,
                sent_by=sent_by,
                sent_to=sent_to
            )
            invite.full_clean()
Пример #35
0
    def test_user_sending_is_not_part_of_the_group(self):
        testgroup = mommy.make('core.AssignmentGroup')
        testgroup1 = mommy.make('core.AssignmentGroup',
                                parentnode=testgroup.parentnode)
        testgroup2 = mommy.make('core.AssignmentGroup',
                                parentnode=testgroup.parentnode)
        sent_by = core_mommy.candidate(testgroup1).relatedstudent.user
        sent_to = core_mommy.candidate(testgroup2).relatedstudent.user

        with self.assertRaisesMessage(
                ValidationError,
                'The user sending an invite must be a Candiate on the group.'):
            invite = GroupInvite(group=testgroup,
                                 sent_by=sent_by,
                                 sent_to=sent_to)
            invite.full_clean()
Пример #36
0
 def test_respond_reject(self):
     group1 = mommy.make('core.AssignmentGroup',
                         parentnode__students_can_create_groups=True)
     group2 = mommy.make('core.AssignmentGroup',
                         parentnode=group1.parentnode)
     student1 = core_mommy.candidate(group=group1).relatedstudent.user
     student2 = core_mommy.candidate(group=group2).relatedstudent.user
     invite = mommy.make('core.GroupInvite',
                         sent_by=student1,
                         sent_to=student2,
                         group=group1)
     invite.respond(False)
     self.assertFalse(GroupInvite.objects.get(id=invite.id).accepted)
     group = AssignmentGroup.objects.filter_user_is_candidate(student2)
     self.assertEqual(group.count(), 1)
     self.assertEqual(group.first().id, group2.id)
Пример #37
0
    def test_assignment_does_not_allow_students_to_form_groups(self):
        testgroup = mommy.make('core.AssignmentGroup',
                               parentnode__students_can_create_groups=False)
        testgroup1 = mommy.make('core.AssignmentGroup', parentnode=testgroup.parentnode)
        sent_by = core_mommy.candidate(testgroup).relatedstudent.user
        sent_to = core_mommy.candidate(testgroup1).relatedstudent.user

        with self.assertRaisesMessage(
                ValidationError,
                'This assignment does not allow students to form project groups on their own.'):
            invite = GroupInvite(
                group=testgroup,
                sent_by=sent_by,
                sent_to=sent_to
            )
            invite.full_clean()
Пример #38
0
    def test_student_sent_to_is_already_in_a_group_with_more_than_one_student(self):
        testgroup = mommy.make('core.AssignmentGroup', parentnode__students_can_create_groups=True)
        testgroup1 = mommy.make('core.AssignmentGroup', parentnode=testgroup.parentnode)
        sent_by = core_mommy.candidate(testgroup).relatedstudent.user
        sent_to = core_mommy.candidate(testgroup1).relatedstudent.user
        core_mommy.candidate(testgroup1)

        with self.assertRaisesMessage(
                ValidationError,
                'The invited student is already in a project group with more than 1 students.'):
            invite = GroupInvite(
                group=testgroup,
                sent_by=sent_by,
                sent_to=sent_to,
                accepted=True
            )
            invite.full_clean()
Пример #39
0
 def test_pop_candidate_db(self):
     testgroup = mommy.make('core.AssignmentGroup')
     core_mommy.candidate(group=testgroup)
     candidate = core_mommy.candidate(group=testgroup, shortname='sirtoby', fullname='sir. Toby')
     self.mock_http302_postrequest(
         cradmin_role=testgroup.parentnode,
         cradmin_instance=self.__mockinstance_with_devilryrole('departmentadmin'),
         viewkwargs={'pk': testgroup.id},
         requestkwargs={
             'data':
                 {'students': candidate.id}
         }
     )
     candidate = Candidate.objects.get(id=candidate.id)
     self.assertNotEqual(candidate.assignment_group, testgroup)
     testgroup = AssignmentGroup.objects.get(id=testgroup.id)
     self.assertEqual(1, testgroup.cached_data.candidate_count);
Пример #40
0
 def test_pop_candidate_db(self):
     testgroup = mommy.make('core.AssignmentGroup')
     core_mommy.candidate(group=testgroup)
     candidate = core_mommy.candidate(group=testgroup, shortname='sirtoby', fullname='sir. Toby')
     self.mock_http302_postrequest(
         cradmin_role=testgroup.parentnode,
         cradmin_instance=self.__mockinstance_with_devilryrole('departmentadmin'),
         viewkwargs={'pk': testgroup.id},
         requestkwargs={
             'data':
                 {'students': candidate.id}
         }
     )
     candidate = Candidate.objects.get(id=candidate.id)
     self.assertNotEqual(candidate.assignment_group, testgroup)
     testgroup = AssignmentGroup.objects.get(id=testgroup.id)
     self.assertEqual(1, testgroup.cached_data.candidate_count)
Пример #41
0
 def test_send_invite_to_choices_queryset_pending_is_excluded(self):
     group1 = mommy.make('core.AssignmentGroup',
                         parentnode__students_can_create_groups=True)
     group2 = mommy.make('core.AssignmentGroup',
                         parentnode=group1.parentnode)
     group3 = mommy.make('core.AssignmentGroup',
                         parentnode=group1.parentnode)
     group4 = mommy.make('core.AssignmentGroup',
                         parentnode=group1.parentnode)
     candidate1 = core_mommy.candidate(group=group1,
                                       fullname="Louie",
                                       shortname="louie")
     core_mommy.candidate(group=group2, fullname="Huey", shortname="huey")
     core_mommy.candidate(group=group2,
                          fullname="Donald",
                          shortname="donald")
     candidate4 = core_mommy.candidate(group=group3,
                                       fullname="April",
                                       shortname="april")
     candidate5 = core_mommy.candidate(group=group4,
                                       fullname="Dewey",
                                       shortname="dewey")
     mommy.make('core.GroupInvite',
                group=group1,
                sent_to=candidate4.relatedstudent.user,
                sent_by=candidate1.relatedstudent.user)
     candidates = GroupInvite.send_invite_to_choices_queryset(group1)
     self.assertEqual(candidates.count(), 1)
     self.assertEqual(set(candidate.id for candidate in candidates),
                      {candidate5.id})
Пример #42
0
 def test_pop_candidate_sanity(self):
     testgroup = mommy.make('core.AssignmentGroup')
     core_mommy.candidate(group=testgroup)
     candidate = core_mommy.candidate(group=testgroup,
                                      shortname='sirtoby',
                                      fullname='sir. Toby')
     messagesmock = mock.MagicMock()
     self.mock_http302_postrequest(
         cradmin_role=testgroup.parentnode,
         cradmin_instance=self.__mockinstance_with_devilryrole(
             'departmentadmin'),
         messagesmock=messagesmock,
         viewkwargs={'pk': testgroup.id},
         requestkwargs={'data': {
             'students': candidate.id
         }})
     messagesmock.add.assert_called_once_with(
         messages.SUCCESS, '{} was removed from the project group'.format(
             candidate.relatedstudent.user.get_displayname()), '')
Пример #43
0
    def test_student_sent_to_is_already_in_a_group_with_more_than_one_student(
            self):
        testgroup = mommy.make('core.AssignmentGroup',
                               parentnode__students_can_create_groups=True)
        testgroup1 = mommy.make('core.AssignmentGroup',
                                parentnode=testgroup.parentnode)
        sent_by = core_mommy.candidate(testgroup).relatedstudent.user
        sent_to = core_mommy.candidate(testgroup1).relatedstudent.user
        core_mommy.candidate(testgroup1)

        with self.assertRaisesMessage(
                ValidationError,
                'The invited student is already in a project group with more than 1 students.'
        ):
            invite = GroupInvite(group=testgroup,
                                 sent_by=sent_by,
                                 sent_to=sent_to,
                                 accepted=True)
            invite.full_clean()
Пример #44
0
    def test_create_groups_expired(self):
        testgroup = mommy.make('core.AssignmentGroup',
                               parentnode__students_can_create_groups=True,
                               parentnode__students_can_not_create_groups_after=timezone.now() - timedelta(days=1))
        testgroup1 = mommy.make('core.AssignmentGroup', parentnode=testgroup.parentnode)
        sent_by = core_mommy.candidate(testgroup).relatedstudent.user
        sent_to = core_mommy.candidate(testgroup1).relatedstudent.user

        with self.assertRaisesMessage(
                ValidationError,
                'Creating project groups without administrator approval is not '
                'allowed on this assignment anymore. Please contact you course '
                'administrator if you think this is wrong.'):
            invite = GroupInvite(
                group=testgroup,
                sent_by=sent_by,
                sent_to=sent_to
            )
            invite.full_clean()
    def test_merge_assignmentgroup_multiple_times(self):
        test_assignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start')
        group1 = mommy.make('core.AssignmentGroup', parentnode=test_assignment, name='group1')
        group2 = mommy.make('core.AssignmentGroup', parentnode=test_assignment, name='group2')
        group3 = mommy.make('core.AssignmentGroup', parentnode=test_assignment, name='group3')
        group4 = mommy.make('core.AssignmentGroup', parentnode=test_assignment, name='group4')

        core_mommy.candidate(group=group1)
        core_mommy.candidate(group=group1)
        core_mommy.candidate(group=group2)
        core_mommy.candidate(group=group3)
        core_mommy.candidate(group=group4)
        core_mommy.examiner(group=group1)
        core_mommy.examiner(group=group2)
        core_mommy.examiner(group=group2)
        core_mommy.examiner(group=group3)
        group1_state = group1.get_current_state()
        group2_state = group2.get_current_state()
        group3_state = group3.get_current_state()
        group4_state = group4.get_current_state()

        AssignmentGroup.merge_groups([group1, group3])
        AssignmentGroup.merge_groups([group2, group4])

        group1_merge_history = AssignmentGroupHistory.objects.get(assignment_group__id=group1.id).merge_history
        group2_merge_history = AssignmentGroupHistory.objects.get(assignment_group__id=group2.id).merge_history
        self.assertDictEqual(group1_merge_history['groups'][0]['state'], group1_state)
        self.assertDictEqual(group1_merge_history['groups'][1]['state'], group3_state)
        self.assertDictEqual(group2_merge_history['groups'][0]['state'], group2_state)
        self.assertDictEqual(group2_merge_history['groups'][1]['state'], group4_state)
        group1 = AssignmentGroup.objects.get(id=group1.id)
        group2 = AssignmentGroup.objects.get(id=group2.id)

        # Checking one more level in the Btree
        group1_state = AssignmentGroup.objects.get(id=group1.id).get_current_state()
        group2_state = AssignmentGroup.objects.get(id=group2.id).get_current_state()
        AssignmentGroup.merge_groups([group1, group2])
        group1_merge_history_new = AssignmentGroupHistory.objects.get(assignment_group__id=group1.id).merge_history
        self.assertListEqual(group1_merge_history_new['groups'][0]['groups'], group1_merge_history['groups'])
        self.assertListEqual(group1_merge_history_new['groups'][1]['groups'], group2_merge_history['groups'])
        self.assertDictEqual(group1_merge_history_new['groups'][0]['state'], group1_state)
        self.assertDictEqual(group1_merge_history_new['groups'][1]['state'], group2_state)
Пример #46
0
    def test_student_already_invited_but_not_responded(self):
        testgroup = mommy.make('core.AssignmentGroup',
                               parentnode__students_can_create_groups=True)
        testgroup1 = mommy.make('core.AssignmentGroup',
                                parentnode=testgroup.parentnode)
        sent_by = core_mommy.candidate(testgroup).relatedstudent.user
        sent_to = core_mommy.candidate(testgroup1).relatedstudent.user
        mommy.make('core.GroupInvite',
                   group=testgroup,
                   sent_by=sent_by,
                   sent_to=sent_to)

        with self.assertRaisesMessage(
                ValidationError,
                'The student is already invited to join the group, but they have not responded yet.'
        ):
            invite = GroupInvite(group=testgroup,
                                 sent_by=sent_by,
                                 sent_to=sent_to)
            invite.full_clean()
Пример #47
0
 def test_error_merge_less_than_2_groups(self):
     testuser = mommy.make(settings.AUTH_USER_MODEL)
     testassignment = mommy.make_recipe(
         'devilry.apps.core.assignment_activeperiod_start')
     group = mommy.make('core.AssignmentGroup',
                        parentnode=testassignment,
                        id=10)
     core_mommy.candidate(group=group)
     messagesmock = mock.MagicMock()
     self.mock_http302_postrequest(
         cradmin_role=testassignment,
         cradmin_instance=self.__mockinstance_with_devilryrole(
             'departmentadmin'),
         requestuser=testuser,
         messagesmock=messagesmock,
         requestkwargs={'data': {
             'selected_items': [10]
         }})
     messagesmock.add.assert_called_once_with(
         messages.WARNING, 'Cannot merge less than 2 groups', '')
Пример #48
0
 def test_pop_candidate_sanity(self):
     testgroup = mommy.make('core.AssignmentGroup')
     core_mommy.candidate(group=testgroup)
     candidate = core_mommy.candidate(group=testgroup, shortname='sirtoby', fullname='sir. Toby')
     messagesmock = mock.MagicMock()
     self.mock_http302_postrequest(
         cradmin_role=testgroup.parentnode,
         cradmin_instance=self.__mockinstance_with_devilryrole('departmentadmin'),
         messagesmock=messagesmock,
         viewkwargs={'pk': testgroup.id},
         requestkwargs={
             'data':
                 {'students': candidate.id}
         }
     )
     messagesmock.add.assert_called_once_with(
         messages.SUCCESS,
         '{} was removed from the project group'.format(candidate.relatedstudent.user.get_displayname()),
         ''
     )
Пример #49
0
    def test_create_groups_expired(self):
        testgroup = mommy.make(
            'core.AssignmentGroup',
            parentnode__students_can_create_groups=True,
            parentnode__students_can_not_create_groups_after=timezone.now() -
            timedelta(days=1))
        testgroup1 = mommy.make('core.AssignmentGroup',
                                parentnode=testgroup.parentnode)
        sent_by = core_mommy.candidate(testgroup).relatedstudent.user
        sent_to = core_mommy.candidate(testgroup1).relatedstudent.user

        with self.assertRaisesMessage(
                ValidationError,
                'Creating project groups without administrator approval is not '
                'allowed on this assignment anymore. Please contact you course '
                'administrator if you think this is wrong.'):
            invite = GroupInvite(group=testgroup,
                                 sent_by=sent_by,
                                 sent_to=sent_to)
            invite.full_clean()
Пример #50
0
 def test_success_merge_2_groups_db(self):
     testuser = mommy.make(settings.AUTH_USER_MODEL)
     testassignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start')
     group1 = mommy.make('core.AssignmentGroup', parentnode=testassignment, id=10)
     group2 = mommy.make('core.AssignmentGroup', parentnode=testassignment, id=11)
     core_mommy.candidate(group=group1)
     core_mommy.candidate(group=group2)
     self.mock_http302_postrequest(
         cradmin_role=testassignment,
         cradmin_instance=self.__mockinstance_with_devilryrole('departmentadmin'),
         requestuser=testuser,
         requestkwargs={
             'data': {
                 'selected_items': [10, 11]
             }
         })
     self.assertTrue(AssignmentGroup.objects.filter(id=group1.id).exists())
     self.assertFalse(AssignmentGroup.objects.filter(id=group2.id).exists())
     self.assertEqual(AssignmentGroup.objects.get(id=group1.id).candidates.count(), 2)
     self.assertEqual(AssignmentGroup.objects.get(id=group1.id).feedbackset_set.count(), 3)
Пример #51
0
 def test_error_merge_less_than_2_groups(self):
     testuser = mommy.make(settings.AUTH_USER_MODEL)
     testassignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start')
     group = mommy.make('core.AssignmentGroup', parentnode=testassignment, id=10)
     core_mommy.candidate(group=group)
     messagesmock = mock.MagicMock()
     self.mock_http302_postrequest(
         cradmin_role=testassignment,
         cradmin_instance=self.__mockinstance_with_devilryrole('departmentadmin'),
         requestuser=testuser,
         messagesmock=messagesmock,
         requestkwargs={
             'data': {
                 'selected_items': [10]
             }
         })
     messagesmock.add.assert_called_once_with(
         messages.WARNING,
         'Cannot merge less than 2 groups',
         ''
     )
Пример #52
0
 def test_success_merge_2_groups_message(self):
     testuser = mommy.make(settings.AUTH_USER_MODEL)
     testassignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start')
     group1 = mommy.make('core.AssignmentGroup', parentnode=testassignment, id=10)
     group2 = mommy.make('core.AssignmentGroup', parentnode=testassignment, id=11)
     core_mommy.candidate(group=group1, shortname='*****@*****.**', fullname='April')
     core_mommy.candidate(group=group2, shortname='*****@*****.**', fullname='Dewey')
     messagesmock = mock.MagicMock()
     self.mock_http302_postrequest(
         cradmin_role=testassignment,
         cradmin_instance=self.__mockinstance_with_devilryrole('departmentadmin'),
         requestuser=testuser,
         messagesmock=messagesmock,
         requestkwargs={
             'data': {
                 'selected_items': [10, 11]
             }
         })
     messagesmock.add.assert_called_once_with(
         messages.SUCCESS,
         'A group with [email protected], [email protected] has been created!',
         ''
     )
Пример #53
0
 def test_send_invite_to_choices_queryset(self):
     group1 = mommy.make('core.AssignmentGroup', parentnode__students_can_create_groups=True)
     group2 = mommy.make('core.AssignmentGroup', parentnode=group1.parentnode)
     group3 = mommy.make('core.AssignmentGroup', parentnode=group1.parentnode)
     group4 = mommy.make('core.AssignmentGroup', parentnode=group1.parentnode)
     core_mommy.candidate(group=group1, fullname="Louie", shortname="louie")
     core_mommy.candidate(group=group2, fullname="Huey", shortname="huey")
     core_mommy.candidate(group=group2, fullname="Donald", shortname="donald")
     candidate4 = core_mommy.candidate(group=group3, fullname="April", shortname="april")
     candidate5 = core_mommy.candidate(group=group4, fullname="Dewey", shortname="dewey")
     candidates = GroupInvite.send_invite_to_choices_queryset(group1)
     self.assertEqual(candidates.count(), 2)
     self.assertEqual(
         set(candidate.id for candidate in candidates),
         {candidate4.id, candidate5.id}
     )
Пример #54
0
 def test_send_invite_mail(self):
     assignment = mommy.make(
         'core.Assignment',
         long_name='Assignment 1',
         short_name='assignment1',
         parentnode__long_name='Spring2017',
         parentnode__short_name='s17',
         parentnode__parentnode__long_name=
         'DUCK1010 - Object Oriented Programming',
         parentnode__parentnode__short_name='Duck1010',
         students_can_create_groups=True,
     )
     testgroup = mommy.make('core.AssignmentGroup', parentnode=assignment)
     testgroup1 = mommy.make('core.AssignmentGroup', parentnode=assignment)
     sent_by = core_mommy.candidate(testgroup,
                                    shortname="*****@*****.**",
                                    fullname="April").relatedstudent.user
     sent_to = core_mommy.candidate(testgroup1,
                                    shortname="*****@*****.**",
                                    fullname="Dewey").relatedstudent.user
     mommy.make('devilry_account.UserEmail',
                user=sent_to,
                email="*****@*****.**")
     invite = GroupInvite(group=testgroup, sent_by=sent_by, sent_to=sent_to)
     invite.full_clean()
     invite.save()
     request = self.__fake_request()
     invite.send_invite_notification(request)
     self.assertEqual(len(mail.outbox), 1)
     self.assertEqual(
         mail.outbox[0].subject,
         '[Devilry] Project group invite for Duck1010.s17.assignment1')
     url = request.build_absolute_uri(
         reverse('devilry_student_groupinvite_respond',
                 kwargs={'invite_id': invite.id}))
     self.assertIn(url, mail.outbox[0].body)
Пример #55
0
 def test_cannot_pop_candidate_if_there_is_only_one(self):
     testgroup = mommy.make('core.AssignmentGroup')
     candidate = core_mommy.candidate(group=testgroup)
     messagesmock = mock.MagicMock()
     self.mock_http302_postrequest(
         cradmin_role=testgroup.parentnode,
         cradmin_instance=self.__mockinstance_with_devilryrole(
             'departmentadmin'),
         messagesmock=messagesmock,
         viewkwargs={'pk': testgroup.id},
         requestkwargs={'data': {
             'students': candidate.id
         }})
     messagesmock.add.assert_called_once_with(
         messages.WARNING,
         'Cannot split student if there is less than 2 students in project group.',
         '')
Пример #56
0
 def test_cannot_pop_candidate_if_there_is_only_one(self):
     testgroup = mommy.make('core.AssignmentGroup')
     candidate = core_mommy.candidate(group=testgroup)
     messagesmock = mock.MagicMock()
     self.mock_http302_postrequest(
         cradmin_role=testgroup.parentnode,
         cradmin_instance=self.__mockinstance_with_devilryrole('departmentadmin'),
         messagesmock=messagesmock,
         viewkwargs={'pk': testgroup.id},
         requestkwargs={
             'data':
                 {'students': candidate.id}
         }
     )
     messagesmock.add.assert_called_once_with(
         messages.WARNING,
         'Cannot split student if there is less than 2 students in project group.',
         ''
     )
Пример #57
0
 def test_title_multiple_candidates(self):
     testgroup = mommy.make('core.AssignmentGroup')
     devilry_core_mommy_factories.candidate(group=testgroup,
                                            fullname='UserB')
     devilry_core_mommy_factories.candidate(group=testgroup,
                                            shortname='usera')
     devilry_core_mommy_factories.candidate(group=testgroup,
                                            fullname='UserC')
     mockresponse = self.mock_http200_getrequest_htmls(
         cradmin_role=testgroup.assignment,
         cradmin_instance=self.__mockinstance_with_devilryrole('subjectadmin'),
         viewkwargs={'pk': testgroup.id})
     self.assertIn(
         'usera, UserB, UserC',
         mockresponse.selector.one('title').alltext_normalized)
Пример #58
0
 def test_examiner_count_filter(self):
     testuser = mommy.make(settings.AUTH_USER_MODEL)
     testassignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start')
     group1 = mommy.make('core.AssignmentGroup', parentnode=testassignment)
     group2 = mommy.make('core.AssignmentGroup', parentnode=testassignment)
     core_mommy.candidate(group=group1)
     core_mommy.candidate(group=group1)
     core_mommy.candidate(group=group2)
     core_mommy.examiner(group=group2)
     core_mommy.examiner(group=group2)
     mockresponse = self.mock_http200_getrequest_htmls(
         cradmin_role=testassignment,
         cradmin_instance=self.__mockinstance_with_devilryrole('departmentadmin'),
         requestuser=testuser,
         viewkwargs={
             'filters_string': 'examinercount-eq-2'
         })
     self.assertEqual(
         1,
         mockresponse.selector.count('.django-cradmin-listbuilder-itemvalue'))