def test_get_feedbackset_grading_updated_multiple_events_rendered(self):
        testassignment = mommy.make_recipe(
            'devilry.apps.core.assignment_activeperiod_start')
        testgroup = mommy.make('core.AssignmentGroup',
                               parentnode=testassignment)
        test_feedbackset = group_mommy.feedbackset_first_attempt_published(
            group=testgroup, grading_points=1)
        testuser = mommy.make(settings.AUTH_USER_MODEL,
                              shortname='*****@*****.**',
                              fullname='Test User')
        mommy.make('devilry_group.FeedbackSetGradingUpdateHistory',
                   feedback_set=test_feedbackset,
                   old_grading_points=1,
                   updated_by=testuser)
        mommy.make('devilry_group.FeedbackSetGradingUpdateHistory',
                   feedback_set=test_feedbackset,
                   old_grading_points=0,
                   updated_by=testuser)
        mommy.make('devilry_group.FeedbackSetGradingUpdateHistory',
                   feedback_set=test_feedbackset,
                   old_grading_points=1,
                   updated_by=testuser)
        mommy.make('devilry_group.FeedbackSetGradingUpdateHistory',
                   feedback_set=test_feedbackset,
                   old_grading_points=0,
                   updated_by=testuser)

        # We add an unpublished new attempt, because the feedback view for examiners requires that the last feedbackset
        # is not published.
        group_mommy.feedbackset_new_attempt_unpublished(group=testgroup)
        mockresponse = self.mock_http200_getrequest_htmls(
            cradmin_role=testgroup)
        self.assertEqual(
            mockresponse.selector.count(
                '.devilry-group-event__grading_updated'), 4)
Exemplo n.º 2
0
    def test_get_project_groups_from_current_assignment_with_new_attempt_is_excluded(self):
        testperiod = mommy.make_recipe('devilry.apps.core.period_active')
        past_assignment = mommy.make('core.Assignment', parentnode=testperiod)
        current_assignment = mommy.make('core.Assignment', parentnode=testperiod)
        related_student = mommy.make('core.RelatedStudent', period=testperiod, user__shortname='testuser1')

        # Past assignment
        past_assignment_group = mommy.make('core.AssignmentGroup', parentnode=past_assignment)
        mommy.make('core.Candidate', relatedstudent=related_student,assignment_group=past_assignment_group)
        self.__set_grading_points_for_last_feedbackset(cached_data=past_assignment_group.cached_data)

        # Current assignment
        current_assignment_group = mommy.make('core.AssignmentGroup', parentnode=current_assignment)
        devilry_group_mommy_factories.feedbackset_first_attempt_published(
            group=current_assignment_group)
        devilry_group_mommy_factories.feedbackset_new_attempt_unpublished(
            group=current_assignment_group)
        mommy.make('core.Candidate', relatedstudent=related_student, assignment_group=current_assignment_group)

        self.assertEqual(AssignmentGroup.objects.filter(parentnode=past_assignment).count(), 1)
        self.assertEqual(AssignmentGroup.objects.filter(parentnode=current_assignment).count(), 1)

        mockresponse = self.mock_http200_getrequest_htmls(
            cradmin_role=current_assignment,
            cradmin_instance=self.__mockinstance_with_devilryrole(devilryrole='subjectadmin'),
            viewkwargs={
                'from_assignment_id': past_assignment.id
            }
        )
        self.assertFalse(mockresponse.selector.exists('.django-cradmin-listbuilder-itemvalue'))
        self.assertEqual(self.__get_selected_group_ids_to_be_removed(selector=mockresponse.selector), [])
Exemplo n.º 3
0
 def test_is_waiting_for_deliveries(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_unpublished(
         group=testgroup,
         deadline_datetime=timezone.now() + timedelta(days=4),
     )
     # Run collector
     collector = PeriodAllResultsCollector(
         period=testperiod, related_student_ids=[relatedstudent.id])
     self.assertTrue(
         collector.results[relatedstudent.id].is_waiting_for_deliveries(
             testassignment.id))
Exemplo n.º 4
0
    def test_get_status_not_created_when_new_feedbackset_is_created_after_last_compressed_archive(self):
        testassignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start')
        testuser = mommy.make(settings.AUTH_USER_MODEL, is_superuser=True)
        testgroup = mommy.make('core.AssignmentGroup', parentnode=testassignment)
        testfeedbackset = devilry_group_mommy_factories.feedbackset_first_attempt_published(
            group=testgroup, grading_points=1)
        mommy.make('devilry_compressionutil.CompressedArchiveMeta', content_object=testassignment,
                   created_by=testuser,
                   created_datetime=timezone.now())
        testcomment = mommy.make('devilry_group.GroupComment',
                                 feedback_set=testfeedbackset,
                                 user_role='student',
                                 user__shortname='*****@*****.**')
        commentfile = mommy.make('devilry_comment.CommentFile', comment=testcomment, filename='testfile.txt')
        commentfile.file.save('testfile.txt', ContentFile('testcontent'))

        # Create new feedbackset
        devilry_group_mommy_factories.feedbackset_new_attempt_unpublished(group=testgroup)
        mockresponse = self.mock_getrequest(
            cradmin_app=self.__mock_cradmin_app(),
            requestuser=testuser,
            viewkwargs={
                'content_object_id': testassignment.id
            })
        self.assertEquals(mockresponse.response.content, '{"status": "not-created"}')
Exemplo n.º 5
0
 def test_grouplist_status_waiting_for_feedback_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_unpublished(
             group=testgroup,
             deadline_datetime=timezone.now() - timedelta(days=2))
     mockresponse = self.mock_http200_getrequest_htmls(
             requestuser=testuser, cradmin_role=testperiod)
     self.assertFalse(
             mockresponse.selector.exists(
                     '.devilry-cradmin-groupitemvalue '
                     '.devilry-cradmin-groupitemvalue-grade'))
     self.assertEqual(
             'Status: waiting for feedback',
             mockresponse.selector.one(
                     '.devilry-cradmin-groupitemvalue '
                     '.devilry-cradmin-groupitemvalue-status').alltext_normalized)
Exemplo n.º 6
0
 def test_grouplist_status_waiting_for_feedback_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_unpublished(
         group=testgroup,
         deadline_datetime=timezone.now() - timedelta(days=2))
     mockresponse = self.mock_http200_getrequest_htmls(
         requestuser=testuser, cradmin_role=testperiod)
     self.assertFalse(
         mockresponse.selector.exists(
             '.devilry-cradmin-groupitemvalue '
             '.devilry-cradmin-groupitemvalue-grade'))
     self.assertEqual(
         'Status: waiting for feedback',
         mockresponse.selector.one(
             '.devilry-cradmin-groupitemvalue '
             '.devilry-cradmin-groupitemvalue-status').alltext_normalized)
    def test_get_status_not_created_when_new_feedbackset_is_created_after_last_compressed_archive(self):
        testassignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start')
        testgroup = mommy.make('core.AssignmentGroup', parentnode=testassignment)
        testexaminer = mommy.make('core.Examiner', assignmentgroup=testgroup)
        testfeedbackset = devilry_group_mommy_factories.feedbackset_first_attempt_published(
            group=testgroup, grading_points=1)
        mommy.make('devilry_compressionutil.CompressedArchiveMeta', content_object=testassignment,
                   created_by=testexaminer.relatedexaminer.user,
                   created_datetime=timezone.now())
        testcomment = mommy.make('devilry_group.GroupComment',
                                 feedback_set=testfeedbackset,
                                 user_role='student',
                                 user__shortname='*****@*****.**')
        commentfile = mommy.make('devilry_comment.CommentFile', comment=testcomment, filename='testfile.txt')
        commentfile.file.save('testfile.txt', ContentFile('testcontent'))

        # Create new feedbackset
        devilry_group_mommy_factories.feedbackset_new_attempt_unpublished(group=testgroup)
        mockresponse = self.mock_getrequest(
            cradmin_app=self.__mock_cradmin_app(),
            requestuser=testexaminer.relatedexaminer.user,
            viewkwargs={
                'content_object_id': testassignment.id
            })
        self.assertEqual(mockresponse.response.content, b'{"status": "not-created"}')
 def test_on_feedbackset_new_attempt_no_deadline_history_created(self):
     assignment = mommy.make('core.Assignment')
     group = mommy.make('core.AssignmentGroup', parentnode=assignment)
     group_mommy.feedbackset_first_attempt_published(group=group)
     group_mommy.feedbackset_new_attempt_unpublished(
         group=group,
         deadline_datetime=timezone.now() + timezone.timedelta(days=1))
     self.assertEqual(0, FeedbackSetDeadlineHistory.objects.count())
 def test_on_feedbackset_new_attempt_no_deadline_history_created(self):
     assignment = mommy.make('core.Assignment')
     group = mommy.make('core.AssignmentGroup', parentnode=assignment)
     group_mommy.feedbackset_first_attempt_published(group=group)
     group_mommy.feedbackset_new_attempt_unpublished(
         group=group,
         deadline_datetime=timezone.now() + timezone.timedelta(days=1))
     self.assertEqual(0, FeedbackSetDeadlineHistory.objects.count())
 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_unpublished(
         group__parentnode=assignment,
         is_last_in_group=None)
     group_mommy.feedbackset_new_attempt_unpublished(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_get_examiner_new_attempt_feedback_tab_exist_if_last_feedbackset_is_unpublished(self):
     testgroup = mommy.make('core.AssignmentGroup')
     group_mommy.feedbackset_new_attempt_unpublished(group=testgroup)
     examiner = mommy.make('core.Examiner', assignmentgroup=testgroup)
     mockresponse = self.mock_http200_getrequest_htmls(
         cradmin_role=testgroup,
         requestuser=examiner.relatedexaminer.user
     )
     self.assertTrue(mockresponse.selector.exists('.devilry-group-feedbackfeed-feedback-button'))
 def test_get_examiner_new_attempt_feedback_tab_exist_if_last_feedbackset_is_unpublished(self):
     testgroup = mommy.make('core.AssignmentGroup')
     group_mommy.feedbackset_new_attempt_unpublished(group=testgroup)
     examiner = mommy.make('core.Examiner', assignmentgroup=testgroup)
     mockresponse = self.mock_http200_getrequest_htmls(
         cradmin_role=testgroup,
         requestuser=examiner.relatedexaminer.user
     )
     self.assertTrue(mockresponse.selector.exists('.devilry-group-feedbackfeed-feedback-button'))
 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_post_new_attempt_added_while_lingering(self):
        # Tests what happens when user lingers in the view and one of the groups get a
        # new attempt in the meantime.
        testassignment = mommy.make_recipe(
            'devilry.apps.core.assignment_activeperiod_start',
            long_name='Assignment 0')
        testgroup1 = mommy.make('core.AssignmentGroup',
                                parentnode=testassignment)
        testgroup2 = mommy.make('core.AssignmentGroup',
                                parentnode=testassignment)
        testgroup3 = mommy.make('core.AssignmentGroup',
                                parentnode=testassignment)
        devilry_group_mommy_factories.feedbackset_first_attempt_published(
            group=testgroup1)
        devilry_group_mommy_factories.feedbackset_first_attempt_published(
            group=testgroup2)
        devilry_group_mommy_factories.feedbackset_first_attempt_published(
            group=testgroup3)
        examiner_user = mommy.make(settings.AUTH_USER_MODEL)
        mommy.make('core.Examiner',
                   assignmentgroup=testgroup1,
                   relatedexaminer__user=examiner_user)
        mommy.make('core.Examiner',
                   assignmentgroup=testgroup2,
                   relatedexaminer__user=examiner_user)
        mommy.make('core.Examiner',
                   assignmentgroup=testgroup3,
                   relatedexaminer__user=examiner_user)
        new_deadline = timezone.now() + timezone.timedelta(days=10)

        # group 3 receives a new attempt before post
        devilry_group_mommy_factories.feedbackset_new_attempt_unpublished(
            group=testgroup3)
        messagemock = mock.MagicMock()
        mockresponse = self.mock_http200_postrequest_htmls(
            cradmin_role=testassignment,
            requestuser=examiner_user,
            cradmin_app=self.__get_mock_app(examiner_user),
            viewkwargs={
                'deadline':
                datetimeutils.datetime_to_string(testassignment.first_deadline)
            },
            requestkwargs={
                'data': {
                    'feedback_comment_text': 'new attempt given',
                    'new_deadline': new_deadline.strftime('%Y-%m-%d %H:%M'),
                    'selected_items':
                    [testgroup1.id, testgroup2.id, testgroup3.id]
                }
            },
            messagesmock=messagemock)

        self.assertEquals(4, group_models.FeedbackSet.objects.count())
        self.assertEquals(0, group_models.GroupComment.objects.count())
 def test_get_feedbackset_header_two_attempts(self):
     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)
     group_mommy.feedbackset_new_attempt_unpublished(group=testgroup)
     mockresponse = self.mock_http200_getrequest_htmls(
         cradmin_role=testgroup,
     )
     self.assertEqual(mockresponse.selector.list('.header-attempt-number')[0].alltext_normalized,
                       'Attempt 1')
     self.assertEqual(mockresponse.selector.list('.header-attempt-number')[1].alltext_normalized,
                       'Attempt 2')
 def test_get_event_two_feedbacksets_deadlines_expired_assignment_firstdeadline(self):
     assignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start',
                                    first_deadline=timezone.now() - timezone.timedelta(days=4))
     testgroup = mommy.make('core.AssignmentGroup', parentnode=assignment)
     group_mommy.feedbackset_first_attempt_published(group=testgroup)
     group_mommy.feedbackset_new_attempt_unpublished(
             group=testgroup,
             deadline_datetime=timezone.now() - timezone.timedelta(days=2))
     mockresponse = self.mock_http200_getrequest_htmls(cradmin_role=testgroup)
     expired = mockresponse.selector.list('.devilry-group-feedbackfeed-event-message__deadline-expired')
     self.assertEqual(2, len(expired))
     self.assertEqual(2, group_models.FeedbackSet.objects.count())
 def test_get_total_result_only_counts_last_published_feedbackset_is_last_feedbackset(self):
     testassignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start')
     testgroup = mommy.make('core.AssignmentGroup', parentnode=testassignment)
     user = mommy.make(settings.AUTH_USER_MODEL)
     relatedstudent = mommy.make('core.RelatedStudent', period=testassignment.parentnode, user=user)
     mommy.make('core.Candidate', assignment_group=testgroup, relatedstudent=relatedstudent)
     group_factory.feedbackset_first_attempt_published(group=testgroup, grading_points=10)
     group_factory.feedbackset_new_attempt_unpublished(group=testgroup)
     # Run collector
     collector = PeriodAllResultsCollector(
         period=testassignment.parentnode,
         related_student_ids=[relatedstudent.id]
     )
     self.assertEqual(0, collector.results[relatedstudent.id].get_total_result())
 def test_get_feedbackset_header_two_attempts(self):
     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)
     group_mommy.feedbackset_new_attempt_unpublished(group=testgroup)
     mockresponse = self.mock_http200_getrequest_htmls(
         cradmin_role=testgroup, )
     self.assertEquals(
         mockresponse.selector.list('.header-attempt-number')
         [0].alltext_normalized, 'Attempt 1')
     self.assertEquals(
         mockresponse.selector.list('.header-attempt-number')
         [1].alltext_normalized, 'Attempt 2')
    def test_get_feedbackset_grading_updated_one_event_rendered(self):
        testassignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start')
        testgroup = mommy.make('core.AssignmentGroup', parentnode=testassignment)
        test_feedbackset = group_mommy.feedbackset_first_attempt_published(group=testgroup, grading_points=1)
        testuser = mommy.make(settings.AUTH_USER_MODEL, shortname='*****@*****.**', fullname='Test User')
        mommy.make('devilry_group.FeedbackSetGradingUpdateHistory', feedback_set=test_feedbackset, old_grading_points=1,
                   updated_by=testuser)

        # We add an unpublished new attempt, because the feedback view for examiners requires that the last feedbackset
        # is not published.
        group_mommy.feedbackset_new_attempt_unpublished(group=testgroup)
        mockresponse = self.mock_http200_getrequest_htmls(
            cradmin_role=testgroup
        )
        self.assertEqual(mockresponse.selector.count('.devilry-group-event__grading_updated'), 1)
 def test_get_event_two_feedbacksets_deadlines_expired_assignment_firstdeadline(
         self):
     assignment = mommy.make_recipe(
         'devilry.apps.core.assignment_activeperiod_start',
         first_deadline=timezone.now() - timezone.timedelta(days=4))
     testgroup = mommy.make('core.AssignmentGroup', parentnode=assignment)
     group_mommy.feedbackset_first_attempt_published(group=testgroup)
     group_mommy.feedbackset_new_attempt_unpublished(
         group=testgroup,
         deadline_datetime=timezone.now() - timezone.timedelta(days=2))
     mockresponse = self.mock_http200_getrequest_htmls(
         cradmin_role=testgroup)
     expired = mockresponse.selector.list(
         '.devilry-group-feedbackfeed-event-message__deadline-expired')
     self.assertEqual(2, len(expired))
     self.assertEquals(2, group_models.FeedbackSet.objects.count())
 def test_post_comment_always_to_last_feedbackset(self):
     assignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start',
                                    grading_system_plugin_id=core_models.Assignment
                                    .GRADING_SYSTEM_PLUGIN_ID_PASSEDFAILED)
     group = mommy.make('core.AssignmentGroup', parentnode=assignment)
     examiner = mommy.make('core.Examiner',
                           assignmentgroup=group,
                           relatedexaminer=mommy.make('core.RelatedExaminer'))
     feedbackset_first = group_mommy.feedbackset_first_attempt_published(group=group)
     feedbackset_last = group_mommy.feedbackset_new_attempt_unpublished(group=group)
     self.mock_http302_postrequest(
         cradmin_role=examiner.assignmentgroup,
         requestuser=examiner.relatedexaminer.user,
         viewkwargs={'pk': group.id},
         requestkwargs={
             'data': {
                 'text': 'This is a feedback',
                 'examiner_add_public_comment': 'unused value',
             }
         })
     comments = group_models.GroupComment.objects.all()
     self.assertEqual(len(comments), 1)
     self.assertNotEqual(feedbackset_first, comments[0].feedback_set)
     self.assertEqual(feedbackset_last, comments[0].feedback_set)
     self.assertEqual(2, group_models.FeedbackSet.objects.count())
 def test_post_comment_always_to_last_feedbackset(self):
     assignment = mommy.make_recipe(
         'devilry.apps.core.assignment_activeperiod_start',
         grading_system_plugin_id=core_models.Assignment.
         GRADING_SYSTEM_PLUGIN_ID_PASSEDFAILED)
     group = mommy.make('core.AssignmentGroup', parentnode=assignment)
     examiner = mommy.make(
         'core.Examiner',
         assignmentgroup=group,
         relatedexaminer=mommy.make('core.RelatedExaminer'))
     feedbackset_first = group_mommy.feedbackset_first_attempt_published(
         group=group)
     feedbackset_last = group_mommy.feedbackset_new_attempt_unpublished(
         group=group)
     self.mock_http302_postrequest(
         cradmin_role=examiner.assignmentgroup,
         requestuser=examiner.relatedexaminer.user,
         viewkwargs={'pk': group.id},
         requestkwargs={
             'data': {
                 'text': 'This is a feedback',
                 'examiner_add_public_comment': 'unused value',
             }
         })
     comments = group_models.GroupComment.objects.all()
     self.assertEquals(len(comments), 1)
     self.assertNotEquals(feedbackset_first, comments[0].feedback_set)
     self.assertEquals(feedbackset_last, comments[0].feedback_set)
     self.assertEquals(2, group_models.FeedbackSet.objects.count())
    def test_history_feedbackset_new_attempt_deadline_change(self):
        assignment = mommy.make_recipe(
            'devilry.apps.core.assignment_activeperiod_start')
        group = mommy.make('core.AssignmentGroup', parentnode=assignment)
        group_mommy.feedbackset_first_attempt_published(group=group)
        new_attempt_deadline = timezone.localtime(timezone.now() +
                                                  timezone.timedelta(days=1))
        new_attempt_deadline = new_attempt_deadline.replace(microsecond=0)
        feedback_set_new_attempt = group_mommy.feedbackset_new_attempt_unpublished(
            group=group, deadline_datetime=new_attempt_deadline)
        self.assertEqual(
            0,
            FeedbackSetDeadlineHistory.objects.filter(
                feedback_set__group_id=group.id).count())

        new_attempt_updated_deadline = new_attempt_deadline + timezone.timedelta(
            days=1)
        feedback_set_new_attempt.deadline_datetime = new_attempt_updated_deadline
        feedback_set_new_attempt.save()

        updated_feedback_set = FeedbackSet.objects.get(
            id=feedback_set_new_attempt.id)
        deadline_history = FeedbackSetDeadlineHistory.objects.get(
            feedback_set_id=updated_feedback_set.id)
        self.assertIsNotNone(deadline_history.changed_datetime)
        self.assertEqual(new_attempt_deadline, deadline_history.deadline_old)
        self.assertEqual(new_attempt_updated_deadline,
                         deadline_history.deadline_new)
Exemplo n.º 24
0
 def test_get_student_can_not_see_comments_part_of_grading_before_publish_new_attempt(self):
     assignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start')
     group = mommy.make('core.AssignmentGroup',
                        parentnode=assignment)
     group_mommy.feedbackset_first_attempt_published(
             group=group,
             is_last_in_group=None)
     feedbackset_last = group_mommy.feedbackset_new_attempt_unpublished(
             group=group,
             deadline_datetime=timezone.now()+timezone.timedelta(days=1))
     candidate = mommy.make('core.Candidate',
                            assignment_group=group,
                            relatedstudent=mommy.make('core.RelatedStudent'))
     examiner = mommy.make('core.Examiner',
                           assignmentgroup=group,
                           relatedexaminer=mommy.make('core.RelatedExaminer', user__fullname='John Doe'),)
     mommy.make('devilry_group.GroupComment',
                text='asd',
                part_of_grading=True,
                user=examiner.relatedexaminer.user,
                user_role='examiner',
                feedback_set=feedbackset_last)
     mockresponse = self.mock_http200_getrequest_htmls(cradmin_role=candidate.assignment_group,
                                                       requestuser=candidate.relatedstudent.user)
     self.assertFalse(mockresponse.selector.exists('.devilry-group-feedbackfeed-comment'))
Exemplo n.º 25
0
    def test_num_queries(self):
        # Must be refactored
        # Test that the number of queries performed is manageable
        testuser = mommy.make(settings.AUTH_USER_MODEL)
        testgroup = mommy.make('core.AssignmentGroup')
        testfeedbackset1 = devilry_group_mommy_factories.feedbackset_first_attempt_published(
                group=testgroup,
                is_last_in_group=None)
        testfeedbackset2 = devilry_group_mommy_factories.feedbackset_new_attempt_unpublished(
            group=testgroup,
            deadline_datetime=timezone.now() + timezone.timedelta(days=3)
        )

        testcomment = mommy.make('devilry_group.GroupComment', feedback_set=testfeedbackset1)
        testcomment1 = mommy.make('devilry_group.GroupComment', feedback_set=testfeedbackset2)
        mommy.make('devilry_comment.CommentFile',
                   comment=testcomment)
        mommy.make('devilry_comment.CommentFile',
                   comment=testcomment)
        mommy.make('devilry_comment.CommentFile',
                   comment=testcomment1)
        mommy.make('devilry_comment.CommentFile',
                   comment=testcomment1)

        with self.assertNumQueries(4):
            feedbackset_queryset = builder_base.get_feedbackfeed_builder_queryset(testgroup, testuser, 'unused')
            sidebarbuilder = FeedbackFeedSidebarBuilder(feedbacksets=feedbackset_queryset)
            sidebarbuilder.build()
            sidebarbuilder.get_as_list()
Exemplo n.º 26
0
    def test_feedbackset_numbering(self):
        # Test that the numbering of the feedbacksets are in ascending order.
        testuser = mommy.make(settings.AUTH_USER_MODEL)
        testgroup = mommy.make('core.AssignmentGroup')
        devilry_group_mommy_factories.feedbackset_first_attempt_published(
                group=testgroup,
                is_last_in_group=None)
        devilry_group_mommy_factories.feedbackset_new_attempt_unpublished(
            group=testgroup,
            deadline_datetime=timezone.now() + timezone.timedelta(days=3)
        )

        feedbackset_queryset = builder_base.get_feedbackfeed_builder_queryset(testgroup, testuser, 'unused')
        sidebarbuilder = FeedbackFeedSidebarBuilder(feedbacksets=feedbackset_queryset)
        sidebarbuilder.build()
        sidebarlist = sidebarbuilder.get_as_list()

        # Loop through and check the numbering.
        for numbering, feedbackset_dict in enumerate(sidebarlist):
            self.assertEquals(numbering+1, feedbackset_dict['feedbackset_num'])
 def test_raises_404_last_feedbackset_is_not_last_published_feedbackset(self):
     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)
     unpublished_feedbackset = group_mommy.feedbackset_new_attempt_unpublished(group=testgroup, deadline_datetime=timezone.now())
     with self.assertRaises(Http404):
         self.mock_http200_getrequest_htmls(
             cradmin_role=testgroup,
             viewkwargs={
                 'pk': unpublished_feedbackset.id
             })
 def test_is_waiting_for_deliveries(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_unpublished(
         group=testgroup,
         deadline_datetime=timezone.now() + timedelta(days=4),
     )
     # Run collector
     collector = PeriodAllResultsCollector(
         period=testperiod,
         related_student_ids=[relatedstudent.id]
     )
     self.assertTrue(collector.results[relatedstudent.id].is_waiting_for_deliveries(testassignment.id))
Exemplo n.º 29
0
 def test_get_total_result_only_counts_last_published_feedbackset_is_last_feedbackset(
         self):
     testassignment = mommy.make_recipe(
         'devilry.apps.core.assignment_activeperiod_start')
     testgroup = mommy.make('core.AssignmentGroup',
                            parentnode=testassignment)
     user = mommy.make(settings.AUTH_USER_MODEL)
     relatedstudent = mommy.make('core.RelatedStudent',
                                 period=testassignment.parentnode,
                                 user=user)
     mommy.make('core.Candidate',
                assignment_group=testgroup,
                relatedstudent=relatedstudent)
     group_factory.feedbackset_first_attempt_published(group=testgroup,
                                                       grading_points=10)
     group_factory.feedbackset_new_attempt_unpublished(group=testgroup)
     # Run collector
     collector = PeriodAllResultsCollector(
         period=testassignment.parentnode,
         related_student_ids=[relatedstudent.id])
     self.assertEquals(
         0, collector.results[relatedstudent.id].get_total_result())
 def test_raises_404_last_feedbackset_is_not_last_published_feedbackset(
         self):
     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)
     unpublished_feedbackset = group_mommy.feedbackset_new_attempt_unpublished(
         group=testgroup, deadline_datetime=timezone.now())
     with self.assertRaises(Http404):
         self.mock_http200_getrequest_htmls(
             cradmin_role=testgroup,
             viewkwargs={'pk': unpublished_feedbackset.id})
 def test_post_publish_feedbackset_drafts_on_last_feedbackset_only(self):
     assignment = mommy.make_recipe(
         'devilry.apps.core.assignment_activeperiod_start',
         grading_system_plugin_id=core_models.Assignment.
         GRADING_SYSTEM_PLUGIN_ID_PASSEDFAILED)
     testgroup = mommy.make('core.AssignmentGroup', parentnode=assignment)
     feedbackset_first = group_mommy.feedbackset_first_attempt_published(
         group=testgroup)
     feedbackset_last = group_mommy.feedbackset_new_attempt_unpublished(
         group=testgroup,
         deadline_datetime=timezone.now() - timezone.timedelta(days=1))
     examiner = mommy.make(
         'core.Examiner',
         assignmentgroup=testgroup,
         relatedexaminer=mommy.make('core.RelatedExaminer'))
     mommy.make('core.Candidate',
                assignment_group=testgroup,
                relatedstudent=mommy.make('core.RelatedStudent'))
     comment1 = mommy.make('devilry_group.GroupComment',
                           text='test text 1',
                           user=examiner.relatedexaminer.user,
                           user_role='examiner',
                           part_of_grading=True,
                           feedback_set=feedbackset_first)
     feedback_comment = mommy.make('devilry_group.GroupComment',
                                   text='part of grading',
                                   user=examiner.relatedexaminer.user,
                                   user_role='examiner',
                                   part_of_grading=True,
                                   feedback_set=feedbackset_last)
     self.mock_http302_postrequest(
         cradmin_role=testgroup,
         requestuser=examiner.relatedexaminer.user,
         viewkwargs={'pk': testgroup.id},
         requestkwargs={
             'data': {
                 'passed': 'Passed',
                 'text': 'post comment',
                 'examiner_publish_feedback': 'unused value',
             }
         })
     cached_group = cache_models.AssignmentGroupCachedData.objects.get(
         group=testgroup)
     feedback_comments = group_models.GroupComment.objects.all()\
         .filter(feedback_set_id=cached_group.last_published_feedbackset.id)\
         .order_by('published_datetime')
     self.assertEqual(2, len(feedback_comments))
     self.assertEqual(feedback_comments[0].text, 'part of grading')
     self.assertEqual(feedback_comments[1].text, 'post comment')
     self.assertEqual(cached_group.last_published_feedbackset,
                      feedbackset_last)
Exemplo n.º 32
0
 def test_get_header_date_with_multiple_feedbacksets(self):
     # tests that if there are multiple FeedbackSets', the deadline of the last FeedbackSet should be shown.
     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, is_last_in_group=None)
     testfeedbackset = group_mommy.feedbackset_new_attempt_unpublished(
             group=testgroup,
             deadline_datetime=timezone.now() + timezone.timedelta(days=10))
     mockresponse = self.mock_http200_getrequest_htmls(cradmin_role=testfeedbackset.group)
     self.assertTrue(mockresponse.selector.exists('.devilry-group-feedbackfeed-current-deadline-heading'))
     self.assertEquals(
             mockresponse.selector.one('.devilry-group-feedbackfeed-current-deadline-datetime').alltext_normalized,
             formats.date_format(testfeedbackset.deadline_datetime, 'SHORT_DATETIME_FORMAT')
     )
 def test_post_can_not_publish_with_last_feedbackset_deadline_as_none(self):
     assignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start',
                                    grading_system_plugin_id=core_models.Assignment
                                    .GRADING_SYSTEM_PLUGIN_ID_PASSEDFAILED)
     group = mommy.make('core.AssignmentGroup', parentnode=assignment)
     group_mommy.feedbackset_first_attempt_published(group=group, is_last_in_group=None)
     group_mommy.feedbackset_new_attempt_unpublished(group=group, deadline_datetime=None)
     examiner = mommy.make('core.Examiner',
                           assignmentgroup=group,
                           relatedexaminer=mommy.make('core.RelatedExaminer'))
     self.mock_http302_postrequest(
         cradmin_role=examiner.assignmentgroup,
         requestuser=examiner.relatedexaminer.user,
         viewkwargs={'pk': group.id},
         requestkwargs={
             'data': {
                 'text': 'This is a feedback',
                 'examiner_publish_feedback': 'unused value',
             }
         })
     feedbacksets = group_models.FeedbackSet.objects.all().order_by('created_datetime')
     self.assertEquals(2, len(feedbacksets))
     self.assertIsNotNone(feedbacksets[0].grading_published_datetime)
     self.assertIsNone(feedbacksets[1].grading_published_datetime)
 def test_post_publish_feedbackset_drafts_on_last_feedbackset_only(self):
     assignment = mommy.make_recipe(
             'devilry.apps.core.assignment_activeperiod_start',
             grading_system_plugin_id=core_models.Assignment.GRADING_SYSTEM_PLUGIN_ID_PASSEDFAILED)
     testgroup = mommy.make('core.AssignmentGroup', parentnode=assignment)
     feedbackset_first = group_mommy.feedbackset_first_attempt_published(group=testgroup)
     feedbackset_last = group_mommy.feedbackset_new_attempt_unpublished(
             group=testgroup,
             deadline_datetime=timezone.now() - timezone.timedelta(days=1))
     examiner = mommy.make('core.Examiner',
                           assignmentgroup=testgroup,
                           relatedexaminer=mommy.make('core.RelatedExaminer'))
     mommy.make('core.Candidate',
                assignment_group=testgroup,
                relatedstudent=mommy.make('core.RelatedStudent'))
     comment1 = mommy.make('devilry_group.GroupComment',
                text='test text 1',
                user=examiner.relatedexaminer.user,
                user_role='examiner',
                part_of_grading=True,
                feedback_set=feedbackset_first)
     feedback_comment = mommy.make('devilry_group.GroupComment',
                                   text='part of grading',
                                   user=examiner.relatedexaminer.user,
                                   user_role='examiner',
                                   part_of_grading=True,
                                   feedback_set=feedbackset_last)
     self.mock_http302_postrequest(
         cradmin_role=testgroup,
         requestuser=examiner.relatedexaminer.user,
         viewkwargs={'pk': testgroup.id},
         requestkwargs={
             'data': {
                 'passed': 'Passed',
                 'text': 'post comment',
                 'examiner_publish_feedback': 'unused value',
             }
         })
     cached_group = cache_models.AssignmentGroupCachedData.objects.get(group=testgroup)
     feedback_comments = group_models.GroupComment.objects.all()\
         .filter(feedback_set_id=cached_group.last_published_feedbackset.id)\
         .order_by('published_datetime')
     self.assertEqual(2, len(feedback_comments))
     self.assertEqual(feedback_comments[0].text, 'part of grading')
     self.assertEqual(feedback_comments[1].text, 'post comment')
     self.assertEqual(cached_group.last_published_feedbackset, feedbackset_last)
 def test_get_last_deadline_two_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)
     group_mommy.feedbackset_first_attempt_published(group=testgroup)
     testfeedbackset_last = group_mommy.feedbackset_new_attempt_unpublished(
         group=testgroup, deadline_datetime=timezone.now())
     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(2, len(timelinebuilder.feedbacksets))
     self.assertEquals(testfeedbackset_last.deadline_datetime,
                       timelinebuilder.get_last_deadline())
Exemplo n.º 36
0
    def test_post_publish_feedbackset_drafts_on_last_feedbackset_only(self):
        assignment = mommy.make_recipe(
                'devilry.apps.core.assignment_activeperiod_start',
                grading_system_plugin_id=core_models.Assignment.GRADING_SYSTEM_PLUGIN_ID_PASSEDFAILED)
        group = mommy.make('core.AssignmentGroup', parentnode=assignment)
        feedbackset_first = group_mommy.feedbackset_first_attempt_published(is_last_in_group=None, group=group)
        feedbackset_last = group_mommy.feedbackset_new_attempt_unpublished(group=group,
                                                                           deadline_datetime=timezone.now())
        examiner = mommy.make('core.Examiner',
                              assignmentgroup=group,
                              relatedexaminer=mommy.make('core.RelatedExaminer'))
        student = mommy.make('core.Candidate',
                             assignment_group=group,
                             relatedstudent=mommy.make('core.RelatedStudent'))
        mommy.make('devilry_group.GroupComment',
                   text='test text 1',
                   user=examiner.relatedexaminer.user,
                   user_role='examiner',
                   part_of_grading=True,
                   feedback_set=feedbackset_first)
        comment2 = mommy.make('devilry_group.GroupComment',
                              text='test text 2',
                              user=examiner.relatedexaminer.user,
                              user_role='examiner',
                              part_of_grading=True,
                              feedback_set=feedbackset_last)
        self.mock_http302_postrequest(
            cradmin_role=student.assignment_group,
            requestuser=student.relatedstudent.user,
            viewkwargs={'pk': group.id},
            requestkwargs={
                'data': {
                    'passed': True,
                    'text': 'post comment',
                    'examiner_publish_feedback': 'unused value',
                }
            })
        feedbacksets = group_models.FeedbackSet.objects.all()
        feedback_comments = group_models.GroupComment.objects.all().filter(feedback_set=feedbacksets[1])

        self.assertEquals(2, len(feedback_comments))
        self.assertEquals(feedback_comments[0], comment2)
        self.assertEquals(feedback_comments[1].text, 'post comment')
    def test_history_feedbackset_new_attempt_deadline_change(self):
        assignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start')
        group = mommy.make('core.AssignmentGroup', parentnode=assignment)
        group_mommy.feedbackset_first_attempt_published(group=group)
        new_attempt_deadline = timezone.localtime(timezone.now() + timezone.timedelta(days=1))
        new_attempt_deadline = new_attempt_deadline.replace(microsecond=0)
        feedback_set_new_attempt = group_mommy.feedbackset_new_attempt_unpublished(
            group=group,
            deadline_datetime=new_attempt_deadline)
        self.assertEqual(0, FeedbackSetDeadlineHistory.objects.filter(feedback_set__group_id=group.id).count())

        new_attempt_updated_deadline = new_attempt_deadline + timezone.timedelta(days=1)
        feedback_set_new_attempt.deadline_datetime = new_attempt_updated_deadline
        feedback_set_new_attempt.save()

        updated_feedback_set = FeedbackSet.objects.get(id=feedback_set_new_attempt.id)
        deadline_history = FeedbackSetDeadlineHistory.objects.get(feedback_set_id=updated_feedback_set.id)
        self.assertIsNotNone(deadline_history.changed_datetime)
        self.assertEqual(new_attempt_deadline, deadline_history.deadline_old)
        self.assertEqual(new_attempt_updated_deadline, deadline_history.deadline_new)
Exemplo n.º 38
0
    def test_feedbackset_new_attempt_unpublished(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_unpublished(
            group=testgroup)
        self.assertEquals(2, group_models.FeedbackSet.objects.count())
        self.assertEquals(testfeedbackset_first.group.id,
                          testfeedbackset.group.id)
        self.assertIsNone(testfeedbackset.grading_published_by)
        self.assertIsNone(testfeedbackset.grading_points)
        self.assertIsNone(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_first)
 def test_get_header_date_with_multiple_feedbacksets(self):
     # tests that if there are multiple FeedbackSets', the deadline of the last FeedbackSet should be shown.
     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 = group_mommy.feedbackset_new_attempt_unpublished(
         group=testgroup,
         deadline_datetime=timezone.now() + timezone.timedelta(days=10))
     mockresponse = self.mock_http200_getrequest_htmls(
         cradmin_role=testfeedbackset.group)
     self.assertTrue(
         mockresponse.selector.exists(
             '.devilry-group-feedbackfeed-current-deadline-heading'))
     self.assertEquals(
         mockresponse.selector.one(
             '.devilry-group-feedbackfeed-current-deadline-datetime').
         alltext_normalized,
         formats.date_format(testfeedbackset.deadline_datetime,
                             'SHORT_DATETIME_FORMAT'))
 def test_post_new_attempt_unpublished_comment_with_text(self):
     testgroup = mommy.make('core.AssignmentGroup')
     testfeedbackset = group_mommy.feedbackset_new_attempt_unpublished(
         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)
Exemplo n.º 41
0
 def test_post_comment_always_to_last_feedbackset(self):
     assignment = mommy.make_recipe(
         "devilry.apps.core.assignment_activeperiod_start",
         grading_system_plugin_id=core_models.Assignment.GRADING_SYSTEM_PLUGIN_ID_PASSEDFAILED,
     )
     group = mommy.make("core.AssignmentGroup", parentnode=assignment)
     examiner = mommy.make(
         "core.Examiner", assignmentgroup=group, relatedexaminer=mommy.make("core.RelatedExaminer")
     )
     feedbackset_first = group_mommy.feedbackset_first_attempt_published(is_last_in_group=None, group=group)
     feedbackset_last = group_mommy.feedbackset_new_attempt_unpublished(group=group)
     self.mock_http302_postrequest(
         cradmin_role=examiner.assignmentgroup,
         requestuser=examiner.relatedexaminer.user,
         viewkwargs={"pk": group.id},
         requestkwargs={"data": {"text": "This is a feedback", "examiner_add_public_comment": "unused value"}},
     )
     comments = group_models.GroupComment.objects.all()
     self.assertEquals(len(comments), 1)
     self.assertNotEquals(feedbackset_first, comments[0].feedback_set)
     self.assertEquals(feedbackset_last, comments[0].feedback_set)
 def test_get_examiner_new_attempt_unpublished_choice_alert_does_not_exist(
         self):
     # Test that choice alert for giving a new attempt or re editing the last does NOT show
     # when first feedbackset is published, but the new try is unpublished.
     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_unpublished(
         group=testgroup)
     examiner = mommy.make('core.Examiner', assignmentgroup=testgroup)
     mockresponse = self.mock_http200_getrequest_htmls(
         cradmin_role=testgroup, requestuser=examiner.relatedexaminer.user)
     self.assertNotEquals(testgroup.cached_data.last_published_feedbackset,
                          testfeedbackset_new_attempt)
     self.assertEquals(testgroup.cached_data.last_feedbackset,
                       testfeedbackset_new_attempt)
     self.assertFalse(
         mockresponse.selector.exists(
             '.devilry-group-feedbackfeed-examiner-after-publish-choice-alert'
         ))
Exemplo n.º 43
0
    def test_no_comments_if_no_files(self):
        # Test that the feedbacksets appears, but no comments if there are no files attached.
        testuser = mommy.make(settings.AUTH_USER_MODEL)
        testgroup = mommy.make('core.AssignmentGroup')
        testfeedbackset1 = devilry_group_mommy_factories.feedbackset_first_attempt_published(
                group=testgroup,
                is_last_in_group=None)
        testfeedbackset2 = devilry_group_mommy_factories.feedbackset_new_attempt_unpublished(
            group=testgroup,
            deadline_datetime=timezone.now() + timezone.timedelta(days=3)
        )
        mommy.make('devilry_group.GroupComment', feedback_set=testfeedbackset1)
        mommy.make('devilry_group.GroupComment', feedback_set=testfeedbackset2)

        feedbackset_queryset = builder_base.get_feedbackfeed_builder_queryset(testgroup, testuser, 'unused')
        sidebarbuilder = FeedbackFeedSidebarBuilder(feedbacksets=feedbackset_queryset)
        sidebarbuilder.build()
        sidebarlist = sidebarbuilder.get_as_list()

        self.assertEquals(len(sidebarlist), 2)
        self.assertEquals(len(sidebarlist[0]['comments']), 0)
        self.assertEquals(len(sidebarlist[1]['comments']), 0)
 def test_post_new_attempt_unpublished_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_unpublished(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)