feat: 取得データ件数が0件の場合にCSV出力しないように修正

This commit is contained in:
shimoda.m@nds-tyo.co.jp 2022-08-04 11:16:54 +09:00
parent c6f636d324
commit 81fc1ebeee
2 changed files with 122 additions and 14 deletions

View File

@ -139,6 +139,12 @@ def _fetch_crm_data_per_object(object_info: dict, execute_datetime: ExecuteDateT
crm_data_response = fetch_crm_data_process(target_object, last_fetch_datetime)
# 取得件数が0件の場合、次のオブジェクトの処理に移行する
if len(crm_data_response) == 0:
logger.info(
f'I-CTRL-22 [{target_object_name}]のレコード件数が0件のため、ファイルアップロードをスキップします')
return
# 7. 出力ファイル名をログ出力する
logger.info(
f'I-CTRL-10 [{target_object_name}] の出力ファイル名は [{target_object.upload_file_name}] となります')

View File

@ -122,7 +122,7 @@ class TestController:
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_fetch_crm_data_process = MagicMock(return_value=[{'Name': 'Test'}])
self.mock_backup_crm_data_process = MagicMock()
self.mock_convert_crm_csv_data_process = MagicMock()
self.mock_backup_crm_csv_data_process = MagicMock()
@ -241,7 +241,7 @@ class TestController:
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, caplog, run_control_process):
def test_do_not_call_upload_csv_process_cause_is_skip_true(self, caplog, run_control_process):
"""
Cases:
オブジェクト情報.is_skipがTrueの場合CSVアップロード処理が実行されないこと
@ -291,10 +291,10 @@ class TestController:
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, caplog, run_control_process):
def test_do_not_call_upload_csv_process_cause_is_skip_true_in_loop(self, caplog, run_control_process):
"""
Cases:
オブジェクト情報.is_skipがTrueのものが含まれる場合CSVアップロード処理が実行されないこと
オブジェクト情報.is_skipがTrueのものが含まれる場合対象オブジェクトのCSVアップロード処理が実行されないこと
Arranges:
- データ取得準備処理で返される取得対象オブジェクト情報のうちつ目をis_skipをTrueにする
- 各種プロセスメソッドと内部で使用している値オブジェクトをモック化する
@ -331,7 +331,7 @@ class TestController:
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_fetch_crm_data_process = MagicMock(side_effect=[[{"Name": "Test"}], [{"Name": "Test"}]])
self.mock_backup_crm_data_process = MagicMock()
self.mock_convert_crm_csv_data_process = MagicMock()
self.mock_backup_crm_csv_data_process = MagicMock()
@ -365,6 +365,108 @@ class TestController:
) 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_do_not_call_upload_csv_process_cause_crm_data_empty(self, caplog, run_control_process):
"""
Cases:
CRMデータ取得処理で取得できた件数が0件の場合CSVアップロード処理が実行されないこと
Arranges:
- CRMデータ取得処理で返されるオブジェクトを空のリストにする
- 各種プロセスメソッドと内部で使用している値オブジェクトをモック化する
Expects:
- CRM電文データバックアップ処理以降のプロセスが実行されないこと
- 処理をスキップする旨を示すログメッセージが出力されていること
"""
mock_check_object_infos = {
'objects': [
{
'object_name': 'Account',
'columns': [],
'is_skip': False
}
]
}
FetchTargetObjects(mock_check_object_infos)
mock_return_values = [
TargetObject(mock_check_object_infos['objects'][0], COMMON_EXECUTE_DATETIME)
]
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(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_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 == 1
assert self.mock_set_datetime_period_process.call_count == 1
assert self.mock_fetch_crm_data_process.call_count == 1
# CRM電文データバックアップ処理以降のプロセスが実行されないこと
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-22 [Account]のレコード件数が0件のため、ファイルアップロードをスキップします') in caplog.record_tuples, '処理をスキップする旨を示すログメッセージが出力されていること'
def test_do_not_call_upload_csv_process_cause_crm_data_empty_in_loop(self, caplog, run_control_process):
"""
Cases:
CRMデータ取得処理で取得できた件数が0件のものが含まれる場合対象オブジェクトのCSVアップロード処理が実行されないこと
Arranges:
- CRMデータ取得処理で返されるオブジェクトのうちつ目を空のリストにする
- 各種プロセスメソッドと内部で使用している値オブジェクトをモック化する
Expects:
- CRMデータ取得処理が2回実行されること
- 処理をスキップする旨を示すログメッセージが出力されていること
- 取得オブジェクトが1件以上取れているものはCSVアップロード処理のログメッセージが出力されていること
"""
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=[COMMON_TARGET_OBJECTS_1, COMMON_TARGET_OBJECTS_2, COMMON_TARGET_OBJECTS_3])
self.mock_set_datetime_period_process = MagicMock(return_value=COMMON_LAST_FETCH_DATETIME)
self.mock_fetch_crm_data_process = MagicMock(side_effect=[[{"Name": "Test"}], [], [{"Name": "Test"}]])
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 == 3
assert self.mock_fetch_crm_data_process.call_count == 3
# CRM電文データバックアップ処理以降のプロセスは件数があるもののみ実行されること
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(
log_message='I-CTRL-14 [Account] CSVデータアップロード処理呼び出し') in caplog.record_tuples, '取得オブジェクトが1件以上取れているものはCSVアップロード処理のログメッセージが出力されていること'
assert generate_log_message_tuple(
log_message='I-CTRL-22 [Contact]のレコード件数が0件のため、ファイルアップロードをスキップします') in caplog.record_tuples, '処理をスキップする旨を示すログメッセージが出力されていること'
assert generate_log_message_tuple(
log_message='I-CTRL-14 [Call2_vod__c] CSVデータアップロード処理呼び出し'
) in caplog.record_tuples, '取得オブジェクトが1件以上取れているものはCSVアップロード処理のログメッセージが出力されていること'
@pytest.mark.parametrize(
'exception, message',
[
@ -418,7 +520,7 @@ class TestController:
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_fetch_crm_data_process = MagicMock(return_value=[{'Name': 'Test'}])
self.mock_backup_crm_data_process = MagicMock()
self.mock_convert_crm_csv_data_process = MagicMock()
self.mock_backup_crm_csv_data_process = MagicMock()
@ -464,7 +566,7 @@ class TestController:
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_fetch_crm_data_process = MagicMock(return_value=[{'Name': 'Test'}])
self.mock_backup_crm_data_process = MagicMock()
self.mock_convert_crm_csv_data_process = MagicMock()
self.mock_backup_crm_csv_data_process = MagicMock()
@ -510,7 +612,7 @@ class TestController:
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, '例外発生'), {}, {}])
'E-FETCH-01', FETCH_JP_NAME, '例外発生'), [{'Name': 'Test'}], [{'Name': 'Test'}]])
self.mock_backup_crm_data_process = MagicMock()
self.mock_convert_crm_csv_data_process = MagicMock()
self.mock_backup_crm_csv_data_process = MagicMock()
@ -555,7 +657,7 @@ class TestController:
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_fetch_crm_data_process = MagicMock(side_effect=[[{'Name': 'Test'}], [{'Name': 'Test'}], [{'Name': 'Test'}]])
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()
@ -601,7 +703,7 @@ class TestController:
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_fetch_crm_data_process = MagicMock(side_effect=[[{'Name': 'Test'}], [{'Name': 'Test'}], [{'Name': 'Test'}]])
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])
@ -647,7 +749,7 @@ class TestController:
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_fetch_crm_data_process = MagicMock(side_effect=[[{'Name': 'Test'}], [{'Name': 'Test'}], [{'Name': 'Test'}]])
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(
@ -693,7 +795,7 @@ class TestController:
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_fetch_crm_data_process = MagicMock(side_effect=[[{'Name': 'Test'}], [{'Name': 'Test'}], [{'Name': 'Test'}]])
self.mock_backup_crm_data_process = MagicMock()
self.mock_convert_crm_csv_data_process = MagicMock()
self.mock_backup_crm_csv_data_process = MagicMock()
@ -739,7 +841,7 @@ class TestController:
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_fetch_crm_data_process = MagicMock(side_effect=[[{'Name': 'Test'}], [{'Name': 'Test'}], [{'Name': 'Test'}]])
self.mock_backup_crm_data_process = MagicMock()
self.mock_convert_crm_csv_data_process = MagicMock()
self.mock_backup_crm_csv_data_process = MagicMock()
@ -784,7 +886,7 @@ class TestController:
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_fetch_crm_data_process = MagicMock(side_effect=[[{'Name': 'Test'}], [{'Name': 'Test'}], [{'Name': 'Test'}]])
self.mock_backup_crm_data_process = MagicMock()
self.mock_convert_crm_csv_data_process = MagicMock()
self.mock_backup_crm_csv_data_process = MagicMock()