Esempio n. 1
0
    def test_client_behavior_on_successful_learner_data_transmission(self):
        """
        Test that given successful requests for moodle learner data,
        the client makes the appropriate _post call to update a user's grade
        """
        client = MoodleAPIClient(self.enterprise_config)
        client._post = unittest.mock.MagicMock(name='_post', return_value=SUCCESSFUL_RESPONSE)  # pylint: disable=protected-access

        client.get_course_id = unittest.mock.MagicMock(name='_get_course_id')
        client.get_course_id.return_value = self.moodle_course_id

        client.get_course_final_grade_module = unittest.mock.MagicMock(name='_get_final_grade_module')
        client.get_course_final_grade_module.return_value = self.moodle_module_id, self.moodle_module_name

        client.get_creds_of_user_in_course = unittest.mock.MagicMock(name='get_user_in_course')
        client.get_creds_of_user_in_course.return_value = self.moodle_user_id

        # The base transmitter expects the create course completion response to be a tuple of (code, body)
        assert client.create_course_completion(self.user_email, self.learner_data_payload) == (
            SUCCESSFUL_RESPONSE.status_code,
            SUCCESSFUL_RESPONSE.text
        )

        expected_params = {
            'wsfunction': 'core_grades_update_grades',
            'source': self.moodle_module_name,
            'courseid': self.moodle_course_id,
            'component': 'mod_assign',
            'activityid': self.moodle_module_id,
            'itemnumber': 0,
            'grades[0][studentid]': self.moodle_user_id,
            'grades[0][grade]': self.grade * 100
        }

        client._post.assert_called_once_with(expected_params)  # pylint: disable=protected-access
Esempio n. 2
0
    def test_course_completion_with_no_course(self):
        """Test that we properly raise exceptions if the client receives a 404 from Moodle"""
        with responses.RequestsMock() as rsps:
            moodle_api_path = urljoin(
                self.enterprise_config.moodle_base_url,
                self.moodle_api_path,
            )
            moodle_get_courses_query = 'wstoken={}&wsfunction=core_course_get_courses_by_field&field=shortname' \
                                       '&value={}&moodlewsrestformat=json'.format(self.token, self.moodle_course_id)
            request_url = '{}?{}'.format(moodle_api_path,
                                         moodle_get_courses_query)
            rsps.add(responses.GET, request_url, body=b'{}', status=200)
            client = MoodleAPIClient(self.enterprise_config)
            with pytest.raises(ClientError) as client_error:
                client.create_course_completion(self.user_email,
                                                self.learner_data_payload)

            assert client_error.value.message == 'MoodleAPIClient request failed: 404 ' \
                                                 'Course key "{}" not found in Moodle.'.format(self.moodle_course_id)