feat:ループ処理中の例外テストを追加

This commit is contained in:
shimoda.m@nds-tyo.co.jp 2022-08-03 19:41:42 +09:00
parent 2552970363
commit f18aeb8d25

View File

@ -6,7 +6,9 @@ from src import controller
from src.config.objects import (FetchTargetObjects, LastFetchDatetime,
TargetObject)
from src.error.exceptions import MeDaCaCRMDataFetchException
from src.system_var.constants import CHK_JP_NAME, DATE_JP_NAME, PRE_JP_NAME
from src.system_var.constants import (CHK_JP_NAME, CONV_JP_NAME, CSVBK_JP_NAME,
DATE_JP_NAME, FETCH_JP_NAME, PRE_JP_NAME,
RESBK_JP_NAME, UPD_JP_NAME, UPLD_JP_NAME)
from src.util.execute_datetime import ExecuteDateTime
from .test_utils.log_message import generate_log_message_tuple
@ -360,60 +362,11 @@ class TestController:
- データ取得準備処理で例外が発生すること
- データ取得準備処理で発生した例外のログメッセージが出力されていること
"""
# TODO: ケースのコピー用にコメントを残してある
# monkeypatch.setattr(FetchTargetObjects, '_FetchTargetObjects__validate', lambda x: None)
# monkeypatch.setattr(TargetObject, '_TargetObject__validate', lambda x: None)
# monkeypatch.setattr(LastFetchDatetime, '_LastFetchDatetime__validate', lambda x: None)
# mock_execute_datetime = ExecuteDateTime()
# objects = {
# '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'
# }
# ]
# }
# mock_target_objects = FetchTargetObjects(objects)
# mock_target_object_first = TargetObject(objects['objects'][0], mock_execute_datetime)
# mock_target_object_second = TargetObject(objects['objects'][1], mock_execute_datetime)
# mock_target_object_third = TargetObject(objects['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(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()
# 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()
expect_exception = ForTestControllerException('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):
# 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.called is False
@ -486,6 +439,7 @@ class TestController:
# with pytest.raises(MeDaCaCRMDataFetchException):
controller.controller()
assert mock_check_object_info_process.call_count == 3
assert mock_set_datetime_period_process.call_count == 2
expect_process_result = {
'Account': 'fail',
'Contact': 'success',
@ -496,7 +450,7 @@ class TestController:
assert generate_log_message_tuple(
log_level=logging.ERROR, log_message=f'E-CTRL-01 一部のデータ取得に失敗しています 詳細はログをご確認ください') in caplog.record_tuples
def test_raise_set_fetch_date_period_process(self, s3_client, monkeypatch, caplog):
def test_raise_set_datetime_period_process(self, s3_client, monkeypatch, caplog):
"""
Cases:
データ取得期間設定処理でシステム例外が発生した場合エラーログが送出され後続の終了に移行すること
@ -538,7 +492,6 @@ class TestController:
}, mock_execute_datetime)
mock_prepare_data_fetch_process = MagicMock(return_value=(mock_target_objects, mock_execute_datetime, {}))
mock_check_object_info_process = MagicMock(side_effect=mock_return_values)
# mock_set_datetime_period_process = MagicMock(return_value=mock_last_fetch_datetime)
mock_set_datetime_period_process = MagicMock(side_effect=[ForTestControllerException(
'E-DATE-01', DATE_JP_NAME, '例外発生'), mock_last_fetch_datetime, mock_last_fetch_datetime])
mock_fetch_crm_data_process = MagicMock(return_value=[{}])
@ -563,6 +516,7 @@ class TestController:
# with pytest.raises(MeDaCaCRMDataFetchException):
controller.controller()
assert mock_set_datetime_period_process.call_count == 3
assert mock_fetch_crm_data_process.call_count == 2
expect_process_result = {
'Account': 'fail',
'Contact': 'success',
@ -572,3 +526,458 @@ class TestController:
assert generate_log_message_tuple(log_message=f'I-CTRL-17 すべてのオブジェクトの処理が終了しました 実行結果:[{expect_process_result}]') in caplog.record_tuples
assert generate_log_message_tuple(
log_level=logging.ERROR, log_message=f'E-CTRL-01 一部のデータ取得に失敗しています 詳細はログをご確認ください') in caplog.record_tuples
def test_raise_fetch_crm_data_process(self, s3_client, monkeypatch, caplog):
"""
Cases:
CRMデータ取得処理でシステム例外が発生した場合エラーで終了すること
Arranges:
- CRMデータ取得処理でシステム例外が発生するようにする
Expects:
- CRMデータ取得処理で例外が発生すること
- CRMデータ取得処理で発生した例外のログメッセージが出力されていること
"""
monkeypatch.setattr(FetchTargetObjects, '_FetchTargetObjects__validate', lambda x: None)
monkeypatch.setattr(TargetObject, '_TargetObject__validate', lambda x: None)
monkeypatch.setattr(LastFetchDatetime, '_LastFetchDatetime__validate', lambda x: None)
mock_execute_datetime = ExecuteDateTime()
objects = {
'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'
}
]
}
mock_target_objects = FetchTargetObjects(objects)
mock_target_object_first = TargetObject(objects['objects'][0], mock_execute_datetime)
mock_target_object_second = TargetObject(objects['objects'][1], mock_execute_datetime)
mock_target_object_third = TargetObject(objects['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(side_effect=mock_return_values)
mock_set_datetime_period_process = MagicMock(return_value=mock_last_fetch_datetime)
mock_fetch_crm_data_process = MagicMock(side_effect=[ForTestControllerException(
'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
expect_process_result = {
'Account': 'fail',
'Contact': 'success',
'Call2_vod__c': 'success'
}
assert generate_log_message_tuple(log_message=f'I-ERR-03 [Account] の[{FETCH_JP_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_level=logging.ERROR, log_message=f'E-CTRL-01 一部のデータ取得に失敗しています 詳細はログをご確認ください') in caplog.record_tuples
def test_raise_backup_crm_data_process(self, s3_client, monkeypatch, caplog):
"""
Cases:
CRM電文データバックアップ処理でシステム例外が発生した場合エラーで終了すること
Arranges:
- CRM電文データバックアップ処理でシステム例外が発生するようにする
Expects:
- CRM電文データバックアップ処理で例外が発生すること
- CRM電文データバックアップ処理で発生した例外のログメッセージが出力されていること
"""
monkeypatch.setattr(FetchTargetObjects, '_FetchTargetObjects__validate', lambda x: None)
monkeypatch.setattr(TargetObject, '_TargetObject__validate', lambda x: None)
monkeypatch.setattr(LastFetchDatetime, '_LastFetchDatetime__validate', lambda x: None)
mock_execute_datetime = ExecuteDateTime()
objects = {
'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'
}
]
}
mock_target_objects = FetchTargetObjects(objects)
mock_target_object_first = TargetObject(objects['objects'][0], mock_execute_datetime)
mock_target_object_second = TargetObject(objects['objects'][1], mock_execute_datetime)
mock_target_object_third = TargetObject(objects['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(side_effect=mock_return_values)
mock_set_datetime_period_process = MagicMock(return_value=mock_last_fetch_datetime)
mock_fetch_crm_data_process = MagicMock(side_effect=[{}, {}, {}])
mock_backup_crm_data_process = MagicMock(side_effect=[ForTestControllerException(
'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
expect_process_result = {
'Account': 'fail',
'Contact': 'success',
'Call2_vod__c': 'success'
}
assert generate_log_message_tuple(log_message=f'I-ERR-03 [Account] の[{RESBK_JP_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_level=logging.ERROR, log_message=f'E-CTRL-01 一部のデータ取得に失敗しています 詳細はログをご確認ください') in caplog.record_tuples
def test_raise_convert_crm_csv_data_process(self, s3_client, monkeypatch, caplog):
"""
Cases:
CSV変換処理でシステム例外が発生した場合エラーで終了すること
Arranges:
- CSV変換処理でシステム例外が発生するようにする
Expects:
- CSV変換処理で例外が発生すること
- CSV変換処理で発生した例外のログメッセージが出力されていること
"""
monkeypatch.setattr(FetchTargetObjects, '_FetchTargetObjects__validate', lambda x: None)
monkeypatch.setattr(TargetObject, '_TargetObject__validate', lambda x: None)
monkeypatch.setattr(LastFetchDatetime, '_LastFetchDatetime__validate', lambda x: None)
mock_execute_datetime = ExecuteDateTime()
objects = {
'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'
}
]
}
mock_target_objects = FetchTargetObjects(objects)
mock_target_object_first = TargetObject(objects['objects'][0], mock_execute_datetime)
mock_target_object_second = TargetObject(objects['objects'][1], mock_execute_datetime)
mock_target_object_third = TargetObject(objects['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(side_effect=mock_return_values)
mock_set_datetime_period_process = MagicMock(return_value=mock_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=[ForTestControllerException(
'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
expect_process_result = {
'Account': 'fail',
'Contact': 'success',
'Call2_vod__c': 'success'
}
assert generate_log_message_tuple(log_message=f'I-ERR-03 [Account] の[{CONV_JP_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_level=logging.ERROR, log_message=f'E-CTRL-01 一部のデータ取得に失敗しています 詳細はログをご確認ください') in caplog.record_tuples
def test_raise_backup_crm_csv_data_process(self, s3_client, monkeypatch, caplog):
"""
Cases:
CSVバックアップ処理でシステム例外が発生した場合エラーで終了すること
Arranges:
- CSVバックアップ処理でシステム例外が発生するようにする
Expects:
- CSVバックアップ処理で例外が発生すること
- CSVバックアップ処理で発生した例外のログメッセージが出力されていること
"""
monkeypatch.setattr(FetchTargetObjects, '_FetchTargetObjects__validate', lambda x: None)
monkeypatch.setattr(TargetObject, '_TargetObject__validate', lambda x: None)
monkeypatch.setattr(LastFetchDatetime, '_LastFetchDatetime__validate', lambda x: None)
mock_execute_datetime = ExecuteDateTime()
objects = {
'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'
}
]
}
mock_target_objects = FetchTargetObjects(objects)
mock_target_object_first = TargetObject(objects['objects'][0], mock_execute_datetime)
mock_target_object_second = TargetObject(objects['objects'][1], mock_execute_datetime)
mock_target_object_third = TargetObject(objects['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(side_effect=mock_return_values)
mock_set_datetime_period_process = MagicMock(return_value=mock_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=[ForTestControllerException(
'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
expect_process_result = {
'Account': 'fail',
'Contact': 'success',
'Call2_vod__c': 'success'
}
assert generate_log_message_tuple(log_message=f'I-ERR-03 [Account] の[{CSVBK_JP_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_level=logging.ERROR, log_message=f'E-CTRL-01 一部のデータ取得に失敗しています 詳細はログをご確認ください') in caplog.record_tuples
def test_raise_copy_crm_csv_data_process(self, s3_client, monkeypatch, caplog):
"""
Cases:
CSVアップロード処理でシステム例外が発生した場合エラーで終了すること
Arranges:
- CSVアップロード処理でシステム例外が発生するようにする
Expects:
- CSVアップロード処理で例外が発生すること
- CSVアップロード処理で発生した例外のログメッセージが出力されていること
"""
monkeypatch.setattr(FetchTargetObjects, '_FetchTargetObjects__validate', lambda x: None)
monkeypatch.setattr(TargetObject, '_TargetObject__validate', lambda x: None)
monkeypatch.setattr(LastFetchDatetime, '_LastFetchDatetime__validate', lambda x: None)
mock_execute_datetime = ExecuteDateTime()
objects = {
'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'
}
]
}
mock_target_objects = FetchTargetObjects(objects)
mock_target_object_first = TargetObject(objects['objects'][0], mock_execute_datetime)
mock_target_object_second = TargetObject(objects['objects'][1], mock_execute_datetime)
mock_target_object_third = TargetObject(objects['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(side_effect=mock_return_values)
mock_set_datetime_period_process = MagicMock(return_value=mock_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=[ForTestControllerException(
'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
expect_process_result = {
'Account': 'fail',
'Contact': 'success',
'Call2_vod__c': 'success'
}
assert generate_log_message_tuple(log_message=f'I-ERR-03 [Account] の[{UPLD_JP_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_level=logging.ERROR, log_message=f'E-CTRL-01 一部のデータ取得に失敗しています 詳細はログをご確認ください') in caplog.record_tuples
def test_raise_upload_last_fetch_datetime_process(self, s3_client, monkeypatch, caplog):
"""
Cases:
前回取得日時ファイル更新処理でシステム例外が発生した場合エラーで終了すること
Arranges:
- 前回取得日時ファイル更新処理でシステム例外が発生するようにする
Expects:
- 前回取得日時ファイル更新処理で例外が発生すること
- 前回取得日時ファイル更新処理で発生した例外のログメッセージが出力されていること
"""
monkeypatch.setattr(FetchTargetObjects, '_FetchTargetObjects__validate', lambda x: None)
monkeypatch.setattr(TargetObject, '_TargetObject__validate', lambda x: None)
monkeypatch.setattr(LastFetchDatetime, '_LastFetchDatetime__validate', lambda x: None)
mock_execute_datetime = ExecuteDateTime()
objects = {
'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'
}
]
}
mock_target_objects = FetchTargetObjects(objects)
mock_target_object_first = TargetObject(objects['objects'][0], mock_execute_datetime)
mock_target_object_second = TargetObject(objects['objects'][1], mock_execute_datetime)
mock_target_object_third = TargetObject(objects['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(side_effect=mock_return_values)
mock_set_datetime_period_process = MagicMock(return_value=mock_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=[ForTestControllerException(
'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
expect_process_result = {
'Account': 'fail',
'Contact': 'success',
'Call2_vod__c': 'success'
}
assert generate_log_message_tuple(log_message=f'I-ERR-03 [Account] の[{UPD_JP_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_level=logging.ERROR, log_message=f'E-CTRL-01 一部のデータ取得に失敗しています 詳細はログをご確認ください') in caplog.record_tuples