from unittest.mock import MagicMock, patch import pytest from src.check_object_info_process import check_object_info_process from src.config.objects import TargetObject from src.error.exceptions import InvalidConfigException from src.system_var.constants import CHK_JP_NAME from src.util.execute_datetime import ExecuteDateTime from .test_utils.log_message import generate_log_message_tuple class TestCheckObjectInfoProcess: def test_run_process_success(self, caplog): """ Cases: オブジェクト情報形式チェック処理が正常終了し、期待通りの結果が返ること Arranges: - チェック対象のdictオブジェクトを宣言する Expects: - チェック後のオブジェクト情報コレクションクラスのインスタンスが返却される - オブジェクト情報形式チェック処理の仕様に沿った正常系ログが出力されること(デバッグログは除く) """ # Arrange target_objects_dict = { 'object_name': 'Account', 'columns': [ 'Id', 'Name' ] } execute_datetime = ExecuteDateTime() # Act actual_fetch_target_objects = check_object_info_process(target_objects_dict, execute_datetime) # Assert # 返り値の期待値チェック assert isinstance(actual_fetch_target_objects, TargetObject), 'CRM取得オブジェクトクラスのインスタンスが返却される' assert actual_fetch_target_objects.object_name == 'Account' assert actual_fetch_target_objects.columns == ['Id', 'Name'] assert actual_fetch_target_objects.is_skip is False assert actual_fetch_target_objects.is_update_last_fetch_datetime is True assert actual_fetch_target_objects.datetime_column == 'SystemModstamp' assert actual_fetch_target_objects.upload_file_name == f'CRM_Account_{execute_datetime.format_date()}' assert actual_fetch_target_objects.last_fetch_datetime_file_name == 'Account.json' # ログの確認 assert generate_log_message_tuple(log_message='I-CHK-01 オブジェクト情報形式チェック処理を開始します') in caplog.record_tuples assert generate_log_message_tuple(log_message='I-CHK-02 オブジェクト情報形式チェック処理を終了します') in caplog.record_tuples def test_call_depended_modules(self): """ Cases: オブジェクト情報形式チェック処理内で依存しているモジュールが正しく呼ばれていること Arranges: - オブジェクト情報形式チェック処理の依存モジュールをモック化する Expects: - 依存しているモジュールが正しく呼ばれている """ # Arrange mock_target_object_init = MagicMock(return_value=None) # Act with patch('src.config.objects.TargetObject.__init__', mock_target_object_init): check_object_info_process({}, {}) # Assert assert mock_target_object_init.called is True def test_raise_check_object_info(self): """ Cases: オブジェクト形式チェック処理でエラーが発生した場合、検査例外が発生すること Arranges: - オブジェクト形式チェック処理で例外が発生するようにする Expects: - 例外が発生する - 形式チェックが失敗したエラーが返却される """ # Arrange mock_target_object_init = MagicMock(side_effect=Exception('形式チェックエラー')) # Act with patch('src.config.objects.TargetObject.__init__', mock_target_object_init): with pytest.raises(InvalidConfigException) as e: check_object_info_process({}, {}) # Assert assert mock_target_object_init.called is True assert e.value.error_id == 'E-CHK-01' assert e.value.func_name == CHK_JP_NAME assert e.value.args[0] == f'オブジェクト情報形式チェック処理が失敗しました エラー内容:[形式チェックエラー]'