From b8fd8a477e68fcbe04fc2cde9a9c2222250a3edd Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Wed, 3 Aug 2022 13:53:58 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=E3=83=AD=E3=82=B0=E3=83=A1=E3=83=83?= =?UTF-8?q?=E3=82=BB=E3=83=BC=E3=82=B8=E3=81=AE=E7=A2=BA=E8=AA=8D=E3=82=B1?= =?UTF-8?q?=E3=83=BC=E3=82=B9=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 | 72 ++++++++++++++----- .../tests/test_utils/log_message.py | 7 ++ 2 files changed, 61 insertions(+), 18 deletions(-) create mode 100644 ecs/crm-datafetch/tests/test_utils/log_message.py diff --git a/ecs/crm-datafetch/tests/test_controller.py b/ecs/crm-datafetch/tests/test_controller.py index 6e47ba43..6b91abb2 100644 --- a/ecs/crm-datafetch/tests/test_controller.py +++ b/ecs/crm-datafetch/tests/test_controller.py @@ -1,4 +1,3 @@ -import logging from unittest.mock import MagicMock, patch import pytest @@ -7,6 +6,31 @@ from src.config.objects import (FetchTargetObjects, LastFetchDatetime, TargetObject) from src.util.execute_datetime import ExecuteDateTime +from .test_utils.log_message import generate_log_message_tuple + +TEST_OBJECT_INFO_LIST = { + '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' + } + ] +} + +EXPECT_PROCESS_RESULT = { + 'Account': 'success', + 'Contact': 'success', + 'Call2_vod__c': 'success' +} + class TestController: @@ -24,26 +48,17 @@ class TestController: 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_target_objects = FetchTargetObjects(TEST_OBJECT_INFO_LIST) + mock_target_object_first = TargetObject(TEST_OBJECT_INFO_LIST['objects'][0], mock_execute_datetime) + mock_target_object_second = TargetObject(TEST_OBJECT_INFO_LIST['objects'][1], mock_execute_datetime) + mock_target_object_third = TargetObject(TEST_OBJECT_INFO_LIST['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(return_value=mock_target_object) + 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() @@ -121,7 +136,27 @@ class TestController: """ call_all_processes() # シングルトンなロガーを引き回しているので、rootロガーになる - assert ('root', logging.INFO, 'I-CTRL-01 CRMデータ取得処理を開始します') in caplog.record_tuples + assert generate_log_message_tuple(log_message='I-CTRL-01 CRMデータ取得処理を開始します') in caplog.record_tuples + assert generate_log_message_tuple(log_message='I-CTRL-02 データ取得準備処理呼び出し') in caplog.record_tuples + assert generate_log_message_tuple(log_message='I-CTRL-03 取得対象オブジェクトのループ処理開始') in caplog.record_tuples + for obj in TEST_OBJECT_INFO_LIST['objects']: + object_name = obj['object_name'] + upload_file_name = obj['upload_file_name'] + assert generate_log_message_tuple(log_message='I-CTRL-05 オブジェクト情報形式チェック処理呼び出し') in caplog.record_tuples + assert generate_log_message_tuple(log_message=f'I-CTRL-06 [{object_name}]のデータ取得を開始します') in caplog.record_tuples + assert generate_log_message_tuple(log_message=f'I-CTRL-08 [{object_name}]のデータ取得期間設定処理呼び出し') in caplog.record_tuples + assert generate_log_message_tuple(log_message=f'I-CTRL-09 [{object_name}]のデータ取得処理呼び出し') in caplog.record_tuples + assert generate_log_message_tuple(log_message=f'I-CTRL-10 [{object_name}] の出力ファイル名は [{upload_file_name}] となります') in caplog.record_tuples + assert generate_log_message_tuple(log_message=f'I-CTRL-11 [{object_name}] CRM電文データバックアップ処理呼び出し') in caplog.record_tuples + assert generate_log_message_tuple(log_message=f'I-CTRL-12 [{object_name}] CSV変換処理呼び出し') in caplog.record_tuples + assert generate_log_message_tuple(log_message=f'I-CTRL-13 [{object_name}] CSVデータバックアップ処理呼び出し') in caplog.record_tuples + assert generate_log_message_tuple(log_message=f'I-CTRL-14 [{object_name}] CSVデータアップロード処理呼び出し') in caplog.record_tuples + assert generate_log_message_tuple(log_message=f'I-CTRL-15 [{object_name}] 前回取得日時ファイル更新処理呼び出し') in caplog.record_tuples + assert generate_log_message_tuple(log_message=f'I-CTRL-16 [{object_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_message=f'I-CTRL-18 CRM_取得処理実施結果ファイルアップロード処理開始') in caplog.record_tuples + 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_controller_do_not_call_upload_process_result_process(self, s3_client, monkeypatch, caplog): """ @@ -161,4 +196,5 @@ class TestController: mock_prepare_data_fetch_process.assert_called_once(), 'データ取得準備処理が1回のみ実行されること' mock_upload_result_data_process.call_count == 0, '取得処理実施結果アップロード処理が実行されないこと' # シングルトンなロガーを引き回しているので、rootロガーになる - assert ('root', logging.INFO, 'I-CTRL-21 処理対象のデータが存在しませんでした') in caplog.record_tuples, '処理対象が存在しない旨を示すログメッセージが出力されていること' + 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 diff --git a/ecs/crm-datafetch/tests/test_utils/log_message.py b/ecs/crm-datafetch/tests/test_utils/log_message.py new file mode 100644 index 00000000..25ce6e11 --- /dev/null +++ b/ecs/crm-datafetch/tests/test_utils/log_message.py @@ -0,0 +1,7 @@ +"""ログメッセージに関連するテストヘルパー""" + +import logging + + +def generate_log_message_tuple(logger_name='root', log_level=logging.INFO, log_message=''): + return (logger_name, log_level, log_message)