From 9012769e1f54a9e4033232c37f2b3bb0e95e4664 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Wed, 3 Aug 2022 13:11:58 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=E3=82=B3=E3=83=B3=E3=83=88=E3=83=AD?= =?UTF-8?q?=E3=83=BC=E3=83=A9=E3=83=BC=E3=81=AE=E3=83=86=E3=82=B9=E3=83=88?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=80=82=E3=82=B3=E3=83=B3=E3=83=88=E3=83=AD?= =?UTF-8?q?=E3=83=BC=E3=83=A9=E3=83=BC=E3=81=A7exit()=E3=81=97=E3=81=A6?= =?UTF-8?q?=E3=81=97=E3=81=BE=E3=81=86=E3=81=A8=E3=83=86=E3=82=B9=E3=83=88?= =?UTF-8?q?=E3=82=B3=E3=83=BC=E3=83=89=E5=81=B4=E3=81=A7=E4=BE=8B=E5=A4=96?= =?UTF-8?q?=E3=81=A8=E3=81=97=E3=81=A6=E6=89=B1=E3=82=8F=E3=81=AA=E3=81=84?= =?UTF-8?q?=E3=81=A8=E3=81=84=E3=81=91=E3=81=AA=E3=81=8F=E3=81=AA=E3=82=8B?= =?UTF-8?q?=E3=81=9F=E3=82=81=E3=80=81=E3=82=A8=E3=83=B3=E3=83=88=E3=83=AA?= =?UTF-8?q?=E3=83=BC=E3=83=9D=E3=82=A4=E3=83=B3=E3=83=88=E5=81=B4=E3=81=A7?= =?UTF-8?q?=E5=88=B6=E5=BE=A1=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/crm-datafetch/main.py | 2 +- ecs/crm-datafetch/src/config/objects.py | 4 +- ecs/crm-datafetch/src/controller.py | 9 +- .../src/prepare_data_fetch_process.py | 2 +- ecs/crm-datafetch/tests/test_controller.py | 82 +++++++++++++++++++ 5 files changed, 89 insertions(+), 10 deletions(-) create mode 100644 ecs/crm-datafetch/tests/test_controller.py diff --git a/ecs/crm-datafetch/main.py b/ecs/crm-datafetch/main.py index dcae9825..1d6f0ab9 100644 --- a/ecs/crm-datafetch/main.py +++ b/ecs/crm-datafetch/main.py @@ -2,4 +2,4 @@ from src.controller import controller """CRMデータ取得処理のエントリーポイント""" if __name__ == '__main__': - controller() + exit(controller()) diff --git a/ecs/crm-datafetch/src/config/objects.py b/ecs/crm-datafetch/src/config/objects.py index 41ca753b..23d00f5c 100644 --- a/ecs/crm-datafetch/src/config/objects.py +++ b/ecs/crm-datafetch/src/config/objects.py @@ -22,7 +22,7 @@ class FetchTargetObjects(): def __init__(self, object_info_file_dict) -> None: self.__objects = object_info_file_dict self.__dict_checker = DictChecker(self.__objects) - self.validate() + self.__validate() self.__i = 0 def __iter__(self): @@ -35,7 +35,7 @@ class FetchTargetObjects(): self.__i += 1 return value - def validate(self) -> None: + def __validate(self) -> None: self.__dict_checker.assert_key_exist(OBJECTS_KEY) self.__dict_checker.assert_data_type(OBJECTS_KEY, OBJECTS_TYPE) diff --git a/ecs/crm-datafetch/src/controller.py b/ecs/crm-datafetch/src/controller.py index 3d0537b4..f289c592 100644 --- a/ecs/crm-datafetch/src/controller.py +++ b/ecs/crm-datafetch/src/controller.py @@ -48,19 +48,16 @@ def controller() -> None: else: logger.info('I-CTRL-19 すべてのデータの取得に成功しました') - # ⑦ CRMデータ取得処理終了ログを出力する - logger.info('I-CTRL-20 CRMデータ取得処理を終了します') - - return exit(0) + return 0 except MeDaCaCRMDataFetchException as e: logger.error(f'E-ERR-01 [{e.func_name}]でエラーが発生したため、処理を終了します') logger.exception(f'{e.error_id} {e}') - return exit(0) + return 0 except Exception as e: logger.exception('E-ERR-02 予期せぬエラーが発生したため、処理を終了します', e) - return exit(0) + return 0 def fetch_crm_data(fetch_target_objects: FetchTargetObjects, execute_datetime: ExecuteDateTime, process_result: dict): diff --git a/ecs/crm-datafetch/src/prepare_data_fetch_process.py b/ecs/crm-datafetch/src/prepare_data_fetch_process.py index 3488c71f..03427265 100644 --- a/ecs/crm-datafetch/src/prepare_data_fetch_process.py +++ b/ecs/crm-datafetch/src/prepare_data_fetch_process.py @@ -79,4 +79,4 @@ def prepare_data_fetch_process(): logger.info('I-PRE-09 データ取得準備処理を終了します') # ⑧ 次の処理へ移行する - return(fetch_target_objects, execute_datetime, process_result) + return (fetch_target_objects, execute_datetime, process_result) diff --git a/ecs/crm-datafetch/tests/test_controller.py b/ecs/crm-datafetch/tests/test_controller.py new file mode 100644 index 00000000..b75eec23 --- /dev/null +++ b/ecs/crm-datafetch/tests/test_controller.py @@ -0,0 +1,82 @@ +from unittest.mock import MagicMock, patch + +from src import controller +from src.config.objects import (FetchTargetObjects, LastFetchDatetime, + TargetObject) +from src.util.execute_datetime import ExecuteDateTime + + +class TestController: + def test_controller_call_all_processes(self, s3_client, monkeypatch): + """ + Cases: + コントローラー処理からすべてのプロセスが呼ばれること + Arranges: + - 各種プロセスメソッドと内部で使用している値オブジェクトをモック化する + Expects: + - データ取得準備処理が1回のみ実行されること + - オブジェクト情報形式チェック処理が複数回実行されること + - データ取得期間設定処理が複数回実行されること + - CRMデータ取得処理が複数回実行されること + - CRM電文データバックアップ処理が複数回実行されること + - CSV変換処理が複数回実行されること + - CSVバックアップ処理が複数回実行されること + - CSVアップロード処理が複数回実行されること + - 前回取得日次ファイル更新処理が複数回実行されること + - 取得処理実施結果アップロード処理が1回のみ実行されること + """ + monkeypatch.setattr(FetchTargetObjects, '_FetchTargetObjects__validate', lambda x: None) + # monkeypatch.setattr(ExecuteDateTime, '__str__', lambda x: 'YYYY-MM-DDTHH:MM:SS.000Z') + monkeypatch.setattr(TargetObject, '_TargetObject__validate', lambda x: None) + monkeypatch.setattr(LastFetchDatetime, '_LastFetchDatetime__validate', lambda x: None) + mock_execute_datetime = ExecuteDateTime() + mock_target_objects = FetchTargetObjects({ + 'objects': [ + { + 'object_name': 'Account' + }, + { + 'object_name': 'Contact' + }, + { + 'object_name': 'Call2_vod__c' + } + ] + }) + mock_target_object = TargetObject({'object_name': 'Account'}, mock_execute_datetime) + 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(return_value=mock_target_object) + 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() + 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() + + mock_prepare_data_fetch_process.assert_called_once() + assert mock_check_object_info_process.call_count == 3 + assert mock_set_datetime_period_process.call_count == 3 + assert mock_fetch_crm_data_process.call_count == 3 + assert mock_backup_crm_data_process.call_count == 3 + assert mock_convert_crm_csv_data_process.call_count == 3 + assert mock_backup_crm_csv_data_process.call_count == 3 + assert mock_copy_crm_csv_data_process.call_count == 3 + assert mock_upload_last_fetch_datetime_process.call_count == 3 + mock_upload_result_data_process.assert_called_once()