diff --git a/ecs/crm-datafetch/main.py b/ecs/crm-datafetch/main.py index 1d6f0ab9..525e2367 100644 --- a/ecs/crm-datafetch/main.py +++ b/ecs/crm-datafetch/main.py @@ -2,4 +2,7 @@ from src.controller import controller """CRMデータ取得処理のエントリーポイント""" if __name__ == '__main__': - exit(controller()) + try: + exit(controller()) + except Exception: + exit(0) diff --git a/ecs/crm-datafetch/src/controller.py b/ecs/crm-datafetch/src/controller.py index 5309fa83..165c8b7e 100644 --- a/ecs/crm-datafetch/src/controller.py +++ b/ecs/crm-datafetch/src/controller.py @@ -55,11 +55,11 @@ def controller() -> None: except MeDaCaCRMDataFetchException as e: logger.error(f'E-ERR-01 [{e.func_name}]でエラーが発生したため、処理を終了します') logger.exception(f'{e.error_id} {e}') - return 0 + raise e except Exception as e: logger.exception('E-ERR-02 予期せぬエラーが発生したため、処理を終了します', e) - return 0 + raise e finally: # ⑦ CRMデータ取得処理終了ログを出力する diff --git a/ecs/crm-datafetch/tests/test_controller.py b/ecs/crm-datafetch/tests/test_controller.py index c1435a7d..2861a4d0 100644 --- a/ecs/crm-datafetch/tests/test_controller.py +++ b/ecs/crm-datafetch/tests/test_controller.py @@ -1,10 +1,13 @@ import copy +import logging from unittest.mock import MagicMock, patch import pytest from src import controller from src.config.objects import (FetchTargetObjects, LastFetchDatetime, TargetObject) +from src.error.exceptions import MeDaCaCRMDataFetchException +from src.system_var.constants import PRE_JP_NAME from src.util.execute_datetime import ExecuteDateTime from .test_utils.log_message import generate_log_message_tuple @@ -33,6 +36,10 @@ EXPECT_PROCESS_RESULT = { } +class ForTestControllerException(MeDaCaCRMDataFetchException): + pass + + class TestController: @pytest.fixture() def call_all_processes(self, s3_client, monkeypatch, caplog): @@ -321,3 +328,52 @@ class TestController: log_message='I-CTRL-14 [Call2_vod__c] CSVデータアップロード処理呼び出し' ) in caplog.record_tuples, 'オブジェクト情報.is_skipがFalseのものはCSVアップロード処理のログメッセージが出力されていること' assert generate_log_message_tuple(log_message=f'I-CTRL-20 CRMデータ取得処理を終了します') in caplog.record_tuples + + def test_raise_mock_prepare_data_fetch_process(self, s3_client, monkeypatch, caplog): + """ + Cases: + データ取得準備処理でシステム例外が発生した場合、エラーで終了すること + Arranges: + - データ取得準備処理でシステム例外が発生するようにする + Expects: + - データ取得準備処理で例外が発生すること + - データ取得準備処理で発生した例外のログメッセージが出力されていること + """ + # mock_check_object_infos = copy.deepcopy(TEST_OBJECT_INFO_LIST) + # mock_check_object_infos['objects'][1]['is_skip'] = True + # monkeypatch.setattr(FetchTargetObjects, '_FetchTargetObjects__validate', lambda x: None) + # monkeypatch.setattr(TargetObject, '_TargetObject__validate', lambda x: None) + # mock_execute_datetime = ExecuteDateTime() + # FetchTargetObjects(mock_check_object_infos) + # mock_return_values = [ + # TargetObject(mock_check_object_infos['objects'][0], mock_execute_datetime), + # TargetObject(mock_check_object_infos['objects'][1], mock_execute_datetime), + # TargetObject(mock_check_object_infos['objects'][2], mock_execute_datetime), + # ] + expect_exception = ForTestControllerException('E-CHK-01', PRE_JP_NAME, '例外発生') + mock_prepare_data_fetch_process = MagicMock(side_effect=expect_exception) + mock_check_object_info_process = MagicMock() + # mock_set_datetime_period_process = MagicMock() + # mock_fetch_crm_data_process = MagicMock() + # 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_check_object_info_process.called is False + assert generate_log_message_tuple( + log_level=logging.ERROR, + log_message=f'E-ERR-01 [{PRE_JP_NAME}]でエラーが発生したため、処理を終了します'), 'データ取得準備処理で発生した例外のログメッセージが出力されていること'