feat: 例外系テストケースを追加

This commit is contained in:
shimoda.m@nds-tyo.co.jp 2022-08-05 23:56:24 +09:00
parent 37f0c4f1f1
commit a298e32204

View File

@ -1,28 +1,16 @@
import json
import logging
from datetime import datetime
from unittest.mock import MagicMock, patch
import pytest
from src.config.objects import FetchTargetObjects
from src.error.exceptions import MeDaCaCRMDataFetchException
from src.error.exceptions import FileNotFoundException, InvalidConfigException
from src.prepare_data_fetch_process import prepare_data_fetch_process
from src.system_var.constants import YYYYMMDDTHHMMSSTZ
from src.system_var.constants import PRE_JP_NAME, YYYYMMDDTHHMMSSTZ
from .test_utils.log_message import generate_log_message_tuple
class ForTestMeDaCaCRMDataFetchException(MeDaCaCRMDataFetchException):
def __init__(self, error_id: str, func_name: str, message: str) -> None:
super().__init__(error_id, func_name, message)
class ForTestException(Exception):
# カスタム例外とインタフェースを合わせるための引数
def __init__(self, error_id: str, func_name: str, message: str) -> None:
super().__init__(message)
class TestPrepareDataFetchProcess:
@pytest.fixture
@ -39,9 +27,9 @@ class TestPrepareDataFetchProcess:
Cases:
データ取得準備処理が正常終了し期待通りの結果が返ること
Arranges:
- prepare_bucketフィクスチャでCRM取得オブジェクト情報ファイルを置くためのモックバケットを作る
- prepare_bucketフィクスチャでCRM_取得オブジェクト情報ファイルを置くためのモックバケットを作る
- 作成したモックバケットを指すように環境変数を設定する
- CRM取得オブジェクト情報ファイルを置く
- CRM_取得オブジェクト情報ファイルを置く
Expects:
- CRM取得オブジェクトクラスのインスタンスが返却される
- CRM取得オブジェクトクラスのインスタンスが期待値と一致
@ -119,3 +107,98 @@ class TestPrepareDataFetchProcess:
assert mock_config_bucket.called is True
assert mock_json_parser.called is True
assert mock_fetch_target_objects.called is True
def test_raise_get_object_info(self, bucket_name, monkeypatch, caplog):
"""
Cases:
CRM_取得オブジェクト情報ファイルを取得できない場合エラーが発生すること
Arranges:
- オブジェクト情報ファイル取得処理で例外が発生するようにする
Expects:
- 例外が発生する
- ファイルが読み込めないエラーが返却される
"""
# Arrange
monkeypatch.setattr('src.prepare_data_fetch_process.OBJECT_INFO_FILENAME', 'crm_object_list_diff.json')
mock_config_bucket = MagicMock(side_effect=Exception('ファイル取得エラー'))
mock_json_parser = MagicMock(return_value={})
mock_fetch_target_objects = MagicMock(return_value=None)
# Act
with patch('src.aws.s3.ConfigBucket.get_object_info_file', mock_config_bucket), \
patch('src.parser.json_parser.JsonParser.parse', mock_json_parser), \
patch('src.config.objects.FetchTargetObjects.__init__', mock_fetch_target_objects):
with pytest.raises(FileNotFoundException) as e:
prepare_data_fetch_process()
# Assert
assert mock_config_bucket.called is True
assert mock_json_parser.called is False
assert mock_fetch_target_objects.called is False
assert e.value.error_id == 'E-PRE-01'
assert e.value.func_name == PRE_JP_NAME
assert e.value.args[0] == f'CRM_取得オブジェクト情報ファイルが存在しません ファイル名:[crm_object_list_diff.json] エラー内容:[ファイル取得エラー]'
def test_raise_parse_json_str(self, bucket_name, monkeypatch, caplog):
"""
Cases:
CRM_取得オブジェクト情報ファイルをパースできない場合エラーが発生すること
Arranges:
- オブジェクト情報ファイルパース処理で例外が発生するようにする
Expects:
- 例外が発生する
- パースが失敗した旨エラーメッセージが表示される
"""
# Arrange
mock_config_bucket = MagicMock(return_value='')
mock_json_parser = MagicMock(side_effect=Exception('JSONパースエラー'))
mock_fetch_target_objects = MagicMock(return_value=None)
# Act
with patch('src.aws.s3.ConfigBucket.get_object_info_file', mock_config_bucket), \
patch('src.parser.json_parser.JsonParser.parse', mock_json_parser), \
patch('src.config.objects.FetchTargetObjects.__init__', mock_fetch_target_objects):
with pytest.raises(InvalidConfigException) as e:
prepare_data_fetch_process()
# Assert
assert mock_config_bucket.called is True
assert mock_json_parser.called is True
assert mock_fetch_target_objects.called is False
assert e.value.error_id == 'E-PRE-02'
assert e.value.func_name == PRE_JP_NAME
assert e.value.args[0] == f'CRM_取得オブジェクト情報ファイルのパースに失敗しました エラー内容:[JSONパースエラー]'
def test_raise_check_objects_format(self, bucket_name, monkeypatch, caplog):
"""
Cases:
CRM_取得オブジェクト情報のキーobjectsの形式チェックが不正の場合エラーが発生すること
Arranges:
- CRM_取得オブジェクト情報のキーobjectsの形式チェックで例外が発生するようにする
Expects:
- 例外が発生する
- 形式チェックが失敗した旨エラーメッセージが表示される
"""
# Arrange
monkeypatch.setattr('src.prepare_data_fetch_process.OBJECT_INFO_FILENAME', 'crm_object_list_diff.json')
mock_config_bucket = MagicMock(return_value='')
mock_json_parser = MagicMock(return_value={})
mock_fetch_target_objects = MagicMock(side_effect=Exception('形式チェックエラー'))
# Act
with patch('src.aws.s3.ConfigBucket.get_object_info_file', mock_config_bucket), \
patch('src.parser.json_parser.JsonParser.parse', mock_json_parser), \
patch('src.config.objects.FetchTargetObjects.__init__', mock_fetch_target_objects):
with pytest.raises(InvalidConfigException) as e:
prepare_data_fetch_process()
# Assert
assert mock_config_bucket.called is True
assert mock_json_parser.called is True
assert mock_fetch_target_objects.called is True
assert e.value.error_id == 'E-PRE-03'
assert e.value.func_name == PRE_JP_NAME
assert e.value.args[0] == 'CRM_取得オブジェクト情報ファイルの形式チェックに失敗しました ファイル名:[crm_object_list_diff.json] エラー内容:[形式チェックエラー]'