コード例 #1
0
 def test_get_course_id(self):
     """
     Test parsing of response from get_course_by_field Moodle endpoint.
     """
     client = MoodleAPIClient(self.enterprise_config)
     responses.add(
         responses.GET,
         urljoin(self.enterprise_config.moodle_base_url, self.moodle_api_path),
         json={'courses': [{'id': 2}]},
         status=200
     )
     assert client.get_course_id('course:test_course') == 2
コード例 #2
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
コード例 #3
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)
コード例 #4
0
    def test_delete_content_metadata(self):
        """
        Test core logic for formatting a delete request to Moodle.
        """
        expected_data = {'wsfunction': 'core_course_delete_courses', 'courseids[]': self.moodle_course_id}

        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.delete_content_metadata(SERIALIZED_DATA)

        client._post.assert_called_once_with(expected_data)  # pylint: disable=protected-access
コード例 #5
0
    def test_update_content_metadata(self):
        """
        Test core logic of update_content_metadata to ensure
        query string we send to Moodle is formatted correctly.
        """
        expected_data = SERIALIZED_DATA.copy()
        expected_data['courses[0][id]'] = self.moodle_course_id
        expected_data['wsfunction'] = 'core_course_update_courses'

        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.update_content_metadata(SERIALIZED_DATA)
        client._post.assert_called_once_with(expected_data)  # pylint: disable=protected-access
コード例 #6
0
 def test_moodle_config_is_set(self):
     """
     Test global_moodle_config is setup.
     """
     moodle_api_client = MoodleAPIClient(self.enterprise_config)
     assert moodle_api_client.config is not None