From f18aeb8d258392c10989afc10cb1b258db601d29 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Wed, 3 Aug 2022 19:41:42 +0900 Subject: [PATCH] =?UTF-8?q?feat:=E3=83=AB=E3=83=BC=E3=83=97=E5=87=A6?= =?UTF-8?q?=E7=90=86=E4=B8=AD=E3=81=AE=E4=BE=8B=E5=A4=96=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/crm-datafetch/tests/test_controller.py | 513 ++++++++++++++++++--- 1 file changed, 461 insertions(+), 52 deletions(-) diff --git a/ecs/crm-datafetch/tests/test_controller.py b/ecs/crm-datafetch/tests/test_controller.py index b0938eee..43dfed94 100644 --- a/ecs/crm-datafetch/tests/test_controller.py +++ b/ecs/crm-datafetch/tests/test_controller.py @@ -6,7 +6,9 @@ from src import controller from src.config.objects import (FetchTargetObjects, LastFetchDatetime, TargetObject) from src.error.exceptions import MeDaCaCRMDataFetchException -from src.system_var.constants import CHK_JP_NAME, DATE_JP_NAME, PRE_JP_NAME +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) from src.util.execute_datetime import ExecuteDateTime from .test_utils.log_message import generate_log_message_tuple @@ -360,60 +362,11 @@ class TestController: - データ取得準備処理で例外が発生すること - データ取得準備処理で発生した例外のログメッセージが出力されていること """ - # TODO: ケースのコピー用にコメントを残してある - # 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(return_value=[{}]) - # 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() - expect_exception = ForTestControllerException('E-PRE-01', PRE_JP_NAME, '例外発生') mock_prepare_data_fetch_process = MagicMock(side_effect=expect_exception) mock_check_object_info_process = MagicMock() 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(MeDaCaCRMDataFetchException): controller.controller() assert mock_check_object_info_process.called is False @@ -486,6 +439,7 @@ class TestController: # with pytest.raises(MeDaCaCRMDataFetchException): controller.controller() assert mock_check_object_info_process.call_count == 3 + assert mock_set_datetime_period_process.call_count == 2 expect_process_result = { 'Account': 'fail', 'Contact': 'success', @@ -496,7 +450,7 @@ class TestController: assert generate_log_message_tuple( log_level=logging.ERROR, log_message=f'E-CTRL-01 一部のデータ取得に失敗しています 詳細はログをご確認ください') in caplog.record_tuples - def test_raise_set_fetch_date_period_process(self, s3_client, monkeypatch, caplog): + def test_raise_set_datetime_period_process(self, s3_client, monkeypatch, caplog): """ Cases: データ取得期間設定処理でシステム例外が発生した場合、エラーログが送出され、後続の終了に移行すること @@ -538,7 +492,6 @@ class TestController: }, 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_set_datetime_period_process = MagicMock(side_effect=[ForTestControllerException( 'E-DATE-01', DATE_JP_NAME, '例外発生'), mock_last_fetch_datetime, mock_last_fetch_datetime]) mock_fetch_crm_data_process = MagicMock(return_value=[{}]) @@ -563,6 +516,7 @@ class TestController: # with pytest.raises(MeDaCaCRMDataFetchException): controller.controller() assert mock_set_datetime_period_process.call_count == 3 + assert mock_fetch_crm_data_process.call_count == 2 expect_process_result = { 'Account': 'fail', 'Contact': 'success', @@ -572,3 +526,458 @@ 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 + + def test_raise_fetch_crm_data_process(self, s3_client, monkeypatch, caplog): + """ + Cases: + CRMデータ取得処理でシステム例外が発生した場合、エラーで終了すること + Arranges: + - CRMデータ取得処理でシステム例外が発生するようにする + Expects: + - CRMデータ取得処理で例外が発生すること + - CRMデータ取得処理で発生した例外のログメッセージが出力されていること + """ + 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=[ForTestControllerException( + 'E-FETCH-01', FETCH_JP_NAME, '例外発生'), {}, {}]) + 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() + + 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(MeDaCaCRMDataFetchException): + controller.controller() + assert mock_fetch_crm_data_process.call_count == 3 + assert mock_backup_crm_data_process.call_count == 2 + expect_process_result = { + 'Account': 'fail', + 'Contact': 'success', + 'Call2_vod__c': 'success' + } + assert generate_log_message_tuple(log_message=f'I-ERR-03 [Account] の[{FETCH_JP_NAME}]でエラーが発生しました 次のオブジェクトの処理に移行します') in caplog.record_tuples + 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 + + def test_raise_backup_crm_data_process(self, s3_client, monkeypatch, caplog): + """ + Cases: + CRM電文データバックアップ処理でシステム例外が発生した場合、エラーで終了すること + Arranges: + - CRM電文データバックアップ処理でシステム例外が発生するようにする + Expects: + - CRM電文データバックアップ処理で例外が発生すること + - CRM電文データバックアップ処理で発生した例外のログメッセージが出力されていること + """ + 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(side_effect=[ForTestControllerException( + 'E-RESBK-01', RESBK_JP_NAME, '例外発生'), None, None]) + 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() + + 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(MeDaCaCRMDataFetchException): + controller.controller() + assert mock_backup_crm_data_process.call_count == 3 + assert mock_convert_crm_csv_data_process.call_count == 2 + expect_process_result = { + 'Account': 'fail', + 'Contact': 'success', + 'Call2_vod__c': 'success' + } + assert generate_log_message_tuple(log_message=f'I-ERR-03 [Account] の[{RESBK_JP_NAME}]でエラーが発生しました 次のオブジェクトの処理に移行します') in caplog.record_tuples + 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 + + def test_raise_convert_crm_csv_data_process(self, s3_client, monkeypatch, caplog): + """ + Cases: + CSV変換処理でシステム例外が発生した場合、エラーで終了すること + Arranges: + - CSV変換処理でシステム例外が発生するようにする + Expects: + - CSV変換処理で例外が発生すること + - CSV変換処理で発生した例外のログメッセージが出力されていること + """ + 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(side_effect=[ForTestControllerException( + 'E-CONV-01', CONV_JP_NAME, '例外発生'), None, None]) + 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() + + 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(MeDaCaCRMDataFetchException): + controller.controller() + assert mock_convert_crm_csv_data_process.call_count == 3 + assert mock_backup_crm_csv_data_process.call_count == 2 + expect_process_result = { + 'Account': 'fail', + 'Contact': 'success', + 'Call2_vod__c': 'success' + } + assert generate_log_message_tuple(log_message=f'I-ERR-03 [Account] の[{CONV_JP_NAME}]でエラーが発生しました 次のオブジェクトの処理に移行します') in caplog.record_tuples + 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 + + def test_raise_backup_crm_csv_data_process(self, s3_client, monkeypatch, caplog): + """ + Cases: + CSVバックアップ処理でシステム例外が発生した場合、エラーで終了すること + Arranges: + - CSVバックアップ処理でシステム例外が発生するようにする + Expects: + - CSVバックアップ処理で例外が発生すること + - CSVバックアップ処理で発生した例外のログメッセージが出力されていること + """ + 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(side_effect=[ForTestControllerException( + 'E-CSVBK-01', CSVBK_JP_NAME, '例外発生'), None, None]) + mock_copy_crm_csv_data_process = MagicMock() + mock_upload_last_fetch_datetime_process = MagicMock() + mock_upload_result_data_process = MagicMock() + + 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(MeDaCaCRMDataFetchException): + controller.controller() + assert mock_backup_crm_csv_data_process.call_count == 3 + assert mock_copy_crm_csv_data_process.call_count == 2 + expect_process_result = { + 'Account': 'fail', + 'Contact': 'success', + 'Call2_vod__c': 'success' + } + assert generate_log_message_tuple(log_message=f'I-ERR-03 [Account] の[{CSVBK_JP_NAME}]でエラーが発生しました 次のオブジェクトの処理に移行します') in caplog.record_tuples + 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 + + def test_raise_copy_crm_csv_data_process(self, s3_client, monkeypatch, caplog): + """ + Cases: + CSVアップロード処理でシステム例外が発生した場合、エラーで終了すること + Arranges: + - CSVアップロード処理でシステム例外が発生するようにする + Expects: + - CSVアップロード処理で例外が発生すること + - CSVアップロード処理で発生した例外のログメッセージが出力されていること + """ + 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(side_effect=[ForTestControllerException( + 'E-UPLD-01', UPLD_JP_NAME, '例外発生'), None, None]) + mock_upload_last_fetch_datetime_process = MagicMock() + mock_upload_result_data_process = MagicMock() + + 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(MeDaCaCRMDataFetchException): + controller.controller() + assert mock_copy_crm_csv_data_process.call_count == 3 + assert mock_upload_last_fetch_datetime_process.call_count == 2 + expect_process_result = { + 'Account': 'fail', + 'Contact': 'success', + 'Call2_vod__c': 'success' + } + assert generate_log_message_tuple(log_message=f'I-ERR-03 [Account] の[{UPLD_JP_NAME}]でエラーが発生しました 次のオブジェクトの処理に移行します') in caplog.record_tuples + 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 + + def test_raise_upload_last_fetch_datetime_process(self, s3_client, monkeypatch, caplog): + """ + Cases: + 前回取得日時ファイル更新処理でシステム例外が発生した場合、エラーで終了すること + Arranges: + - 前回取得日時ファイル更新処理でシステム例外が発生するようにする + 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(side_effect=[ForTestControllerException( + 'E-UPD-01', UPD_JP_NAME, '例外発生'), None, None]) + mock_upload_result_data_process = MagicMock() + + 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(MeDaCaCRMDataFetchException): + controller.controller() + assert mock_upload_last_fetch_datetime_process.call_count == 3 + expect_process_result = { + 'Account': 'fail', + 'Contact': 'success', + 'Call2_vod__c': 'success' + } + assert generate_log_message_tuple(log_message=f'I-ERR-03 [Account] の[{UPD_JP_NAME}]でエラーが発生しました 次のオブジェクトの処理に移行します') in caplog.record_tuples + 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