diff --git a/ecs/crm-datafetch/tests/test_controller.py b/ecs/crm-datafetch/tests/test_controller.py index c7cf4ebd..4dcad4a3 100644 --- a/ecs/crm-datafetch/tests/test_controller.py +++ b/ecs/crm-datafetch/tests/test_controller.py @@ -7,8 +7,9 @@ from src.config.objects import (FetchTargetObjects, LastFetchDatetime, TargetObject) from src.error.exceptions import MeDaCaCRMDataFetchException from src.system_var.constants import (CHK_JP_NAME, CONV_JP_NAME, CSVBK_JP_NAME, - DATE_JP_NAME, FETCH_JP_NAME, PRE_JP_NAME, - RESBK_JP_NAME, UPD_JP_NAME, UPLD_JP_NAME) + DATE_JP_NAME, END_JP_NAME, FETCH_JP_NAME, + PRE_JP_NAME, RESBK_JP_NAME, UPD_JP_NAME, + UPLD_JP_NAME) from src.util.execute_datetime import ExecuteDateTime from .test_utils.log_message import generate_log_message_tuple @@ -1060,3 +1061,78 @@ class TestController: assert generate_log_message_tuple(log_message=f'I-CTRL-17 すべてのオブジェクトの処理が終了しました 実行結果:[{expect_process_result}]') in caplog.record_tuples assert generate_log_message_tuple( log_level=logging.ERROR, log_message=f'E-CTRL-01 一部のデータ取得に失敗しています 詳細はログをご確認ください') in caplog.record_tuples + + @pytest.mark.parametrize( + 'exception, message', + [ + (ForTestMeDaCaCRMDataFetchException, f'E-ERR-01 [{END_JP_NAME}]でエラーが発生したため、処理を終了します'), + (ForTestException, 'E-ERR-02 予期せぬエラーが発生したため、処理を終了します エラー内容: [例外発生]') + ]) + def test_raise_upload_result_data_process(self, s3_client, monkeypatch, caplog, exception, message): + """ + Cases: + 1. 取得処理実施結果アップロード処理でシステム例外が発生した場合、エラーで終了すること + 2. 取得処理実施結果アップロード処理で想定外の例外が発生した場合、エラーで終了すること + Arranges: + - パラメータ1:取得処理実施結果アップロード処理でシステム例外が発生するようにする + - パラメータ2:取得処理実施結果アップロード処理で想定外の例外が発生するようにする + Expects: + - 取得処理実施結果アップロード処理で例外が発生すること + - 取得処理実施結果アップロード処理で発生した例外のログメッセージが出力されていること + """ + monkeypatch.setattr(FetchTargetObjects, '_FetchTargetObjects__validate', lambda x: None) + monkeypatch.setattr(TargetObject, '_TargetObject__validate', lambda x: None) + monkeypatch.setattr(LastFetchDatetime, '_LastFetchDatetime__validate', lambda x: None) + mock_execute_datetime = ExecuteDateTime() + objects = { + 'objects': [ + { + 'object_name': 'Account', + 'upload_file_name': 'Account_YYYYMMDDHHMMSS' + }, + { + 'object_name': 'Contact', + 'upload_file_name': 'Contact_YYYYMMDDHHMMSS' + }, + { + 'object_name': 'Call2_vod__c', + 'upload_file_name': 'Call2_vod__c_YYYYMMDDHHMMSS' + } + ] + } + mock_target_objects = FetchTargetObjects(objects) + mock_target_object_first = TargetObject(objects['objects'][0], mock_execute_datetime) + mock_target_object_second = TargetObject(objects['objects'][1], mock_execute_datetime) + mock_target_object_third = TargetObject(objects['objects'][2], mock_execute_datetime) + mock_return_values = [mock_target_object_first, mock_target_object_second, mock_target_object_third] + mock_last_fetch_datetime = LastFetchDatetime({ + 'last_fetch_datetime_from': '1900-01-01T00:00:00.000Z', + 'last_fetch_datetime_to': '9999-12-31T59:59:59.000Z' + }, mock_execute_datetime) + mock_prepare_data_fetch_process = MagicMock(return_value=(mock_target_objects, mock_execute_datetime, {})) + mock_check_object_info_process = MagicMock(side_effect=mock_return_values) + mock_set_datetime_period_process = MagicMock(return_value=mock_last_fetch_datetime) + mock_fetch_crm_data_process = MagicMock(side_effect=[{}, {}, {}]) + mock_backup_crm_data_process = MagicMock() + mock_convert_crm_csv_data_process = MagicMock() + mock_backup_crm_csv_data_process = MagicMock() + mock_copy_crm_csv_data_process = MagicMock() + mock_upload_last_fetch_datetime_process = MagicMock() + mock_upload_result_data_process = MagicMock(side_effect=[exception( + 'E-END-01', END_JP_NAME, '例外発生'), None, None]) + + with patch('src.controller.prepare_data_fetch_process', mock_prepare_data_fetch_process),\ + patch('src.controller.check_object_info_process', mock_check_object_info_process), \ + patch('src.controller.set_datetime_period_process', mock_set_datetime_period_process),\ + patch('src.controller.fetch_crm_data_process', mock_fetch_crm_data_process),\ + patch('src.controller.backup_crm_data_process', mock_backup_crm_data_process),\ + patch('src.controller.convert_crm_csv_data_process', mock_convert_crm_csv_data_process),\ + patch('src.controller.backup_crm_csv_data_process', mock_backup_crm_csv_data_process),\ + patch('src.controller.copy_crm_csv_data_process', mock_copy_crm_csv_data_process),\ + patch('src.controller.upload_last_fetch_datetime_process', mock_upload_last_fetch_datetime_process),\ + patch('src.controller.upload_result_data_process', mock_upload_result_data_process): + with pytest.raises(exception): + controller.controller() + assert generate_log_message_tuple( + log_level=logging.ERROR, + log_message=message) in caplog.record_tuples, '取得処理実施結果アップロード処理で発生した例外のログメッセージが出力されていること'