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
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
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
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