diff --git a/eox_nelp/pearson_vue/tasks.py b/eox_nelp/pearson_vue/tasks.py index 5d7ce613..7c9c31ee 100644 --- a/eox_nelp/pearson_vue/tasks.py +++ b/eox_nelp/pearson_vue/tasks.py @@ -17,7 +17,7 @@ ExamAuthorizationDataImport, RealTimeImport, ) -from eox_nelp.pearson_vue.utils import filter_action_parameters, update_user_engines +from eox_nelp.pearson_vue.utils import generate_action_parameters, update_user_engines User = get_user_model() @@ -133,7 +133,7 @@ def audit_pearson_engine_action(user_id, exam_id, action_key, **kwargs): user = User.objects.get(id=user_id) update_user_engines(user, action_name, exam_id) action = getattr(PearsonEngineApiClient(), action_key) - parameters = filter_action_parameters(action_name, user, exam_id) + parameters = generate_action_parameters(user, exam_id) response = action(**parameters, **kwargs) if response.get("error"): diff --git a/eox_nelp/pearson_vue/tests/test_tasks.py b/eox_nelp/pearson_vue/tests/test_tasks.py index 38371c30..537e6c9d 100644 --- a/eox_nelp/pearson_vue/tests/test_tasks.py +++ b/eox_nelp/pearson_vue/tests/test_tasks.py @@ -117,14 +117,19 @@ def setUp(self): self.user, _ = User.objects.get_or_create(username="vader") self.exam_id = "exam123" self.kwargs = {"extra_info": "test"} + self.action_parameters = { + "user_data": "test", + "platform_data": "test", + "exam_data": "test", + } @patch("eox_nelp.pearson_vue.tasks.update_user_engines") - @patch("eox_nelp.pearson_vue.tasks.filter_action_parameters") + @patch("eox_nelp.pearson_vue.tasks.generate_action_parameters") @patch("eox_nelp.pearson_vue.tasks.PearsonEngineApiClient") def test_real_time_import_rti( self, mock_api_client, - filter_action_parameters_mock, + generate_action_parameters_mock, update_user_engines_mock ): """Test real-time import action using the Pearson Engine API. @@ -133,29 +138,25 @@ def test_real_time_import_rti( - update_user_engines is called with correct parameters. - The real_time_import method is called with the correct parameters. """ - rti_parameters = { - "user_data": "test", - "platform_data": "test", - "exam_data": "test", - } + mock_action = MagicMock() mock_action.return_value = {"error": False} mock_api_client.return_value = MagicMock(**{"real_time_import": mock_action}) - filter_action_parameters_mock.return_value = rti_parameters + generate_action_parameters_mock.return_value = self.action_parameters action_name = "rti" real_time_import_task_v2(self.user.id, action_name=action_name, **self.kwargs) update_user_engines_mock.assert_called_once_with(self.user, action_name, None) - mock_action.assert_called_once_with(**rti_parameters, **self.kwargs) + mock_action.assert_called_once_with(**self.action_parameters, **self.kwargs) @patch("eox_nelp.pearson_vue.tasks.update_user_engines") - @patch("eox_nelp.pearson_vue.tasks.filter_action_parameters") + @patch("eox_nelp.pearson_vue.tasks.generate_action_parameters") @patch("eox_nelp.pearson_vue.tasks.PearsonEngineApiClient") def test_real_time_import_cdd( self, mock_api_client, - filter_action_parameters_mock, + generate_action_parameters_mock, update_user_engines_mock ): """Test candidate demographics import action using the Pearson Engine API. @@ -164,25 +165,24 @@ def test_real_time_import_cdd( - update_user_engines is called with correct parameters. - The import_candidate_demographics method is called with the correct parameters. """ - cdd_parameters = {"user_data": "test", "platform_data": "test"} mock_action = MagicMock() mock_action.return_value = {"error": False} mock_api_client.return_value = MagicMock(**{"import_candidate_demographics": mock_action}) - filter_action_parameters_mock.return_value = cdd_parameters + generate_action_parameters_mock.return_value = self.action_parameters action_name = "cdd" real_time_import_task_v2(self.user.id, action_name=action_name, **self.kwargs) update_user_engines_mock.assert_called_once_with(self.user, action_name, None) - mock_action.assert_called_once_with(**cdd_parameters, **self.kwargs) + mock_action.assert_called_once_with(**self.action_parameters, **self.kwargs) @patch("eox_nelp.pearson_vue.tasks.update_user_engines") - @patch("eox_nelp.pearson_vue.tasks.filter_action_parameters") + @patch("eox_nelp.pearson_vue.tasks.generate_action_parameters") @patch("eox_nelp.pearson_vue.tasks.PearsonEngineApiClient") def test_real_time_import_ead( self, mock_api_client, - filter_action_parameters_mock, + generate_action_parameters_mock, update_user_engines_mock ): """Test exam authorization import action using the Pearson Engine API. @@ -191,23 +191,22 @@ def test_real_time_import_ead( - update_user_engines is called with correct parameters. - The import_exam_authorization method is called with the correct parameters. """ - ead_parameters = {"user_data": "test", "exam_data": "test"} mock_action = MagicMock() mock_action.return_value = {"error": False} mock_api_client.return_value = MagicMock(**{"import_exam_authorization": mock_action}) - filter_action_parameters_mock.return_value = ead_parameters + generate_action_parameters_mock.return_value = self.action_parameters action_name = "ead" real_time_import_task_v2(self.user.id, exam_id=self.exam_id, action_name=action_name, **self.kwargs) update_user_engines_mock.assert_called_once_with(self.user, action_name, self.exam_id,) - mock_action.assert_called_once_with(**ead_parameters, **self.kwargs) + mock_action.assert_called_once_with(**self.action_parameters, **self.kwargs) @patch("eox_nelp.pearson_vue.tasks.update_user_engines") - @patch("eox_nelp.pearson_vue.tasks.filter_action_parameters") + @patch("eox_nelp.pearson_vue.tasks.generate_action_parameters") def test_real_time_import_invalid_action( self, - filter_action_parameters_mock, + generate_action_parameters_mock, update_user_engines_mock ): """Test that a KeyError is raised for an invalid action name. @@ -219,15 +218,15 @@ def test_real_time_import_invalid_action( with self.assertRaises(KeyError): real_time_import_task_v2(self.user.id, action_name="invalid_action") update_user_engines_mock.assert_not_called() - filter_action_parameters_mock.assert_not_called() + generate_action_parameters_mock.assert_not_called() @patch("eox_nelp.pearson_vue.tasks.update_user_engines") - @patch("eox_nelp.pearson_vue.tasks.filter_action_parameters") + @patch("eox_nelp.pearson_vue.tasks.generate_action_parameters") @patch('eox_nelp.pearson_vue.tasks.PearsonEngineApiClient') def test_real_time_import_user_not_found( self, mock_api_client, - filter_action_parameters_mock, + generate_action_parameters_mock, update_user_engines_mock ): """Test that a DoesNotExist is raised for an invalid user id. @@ -241,15 +240,15 @@ def test_real_time_import_user_not_found( real_time_import_task_v2(12345678, action_name="rti") mock_api_client.assert_not_called() update_user_engines_mock.assert_not_called() - filter_action_parameters_mock.assert_not_called() + generate_action_parameters_mock.assert_not_called() @patch("eox_nelp.pearson_vue.tasks.update_user_engines") - @patch("eox_nelp.pearson_vue.tasks.filter_action_parameters") + @patch("eox_nelp.pearson_vue.tasks.generate_action_parameters") @patch("eox_nelp.pearson_vue.tasks.PearsonEngineApiClient") def test_raise_exception_on_error_response( self, mock_api_client, - filter_action_parameters_mock, + generate_action_parameters_mock, update_user_engines_mock ): """Test that an exception is raised when the API response contains an Error. @@ -260,11 +259,6 @@ def test_raise_exception_on_error_response( - The action method is called with the correct parameters. - Exception contains the expected message. """ - rti_parameters = { - "user_data": "test", - "platform_data": "test", - "exam_data": "test", - } mock_action = MagicMock() expected_message = "Timeout error" mock_action.return_value = { @@ -273,10 +267,10 @@ def test_raise_exception_on_error_response( } action_name = "rti" mock_api_client.return_value = MagicMock(**{"real_time_import": mock_action}) - filter_action_parameters_mock.return_value = rti_parameters + generate_action_parameters_mock.return_value = self.action_parameters with self.assertRaises(Exception) as context: real_time_import_task_v2(self.user.id, action_name=action_name, **self.kwargs) update_user_engines_mock.assert_called_once_with(self.user, action_name, None) - mock_action.assert_called_once_with(**rti_parameters, **self.kwargs) + mock_action.assert_called_once_with(**self.action_parameters, **self.kwargs) self.assertEqual(expected_message, str(context.exception)) diff --git a/eox_nelp/pearson_vue/tests/test_utils.py b/eox_nelp/pearson_vue/tests/test_utils.py index 0254349a..f27d421c 100644 --- a/eox_nelp/pearson_vue/tests/test_utils.py +++ b/eox_nelp/pearson_vue/tests/test_utils.py @@ -15,7 +15,7 @@ from eox_nelp.pearson_vue.constants import PAYLOAD_CDD, PAYLOAD_EAD from eox_nelp.pearson_vue.models import PearsonEngine from eox_nelp.pearson_vue.utils import ( - filter_action_parameters, + generate_action_parameters, generate_client_authorization_id, is_cp1252, update_user_engines, @@ -567,57 +567,69 @@ def test_does_not_increment_course_value_for_other_actions(self): self.assertDictEqual(user.pearsonengine.courses, {}) -class TestFilterActionParameters(TestCase): - """Class to test the filter_action_parameters function.""" +class TestGenerateActionParameters(TestCase): + """Test case for generate_action_parameters.""" + def setUp(self): - """Set up the test environment for the test cases.""" + """ + Set up the test environment. + """ + self.mock_get_user_data = self.patch("eox_nelp.pearson_vue.utils.get_user_data") + self.mock_get_platform_data = self.patch("eox_nelp.pearson_vue.utils.get_platform_data") + self.mock_get_exam_data = self.patch("eox_nelp.pearson_vue.utils.get_exam_data") + + self.mock_get_user_data.return_value = {"user_data": "mock"} + self.mock_get_platform_data.return_value = {"platform_data": "mock"} + self.mock_get_exam_data.return_value = {"exam_data": "mock"} + + def patch(self, target, **kwargs): + """Patch a target and return the mock""" + patcher = patch(target, **kwargs) + mock = patcher.start() + self.addCleanup(patcher.stop) + return mock + + def test_generate_action_parameters_with_exam_id(self): + """ + Test generate_action_parameters function with exam_id. - self.get_user_data_patcher = patch( - "eox_nelp.pearson_vue.utils.get_user_data", - return_value={"user_data": "mock"}, - ) - self.get_platform_data_patcher = patch( - "eox_nelp.pearson_vue.utils.get_platform_data", - return_value={"platform_data": "mock"}, - ) - self.get_exam_data_patcher = patch( - "eox_nelp.pearson_vue.utils.get_exam_data", - return_value={"exam_data": "mock"}, - ) + Expected behavior: + - The result is a dict with user_data, platform_data, and exam_data. + - get_user_data, get_platform_data, and get_exam_data are called once. + - get_exam_data is called with exam_id. + """ + user = MagicMock() + exam_id = "exam123" - self.mock_get_user_data = self.get_user_data_patcher.start() - self.mock_get_platform_data = self.get_platform_data_patcher.start() - self.mock_get_exam_data = self.get_exam_data_patcher.start() + result = generate_action_parameters(user, exam_id) - def tearDown(self): - """Restore the state of the mocks.""" - self.get_user_data_patcher.stop() - self.get_platform_data_patcher.stop() - self.get_exam_data_patcher.stop() - - def test_import_candidate_demographics_action_parameters(self): - """Test if the `filter_action_parameters` function returns the correct - parameters for the "cdd" action. - """ - result = filter_action_parameters("cdd", user=MagicMock()) - self.assertNotIn("exam_data", result) - self.assertIn("user_data", result) - self.assertIn("platform_data", result) - - def test_import_exam_authorization_action_parameters(self): - """Test if the `filter_action_parameters` function returns the correct - parameters for the "ead" action. + self.assertEqual(result, { + "user_data": {"user_data": "mock"}, + "platform_data": {"platform_data": "mock"}, + "exam_data": {"exam_data": "mock"}, + }) + self.mock_get_user_data.assert_called_once_with(user) + self.mock_get_platform_data.assert_called_once() + self.mock_get_exam_data.assert_called_once_with(exam_id) + + def test_generate_action_parameters_without_exam_id(self): """ - result = filter_action_parameters("ead", user=MagicMock()) - self.assertNotIn("platform_data", result) - self.assertIn("user_data", result) - self.assertIn("exam_data", result) - - def test_real_time_import_action_parameters(self): - """Test if the `filter_action_parameters` function returns the correct - parameters for the "rti" action. + Test generate_action_parameters function without exam_id. + + Expected behavior: + - The result is a dict with user_data, platform_data, and exam_data. + - get_user_data, get_platform_data, and get_exam_data are called once. + - get_exam_data is called with None. """ - result = filter_action_parameters("rti", user=MagicMock()) - self.assertIn("user_data", result) - self.assertIn("platform_data", result) - self.assertIn("exam_data", result) + user = MagicMock() + + result = generate_action_parameters(user) + + self.assertEqual(result, { + "user_data": {"user_data": "mock"}, + "platform_data": {"platform_data": "mock"}, + "exam_data": {"exam_data": "mock"}, + }) + self.mock_get_user_data.assert_called_once_with(user) + self.mock_get_platform_data.assert_called_once() + self.mock_get_exam_data.assert_called_once_with(None) diff --git a/eox_nelp/pearson_vue/utils.py b/eox_nelp/pearson_vue/utils.py index f1107e45..b34d0162 100644 --- a/eox_nelp/pearson_vue/utils.py +++ b/eox_nelp/pearson_vue/utils.py @@ -125,7 +125,7 @@ def get_exam_data(exam_id): } -def filter_action_parameters(action_name, user, exam_id=None): +def generate_action_parameters(user, exam_id=None): """ Select the appropriate parameters for the action based on the action name. @@ -144,12 +144,4 @@ def filter_action_parameters(action_name, user, exam_id=None): "exam_data": get_exam_data(exam_id), } - if action_name == "cdd": - del action_parameters["exam_data"] - return action_parameters - - if action_name == "ead": - del action_parameters["platform_data"] - return action_parameters - return action_parameters