diff --git a/ecs/crm-datafetch/tests/test_prepare_data_fetch_process.py b/ecs/crm-datafetch/tests/test_prepare_data_fetch_process.py index e5896058..9471946f 100644 --- a/ecs/crm-datafetch/tests/test_prepare_data_fetch_process.py +++ b/ecs/crm-datafetch/tests/test_prepare_data_fetch_process.py @@ -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] エラー内容:[形式チェックエラー]'