feat: 例外テスト追加。例外を送出するようにコントロール処理修正

This commit is contained in:
shimoda.m@nds-tyo.co.jp 2022-08-03 15:58:45 +09:00
parent 6ad684e38b
commit 9b941c1cb3
3 changed files with 62 additions and 3 deletions

View File

@ -2,4 +2,7 @@ from src.controller import controller
"""CRMデータ取得処理のエントリーポイント"""
if __name__ == '__main__':
exit(controller())
try:
exit(controller())
except Exception:
exit(0)

View File

@ -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データ取得処理終了ログを出力する

View File

@ -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}]でエラーが発生したため、処理を終了します'), 'データ取得準備処理で発生した例外のログメッセージが出力されていること'