def test_feedbackset_created_with_published_feedbackset_with_comment(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,
                                                        grading_published_by=examiner.relatedexaminer.user)

        timestr = (datetimeutils.get_current_datetime() + timezone.timedelta(days=2)).strftime('%Y-%m-%d %H:%M')
        comment_text = 'New attempt given'

        self.mock_http302_postrequest(
            cradmin_role=examiner.assignmentgroup,
            requestuser=examiner.relatedexaminer.user,
            viewkwargs={'pk': examiner.assignmentgroup.id},
            requestkwargs={
                'data': {
                    'deadline_datetime': timestr,
                    'text': comment_text,
                    'examiner_create_new_feedbackset': 'unused value',
                }
            })

        feedbacksets = group_models.FeedbackSet.objects.all()
        self.assertEquals(2, len(feedbacksets))
        self.assertEquals(datetime.strptime(timestr, '%Y-%m-%d %H:%M'), feedbacksets[1].deadline_datetime)

        comments = group_models.GroupComment.objects.all()
        self.assertEquals(1, len(comments))
        self.assertEquals(comments[0].feedback_set_id, feedbacksets[1].id)
        self.assertEquals(comments[0].text, comment_text)
Example #2
0
    def __create_new_feedbackset(self, comment, new_deadline):
        """
        Creates a new :class:`devilry.devilry_group.models.FeedbackSet` as long as the ``new_deadline`` is
        in the future.

        :Note: Extra constraints to the new deadline and creation of a FeedbackSet may be added.

        Args:
            comment (GroupComment): Comment to be posted with the new FeedbackSet
            new_deadline (DateTime): The deadline.

        Returns:
            FeedbackSet: returns the newly created :class:`devilry.devilry_group.models.FeedbackSet` instance.

        """
        # Make sure the deadline is in the future.
        if new_deadline <= datetimeutils.get_current_datetime():
            messages.error(self.request, ugettext_lazy('Deadline must be ahead of current date and time'))
            return None

        # Update current last feedbackset in group before
        # creating the new feedbackset.
        self.__update_current_feedbackset(comment)

        # Create a new :class:`~devilry.devilry_group.models.FeedbackSet` and save it.
        feedbackset = group_models.FeedbackSet(
            group=self.request.cradmin_role,
            feedbackset_type=group_models.FeedbackSet.FEEDBACKSET_TYPE_NEW_ATTEMPT,
            created_by=comment.user,
            deadline_datetime=new_deadline
        )
        feedbackset.full_clean()
        feedbackset.save()
        return feedbackset
    def __create_new_feedbackset(self, comment, new_deadline):
        if new_deadline <= datetimeutils.get_current_datetime():
            messages.error(self.request, ugettext_lazy('Deadline must be ahead of current date and time'))
            return None

        # Update current last feedbackset in group before
        # creating the new feedbackset.
        current_feedbackset = group_models.FeedbackSet.objects.get(id=comment.feedback_set_id)
        current_feedbackset.is_last_in_group = None
        current_feedbackset.grading_published_by = comment.user
        current_feedbackset.full_clean()
        current_feedbackset.save()

        feedbackset = group_models.FeedbackSet(
            group=self.request.cradmin_role,
            feedbackset_type=group_models.FeedbackSet.FEEDBACKSET_TYPE_NEW_ATTEMPT,
            created_by=comment.user,
            deadline_datetime=new_deadline
        )
        feedbackset.full_clean()
        feedbackset.save()
        return feedbackset
Example #4
0
    def __create_new_feedbackset(self, comment, new_deadline):
        """
        Creates a new :class:`devilry.devilry_group.models.FeedbackSet` as long as the ``new_deadline`` is
        in the future.

        :Note: Extra constraints to the new deadline and creation of a FeedbackSet may be added.

        Args:
            comment (GroupComment): Comment to be posted with the new FeedbackSet
            new_deadline (DateTime): The deadline.

        Returns:
            FeedbackSet: returns the newly created :class:`devilry.devilry_group.models.FeedbackSet` instance.

        """
        # Make sure the deadline is in the future.
        if new_deadline <= datetimeutils.get_current_datetime():
            messages.error(
                self.request,
                ugettext_lazy(
                    'Deadline must be ahead of current date and time'))
            return None

        # Update current last feedbackset in group before
        # creating the new feedbackset.
        self.__update_current_feedbackset(comment)

        # Create a new :class:`~devilry.devilry_group.models.FeedbackSet` and save it.
        feedbackset = group_models.FeedbackSet(
            group=self.request.cradmin_role,
            feedbackset_type=group_models.FeedbackSet.
            FEEDBACKSET_TYPE_NEW_ATTEMPT,
            created_by=comment.user,
            deadline_datetime=new_deadline)
        feedbackset.full_clean()
        feedbackset.save()
        return feedbackset