Пример #1
0
    def get_course_grade(self, course_id, username):
        """
        Retrieve the grade for the given username for the given course_id.

        Args:
        * ``course_id`` (str): The string value of the course's unique identifier
        * ``username`` (str): The username ID identifying the user for which to retrieve the grade.

        Raises:

        HttpNotFoundError if no grade found for the given user+course.

        Returns:

        a dict containing:

        * ``username``: A string representation of a user's username passed in the request.
        * ``course_key``: A string representation of a Course ID.
        * ``passed``: Boolean representing whether the course has been passed according the course's grading policy.
        * ``percent``: A float representing the overall grade for the course
        * ``letter_grade``: A letter grade as defined in grading_policy (e.g. 'A' 'B' 'C' for 6.002x) or None

        """
        results = self.client.course_grade(course_id).users().get(
            username=username)
        for row in results:
            if row.get('username') == username:
                return row

        raise HttpNotFoundError(
            'No grade record found for course={}, username={}'.format(
                course_id, username))
def test_get_segment_id_not_found(*args, **kwargs):
    username = '******'

    mock_get_tracking_key = args[0]
    mock_get_access_token = args[1]
    mock_get_retirement_state = kwargs['get_learner_retirement_state']

    mock_get_access_token.return_value = ('THIS_IS_A_JWT', None)
    mock_get_tracking_key.side_effect = HttpNotFoundError(
        '{} not found'.format(username))

    mock_get_retirement_state.return_value = {
        'original_username': username,
        'current_state': {
            'state_name': 'PENDING'
        }
    }

    result = _call_script(username, fetch_ecom_segment_id=True)
    mock_get_tracking_key.assert_called_once_with(
        mock_get_retirement_state.return_value)
    assert 'Setting Ecommerce Segment ID to None' in result.output

    # Reset our call counts for the next test
    mock_get_access_token.reset_mock()
    mock_get_retirement_state.reset_mock()
    def test_learner_data_self_paced_no_grades(self, mock_course_api,
                                               mock_grades_api,
                                               mock_enrollment_api):
        enrollment = factories.EnterpriseCourseEnrollmentFactory(
            enterprise_customer_user=self.enterprise_customer_user,
            course_id=self.course_id,
        )

        # Return instructor-paced course details
        mock_course_api.return_value.get_course_details.return_value = dict(
            pacing='self', )

        # Mock grades data not found
        mock_grades_api.return_value.get_course_grade.side_effect = HttpNotFoundError(
            'No grade record found for course={}, username={}'.format(
                self.course_id, self.user.username))

        # Mock enrollment data
        mock_enrollment_api.return_value.get_course_enrollment.return_value = dict(
            mode="verified")

        learner_data = list(self.exporter.export())
        assert len(learner_data) == 2
        assert learner_data[0].course_id == self.course_key
        assert learner_data[1].course_id == self.course_id

        for report in learner_data:
            assert report.enterprise_course_enrollment_id == enrollment.id
            assert not report.course_completed
            assert report.completed_timestamp is None
            assert report.grade is None