feat:処理スキップ時のテスト追加

This commit is contained in:
shimoda.m@nds-tyo.co.jp 2022-08-03 14:51:04 +09:00
parent b8fd8a477e
commit 6ad684e38b

View File

@ -1,3 +1,4 @@
import copy
from unittest.mock import MagicMock, patch
import pytest
@ -33,7 +34,6 @@ EXPECT_PROCESS_RESULT = {
class TestController:
@pytest.fixture()
def call_all_processes(self, s3_client, monkeypatch, caplog):
"""
@ -95,7 +95,7 @@ class TestController:
yield _func
def test_controller_call_all_processes(self, call_all_processes):
def test_call_all_processes(self, call_all_processes):
"""
Cases:
コントロール処理からすべてのプロセスが呼ばれること
@ -125,7 +125,7 @@ class TestController:
assert processes['upload_last_fetch_datetime_process'].call_count == 3, '前回取得日次ファイル更新処理が複数回実行されること'
processes['upload_result_data_process'].assert_called_once(), '取得処理実施結果アップロード処理が1回のみ実行されること'
def test_controller_print_normal_logs(self, call_all_processes, caplog):
def test_print_normal_logs(self, call_all_processes, caplog):
"""
Cases:
コントロール処理の正常系ログがすべての出力されていること
@ -135,7 +135,7 @@ class TestController:
- コントロール処理の正常系ログがすべて出力されている
"""
call_all_processes()
# シングルトンなロガーを引き回しているので、rootロガーになる
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
@ -158,7 +158,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_controller_do_not_call_upload_process_result_process(self, s3_client, monkeypatch, caplog):
def test_do_not_call_upload_process_result_process(self, s3_client, monkeypatch, caplog):
"""
Cases:
処理対象オブジェクトが0件の場合取得処理実施結果アップロード処理が実行されないこと
@ -193,8 +193,131 @@ class TestController:
patch('src.controller.upload_result_data_process', mock_upload_result_data_process):
controller.controller()
# 実行回数の確認
mock_prepare_data_fetch_process.assert_called_once(), 'データ取得準備処理が1回のみ実行されること'
mock_upload_result_data_process.call_count == 0, '取得処理実施結果アップロード処理が実行されないこと'
# シングルトンなロガーを引き回しているので、rootロガーになる
# ログ出力の確認
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):
"""
Cases:
オブジェクト情報.is_skipがTrueの場合CSVアップロード処理が実行されないこと
Arranges:
- データ取得準備処理で返される取得対象オブジェクト情報のis_skipをTrueにする
- 各種プロセスメソッドと内部で使用している値オブジェクトをモック化する
Expects:
- オブジェクト情報形式チェック処理以降のプロセスが実行されないこと
- 処理をスキップする旨を示すログメッセージが出力されていること
"""
mock_check_object_info = copy.deepcopy(TEST_OBJECT_INFO_LIST)['objects'][0]
mock_check_object_info['is_skip'] = True
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()
# 実行回数の確認
mock_check_object_info_process.assert_called_once()
# オブジェクト情報形式チェック処理以降のプロセスが実行されないこと
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 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):
"""
Cases:
オブジェクト情報.is_skipがTrueのものが含まれる場合CSVアップロード処理が実行されないこと
Arranges:
- データ取得準備処理で返される取得対象オブジェクト情報のうちつ目をis_skipをTrueにする
- 各種プロセスメソッドと内部で使用している値オブジェクトをモック化する
Expects:
- オブジェクト情報形式チェック処理が2回実行されること
- 処理をスキップする旨を示すログメッセージが出力されていること
- オブジェクト情報.is_skipがFalseのものはCSVアップロード処理のログメッセージが出力されていること
"""
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),
]
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()
# 実行回数の確認
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 generate_log_message_tuple(
log_message='I-CTRL-14 [Account] CSVデータアップロード処理呼び出し') in caplog.record_tuples, 'オブジェクト情報.is_skipがFalseのものはCSVアップロード処理のログメッセージが出力されていること'
assert generate_log_message_tuple(
log_message='I-CTRL-07 [Contact]のデータ取得処理をスキップします') in caplog.record_tuples, '処理をスキップする旨を示すログメッセージが出力されていること'
assert generate_log_message_tuple(
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