Example #1
0
 def test_grouplist_status_corrected_show_grade_sanity(self):
     testuser = mommy.make(settings.AUTH_USER_MODEL)
     testperiod = mommy.make_recipe('devilry.apps.core.period_active')
     testgroup = mommy.make(
         'core.AssignmentGroup',
         parentnode=mommy.make_recipe(
             'devilry.apps.core.assignment_activeperiod_start',
             parentnode=testperiod))
     mommy.make('core.Candidate',
                relatedstudent__user=testuser,
                assignment_group=testgroup)
     devilry_group_mommy_factories.feedbackset_first_attempt_published(
         group=testgroup, grading_points=3)
     devilry_group_mommy_factories.feedbackset_new_attempt_published(
         group=testgroup, grading_points=2)
     mockresponse = self.mock_http200_getrequest_htmls(
         requestuser=testuser, cradmin_role=testperiod)
     self.assertFalse(
         mockresponse.selector.exists(
             '.devilry-cradmin-groupitemvalue '
             '.devilry-cradmin-groupitemvalue-status'))
     self.assertEqual(
         'Grade: passed',
         mockresponse.selector.one(
             '.devilry-cradmin-groupitemvalue '
             '.devilry-cradmin-groupitemvalue-grade').alltext_normalized)
Example #2
0
 def test_is_not_waiting_for_deliveries_if_last_published_feedbackset_is_last_feedbackset(
         self):
     testperiod = mommy.make('core.Period')
     testassignment = mommy.make('core.Assignment', parentnode=testperiod)
     user = mommy.make(settings.AUTH_USER_MODEL)
     relatedstudent = mommy.make('core.RelatedStudent',
                                 period=testperiod,
                                 user=user)
     testgroup = mommy.make('core.AssignmentGroup',
                            parentnode=testassignment)
     mommy.make('core.Candidate',
                assignment_group=testgroup,
                relatedstudent=relatedstudent)
     group_factory.feedbackset_first_attempt_published(
         group=testgroup,
         grading_points=0,
         deadline_datetime=timezone.now() + timedelta(days=1),
     )
     group_factory.feedbackset_new_attempt_published(
         group=testgroup,
         grading_points=10,
         deadline_datetime=timezone.now() + timedelta(days=4),
     )
     # Run collector
     collector = PeriodAllResultsCollector(
         period=testperiod, related_student_ids=[relatedstudent.id])
     self.assertFalse(
         collector.results[relatedstudent.id].is_waiting_for_deliveries(
             testassignment.id))
 def test_get_feedbackset_second_created_deadline_event(self):
     assignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start')
     feedbackset = group_mommy.feedbackset_first_attempt_published(
         group__parentnode=assignment,
         is_last_in_group=None)
     group_mommy.feedbackset_new_attempt_published(group=feedbackset.group)
     mockresponse = self.mock_http200_getrequest_htmls(cradmin_role=feedbackset.group)
     self.assertTrue(mockresponse.selector.exists('.devilry-group-feedbackfeed-event-message-deadline-created'))
 def test_redirect_on_last_feedbackset_unpublished_multiple_feedbacksets(self):
     group = mommy.make('core.AssignmentGroup')
     examiner = mommy.make('core.Examiner',
                           assignmentgroup=group,
                           relatedexaminer=mommy.make('core.RelatedExaminer'))
     group_mommy.feedbackset_first_attempt_published(group=examiner.assignmentgroup, is_last_in_group=None)
     group_mommy.feedbackset_new_attempt_published(group=examiner.assignmentgroup, is_last_in_group=None)
     group_mommy.feedbackset_new_attempt_unpublished(group=examiner.assignmentgroup)
     mockresponse = self.mock_getrequest(cradmin_role=examiner.assignmentgroup)
     self.assertEquals(302, mockresponse.response.status_code)
 def test_get_examiner_new_attempt_feedback_tab_does_not_exist_if_last_feedbackset_is_published(self):
     testgroup = mommy.make('core.AssignmentGroup')
     group_mommy.feedbackset_new_attempt_published(
         group=testgroup,
         deadline_datetime=timezone.now() + timedelta(days=3))
     examiner = mommy.make('core.Examiner', assignmentgroup=testgroup)
     mockresponse = self.mock_http200_getrequest_htmls(
         cradmin_role=testgroup,
         requestuser=examiner.relatedexaminer.user
     )
     self.assertFalse(mockresponse.selector.exists('.devilry-group-feedbackfeed-feedback-button'))
 def test_raises_404_feedbackset_is_not_last_feedbackset(self):
     testassignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start')
     testgroup = mommy.make('core.AssignmentGroup', parentnode=testassignment)
     testfeedbackset = group_mommy.feedbackset_first_attempt_published(group=testgroup)
     group_mommy.feedbackset_new_attempt_published(group=testgroup, deadline_datetime=timezone.now())
     with self.assertRaises(Http404):
         self.mock_http200_getrequest_htmls(
             cradmin_role=testgroup,
             viewkwargs={
                 'pk': testfeedbackset.id
             })
 def test_get_examiner_new_attempt_feedback_tab_does_not_exist_if_last_feedbackset_is_published(self):
     testgroup = mommy.make('core.AssignmentGroup')
     group_mommy.feedbackset_new_attempt_published(
         group=testgroup,
         deadline_datetime=timezone.now() + timedelta(days=3))
     examiner = mommy.make('core.Examiner', assignmentgroup=testgroup)
     mockresponse = self.mock_http200_getrequest_htmls(
         cradmin_role=testgroup,
         requestuser=examiner.relatedexaminer.user
     )
     self.assertFalse(mockresponse.selector.exists('.devilry-group-feedbackfeed-feedback-button'))
 def test_raises_404_feedbackset_is_not_last_feedbackset(self):
     testassignment = mommy.make_recipe(
         'devilry.apps.core.assignment_activeperiod_start')
     testgroup = mommy.make('core.AssignmentGroup',
                            parentnode=testassignment)
     testfeedbackset = group_mommy.feedbackset_first_attempt_published(
         group=testgroup)
     group_mommy.feedbackset_new_attempt_published(
         group=testgroup, deadline_datetime=timezone.now())
     with self.assertRaises(Http404):
         self.mock_http200_getrequest_htmls(
             cradmin_role=testgroup, viewkwargs={'pk': testfeedbackset.id})
    def test_post_feedback_updates_score_last_feedbackset_is_not_first_feedbackset(
            self):
        testassignment = mommy.make_recipe(
            'devilry.apps.core.assignment_activeperiod_start')
        testgroup = mommy.make('core.AssignmentGroup',
                               parentnode=testassignment)
        first_feedbackset_publishing_datetime = timezone.now(
        ) - timezone.timedelta(days=2)
        last_feedbackset_publishing_datetime = timezone.now(
        ) - timezone.timedelta(days=1)
        group_mommy.feedbackset_first_attempt_published(
            group=testgroup,
            grading_points=1,
            grading_published_datetime=first_feedbackset_publishing_datetime)
        group_mommy.feedbackset_new_attempt_published(
            group=testgroup,
            grading_points=0,
            grading_published_datetime=last_feedbackset_publishing_datetime)
        testuser = mommy.make(settings.AUTH_USER_MODEL)

        # Test that the first feedbackset is not changed for sanity!
        first_feedbackset = testgroup.cached_data.first_feedbackset
        self.assertEqual(first_feedbackset.grading_points, 1)
        self.assertNotEqual(first_feedbackset.grading_published_by, testuser)
        self.assertEqual(first_feedbackset.grading_published_datetime,
                         first_feedbackset_publishing_datetime)

        # Test the last feedbackset before bulk feedback.
        last_feedbackset = testgroup.cached_data.last_feedbackset
        self.assertEqual(last_feedbackset.grading_points, 0)
        self.assertNotEqual(last_feedbackset.grading_published_by, testuser)
        self.assertEqual(last_feedbackset.grading_published_datetime,
                         last_feedbackset_publishing_datetime)

        self.mock_http302_postrequest(
            cradmin_role=testassignment,
            cradmin_instance=self.__mock_crinstance(),
            requestuser=testuser,
            requestkwargs={
                'data': {
                    'feedback_comment_text': 'feedback comment',
                    'selected_items': [testgroup.id]
                }
            })

        feedbackset = FeedbackSet.objects.get(id=last_feedbackset.id)
        self.assertEqual(feedbackset.grading_points, testassignment.max_points)
        self.assertEqual(feedbackset.grading_published_by, testuser)
        self.assertTrue(feedbackset.grading_published_datetime >
                        last_feedbackset_publishing_datetime)
    def test_get_num_elements_in_timeline(self):
        testuser = mommy.make(settings.AUTH_USER_MODEL)
        assignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start')
        group = mommy.make('core.AssignmentGroup', parentnode=assignment)
        now = timezone.now()
        group_mommy.feedbackset_first_attempt_published(
                group=group,
                is_last_in_group=None,
                created_datetime=now - timezone.timedelta(days=20),
                grading_published_datetime=now-timezone.timedelta(days=19))
        group_mommy.feedbackset_new_attempt_published(
                group=group,
                is_last_in_group=None,
                created_datetime=now - timezone.timedelta(days=18),
                deadline_datetime=now-timezone.timedelta(days=17),
                grading_published_datetime=now-timezone.timedelta(days=16))
        group_mommy.feedbackset_new_attempt_published(
                group=group,
                is_last_in_group=None,
                created_datetime=now - timezone.timedelta(days=15),
                deadline_datetime=now-timezone.timedelta(days=14),
                grading_published_datetime=now-timezone.timedelta(days=13))
        group_mommy.feedbackset_new_attempt_published(
                group=group,
                created_datetime=now - timezone.timedelta(days=12),
                deadline_datetime=now-timezone.timedelta(days=11),
                grading_published_datetime=now-timezone.timedelta(days=10))
        timelinebuilder = FeedbackFeedTimelineBuilder(group=group, requestuser=testuser, devilryrole='unused')
        timelinebuilder.build()

        self.assertEquals(11, len(timelinebuilder.timeline))
 def test_get_num_elements_in_timeline(self):
     testuser = mommy.make(settings.AUTH_USER_MODEL)
     testassignment = mommy.make_recipe(
         'devilry.apps.core.assignment_activeperiod_start')
     testgroup = mommy.make('core.AssignmentGroup',
                            parentnode=testassignment)
     now = timezone.now()
     group_mommy.feedbackset_first_attempt_published(
         group=testgroup,
         created_datetime=now - timezone.timedelta(days=20),
         grading_published_datetime=now - timezone.timedelta(days=19))
     group_mommy.feedbackset_new_attempt_published(
         group=testgroup,
         created_datetime=now - timezone.timedelta(days=18),
         deadline_datetime=now - timezone.timedelta(days=17),
         grading_published_datetime=now - timezone.timedelta(days=16))
     group_mommy.feedbackset_new_attempt_published(
         group=testgroup,
         created_datetime=now - timezone.timedelta(days=15),
         deadline_datetime=now - timezone.timedelta(days=14),
         grading_published_datetime=now - timezone.timedelta(days=13))
     group_mommy.feedbackset_new_attempt_published(
         group=testgroup,
         created_datetime=now - timezone.timedelta(days=12),
         deadline_datetime=now - timezone.timedelta(days=11),
         grading_published_datetime=now - timezone.timedelta(days=10))
     feedbackset_queryset = builder_base.get_feedbackfeed_builder_queryset(
         group=testgroup, requestuser=testuser, devilryrole='unused')
     timelinebuilder = FeedbackFeedTimelineBuilder(
         feedbacksets=feedbackset_queryset, group=testgroup)
     timelinebuilder.build()
     self.assertEquals(11, len(timelinebuilder.timeline))
     self.assertEquals(4, group_models.FeedbackSet.objects.count())
Example #12
0
 def test_grouplist_status_corrected_show_grade_sanity(self):
     testuser = mommy.make(settings.AUTH_USER_MODEL)
     testgroup = mommy.make('core.AssignmentGroup',
                            parentnode=mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start'))
     mommy.make('core.Candidate',
                relatedstudent__user=testuser,
                assignment_group=testgroup)
     devilry_group_mommy_factories.feedbackset_first_attempt_published(
         group=testgroup, grading_points=3, is_last_in_group=False)
     devilry_group_mommy_factories.feedbackset_new_attempt_published(
         group=testgroup, is_last_in_group=True, grading_points=2)
     mockresponse = self.mock_http200_getrequest_htmls(
             requestuser=testuser)
     self.assertFalse(
             mockresponse.selector.exists(
                     '.devilry-cradmin-groupitemvalue '
                     '.devilry-cradmin-groupitemvalue-status'))
     self.assertEqual(
             'Grade: passed',
             mockresponse.selector.one(
                     '.devilry-cradmin-groupitemvalue '
                     '.devilry-cradmin-groupitemvalue-grade').alltext_normalized)
 def test_is_not_waiting_for_deliveries_if_last_published_feedbackset_is_last_feedbackset(self):
     testperiod = mommy.make('core.Period')
     testassignment = mommy.make('core.Assignment', parentnode=testperiod)
     user = mommy.make(settings.AUTH_USER_MODEL)
     relatedstudent = mommy.make('core.RelatedStudent', period=testperiod, user=user)
     testgroup = mommy.make('core.AssignmentGroup', parentnode=testassignment)
     mommy.make('core.Candidate', assignment_group=testgroup, relatedstudent=relatedstudent)
     group_factory.feedbackset_first_attempt_published(
         group=testgroup,
         grading_points=0,
         deadline_datetime=timezone.now() + timedelta(days=1),
     )
     group_factory.feedbackset_new_attempt_published(
         group=testgroup,
         grading_points=10,
         deadline_datetime=timezone.now() + timedelta(days=4),
     )
     # Run collector
     collector = PeriodAllResultsCollector(
         period=testperiod,
         related_student_ids=[relatedstudent.id]
     )
     self.assertFalse(collector.results[relatedstudent.id].is_waiting_for_deliveries(testassignment.id))
 def test_get_last_deadline(self):
     testuser = mommy.make(settings.AUTH_USER_MODEL)
     assignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start')
     group = mommy.make('core.AssignmentGroup', parentnode=assignment)
     now = timezone.now()
     group_mommy.feedbackset_first_attempt_published(
             group=group,
             is_last_in_group=None,
             grading_published_datetime=now-timezone.timedelta(days=10))
     feedbackset_last = group_mommy.feedbackset_new_attempt_published(
             group=group,
             deadline_datetime=now-timezone.timedelta(days=9),
             # is_last_in_group=None,
             grading_published_datetime=now-timezone.timedelta(days=8))
     timelinebuilder = FeedbackFeedTimelineBuilder(group=group, requestuser=testuser, devilryrole='unused')
     timelinebuilder.build()
     self.assertEquals(feedbackset_last.deadline_datetime, timelinebuilder.get_last_deadline())
    def setUp(self):
        AssignmentGroupDbCacheCustomSql().initialize()
        testuser = mommy.make(settings.AUTH_USER_MODEL)
        self.assignment = mommy.make_recipe(
            'devilry.apps.core.assignment_oldperiod_start',
            short_name='cool',
            long_name='imba',
            parentnode__short_name='s15',
            parentnode__long_name='spring 15',
            passing_grade_min_points=10,
            max_points=15)
        group1 = mommy.make('core.AssignmentGroup',
                            parentnode=self.assignment,
                            name='group1')
        self.previous_feedbackset = group_mommy.feedbackset_new_attempt_published(
            group=group1, grading_points=11)
        candidate1 = core_mommy.candidate(group=group1,
                                          fullname='Mr. Pomeroy',
                                          shortname='mrpomeroy')

        current_assignment = mommy.make_recipe(
            'devilry.apps.core.assignment_activeperiod_start',
            short_name='cool',
            passing_grade_min_points=7,
            max_points=10)
        current_group = mommy.make('core.AssignmentGroup',
                                   parentnode=current_assignment,
                                   name='current_group1')
        mommy.make('core.Candidate',
                   assignment_group=current_group,
                   relatedstudent__user=candidate1.relatedstudent.user)

        self.passed_in_previous = PassedInPreviousPeriod(
            current_assignment, self.assignment.parentnode)
        candidate_queryset = self.passed_in_previous.get_queryset()
        self.assertEqual(1, candidate_queryset.count())
        self.passed_in_previous.set_passed_in_current_period(
            candidate_queryset, testuser)

        self.published_feedbackset = AssignmentGroup.objects.get(id=current_group.id) \
            .cached_data.last_published_feedbackset
        self.feedbackset_passed_previous = FeedbacksetPassedPreviousPeriod.objects.filter(
            feedbackset=self.published_feedbackset).first()
Example #16
0
    def test_feedbackset_new_attempt_published_without_grading_datetime(self):
        testgroup = mommy.make('core.AssignmentGroup')
        testfeedbackset_first = devilry_group_mommy_factories.feedbackset_first_attempt_published(
            group=testgroup)
        testfeedbackset = devilry_group_mommy_factories.feedbackset_new_attempt_published(
            group=testgroup,
            deadline_datetime=timezone.now() + timezone.timedelta(days=3))
        self.assertEquals(2, group_models.FeedbackSet.objects.count())
        self.assertEquals(testfeedbackset_first.group.id,
                          testfeedbackset.group.id)
        self.assertIsNotNone(testfeedbackset.grading_published_by)
        self.assertIsNotNone(testfeedbackset.grading_points)
        self.assertIsNotNone(testfeedbackset.grading_published_datetime)

        # test caching
        group_cache = cache_models.AssignmentGroupCachedData.objects.get(
            group=testgroup)
        self.assertEquals(group_cache.first_feedbackset, testfeedbackset_first)
        self.assertEquals(group_cache.last_feedbackset, testfeedbackset)
        self.assertEquals(group_cache.last_published_feedbackset,
                          testfeedbackset)
 def test_post_new_attempt_published_comment_with_text(self):
     testgroup = mommy.make('core.AssignmentGroup')
     testfeedbackset = group_mommy.feedbackset_new_attempt_published(
         group=testgroup)
     examiner = mommy.make('core.Examiner', assignmentgroup=testgroup)
     self.mock_http302_postrequest(
         cradmin_role=testgroup,
         requestuser=examiner.relatedexaminer.user,
         viewkwargs={'pk': testgroup.id},
         requestkwargs={'data': {
             'text': 'This is a comment',
         }})
     self.assertEquals(2, group_models.FeedbackSet.objects.count())
     last_feedbackset = group_models.FeedbackSet.objects.all()[1]
     self.assertEquals(last_feedbackset, testfeedbackset)
     self.assertEquals(1, group_models.GroupComment.objects.count())
     posted_comment = group_models.GroupComment.objects.all()[0]
     self.assertEquals(
         group_models.GroupComment.VISIBILITY_VISIBLE_TO_EVERYONE,
         posted_comment.visibility)
     self.assertEquals('This is a comment', posted_comment.text)
 def test_get_examiner_new_attempt_published_choice_alert_exists(self):
     # Tests that choice alert for giving new attempt or re editing the last shows
     # when first feedbackset and new attempt is published.
     testassignment = mommy.make_recipe(
         'devilry.apps.core.assignment_activeperiod_start')
     testgroup = mommy.make('core.AssignmentGroup',
                            parentnode=testassignment)
     group_mommy.feedbackset_first_attempt_published(group=testgroup)
     testfeedbackset_new_attempt = group_mommy.feedbackset_new_attempt_published(
         group=testgroup)
     examiner = mommy.make('core.Examiner', assignmentgroup=testgroup)
     mockresponse = self.mock_http200_getrequest_htmls(
         cradmin_role=testgroup, requestuser=examiner.relatedexaminer.user)
     self.assertEquals(testgroup.cached_data.last_published_feedbackset,
                       testfeedbackset_new_attempt)
     self.assertEquals(testgroup.cached_data.last_feedbackset,
                       testfeedbackset_new_attempt)
     self.assertTrue(
         mockresponse.selector.exists(
             '.devilry-group-feedbackfeed-examiner-after-publish-choice-alert'
         ))
 def test_get_last_feedbackset(self):
     testuser = mommy.make(settings.AUTH_USER_MODEL)
     testassignment = mommy.make_recipe(
         'devilry.apps.core.assignment_activeperiod_start')
     testgroup = mommy.make('core.AssignmentGroup',
                            parentnode=testassignment)
     now = timezone.now()
     group_mommy.feedbackset_first_attempt_published(
         group=testgroup,
         grading_published_datetime=now - timezone.timedelta(days=10))
     testfeedbackset_last = group_mommy.feedbackset_new_attempt_published(
         group=testgroup,
         deadline_datetime=now - timezone.timedelta(days=9),
         grading_published_datetime=now - timezone.timedelta(days=8))
     feedbackset_queryset = builder_base.get_feedbackfeed_builder_queryset(
         group=testgroup, requestuser=testuser, devilryrole='unused')
     timelinebuilder = FeedbackFeedTimelineBuilder(
         feedbacksets=feedbackset_queryset, group=testgroup)
     timelinebuilder.build()
     self.assertEquals(testfeedbackset_last,
                       timelinebuilder.get_last_feedbackset())
     self.assertEquals(2, group_models.FeedbackSet.objects.count())
 def test_post_new_attempt_published_comment_with_text(self):
     testgroup = mommy.make('core.AssignmentGroup',
                            parentnode__parentnode=mommy.make_recipe('devilry.apps.core.period_active'))
     testfeedbackset = group_mommy.feedbackset_new_attempt_published(group=testgroup)
     examiner = mommy.make('core.Examiner', assignmentgroup=testgroup)
     self.mock_http302_postrequest(
         cradmin_role=testgroup,
         requestuser=examiner.relatedexaminer.user,
         viewkwargs={'pk': testgroup.id},
         requestkwargs={
             'data': {
                 'text': 'This is a comment',
             }
         })
     self.assertEqual(2, group_models.FeedbackSet.objects.count())
     last_feedbackset = group_models.FeedbackSet.objects.all()[1]
     self.assertEqual(last_feedbackset, testfeedbackset)
     self.assertEqual(1, group_models.GroupComment.objects.count())
     posted_comment = group_models.GroupComment.objects.all()[0]
     self.assertEqual(group_models.GroupComment.VISIBILITY_VISIBLE_TO_EXAMINER_AND_ADMINS,
                       posted_comment.visibility)
     self.assertEqual('This is a comment', posted_comment.text)
Example #21
0
    def test_listbuilder_sidebar_complete_example(self):
        # Just a sanity check with a full example comprising of two FeedbackSets
        # with one GroupComment each and one CommentFile for each GroupComment.
        testuser = mommy.make(settings.AUTH_USER_MODEL)
        testassignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start')
        testgroup = mommy.make('core.AssignmentGroup', parentnode=testassignment)
        candidate = mommy.make('core.Candidate',
                               assignment_group=testgroup,
                               relatedstudent__user__fullname='Test User1',
                               relatedstudent__user__shortname='*****@*****.**')
        examiner = mommy.make('core.Examiner',
                              assignmentgroup=testgroup,
                              relatedexaminer_user__fullname='Test User2',
                              relatedexaminer__user__shortname='*****@*****.**')
        testfeedbackset1 = group_mommy.feedbackset_first_attempt_published(
                grading_published_datetime=(testassignment.first_deadline + timezone.timedelta(days=1)),
                grading_points=10,
                created_by=examiner.relatedexaminer.user,
                created_datetime=(testassignment.publishing_time),
                is_last_in_group=None,
                group=testgroup,
                grading_published_by=examiner.relatedexaminer.user)
        testcomment1 = mommy.make('devilry_group.GroupComment',
                                  created_datetime=testfeedbackset1.current_deadline() - timezone.timedelta(hours=1),
                                  published_datetime=testfeedbackset1.current_deadline() - timezone.timedelta(hours=1),
                                  user=candidate.relatedstudent.user,
                                  user_role='student',
                                  feedback_set=testfeedbackset1)
        commentfile1 = mommy.make('devilry_comment.CommentFile', comment=testcomment1, filename='testfile1.txt')
        commentfile1.file.save('testfile1.txt', ContentFile(''))
        mommy.make('devilry_group.GroupComment',
                   created_datetime=testfeedbackset1.current_deadline() + timezone.timedelta(hours=1),
                   published_datetime=testfeedbackset1.current_deadline() + timezone.timedelta(hours=1),
                   user=examiner.relatedexaminer.user,
                   user_role='examiner',
                   part_of_grading=True,
                   feedback_set=testfeedbackset1)

        testfeedbackset2 = group_mommy.feedbackset_new_attempt_published(
                grading_published_datetime=testfeedbackset1.grading_published_datetime + timezone.timedelta(days=4),
                grading_points=10,
                created_by=examiner.relatedexaminer.user,
                created_datetime=testfeedbackset1.grading_published_datetime + timezone.timedelta(hours=10),
                deadline_datetime=testfeedbackset1.grading_published_datetime + timezone.timedelta(days=3),
                group=testgroup,
                grading_published_by=examiner.relatedexaminer.user)
        testcomment2 = mommy.make('devilry_group.GroupComment',
                                  created_datetime=testfeedbackset2.current_deadline() - timezone.timedelta(hours=1),
                                  published_datetime=testfeedbackset2.current_deadline() - timezone.timedelta(hours=1),
                                  user=candidate.relatedstudent.user,
                                  user_role='student',
                                  feedback_set=testfeedbackset2)
        commentfile1 = mommy.make('devilry_comment.CommentFile', comment=testcomment2, filename='testfile2.txt')
        commentfile1.file.save('testfile2.txt', ContentFile(''))
        mommy.make('devilry_group.GroupComment',
                   created_datetime=testfeedbackset2.current_deadline() + timezone.timedelta(hours=1),
                   published_datetime=testfeedbackset2.current_deadline() + timezone.timedelta(hours=1),
                   user=examiner.relatedexaminer.user,
                   user_role='examiner',
                   part_of_grading=True,
                   feedback_set=testfeedbackset2)

        feedbackset_queryset = builder_base.get_feedbackfeed_builder_queryset(
            group=testgroup,
            requestuser=testuser,
            devilryrole='student'
        )

        built_sidebar = feedbackfeed_sidebarbuilder.FeedbackFeedSidebarBuilder(
            feedbacksets=feedbackset_queryset,
        )
        built_sidebar.build()

        listbuilder_list = feedbackfeed_sidebar.SidebarListBuilderList.from_built_sidebar(
            built_sidebar=built_sidebar,
            group=testgroup,
            devilryrole='student',
            assignment=testassignment
        )

        # Checks the structure of the built list:
        #
        # FeedbackSetItemValue
        #     GroupCommentListBuilderList
        #     GroupCommentItemValue
        #         FileListBuilderList
        #         FileItemValue
        # FeedbackSetItemValue
        #     GroupCommentListBuilderList
        #     GroupCommentItemValue
        #         FileListBuilderList
        #         FileItemValue
        #
        self.assertTrue(isinstance(listbuilder_list.renderable_list[0],
                                   feedbackfeed_sidebar.FeedbackSetItemValue))
        self.assertTrue(isinstance(listbuilder_list.renderable_list[1],
                                   feedbackfeed_sidebar.GroupCommentListBuilderList))
        self.assertTrue(isinstance(listbuilder_list.renderable_list[1].renderable_list[0],
                                   feedbackfeed_sidebar.GroupCommentItemValue))
        self.assertTrue(isinstance(listbuilder_list.renderable_list[1].renderable_list[1],
                                   feedbackfeed_sidebar.FileListBuilderList))
        self.assertTrue(isinstance(listbuilder_list.renderable_list[1].renderable_list[1].renderable_list[0],
                                   feedbackfeed_sidebar.FileItemValue))

        self.assertTrue(isinstance(listbuilder_list.renderable_list[2],
                                   feedbackfeed_sidebar.FeedbackSetItemValue))
        self.assertTrue(isinstance(listbuilder_list.renderable_list[3],
                                   feedbackfeed_sidebar.GroupCommentListBuilderList))
        self.assertTrue(isinstance(listbuilder_list.renderable_list[3].renderable_list[0],
                                   feedbackfeed_sidebar.GroupCommentItemValue))
        self.assertTrue(isinstance(listbuilder_list.renderable_list[3].renderable_list[1],
                                   feedbackfeed_sidebar.FileListBuilderList))
        self.assertTrue(isinstance(listbuilder_list.renderable_list[3].renderable_list[1].renderable_list[0],
                                   feedbackfeed_sidebar.FileItemValue))
Example #22
0
    def test_listbuilder_list_items_complete_example(self):
        """
        Test a complete example of the listbuilder with all events.
        """
        testuser = mommy.make(settings.AUTH_USER_MODEL)
        testassignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start')
        testgroup = mommy.make('core.AssignmentGroup', parentnode=testassignment)
        candidate = mommy.make('core.Candidate',
                               assignment_group=testgroup,
                               relatedstudent__user__fullname='Test User1',
                               relatedstudent__user__shortname='*****@*****.**')
        examiner = mommy.make('core.Examiner',
                              assignmentgroup=testgroup,
                              relatedexaminer_user__fullname='Test User2',
                              relatedexaminer__user__shortname='*****@*****.**')
        testfeedbackset1 = group_mommy.feedbackset_first_attempt_published(
                grading_published_datetime=(testassignment.first_deadline + timezone.timedelta(days=1)),
                grading_points=10,
                created_by=examiner.relatedexaminer.user,
                created_datetime=(testassignment.publishing_time),
                is_last_in_group=None,
                group=testgroup,
                grading_published_by=examiner.relatedexaminer.user)
        mommy.make('devilry_group.GroupComment',
                   created_datetime=testfeedbackset1.current_deadline() - timezone.timedelta(hours=1),
                   published_datetime=testfeedbackset1.current_deadline() - timezone.timedelta(hours=1),
                   user=candidate.relatedstudent.user,
                   user_role='student',
                   feedback_set=testfeedbackset1)
        mommy.make('devilry_group.GroupComment',
                   created_datetime=testfeedbackset1.current_deadline() + timezone.timedelta(hours=1),
                   published_datetime=testfeedbackset1.current_deadline() + timezone.timedelta(hours=1),
                   user=examiner.relatedexaminer.user,
                   user_role='examiner',
                   part_of_grading=True,
                   feedback_set=testfeedbackset1)

        testfeedbackset2 = group_mommy.feedbackset_new_attempt_published(
                grading_published_datetime=testfeedbackset1.grading_published_datetime + timezone.timedelta(days=4),
                grading_points=10,
                created_by=examiner.relatedexaminer.user,
                created_datetime=testfeedbackset1.grading_published_datetime + timezone.timedelta(hours=10),
                deadline_datetime=testfeedbackset1.grading_published_datetime + timezone.timedelta(days=3),
                group=testgroup,
                grading_published_by=examiner.relatedexaminer.user)
        mommy.make('devilry_group.GroupComment',
                   created_datetime=testfeedbackset2.current_deadline() - timezone.timedelta(hours=1),
                   published_datetime=testfeedbackset2.current_deadline() - timezone.timedelta(hours=1),
                   user=candidate.relatedstudent.user,
                   user_role='student',
                   feedback_set=testfeedbackset2)
        mommy.make('devilry_group.GroupComment',
                   created_datetime=testfeedbackset2.current_deadline() + timezone.timedelta(hours=1),
                   published_datetime=testfeedbackset2.current_deadline() + timezone.timedelta(hours=1),
                   user=examiner.relatedexaminer.user,
                   user_role='examiner',
                   part_of_grading=True,
                   feedback_set=testfeedbackset2)

        feedbackset_queryset = builder_base.get_feedbackfeed_builder_queryset(
            group=testgroup,
            requestuser=testuser,
            devilryrole='student'
        )
        built_timeline = feedbackfeed_timelinebuilder.FeedbackFeedTimelineBuilder(
            feedbacksets=feedbackset_queryset,
            group=testgroup
        )

        built_timeline.build()
        listbuilder_list = listbuilder.TimelineListBuilderList.from_built_timeline(
            built_timeline,
            group=testgroup,
            devilryrole='student',
            assignment=testassignment
        )

        self.assertTrue(isinstance(listbuilder_list.renderable_list[0], listbuilder.StudentGroupCommentItemValue))
        self.assertTrue(isinstance(listbuilder_list.renderable_list[1], listbuilder.DeadlineExpiredItemValue))
        self.assertTrue(isinstance(listbuilder_list.renderable_list[2], listbuilder.ExaminerGroupCommentItemValue))
        self.assertTrue(isinstance(listbuilder_list.renderable_list[3], listbuilder.GradeItemValue))
        self.assertTrue(isinstance(listbuilder_list.renderable_list[4], listbuilder.DeadlineCreatedItemValue))
        self.assertTrue(isinstance(listbuilder_list.renderable_list[5], listbuilder.StudentGroupCommentItemValue))
        self.assertTrue(isinstance(listbuilder_list.renderable_list[6], listbuilder.DeadlineExpiredItemValue))
        self.assertTrue(isinstance(listbuilder_list.renderable_list[7], listbuilder.ExaminerGroupCommentItemValue))
        self.assertTrue(isinstance(listbuilder_list.renderable_list[8], listbuilder.GradeItemValue))
    def test_complete_timeline_events_example(self):
        testuser = mommy.make(settings.AUTH_USER_MODEL)
        testassignment = mommy.make_recipe(
            'devilry.apps.core.assignment_activeperiod_start')
        testgroup = mommy.make('core.AssignmentGroup',
                               parentnode=testassignment)
        testcandidate = mommy.make(
            'core.Candidate',
            assignment_group=testgroup,
            relatedstudent__user__fullname='Test User1',
            relatedstudent__user__shortname='*****@*****.**')
        testexaminer = mommy.make(
            'core.Examiner',
            assignmentgroup=testgroup,
            relatedexaminer_user__fullname='Test User2',
            relatedexaminer__user__shortname='*****@*****.**')

        # First feedbackset published with comments and grading
        testfeedbackset1 = group_mommy.feedbackset_first_attempt_published(
            grading_published_datetime=testassignment.first_deadline +
            timezone.timedelta(days=1),
            grading_points=10,
            created_by=testexaminer.relatedexaminer.user,
            created_datetime=testassignment.publishing_time,
            group=testgroup,
            grading_published_by=testexaminer.relatedexaminer.user)
        mommy.make('devilry_group.GroupComment',
                   created_datetime=testfeedbackset1.current_deadline() -
                   timezone.timedelta(hours=1),
                   published_datetime=testfeedbackset1.current_deadline() -
                   timezone.timedelta(hours=1),
                   user=testcandidate.relatedstudent.user,
                   user_role='student',
                   feedback_set=testfeedbackset1)
        mommy.make('devilry_group.GroupComment',
                   created_datetime=testfeedbackset1.current_deadline() +
                   timezone.timedelta(hours=1),
                   published_datetime=testfeedbackset1.current_deadline() +
                   timezone.timedelta(hours=1),
                   user=testexaminer.relatedexaminer.user,
                   user_role='examiner',
                   part_of_grading=True,
                   feedback_set=testfeedbackset1)

        # Second feedbackset with comments and grading
        testfeedbackset2 = group_mommy.feedbackset_new_attempt_published(
            grading_published_datetime=testfeedbackset1.
            grading_published_datetime + timezone.timedelta(days=4),
            grading_points=10,
            created_datetime=testfeedbackset1.grading_published_datetime +
            timezone.timedelta(hours=10),
            deadline_datetime=testfeedbackset1.grading_published_datetime +
            timezone.timedelta(days=3),
            created_by=testexaminer.relatedexaminer.user,
            group=testgroup,
            grading_published_by=testexaminer.relatedexaminer.user)
        mommy.make('devilry_group.GroupComment',
                   created_datetime=testfeedbackset2.current_deadline() -
                   timezone.timedelta(hours=1),
                   published_datetime=testfeedbackset2.current_deadline() -
                   timezone.timedelta(hours=1),
                   user=testcandidate.relatedstudent.user,
                   user_role='student',
                   feedback_set=testfeedbackset2)
        mommy.make('devilry_group.GroupComment',
                   created_datetime=testfeedbackset2.current_deadline() +
                   timezone.timedelta(hours=1),
                   published_datetime=testfeedbackset2.current_deadline() +
                   timezone.timedelta(hours=1),
                   user=testexaminer.relatedexaminer.user,
                   user_role='examiner',
                   part_of_grading=True,
                   feedback_set=testfeedbackset2)

        feedbackset_queryset = builder_base.get_feedbackfeed_builder_queryset(
            group=testgroup, requestuser=testuser, devilryrole='student')
        built_timeline = FeedbackFeedTimelineBuilder(
            feedbacksets=feedbackset_queryset, group=testgroup)

        built_timeline.build()
        builder_list = built_timeline.get_as_list()

        self.assertEquals(builder_list[0]['type'], 'comment')
        self.assertEquals(builder_list[1]['type'], 'deadline_expired')
        self.assertEquals(builder_list[2]['type'], 'comment')
        self.assertEquals(builder_list[3]['type'], 'grade')
        self.assertEquals(builder_list[4]['type'], 'deadline_created')
        self.assertEquals(builder_list[5]['type'], 'comment')
        self.assertEquals(builder_list[6]['type'], 'deadline_expired')
        self.assertEquals(builder_list[7]['type'], 'comment')
        self.assertEquals(builder_list[8]['type'], 'grade')
        self.assertEquals(2, group_models.FeedbackSet.objects.count())
    def test_listbuilder_list_items_complete_example(self):
        """
        Test a complete example of the listbuilder with all events.
        """
        testuser = mommy.make(settings.AUTH_USER_MODEL)
        testassignment = mommy.make_recipe(
            'devilry.apps.core.assignment_activeperiod_start')
        testgroup = mommy.make('core.AssignmentGroup',
                               parentnode=testassignment)
        candidate = mommy.make(
            'core.Candidate',
            assignment_group=testgroup,
            relatedstudent__user__fullname='Test User1',
            relatedstudent__user__shortname='*****@*****.**')
        examiner = mommy.make(
            'core.Examiner',
            assignmentgroup=testgroup,
            relatedexaminer_user__fullname='Test User2',
            relatedexaminer__user__shortname='*****@*****.**')
        testfeedbackset1 = group_mommy.feedbackset_first_attempt_published(
            grading_published_datetime=(testassignment.first_deadline +
                                        timezone.timedelta(days=1)),
            grading_points=10,
            created_by=examiner.relatedexaminer.user,
            created_datetime=(testassignment.publishing_time),
            is_last_in_group=None,
            group=testgroup,
            grading_published_by=examiner.relatedexaminer.user)
        mommy.make('devilry_group.GroupComment',
                   created_datetime=testfeedbackset1.current_deadline() -
                   timezone.timedelta(hours=1),
                   published_datetime=testfeedbackset1.current_deadline() -
                   timezone.timedelta(hours=1),
                   user=candidate.relatedstudent.user,
                   user_role='student',
                   feedback_set=testfeedbackset1)
        mommy.make('devilry_group.GroupComment',
                   created_datetime=testfeedbackset1.current_deadline() +
                   timezone.timedelta(hours=1),
                   published_datetime=testfeedbackset1.current_deadline() +
                   timezone.timedelta(hours=1),
                   user=examiner.relatedexaminer.user,
                   user_role='examiner',
                   part_of_grading=True,
                   feedback_set=testfeedbackset1)

        testfeedbackset2 = group_mommy.feedbackset_new_attempt_published(
            grading_published_datetime=testfeedbackset1.
            grading_published_datetime + timezone.timedelta(days=4),
            grading_points=10,
            created_by=examiner.relatedexaminer.user,
            created_datetime=testfeedbackset1.grading_published_datetime +
            timezone.timedelta(hours=10),
            deadline_datetime=testfeedbackset1.grading_published_datetime +
            timezone.timedelta(days=3),
            group=testgroup,
            grading_published_by=examiner.relatedexaminer.user)
        mommy.make('devilry_group.GroupComment',
                   created_datetime=testfeedbackset2.current_deadline() -
                   timezone.timedelta(hours=1),
                   published_datetime=testfeedbackset2.current_deadline() -
                   timezone.timedelta(hours=1),
                   user=candidate.relatedstudent.user,
                   user_role='student',
                   feedback_set=testfeedbackset2)
        mommy.make('devilry_group.GroupComment',
                   created_datetime=testfeedbackset2.current_deadline() +
                   timezone.timedelta(hours=1),
                   published_datetime=testfeedbackset2.current_deadline() +
                   timezone.timedelta(hours=1),
                   user=examiner.relatedexaminer.user,
                   user_role='examiner',
                   part_of_grading=True,
                   feedback_set=testfeedbackset2)

        feedbackset_queryset = builder_base.get_feedbackfeed_builder_queryset(
            group=testgroup, requestuser=testuser, devilryrole='student')
        built_timeline = feedbackfeed_timelinebuilder.FeedbackFeedTimelineBuilder(
            feedbacksets=feedbackset_queryset, group=testgroup)

        built_timeline.build()
        listbuilder_list = listbuilder.TimelineListBuilderList.from_built_timeline(
            built_timeline,
            group=testgroup,
            devilryrole='student',
            assignment=testassignment)

        self.assertTrue(
            isinstance(listbuilder_list.renderable_list[0],
                       listbuilder.StudentGroupCommentItemValue))
        self.assertTrue(
            isinstance(listbuilder_list.renderable_list[1],
                       listbuilder.DeadlineExpiredItemValue))
        self.assertTrue(
            isinstance(listbuilder_list.renderable_list[2],
                       listbuilder.ExaminerGroupCommentItemValue))
        self.assertTrue(
            isinstance(listbuilder_list.renderable_list[3],
                       listbuilder.GradeItemValue))
        self.assertTrue(
            isinstance(listbuilder_list.renderable_list[4],
                       listbuilder.DeadlineCreatedItemValue))
        self.assertTrue(
            isinstance(listbuilder_list.renderable_list[5],
                       listbuilder.StudentGroupCommentItemValue))
        self.assertTrue(
            isinstance(listbuilder_list.renderable_list[6],
                       listbuilder.DeadlineExpiredItemValue))
        self.assertTrue(
            isinstance(listbuilder_list.renderable_list[7],
                       listbuilder.ExaminerGroupCommentItemValue))
        self.assertTrue(
            isinstance(listbuilder_list.renderable_list[8],
                       listbuilder.GradeItemValue))
    def test_complete_example(self):
        testuser = mommy.make(settings.AUTH_USER_MODEL)
        testassignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start')
        testgroup = mommy.make('core.AssignmentGroup', parentnode=testassignment)
        candidate = mommy.make('core.Candidate',
                               assignment_group=testgroup,
                               relatedstudent__user__fullname='Test User1',
                               relatedstudent__user__shortname='*****@*****.**')
        examiner = mommy.make('core.Examiner',
                              assignmentgroup=testgroup,
                              relatedexaminer_user__fullname='Test User2',
                              relatedexaminer__user__shortname='*****@*****.**')

        # First feedbackset published with comments and grading
        testfeedbackset1 = group_mommy.feedbackset_first_attempt_published(
                grading_published_datetime=testassignment.first_deadline + timezone.timedelta(days=1),
                grading_points=10,
                created_by=examiner.relatedexaminer.user,
                created_datetime=testassignment.publishing_time,
                is_last_in_group=None,
                group=testgroup,
                grading_published_by=examiner.relatedexaminer.user)
        mommy.make('devilry_group.GroupComment',
                   created_datetime=testfeedbackset1.current_deadline() - timezone.timedelta(hours=1),
                   published_datetime=testfeedbackset1.current_deadline() - timezone.timedelta(hours=1),
                   user=candidate.relatedstudent.user,
                   user_role='student',
                   feedback_set=testfeedbackset1)
        mommy.make('devilry_group.GroupComment',
                   created_datetime=testfeedbackset1.current_deadline() + timezone.timedelta(hours=1),
                   published_datetime=testfeedbackset1.current_deadline() + timezone.timedelta(hours=1),
                   user=examiner.relatedexaminer.user,
                   user_role='examiner',
                   part_of_grading=True,
                   feedback_set=testfeedbackset1)

        # Second feedbackset with comments and grading
        testfeedbackset2 = group_mommy.feedbackset_new_attempt_published(
                grading_published_datetime=testfeedbackset1.grading_published_datetime + timezone.timedelta(days=4),
                grading_points=10,
                created_datetime=testfeedbackset1.grading_published_datetime + timezone.timedelta(hours=10),
                deadline_datetime=testfeedbackset1.grading_published_datetime + timezone.timedelta(days=3),
                created_by=examiner.relatedexaminer.user,
                group=testgroup,
                grading_published_by=examiner.relatedexaminer.user)
        mommy.make('devilry_group.GroupComment',
                   created_datetime=testfeedbackset2.current_deadline() - timezone.timedelta(hours=1),
                   published_datetime=testfeedbackset2.current_deadline() - timezone.timedelta(hours=1),
                   user=candidate.relatedstudent.user,
                   user_role='student',
                   feedback_set=testfeedbackset2)
        mommy.make('devilry_group.GroupComment',
                   created_datetime=testfeedbackset2.current_deadline() + timezone.timedelta(hours=1),
                   published_datetime=testfeedbackset2.current_deadline() + timezone.timedelta(hours=1),
                   user=examiner.relatedexaminer.user,
                   user_role='examiner',
                   part_of_grading=True,
                   feedback_set=testfeedbackset2)

        built_timeline = FeedbackFeedTimelineBuilder(
            group=testgroup,
            requestuser=testuser,
            devilryrole='student'
        )

        built_timeline.build()
        builder_list = built_timeline.get_as_list()

        self.assertEquals(builder_list[0]['type'], 'comment')
        self.assertEquals(builder_list[1]['type'], 'deadline_expired')
        self.assertEquals(builder_list[2]['type'], 'comment')
        self.assertEquals(builder_list[3]['type'], 'grade')
        self.assertEquals(builder_list[4]['type'], 'deadline_created')
        self.assertEquals(builder_list[5]['type'], 'comment')
        self.assertEquals(builder_list[6]['type'], 'deadline_expired')
        self.assertEquals(builder_list[7]['type'], 'comment')
        self.assertEquals(builder_list[8]['type'], 'grade')
    def test_only_distinct_deadlines_listed_multiple(self):
        testassignment = mommy.make_recipe(
            'devilry.apps.core.assignment_activeperiod_start')
        testuser = mommy.make(settings.AUTH_USER_MODEL)

        # Groups with published FeedbackSets using first_deadline
        testgroup_first_deadline1 = mommy.make('core.AssignmentGroup',
                                               parentnode=testassignment)
        testgroup_first_deadline2 = mommy.make('core.AssignmentGroup',
                                               parentnode=testassignment)
        group_mommy.feedbackset_first_attempt_published(
            group=testgroup_first_deadline1)
        group_mommy.feedbackset_first_attempt_published(
            group=testgroup_first_deadline2)
        mommy.make('core.Examiner',
                   assignmentgroup=testgroup_first_deadline1,
                   relatedexaminer__user=testuser)
        mommy.make('core.Examiner',
                   assignmentgroup=testgroup_first_deadline2,
                   relatedexaminer__user=testuser)

        # Groups with published FeedbackSets as new attempt published
        testgroup_new_attempt1 = mommy.make('core.AssignmentGroup',
                                            parentnode=testassignment)
        testgroup_new_attempt2 = mommy.make('core.AssignmentGroup',
                                            parentnode=testassignment)
        new_attempt_deadline = timezone.now() - timezone.timedelta(days=1)
        new_attempt_deadline = new_attempt_deadline.replace(microsecond=0)
        group_mommy.feedbackset_first_attempt_published(
            group=testgroup_new_attempt1)
        group_mommy.feedbackset_first_attempt_published(
            group=testgroup_new_attempt2)
        group_mommy.feedbackset_new_attempt_published(
            group=testgroup_new_attempt1,
            deadline_datetime=new_attempt_deadline)
        group_mommy.feedbackset_new_attempt_published(
            group=testgroup_new_attempt2,
            deadline_datetime=new_attempt_deadline)
        mommy.make('core.Examiner',
                   assignmentgroup=testgroup_new_attempt1,
                   relatedexaminer__user=testuser)
        mommy.make('core.Examiner',
                   assignmentgroup=testgroup_new_attempt2,
                   relatedexaminer__user=testuser)

        mockresponse = self.mock_http200_getrequest_htmls(
            cradmin_instance=self.__get_mock_instance(testassignment),
            cradmin_role=testassignment,
            cradmin_app=self.__get_mock_app(user=testuser),
            requestuser=testuser)
        self.assertEquals(
            2,
            mockresponse.selector.count(
                '.django-cradmin-listbuilder-itemvalue-titledescription'))
        deadline_list = [
            elem.alltext_normalized for elem in mockresponse.selector.list(
                '.django-cradmin-listbuilder-itemvalue-titledescription-title')
        ]
        self.assertEquals(2, len(deadline_list))
        self.assertIn(
            '{} (Assignment first deadline)'.format(
                defaultfilters.date(testassignment.first_deadline,
                                    'DATETIME_FORMAT')), deadline_list)
        self.assertIn(
            defaultfilters.date(timezone.localtime(new_attempt_deadline),
                                'DATETIME_FORMAT'), deadline_list)
    def test_anonymous_query_count(self):
        testassignment = mommy.make_recipe(
            'devilry.apps.core.assignment_activeperiod_start',
            anonymizationmode=core_models.Assignment.
            ANONYMIZATIONMODE_FULLY_ANONYMOUS)
        testuser = mommy.make(settings.AUTH_USER_MODEL)

        # Groups with published FeedbackSets using first_deadline
        testgroup_first_deadline1 = mommy.make('core.AssignmentGroup',
                                               parentnode=testassignment)
        testgroup_first_deadline2 = mommy.make('core.AssignmentGroup',
                                               parentnode=testassignment)
        group_mommy.feedbackset_first_attempt_published(
            group=testgroup_first_deadline1)
        group_mommy.feedbackset_first_attempt_published(
            group=testgroup_first_deadline2)
        mommy.make('core.Examiner',
                   assignmentgroup=testgroup_first_deadline1,
                   relatedexaminer__user=testuser)
        mommy.make('core.Examiner',
                   assignmentgroup=testgroup_first_deadline2,
                   relatedexaminer__user=testuser)
        mommy.make('core.Examiner', assignmentgroup=testgroup_first_deadline1)
        mommy.make('core.Examiner', assignmentgroup=testgroup_first_deadline1)
        mommy.make('core.Examiner', assignmentgroup=testgroup_first_deadline2)
        mommy.make('core.Examiner', assignmentgroup=testgroup_first_deadline2)
        mommy.make('core.Candidate',
                   assignment_group=testgroup_first_deadline1)
        mommy.make('core.Candidate',
                   assignment_group=testgroup_first_deadline1)
        mommy.make('core.Candidate',
                   assignment_group=testgroup_first_deadline2)
        mommy.make('core.Candidate',
                   assignment_group=testgroup_first_deadline2)

        # Groups with published FeedbackSets as new attempt published
        testgroup_new_attempt1 = mommy.make('core.AssignmentGroup',
                                            parentnode=testassignment)
        testgroup_new_attempt2 = mommy.make('core.AssignmentGroup',
                                            parentnode=testassignment)
        new_attempt_deadline = timezone.now() - timezone.timedelta(days=1)
        new_attempt_deadline = new_attempt_deadline.replace(microsecond=0)
        group_mommy.feedbackset_first_attempt_published(
            group=testgroup_new_attempt1)
        group_mommy.feedbackset_first_attempt_published(
            group=testgroup_new_attempt2)
        group_mommy.feedbackset_new_attempt_published(
            group=testgroup_new_attempt1,
            deadline_datetime=new_attempt_deadline)
        group_mommy.feedbackset_new_attempt_published(
            group=testgroup_new_attempt2,
            deadline_datetime=new_attempt_deadline)
        mommy.make('core.Examiner',
                   assignmentgroup=testgroup_new_attempt1,
                   relatedexaminer__user=testuser)
        mommy.make('core.Examiner',
                   assignmentgroup=testgroup_new_attempt2,
                   relatedexaminer__user=testuser)
        mommy.make('core.Examiner', assignmentgroup=testgroup_new_attempt1)
        mommy.make('core.Examiner', assignmentgroup=testgroup_new_attempt1)
        mommy.make('core.Examiner', assignmentgroup=testgroup_new_attempt2)
        mommy.make('core.Examiner', assignmentgroup=testgroup_new_attempt2)
        mommy.make('core.Candidate', assignment_group=testgroup_new_attempt1)
        mommy.make('core.Candidate', assignment_group=testgroup_new_attempt1)
        mommy.make('core.Candidate', assignment_group=testgroup_new_attempt2)
        mommy.make('core.Candidate', assignment_group=testgroup_new_attempt2)

        with self.assertNumQueries(3):
            self.mock_http200_getrequest_htmls(
                cradmin_instance=self.__get_mock_instance(testassignment),
                cradmin_role=testassignment,
                cradmin_app=self.__get_mock_app(user=testuser),
                requestuser=testuser)