From 02086d26b3495ac61b49f9ebe91ea9233d6ca240 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 4 Aug 2022 01:34:20 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=A4=A7=E6=94=B9=E9=80=A0?= =?UTF-8?q?=E3=80=82=E8=A1=8C=E6=95=B0800=E8=BF=91=E3=81=8F=E3=81=BE?= =?UTF-8?q?=E3=81=A7=E6=B8=9B=E3=82=89=E3=81=9B=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/crm-datafetch/tests/test_controller.py | 690 +++++++++------------ 1 file changed, 303 insertions(+), 387 deletions(-) diff --git a/ecs/crm-datafetch/tests/test_controller.py b/ecs/crm-datafetch/tests/test_controller.py index a8ed1c63..51ff1987 100644 --- a/ecs/crm-datafetch/tests/test_controller.py +++ b/ecs/crm-datafetch/tests/test_controller.py @@ -61,8 +61,55 @@ class ForTestException(Exception): class TestController: + + @pytest.fixture(autouse=True) + def setup_teardown(self): + # setup + self.mock_prepare_data_fetch_process = MagicMock() + self.mock_check_object_info_process = MagicMock() + self.mock_set_datetime_period_process = MagicMock() + self.mock_fetch_crm_data_process = MagicMock() + self.mock_backup_crm_data_process = MagicMock() + self.mock_convert_crm_csv_data_process = MagicMock() + self.mock_backup_crm_csv_data_process = MagicMock() + self.mock_copy_crm_csv_data_process = MagicMock() + self.mock_upload_last_fetch_datetime_process = MagicMock() + self.mock_upload_result_data_process = MagicMock() + + # run test + yield + + # teardown + self.mock_prepare_data_fetch_process.reset_mock() + self.mock_check_object_info_process.reset_mock() + self.mock_set_datetime_period_process.reset_mock() + self.mock_fetch_crm_data_process.reset_mock() + self.mock_backup_crm_data_process.reset_mock() + self.mock_convert_crm_csv_data_process.reset_mock() + self.mock_backup_crm_csv_data_process.reset_mock() + self.mock_copy_crm_csv_data_process.reset_mock() + self.mock_upload_last_fetch_datetime_process.reset_mock() + self.mock_upload_result_data_process.reset_mock() + @pytest.fixture() - def call_all_processes(self, s3_client, monkeypatch, caplog): + def run_control_process(self): + + def _func(): + with patch('src.controller.prepare_data_fetch_process', self.mock_prepare_data_fetch_process),\ + patch('src.controller.check_object_info_process', self.mock_check_object_info_process),\ + patch('src.controller.set_datetime_period_process', self.mock_set_datetime_period_process),\ + patch('src.controller.fetch_crm_data_process', self.mock_fetch_crm_data_process),\ + patch('src.controller.backup_crm_data_process', self.mock_backup_crm_data_process),\ + patch('src.controller.convert_crm_csv_data_process', self.mock_convert_crm_csv_data_process),\ + patch('src.controller.backup_crm_csv_data_process', self.mock_backup_crm_csv_data_process),\ + patch('src.controller.copy_crm_csv_data_process', self.mock_copy_crm_csv_data_process),\ + patch('src.controller.upload_last_fetch_datetime_process', self.mock_upload_last_fetch_datetime_process),\ + patch('src.controller.upload_result_data_process', self.mock_upload_result_data_process): + controller.controller() + yield _func + + @pytest.fixture() + def call_all_processes(self, caplog, run_control_process): """ コントロール処理内ですべてのプロセス関数が呼ばれることのテストで使用するフィクスチャ 各種プロセス関数をモック化し、正常終了させるように動く @@ -72,41 +119,18 @@ class TestController: """ def _func(): mock_return_values = [COMMON_TARGET_OBJECTS_1, COMMON_TARGET_OBJECTS_2, COMMON_TARGET_OBJECTS_3] - mock_prepare_data_fetch_process = MagicMock(return_value=(deepcopy(COMMON_FETCH_TARGET_OBJECTS), COMMON_EXECUTE_DATETIME, {})) - mock_check_object_info_process = MagicMock(side_effect=mock_return_values) - mock_set_datetime_period_process = MagicMock(return_value=COMMON_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() - should_call_processes = { - 'prepare_data_fetch_process': mock_prepare_data_fetch_process, - 'check_object_info_process': mock_check_object_info_process, - 'set_datetime_period_process': mock_set_datetime_period_process, - 'fetch_crm_data_process': mock_fetch_crm_data_process, - 'backup_crm_data_process': mock_backup_crm_data_process, - 'convert_crm_csv_data_process': mock_convert_crm_csv_data_process, - 'backup_crm_csv_data_process': mock_backup_crm_csv_data_process, - 'copy_crm_csv_data_process': mock_copy_crm_csv_data_process, - 'upload_last_fetch_datetime_process': mock_upload_last_fetch_datetime_process, - 'upload_result_data_process': mock_upload_result_data_process - } - 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): - controller.controller() + self.mock_prepare_data_fetch_process = MagicMock(return_value=(deepcopy(COMMON_FETCH_TARGET_OBJECTS), COMMON_EXECUTE_DATETIME, {})) + self.mock_check_object_info_process = MagicMock(side_effect=mock_return_values) + self.mock_set_datetime_period_process = MagicMock(return_value=COMMON_LAST_FETCH_DATETIME) + self.mock_fetch_crm_data_process = MagicMock(return_value=[{}]) + self.mock_backup_crm_data_process = MagicMock() + self.mock_convert_crm_csv_data_process = MagicMock() + self.mock_backup_crm_csv_data_process = MagicMock() + self.mock_copy_crm_csv_data_process = MagicMock() + self.mock_upload_last_fetch_datetime_process = MagicMock() + self.mock_upload_result_data_process = MagicMock() - return should_call_processes + run_control_process() yield _func @@ -128,17 +152,19 @@ class TestController: - 前回取得日時ファイル更新処理が複数回実行される - 取得処理実施結果アップロード処理が1回のみ実行される """ - processes = call_all_processes() - processes['prepare_data_fetch_process'].assert_called_once(), 'データ取得準備処理が1回のみ実行されること' - assert processes['check_object_info_process'].call_count == 3, 'オブジェクト情報形式チェック処理が複数回実行されること' - assert processes['set_datetime_period_process'].call_count == 3, 'データ取得期間設定処理が複数回実行されること' - assert processes['fetch_crm_data_process'].call_count == 3, 'CRMデータ取得処理が複数回実行されること' - assert processes['backup_crm_data_process'].call_count == 3, 'CRM電文データバックアップ処理が複数回実行されること' - assert processes['convert_crm_csv_data_process'].call_count == 3, 'CSV変換処理が複数回実行されること' - assert processes['backup_crm_csv_data_process'].call_count == 3, 'CSVバックアップ処理が複数回実行されること' - assert processes['copy_crm_csv_data_process'].call_count == 3, 'CSVアップロード処理が複数回実行されること' - assert processes['upload_last_fetch_datetime_process'].call_count == 3, '前回取得日次ファイル更新処理が複数回実行されること' - processes['upload_result_data_process'].assert_called_once(), '取得処理実施結果アップロード処理が1回のみ実行されること' + call_all_processes() + assert self.mock_prepare_data_fetch_process.called is True, 'データ取得準備処理が1回のみ実行されること' + assert self.mock_prepare_data_fetch_process.call_count == 1, 'データ取得準備処理が1回のみ実行されること' + assert self.mock_check_object_info_process.call_count == 3, 'オブジェクト情報形式チェック処理が複数回実行されること' + assert self.mock_set_datetime_period_process.call_count == 3, 'データ取得期間設定処理が複数回実行されること' + assert self.mock_fetch_crm_data_process.call_count == 3, 'CRMデータ取得処理が複数回実行されること' + assert self.mock_backup_crm_data_process.call_count == 3, 'CRM電文データバックアップ処理が複数回実行されること' + assert self.mock_convert_crm_csv_data_process.call_count == 3, 'CSV変換処理が複数回実行されること' + assert self.mock_backup_crm_csv_data_process.call_count == 3, 'CSVバックアップ処理が複数回実行されること' + assert self.mock_copy_crm_csv_data_process.call_count == 3, 'CSVアップロード処理が複数回実行されること' + assert self.mock_upload_last_fetch_datetime_process.call_count == 3, '前回取得日次ファイル更新処理が複数回実行されること' + assert self.mock_upload_result_data_process.called is True, '取得処理実施結果アップロード処理が1回のみ実行されること' + assert self.mock_upload_result_data_process.call_count == 1, '取得処理実施結果アップロード処理が1回のみ実行されること' def test_print_normal_logs(self, call_all_processes, caplog): """ @@ -179,7 +205,7 @@ class TestController: assert generate_log_message_tuple(log_message=f'I-CTRL-19 すべてのデータの取得に成功しました') in caplog.record_tuples assert generate_log_message_tuple(log_message=f'I-CTRL-20 CRMデータ取得処理を終了します') in caplog.record_tuples - def test_do_not_call_upload_process_result_process(self, s3_client, monkeypatch, caplog): + def test_do_not_call_upload_process_result_process(self, caplog, run_control_process): """ Cases: 処理対象オブジェクトが0件の場合、取得処理実施結果アップロード処理が実行されないこと @@ -191,38 +217,31 @@ class TestController: - 取得処理実施結果アップロード処理が実行されないこと - 処理対象が存在しない旨を示すログメッセージが出力されていること """ - mock_execute_datetime = ExecuteDateTime() - mock_prepare_data_fetch_process = MagicMock(return_value=([], mock_execute_datetime, {})) - 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): - controller.controller() + + self.mock_prepare_data_fetch_process = MagicMock(return_value=([], COMMON_EXECUTE_DATETIME, {})) + self.mock_check_object_info_process = MagicMock() + self.mock_set_datetime_period_process = MagicMock() + self.mock_fetch_crm_data_process = MagicMock() + self.mock_backup_crm_data_process = MagicMock() + self.mock_convert_crm_csv_data_process = MagicMock() + self.mock_backup_crm_csv_data_process = MagicMock() + self.mock_copy_crm_csv_data_process = MagicMock() + self.mock_upload_last_fetch_datetime_process = MagicMock() + self.mock_upload_result_data_process = MagicMock() + + run_control_process() # 実行回数の確認 - mock_prepare_data_fetch_process.assert_called_once(), 'データ取得準備処理が1回のみ実行されること' - mock_upload_result_data_process.call_count == 0, '取得処理実施結果アップロード処理が実行されないこと' + assert self.mock_prepare_data_fetch_process.called, 'データ取得準備処理が1回のみ実行されること' + assert self.mock_prepare_data_fetch_process.call_count == 1, 'データ取得準備処理が1回のみ実行されること' + assert self.mock_upload_result_data_process.called is False, '取得処理実施結果アップロード処理が実行されないこと' + assert self.mock_upload_result_data_process.call_count == 0, '取得処理実施結果アップロード処理が実行されないこと' # ログ出力の確認 assert generate_log_message_tuple(log_message='I-CTRL-21 処理対象のデータが存在しませんでした') in caplog.record_tuples, '処理対象が存在しない旨を示すログメッセージが出力されていること' assert generate_log_message_tuple(log_message=f'I-CTRL-20 CRMデータ取得処理を終了します') in caplog.record_tuples - def test_do_not_call_upload_csv_process(self, s3_client, monkeypatch, caplog): + def test_do_not_call_upload_csv_process(self, caplog, run_control_process): """ Cases: オブジェクト情報.is_skipがTrueの場合、CSVアップロード処理が実行されないこと @@ -235,51 +254,44 @@ class TestController: """ mock_check_object_info = { 'object_name': 'Account', + 'columns': [], 'is_skip': True } + mock_return_values = [TargetObject(mock_check_object_info, COMMON_EXECUTE_DATETIME)] + self.mock_prepare_data_fetch_process = MagicMock(return_value=([mock_check_object_info], COMMON_EXECUTE_DATETIME, {})) + self.mock_check_object_info_process = MagicMock(side_effect=mock_return_values) + self.mock_set_datetime_period_process = MagicMock() + self.mock_fetch_crm_data_process = MagicMock() + self.mock_backup_crm_data_process = MagicMock() + self.mock_convert_crm_csv_data_process = MagicMock() + self.mock_backup_crm_csv_data_process = MagicMock() + self.mock_copy_crm_csv_data_process = MagicMock() + self.mock_upload_last_fetch_datetime_process = MagicMock() + self.mock_upload_result_data_process = MagicMock() - monkeypatch.setattr(TargetObject, '_TargetObject__validate', lambda x: None) - mock_execute_datetime = ExecuteDateTime() - mock_return_values = [TargetObject(mock_check_object_info, mock_execute_datetime)] - mock_prepare_data_fetch_process = MagicMock(return_value=([mock_check_object_info], mock_execute_datetime, {})) - mock_check_object_info_process = MagicMock(side_effect=mock_return_values) - 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): - controller.controller() + run_control_process() # 実行回数の確認 - mock_check_object_info_process.assert_called_once() + + assert self.mock_check_object_info_process.called is True + assert self.mock_check_object_info_process.call_count == 1 # オブジェクト情報形式チェック処理以降のプロセスが実行されないこと - mock_set_datetime_period_process.call_count == 0 - mock_fetch_crm_data_process.call_count == 0 - mock_backup_crm_data_process.call_count == 0 - mock_convert_crm_csv_data_process.call_count == 0 - mock_backup_crm_csv_data_process.call_count == 0 - mock_copy_crm_csv_data_process.call_count == 0 - mock_upload_last_fetch_datetime_process.call_count == 0 - mock_upload_result_data_process.call_count == 0 + assert self.mock_set_datetime_period_process.call_count == 0 + assert self.mock_fetch_crm_data_process.call_count == 0 + assert self.mock_backup_crm_data_process.call_count == 0 + assert self.mock_convert_crm_csv_data_process.call_count == 0 + assert self.mock_backup_crm_csv_data_process.call_count == 0 + assert self.mock_copy_crm_csv_data_process.call_count == 0 + assert self.mock_upload_last_fetch_datetime_process.call_count == 0 + # 結果ファイルの出力は行う + assert self.mock_upload_result_data_process.called is True + assert self.mock_upload_result_data_process.call_count == 1 # ログ出力の確認 assert generate_log_message_tuple(log_message='I-CTRL-07 [Account]のデータ取得処理をスキップします') in caplog.record_tuples assert generate_log_message_tuple(log_message=f'I-CTRL-20 CRMデータ取得処理を終了します') in caplog.record_tuples - def test_do_not_call_upload_csv_process_of_part(self, s3_client, monkeypatch, caplog): + def test_do_not_call_upload_csv_process_of_part(self, caplog, run_control_process): """ Cases: オブジェクト情報.is_skipがTrueのものが含まれる場合、CSVアップロード処理が実行されないこと @@ -295,60 +307,53 @@ class TestController: 'objects': [ { 'object_name': 'Account', + 'columns': [], 'is_skip': False }, { 'object_name': 'Contact', + 'columns': [], 'is_skip': True }, { 'object_name': 'Call2_vod__c', + 'columns': [], 'is_skip': False } ] } - 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), + TargetObject(mock_check_object_infos['objects'][0], COMMON_EXECUTE_DATETIME), + TargetObject(mock_check_object_infos['objects'][1], COMMON_EXECUTE_DATETIME), + TargetObject(mock_check_object_infos['objects'][2], COMMON_EXECUTE_DATETIME), ] - mock_prepare_data_fetch_process = MagicMock(return_value=(FetchTargetObjects(mock_check_object_infos), mock_execute_datetime, {})) - mock_check_object_info_process = MagicMock(side_effect=mock_return_values) - 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): - controller.controller() + self.mock_prepare_data_fetch_process = MagicMock(return_value=(FetchTargetObjects(mock_check_object_infos), COMMON_EXECUTE_DATETIME, {})) + self.mock_check_object_info_process = MagicMock(side_effect=mock_return_values) + self.mock_set_datetime_period_process = MagicMock() + self.mock_fetch_crm_data_process = MagicMock() + self.mock_backup_crm_data_process = MagicMock() + self.mock_convert_crm_csv_data_process = MagicMock() + self.mock_backup_crm_csv_data_process = MagicMock() + self.mock_copy_crm_csv_data_process = MagicMock() + self.mock_upload_last_fetch_datetime_process = MagicMock() + self.mock_upload_result_data_process = MagicMock() + run_control_process() # 実行回数の確認 - mock_check_object_info_process.call_count == 3 + assert self.mock_prepare_data_fetch_process.called is True + assert self.mock_prepare_data_fetch_process.call_count == 1 + assert self.mock_check_object_info_process.call_count == 3 # オブジェクト情報形式チェック処理以降のプロセスが実行されないこと - mock_set_datetime_period_process.call_count == 2 - mock_fetch_crm_data_process.call_count == 2 - mock_backup_crm_data_process.call_count == 2 - mock_convert_crm_csv_data_process.call_count == 2 - mock_backup_crm_csv_data_process.call_count == 2 - mock_copy_crm_csv_data_process.call_count == 2 - mock_upload_last_fetch_datetime_process.call_count == 2 - mock_upload_result_data_process.call_count == 2 + assert self.mock_set_datetime_period_process.call_count == 2 + assert self.mock_fetch_crm_data_process.call_count == 2 + assert self.mock_backup_crm_data_process.call_count == 2 + assert self.mock_convert_crm_csv_data_process.call_count == 2 + assert self.mock_backup_crm_csv_data_process.call_count == 2 + assert self.mock_copy_crm_csv_data_process.call_count == 2 + assert self.mock_upload_last_fetch_datetime_process.call_count == 2 + assert self.mock_upload_result_data_process.called is True + assert self.mock_upload_result_data_process.call_count == 1 # ログ出力の確認 assert generate_log_message_tuple( @@ -366,7 +371,7 @@ class TestController: (ForTestMeDaCaCRMDataFetchException, f'E-ERR-01 [{PRE_JP_NAME}]でエラーが発生したため、処理を終了します'), (ForTestException, 'E-ERR-02 予期せぬエラーが発生したため、処理を終了します エラー内容: [例外発生]') ]) - def test_raise_prepare_data_fetch_process(self, s3_client, monkeypatch, caplog, exception, message): + def test_raise_prepare_data_fetch_process(self, caplog, exception, message, run_control_process): """ Cases: 1. データ取得準備処理でシステム例外が発生した場合、エラーで終了すること @@ -379,13 +384,11 @@ class TestController: - データ取得準備処理で発生した例外のログメッセージが出力されていること """ expect_exception = exception('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): - with pytest.raises(exception): - controller.controller() - assert mock_check_object_info_process.called is False + self.mock_prepare_data_fetch_process = MagicMock(side_effect=expect_exception) + self.mock_check_object_info_process = MagicMock() + with pytest.raises(exception): + run_control_process() + assert self.mock_check_object_info_process.called is False assert generate_log_message_tuple( log_level=logging.ERROR, log_message=message) in caplog.record_tuples, 'データ取得準備処理で発生した例外のログメッセージが出力されていること' @@ -396,7 +399,7 @@ class TestController: (ForTestMeDaCaCRMDataFetchException, f'I-ERR-03 [Account] の[{CHK_JP_NAME}]でエラーが発生しました 次のオブジェクトの処理に移行します'), (ForTestException, 'I-ERR-04 [Account] の処理中に予期せぬエラーが発生しました 次のオブジェクトの処理に移行します エラー内容: [例外発生]') ]) - def test_raise_check_object_info_process(self, s3_client, monkeypatch, caplog, exception, message): + def test_raise_check_object_info_process(self, caplog, exception, message, run_control_process): """ Cases: 1. オブジェクト情報形式チェック処理でシステム例外が発生した場合、エラーログが送出され、後続の終了に移行すること @@ -411,32 +414,21 @@ class TestController: """ raise_object = exception('E-PRE-01', CHK_JP_NAME, '例外発生') mock_return_values = [raise_object, COMMON_TARGET_OBJECTS_2, COMMON_TARGET_OBJECTS_2] - mock_prepare_data_fetch_process = MagicMock(return_value=(deepcopy(COMMON_FETCH_TARGET_OBJECTS), COMMON_EXECUTE_DATETIME, {})) - mock_check_object_info_process = MagicMock(side_effect=mock_return_values) - mock_set_datetime_period_process = MagicMock(return_value=COMMON_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() - 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.call_count == 3 - assert mock_set_datetime_period_process.call_count == 2 + self.mock_prepare_data_fetch_process = MagicMock(return_value=(deepcopy(COMMON_FETCH_TARGET_OBJECTS), COMMON_EXECUTE_DATETIME, {})) + self.mock_check_object_info_process = MagicMock(side_effect=mock_return_values) + self.mock_set_datetime_period_process = MagicMock(return_value=COMMON_LAST_FETCH_DATETIME) + self.mock_fetch_crm_data_process = MagicMock(return_value=[{}]) + self.mock_backup_crm_data_process = MagicMock() + self.mock_convert_crm_csv_data_process = MagicMock() + self.mock_backup_crm_csv_data_process = MagicMock() + self.mock_copy_crm_csv_data_process = MagicMock() + self.mock_upload_last_fetch_datetime_process = MagicMock() + self.mock_upload_result_data_process = MagicMock() + + run_control_process() + assert self.mock_check_object_info_process.call_count == 3 + assert self.mock_set_datetime_period_process.call_count == 2 expect_process_result = { 'Account': 'fail', 'Contact': 'success', @@ -453,7 +445,7 @@ class TestController: (ForTestMeDaCaCRMDataFetchException, f'I-ERR-03 [Account] の[{DATE_JP_NAME}]でエラーが発生しました 次のオブジェクトの処理に移行します'), (ForTestException, 'I-ERR-04 [Account] の処理中に予期せぬエラーが発生しました 次のオブジェクトの処理に移行します エラー内容: [例外発生]') ]) - def test_raise_set_datetime_period_process(self, s3_client, monkeypatch, caplog, exception, message): + def test_raise_set_datetime_period_process(self, caplog, exception, message, run_control_process): """ Cases: 1. データ取得期間設定処理でシステム例外が発生した場合、エラーログが送出され、後続の終了に移行すること @@ -467,33 +459,23 @@ class TestController: - 例外が発生したオブジェクト以外は正常に終了する """ mock_return_values = [COMMON_TARGET_OBJECTS_1, COMMON_TARGET_OBJECTS_2, COMMON_TARGET_OBJECTS_3] - mock_prepare_data_fetch_process = MagicMock(return_value=(deepcopy(COMMON_FETCH_TARGET_OBJECTS), COMMON_EXECUTE_DATETIME, {})) - mock_check_object_info_process = MagicMock(side_effect=mock_return_values) - mock_set_datetime_period_process = MagicMock(side_effect=[exception( - 'E-DATE-01', DATE_JP_NAME, '例外発生'), COMMON_LAST_FETCH_DATETIME, COMMON_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() - 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_set_datetime_period_process.call_count == 3 - assert mock_fetch_crm_data_process.call_count == 2 + self.mock_prepare_data_fetch_process = MagicMock(return_value=(deepcopy(COMMON_FETCH_TARGET_OBJECTS), COMMON_EXECUTE_DATETIME, {})) + self.mock_check_object_info_process = MagicMock(side_effect=mock_return_values) + self.mock_set_datetime_period_process = MagicMock(side_effect=[exception( + 'E-DATE-01', DATE_JP_NAME, '例外発生'), COMMON_LAST_FETCH_DATETIME, COMMON_LAST_FETCH_DATETIME]) + self.mock_fetch_crm_data_process = MagicMock(return_value=[{}]) + self.mock_backup_crm_data_process = MagicMock() + self.mock_convert_crm_csv_data_process = MagicMock() + self.mock_backup_crm_csv_data_process = MagicMock() + self.mock_copy_crm_csv_data_process = MagicMock() + self.mock_upload_last_fetch_datetime_process = MagicMock() + self.mock_upload_result_data_process = MagicMock() + + run_control_process() + + assert self.mock_set_datetime_period_process.call_count == 3 + assert self.mock_fetch_crm_data_process.call_count == 2 expect_process_result = { 'Account': 'fail', 'Contact': 'success', @@ -510,7 +492,7 @@ class TestController: (ForTestMeDaCaCRMDataFetchException, f'I-ERR-03 [Account] の[{FETCH_JP_NAME}]でエラーが発生しました 次のオブジェクトの処理に移行します'), (ForTestException, 'I-ERR-04 [Account] の処理中に予期せぬエラーが発生しました 次のオブジェクトの処理に移行します エラー内容: [例外発生]') ]) - def test_raise_fetch_crm_data_process(self, s3_client, monkeypatch, caplog, exception, message): + def test_raise_fetch_crm_data_process(self, caplog, exception, message, run_control_process): """ Cases: 1. CRMデータ取得処理でシステム例外が発生した場合、エラーログが送出され、後続の終了に移行すること @@ -523,33 +505,23 @@ class TestController: - CRMデータ取得処理で発生した例外のログメッセージが出力されていること """ mock_return_values = [COMMON_TARGET_OBJECTS_1, COMMON_TARGET_OBJECTS_2, COMMON_TARGET_OBJECTS_3] - mock_prepare_data_fetch_process = MagicMock(return_value=(deepcopy(COMMON_FETCH_TARGET_OBJECTS), COMMON_EXECUTE_DATETIME, {})) - mock_check_object_info_process = MagicMock(side_effect=mock_return_values) - mock_set_datetime_period_process = MagicMock(return_value=COMMON_LAST_FETCH_DATETIME) - mock_fetch_crm_data_process = MagicMock(side_effect=[exception( - '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 + self.mock_prepare_data_fetch_process = MagicMock(return_value=(deepcopy(COMMON_FETCH_TARGET_OBJECTS), COMMON_EXECUTE_DATETIME, {})) + self.mock_check_object_info_process = MagicMock(side_effect=mock_return_values) + self.mock_set_datetime_period_process = MagicMock(return_value=COMMON_LAST_FETCH_DATETIME) + self.mock_fetch_crm_data_process = MagicMock(side_effect=[exception( + 'E-FETCH-01', FETCH_JP_NAME, '例外発生'), {}, {}]) + self.mock_backup_crm_data_process = MagicMock() + self.mock_convert_crm_csv_data_process = MagicMock() + self.mock_backup_crm_csv_data_process = MagicMock() + self.mock_copy_crm_csv_data_process = MagicMock() + self.mock_upload_last_fetch_datetime_process = MagicMock() + self.mock_upload_result_data_process = MagicMock() + + run_control_process() + + assert self.mock_fetch_crm_data_process.call_count == 3 + assert self.mock_backup_crm_data_process.call_count == 2 expect_process_result = { 'Account': 'fail', 'Contact': 'success', @@ -566,7 +538,7 @@ class TestController: (ForTestMeDaCaCRMDataFetchException, f'I-ERR-03 [Account] の[{RESBK_JP_NAME}]でエラーが発生しました 次のオブジェクトの処理に移行します'), (ForTestException, 'I-ERR-04 [Account] の処理中に予期せぬエラーが発生しました 次のオブジェクトの処理に移行します エラー内容: [例外発生]') ]) - def test_raise_backup_crm_data_process(self, s3_client, monkeypatch, caplog, exception, message): + def test_raise_backup_crm_data_process(self, caplog, exception, message, run_control_process): """ Cases: 1. CRM電文データバックアップ処理でシステム例外が発生した場合、エラーログが送出され、後続の終了に移行すること @@ -579,33 +551,23 @@ class TestController: - CRM電文データバックアップ処理で発生した例外のログメッセージが出力されていること """ mock_return_values = [COMMON_TARGET_OBJECTS_1, COMMON_TARGET_OBJECTS_2, COMMON_TARGET_OBJECTS_3] - mock_prepare_data_fetch_process = MagicMock(return_value=(deepcopy(COMMON_FETCH_TARGET_OBJECTS), COMMON_EXECUTE_DATETIME, {})) - mock_check_object_info_process = MagicMock(side_effect=mock_return_values) - mock_set_datetime_period_process = MagicMock(return_value=COMMON_LAST_FETCH_DATETIME) - mock_fetch_crm_data_process = MagicMock(side_effect=[{}, {}, {}]) - mock_backup_crm_data_process = MagicMock(side_effect=[exception( - '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 + self.mock_prepare_data_fetch_process = MagicMock(return_value=(deepcopy(COMMON_FETCH_TARGET_OBJECTS), COMMON_EXECUTE_DATETIME, {})) + self.mock_check_object_info_process = MagicMock(side_effect=mock_return_values) + self.mock_set_datetime_period_process = MagicMock(return_value=COMMON_LAST_FETCH_DATETIME) + self.mock_fetch_crm_data_process = MagicMock(side_effect=[{}, {}, {}]) + self.mock_backup_crm_data_process = MagicMock(side_effect=[exception( + 'E-RESBK-01', RESBK_JP_NAME, '例外発生'), None, None]) + self.mock_convert_crm_csv_data_process = MagicMock() + self.mock_backup_crm_csv_data_process = MagicMock() + self.mock_copy_crm_csv_data_process = MagicMock() + self.mock_upload_last_fetch_datetime_process = MagicMock() + self.mock_upload_result_data_process = MagicMock() + + run_control_process() + + assert self.mock_backup_crm_data_process.call_count == 3 + assert self.mock_convert_crm_csv_data_process.call_count == 2 expect_process_result = { 'Account': 'fail', 'Contact': 'success', @@ -622,7 +584,7 @@ class TestController: (ForTestMeDaCaCRMDataFetchException, f'I-ERR-03 [Account] の[{CONV_JP_NAME}]でエラーが発生しました 次のオブジェクトの処理に移行します'), (ForTestException, 'I-ERR-04 [Account] の処理中に予期せぬエラーが発生しました 次のオブジェクトの処理に移行します エラー内容: [例外発生]') ]) - def test_raise_convert_crm_csv_data_process(self, s3_client, monkeypatch, caplog, exception, message): + def test_raise_convert_crm_csv_data_process(self, caplog, exception, message, run_control_process): """ Cases: 1. CSV変換処理でシステム例外が発生した場合、エラーログが送出され、後続の終了に移行すること @@ -635,33 +597,23 @@ class TestController: - CSV変換処理で発生した例外のログメッセージが出力されていること """ mock_return_values = [COMMON_TARGET_OBJECTS_1, COMMON_TARGET_OBJECTS_2, COMMON_TARGET_OBJECTS_3] - mock_prepare_data_fetch_process = MagicMock(return_value=(deepcopy(COMMON_FETCH_TARGET_OBJECTS), COMMON_EXECUTE_DATETIME, {})) - mock_check_object_info_process = MagicMock(side_effect=mock_return_values) - mock_set_datetime_period_process = MagicMock(return_value=COMMON_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=[exception( - '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 + self.mock_prepare_data_fetch_process = MagicMock(return_value=(deepcopy(COMMON_FETCH_TARGET_OBJECTS), COMMON_EXECUTE_DATETIME, {})) + self.mock_check_object_info_process = MagicMock(side_effect=mock_return_values) + self.mock_set_datetime_period_process = MagicMock(return_value=COMMON_LAST_FETCH_DATETIME) + self.mock_fetch_crm_data_process = MagicMock(side_effect=[{}, {}, {}]) + self.mock_backup_crm_data_process = MagicMock() + self.mock_convert_crm_csv_data_process = MagicMock(side_effect=[exception( + 'E-CONV-01', CONV_JP_NAME, '例外発生'), None, None]) + self.mock_backup_crm_csv_data_process = MagicMock() + self.mock_copy_crm_csv_data_process = MagicMock() + self.mock_upload_last_fetch_datetime_process = MagicMock() + self.mock_upload_result_data_process = MagicMock() + + run_control_process() + + assert self.mock_convert_crm_csv_data_process.call_count == 3 + assert self.mock_backup_crm_csv_data_process.call_count == 2 expect_process_result = { 'Account': 'fail', 'Contact': 'success', @@ -678,7 +630,7 @@ class TestController: (ForTestMeDaCaCRMDataFetchException, f'I-ERR-03 [Account] の[{CSVBK_JP_NAME}]でエラーが発生しました 次のオブジェクトの処理に移行します'), (ForTestException, 'I-ERR-04 [Account] の処理中に予期せぬエラーが発生しました 次のオブジェクトの処理に移行します エラー内容: [例外発生]') ]) - def test_raise_backup_crm_csv_data_process(self, s3_client, monkeypatch, caplog, exception, message): + def test_raise_backup_crm_csv_data_process(self, caplog, exception, message, run_control_process): """ Cases: 1. CSVバックアップ処理でシステム例外が発生した場合、エラーログが送出され、後続の終了に移行すること @@ -691,33 +643,23 @@ class TestController: - CSVバックアップ処理で発生した例外のログメッセージが出力されていること """ mock_return_values = [COMMON_TARGET_OBJECTS_1, COMMON_TARGET_OBJECTS_2, COMMON_TARGET_OBJECTS_3] - mock_prepare_data_fetch_process = MagicMock(return_value=(deepcopy(COMMON_FETCH_TARGET_OBJECTS), COMMON_EXECUTE_DATETIME, {})) - mock_check_object_info_process = MagicMock(side_effect=mock_return_values) - mock_set_datetime_period_process = MagicMock(return_value=COMMON_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=[exception( - '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 + self.mock_prepare_data_fetch_process = MagicMock(return_value=(deepcopy(COMMON_FETCH_TARGET_OBJECTS), COMMON_EXECUTE_DATETIME, {})) + self.mock_check_object_info_process = MagicMock(side_effect=mock_return_values) + self.mock_set_datetime_period_process = MagicMock(return_value=COMMON_LAST_FETCH_DATETIME) + self.mock_fetch_crm_data_process = MagicMock(side_effect=[{}, {}, {}]) + self.mock_backup_crm_data_process = MagicMock() + self.mock_convert_crm_csv_data_process = MagicMock() + self.mock_backup_crm_csv_data_process = MagicMock(side_effect=[exception( + 'E-CSVBK-01', CSVBK_JP_NAME, '例外発生'), None, None]) + self.mock_copy_crm_csv_data_process = MagicMock() + self.mock_upload_last_fetch_datetime_process = MagicMock() + self.mock_upload_result_data_process = MagicMock() + + run_control_process() + + assert self.mock_backup_crm_csv_data_process.call_count == 3 + assert self.mock_copy_crm_csv_data_process.call_count == 2 expect_process_result = { 'Account': 'fail', 'Contact': 'success', @@ -734,7 +676,7 @@ class TestController: (ForTestMeDaCaCRMDataFetchException, f'I-ERR-03 [Account] の[{UPLD_JP_NAME}]でエラーが発生しました 次のオブジェクトの処理に移行します'), (ForTestException, 'I-ERR-04 [Account] の処理中に予期せぬエラーが発生しました 次のオブジェクトの処理に移行します エラー内容: [例外発生]') ]) - def test_raise_copy_crm_csv_data_process(self, s3_client, monkeypatch, caplog, exception, message): + def test_raise_copy_crm_csv_data_process(self, caplog, exception, message, run_control_process): """ Cases: 1. CSVアップロード処理でシステム例外が発生した場合、エラーログが送出され、後続の終了に移行すること @@ -747,33 +689,23 @@ class TestController: - CSVアップロード処理で発生した例外のログメッセージが出力されていること """ mock_return_values = [COMMON_TARGET_OBJECTS_1, COMMON_TARGET_OBJECTS_2, COMMON_TARGET_OBJECTS_3] - mock_prepare_data_fetch_process = MagicMock(return_value=(deepcopy(COMMON_FETCH_TARGET_OBJECTS), COMMON_EXECUTE_DATETIME, {})) - mock_check_object_info_process = MagicMock(side_effect=mock_return_values) - mock_set_datetime_period_process = MagicMock(return_value=COMMON_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=[exception( - '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 + self.mock_prepare_data_fetch_process = MagicMock(return_value=(deepcopy(COMMON_FETCH_TARGET_OBJECTS), COMMON_EXECUTE_DATETIME, {})) + self.mock_check_object_info_process = MagicMock(side_effect=mock_return_values) + self.mock_set_datetime_period_process = MagicMock(return_value=COMMON_LAST_FETCH_DATETIME) + self.mock_fetch_crm_data_process = MagicMock(side_effect=[{}, {}, {}]) + self.mock_backup_crm_data_process = MagicMock() + self.mock_convert_crm_csv_data_process = MagicMock() + self.mock_backup_crm_csv_data_process = MagicMock() + self.mock_copy_crm_csv_data_process = MagicMock(side_effect=[exception( + 'E-UPLD-01', UPLD_JP_NAME, '例外発生'), None, None]) + self.mock_upload_last_fetch_datetime_process = MagicMock() + self.mock_upload_result_data_process = MagicMock() + + run_control_process() + + assert self.mock_copy_crm_csv_data_process.call_count == 3 + assert self.mock_upload_last_fetch_datetime_process.call_count == 2 expect_process_result = { 'Account': 'fail', 'Contact': 'success', @@ -790,7 +722,7 @@ class TestController: (ForTestMeDaCaCRMDataFetchException, f'I-ERR-03 [Account] の[{UPD_JP_NAME}]でエラーが発生しました 次のオブジェクトの処理に移行します'), (ForTestException, 'I-ERR-04 [Account] の処理中に予期せぬエラーが発生しました 次のオブジェクトの処理に移行します エラー内容: [例外発生]') ]) - def test_raise_upload_last_fetch_datetime_process(self, s3_client, monkeypatch, caplog, exception, message): + def test_raise_upload_last_fetch_datetime_process(self, caplog, exception, message, run_control_process): """ Cases: 1. 前回取得日時ファイル更新処理でシステム例外が発生した場合、エラーログが送出され、後続の終了に移行すること @@ -803,32 +735,22 @@ class TestController: - 前回取得日時ファイル更新処理で発生した例外のログメッセージが出力されていること """ mock_return_values = [COMMON_TARGET_OBJECTS_1, COMMON_TARGET_OBJECTS_2, COMMON_TARGET_OBJECTS_3] - mock_prepare_data_fetch_process = MagicMock(return_value=(deepcopy(COMMON_FETCH_TARGET_OBJECTS), COMMON_EXECUTE_DATETIME, {})) - mock_check_object_info_process = MagicMock(side_effect=mock_return_values) - mock_set_datetime_period_process = MagicMock(return_value=COMMON_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=[exception( - '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 + self.mock_prepare_data_fetch_process = MagicMock(return_value=(deepcopy(COMMON_FETCH_TARGET_OBJECTS), COMMON_EXECUTE_DATETIME, {})) + self.mock_check_object_info_process = MagicMock(side_effect=mock_return_values) + self.mock_set_datetime_period_process = MagicMock(return_value=COMMON_LAST_FETCH_DATETIME) + self.mock_fetch_crm_data_process = MagicMock(side_effect=[{}, {}, {}]) + self.mock_backup_crm_data_process = MagicMock() + self.mock_convert_crm_csv_data_process = MagicMock() + self.mock_backup_crm_csv_data_process = MagicMock() + self.mock_copy_crm_csv_data_process = MagicMock() + self.mock_upload_last_fetch_datetime_process = MagicMock(side_effect=[exception( + 'E-UPD-01', UPD_JP_NAME, '例外発生'), None, None]) + self.mock_upload_result_data_process = MagicMock() + + run_control_process() + + assert self.mock_upload_last_fetch_datetime_process.call_count == 3 expect_process_result = { 'Account': 'fail', 'Contact': 'success', @@ -845,7 +767,7 @@ class TestController: (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): + def test_raise_upload_result_data_process(self, caplog, exception, message, run_control_process): """ Cases: 1. 取得処理実施結果アップロード処理でシステム例外が発生した場合、エラーで終了すること @@ -858,30 +780,24 @@ class TestController: - 取得処理実施結果アップロード処理で発生した例外のログメッセージが出力されていること """ mock_return_values = [COMMON_TARGET_OBJECTS_1, COMMON_TARGET_OBJECTS_2, COMMON_TARGET_OBJECTS_3] - mock_prepare_data_fetch_process = MagicMock(return_value=(deepcopy(COMMON_FETCH_TARGET_OBJECTS), COMMON_EXECUTE_DATETIME, {})) - mock_check_object_info_process = MagicMock(side_effect=mock_return_values) - mock_set_datetime_period_process = MagicMock(return_value=COMMON_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( + + self.mock_prepare_data_fetch_process = MagicMock(return_value=(deepcopy(COMMON_FETCH_TARGET_OBJECTS), COMMON_EXECUTE_DATETIME, {})) + self.mock_check_object_info_process = MagicMock(side_effect=mock_return_values) + self.mock_set_datetime_period_process = MagicMock(return_value=COMMON_LAST_FETCH_DATETIME) + self.mock_fetch_crm_data_process = MagicMock(side_effect=[{}, {}, {}]) + self.mock_backup_crm_data_process = MagicMock() + self.mock_convert_crm_csv_data_process = MagicMock() + self.mock_backup_crm_csv_data_process = MagicMock() + self.mock_copy_crm_csv_data_process = MagicMock() + self.mock_upload_last_fetch_datetime_process = MagicMock() + self.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() + with pytest.raises(exception): + run_control_process() + + assert self.mock_upload_result_data_process.called is True + assert self.mock_upload_result_data_process.call_count == 1 assert generate_log_message_tuple( log_level=logging.ERROR, log_message=message) in caplog.record_tuples, '取得処理実施結果アップロード処理で発生した例外のログメッセージが出力されていること'