예제 #1
0
    def test_get_grading_statistics(self):
        # Given an open response item
        mock_ora = ('mock-course', 'mock-item')

        # Initially, nothing listed
        self.assertEqual(teams_api.get_staff_grading_statistics(*mock_ora), {
            'graded': 0,
            'ungraded': 0,
            'in-progress': 0
        })

        # New submissions count towards 'ungraded'
        submission = self._create_test_submission_for_team()
        self.assertEqual(teams_api.get_staff_grading_statistics(*mock_ora), {
            'graded': 0,
            'ungraded': 1,
            'in-progress': 0
        })
        # Complete assessments count towards 'graded'
        teams_api.create_assessment(submission['team_submission_uuid'],
                                    *self.default_assessment)
        self.assertEqual(teams_api.get_staff_grading_statistics(*mock_ora), {
            'graded': 1,
            'ungraded': 0,
            'in-progress': 0
        })
예제 #2
0
    def test_create_assessment(self):
        # Given a team submission and workflow
        team_submission = self._create_test_submission_for_team()

        # When I create an assessment
        assessments = teams_api.create_assessment(
            team_submission['team_submission_uuid'], *self.default_assessment)

        # Assessments are created for each memeber of the team
        self.assertEqual(
            [assessment['submission_uuid'] for assessment in assessments],
            [str(uuid) for uuid in team_submission['submission_uuids']])
예제 #3
0
    def do_team_staff_assessment(self, data, team_submission_uuid=None):
        """
        Teams version of do_staff_assessment.
        Providing the team_submission_uuid removes lookup of team submission from individual submission_uuid.
        """
        if 'submission_uuid' not in data and team_submission_uuid is None:
            return False, self._(
                "The submission ID of the submission being assessed was not found."
            )
        try:
            if not team_submission_uuid:
                team_submission = team_sub_api.get_team_submission_from_individual_submission(
                    data['submission_uuid'])
                team_submission_uuid = team_submission['team_submission_uuid']

            assessment = teams_api.create_assessment(
                team_submission_uuid,
                self.get_student_item_dict()["student_id"],
                data['options_selected'],
                clean_criterion_feedback(self.rubric_criteria,
                                         data['criterion_feedback']),
                data['overall_feedback'],
                create_rubric_dict(self.prompts,
                                   self.rubric_criteria_with_labels))
            assess_type = data.get('assess_type', 'regrade')
            self.publish_assessment_event("openassessmentblock.staff_assess",
                                          assessment[0],
                                          type=assess_type)
            team_workflow_api.update_from_assessments(
                team_submission_uuid,
                override_submitter_requirements=(assess_type == 'regrade'))

        except StaffAssessmentRequestError:
            logger.warning(
                "An error occurred while submitting a team assessment "
                "for the submission %s",
                data['submission_uuid'],
                exc_info=True)
            msg = self._("Your team assessment could not be submitted.")
            return False, msg
        except StaffAssessmentInternalError:
            logger.exception(
                "An error occurred while submitting a team assessment "
                "for the submission %s",
                data['submission_uuid'],
            )
            msg = self._("Your team assessment could not be submitted.")
            return False, msg

        return True, ''
예제 #4
0
    def _create_test_assessments_for_team(self, team_submission_uuid):
        """
        Helper to create team assessments.
        Implicitly creates a submission and workflow to link the assessment to.

        Returns:
            Assessments
        """
        # Create submission and workflow
        if team_submission_uuid is None:
            team_submission_uuid = self._create_test_submission_for_team(
            )['team_submission_uuid']

        # Create assessment
        assessments = teams_api.create_assessment(
            team_submission_uuid, self.staff_user_id,
            OPTIONS_SELECTED_DICT["few"]["options"], dict(), "", RUBRIC)
        return assessments
    def _team_assess(self, data):
        """
        Encapsulates the functionality around staff assessment for a team based assignment
        """
        try:
            team_submission = team_sub_api.get_team_submission_from_individual_submission(
                data['submission_uuid'])
            team_submission_uuid = team_submission['team_submission_uuid']

            assessment = teams_api.create_assessment(
                team_submission_uuid,
                self.get_student_item_dict()["student_id"],
                data['options_selected'],
                clean_criterion_feedback(self.rubric_criteria,
                                         data['criterion_feedback']),
                data['overall_feedback'],
                create_rubric_dict(self.prompts,
                                   self.rubric_criteria_with_labels))
            assess_type = data.get('assess_type', 'regrade')
            self.publish_assessment_event("openassessmentblock.staff_assess",
                                          assessment[0],
                                          type=assess_type)
            team_workflow_api.update_from_assessments(
                team_submission_uuid,
                override_submitter_requirements=(assess_type == 'regrade'))

        except StaffAssessmentRequestError:
            logger.warning(
                "An error occurred while submitting a team assessment "
                "for the submission %s",
                data['submission_uuid'],
                exc_info=True)
            msg = self._("Your team assessment could not be submitted.")
            return {'success': False, 'msg': msg}
        except StaffAssessmentInternalError:
            logger.exception(
                "An error occurred while submitting a team assessment "
                "for the submission %s",
                data['submission_uuid'],
            )
            msg = self._("Your team assessment could not be submitted.")
            return {'success': False, 'msg': msg}

        return {'success': True, 'msg': ""}