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