diff --git a/ecs/crm-datafetch/tests/test_backup_crm_data_process.py b/ecs/crm-datafetch/tests/test_backup_crm_data_process.py index e476dce3..8028ebf0 100644 --- a/ecs/crm-datafetch/tests/test_backup_crm_data_process.py +++ b/ecs/crm-datafetch/tests/test_backup_crm_data_process.py @@ -97,3 +97,127 @@ class TestBackupCrmDataProcess: # ログの確認 assert generate_log_message_tuple(log_message='I-RESBK-01 [Account] のCRM電文データバックアップ処理を開始します') in caplog.record_tuples assert generate_log_message_tuple(log_message='I-RESBK-03 [Account] のCRM電文データバックアップ処理を終了します') in caplog.record_tuples + + def test_call_depended_modules(self): + """ + Cases: + CRM電文データバックアップ処理内で依存しているモジュールが正しく呼ばれていること + Arranges: + - CRM電文データバックアップ処理の依存モジュールをモック化する + Expects: + - 依存しているモジュールが正しく呼ばれている + """ + + # Arrange + with patch('src.backup_crm_data_process.BackupBucket') as mock_backup_bucket, \ + patch('src.backup_crm_data_process.ExecuteDateTime') as mock_execute_datetime, \ + patch('src.backup_crm_data_process.TargetObject') as mock_target_object: + mock_backup_bucket_inst = mock_backup_bucket.return_value + mock_backup_bucket_inst.put_response_json.return_value = '' + mock_execute_inst = mock_execute_datetime.return_value + mock_execute_inst.to_path.return_value = '' + mock_target_inst = mock_target_object.return_value + mock_target_inst.upload_file_name.return_value = '' + # Act + backup_crm_data_process(mock_target_object, {}, mock_execute_datetime, ) + + # Assert + + assert mock_backup_bucket_inst.put_response_json.called is True + assert mock_execute_inst.to_path.called is True + assert mock_target_object.upload_file_name.called is True + + def test_raise_get_object_info(self, bucket_name, monkeypatch, caplog): + """ + Cases: + CRM_取得オブジェクト情報ファイルを取得できない場合、エラーが発生すること + Arranges: + - オブジェクト情報ファイル取得処理で例外が発生するようにする + Expects: + - 例外が発生する + - ファイルが読み込めないエラーが返却される + """ + + # Arrange + monkeypatch.setattr('src.backup_crm_data_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: + backup_crm_data_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-RESBK-01' + assert e.value.func_name == RESBK_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: + backup_crm_data_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-RESBK-02' + assert e.value.func_name == RESBK_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.backup_crm_data_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: + backup_crm_data_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-RESBK-03' + assert e.value.func_name == RESBK_JP_NAME + assert e.value.args[0] == 'CRM_取得オブジェクト情報ファイルの形式チェックに失敗しました ファイル名:[crm_object_list_diff.json] エラー内容:[形式チェックエラー]'