From e10201c1f29de8b02c13442c126e5ef6acee9685 Mon Sep 17 00:00:00 2001 From: Y_SAKAI Date: Mon, 8 Aug 2022 17:43:51 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20dict=5Fchecker=E3=81=AE=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=B3=E3=83=BC=E3=83=89=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tests/util/test_dict_checker.py | 580 ++++++++++++++++++ 1 file changed, 580 insertions(+) create mode 100644 ecs/crm-datafetch/tests/util/test_dict_checker.py diff --git a/ecs/crm-datafetch/tests/util/test_dict_checker.py b/ecs/crm-datafetch/tests/util/test_dict_checker.py new file mode 100644 index 00000000..6707b8be --- /dev/null +++ b/ecs/crm-datafetch/tests/util/test_dict_checker.py @@ -0,0 +1,580 @@ +import pytest +from src.util.dict_checker import DictChecker + + +class TestDictChecker: + + def test_is_empty_no_value(self): + """ + Cases: + 辞書型データの対象のキーの値が''(空文字)の場合、Trueが返る + Arranges: + - 辞書型のオブジェクト情報を準備する + - 辞書型チェックインスタンスを生成する + Expects: + - 戻り値が期待値と一致する + """ + + # Arranges + object_dict = { + "test_key": "" + } + + sut = DictChecker(object_dict) + + # Act + actual = sut.is_empty("test_key") + + # Expects + assert actual is True + + def test_is_empty_none(self): + """ + Cases: + 辞書型データの対象のキーの値がNoneの場合、Trueが返る + Arranges: + - 辞書型のオブジェクト情報を準備する + - 辞書型チェックインスタンスを生成する + Expects: + - 戻り値が期待値と一致する + """ + + # Arranges + object_dict = { + "test_key": None + } + + sut = DictChecker(object_dict) + + # Act + actual = sut.is_empty("test_key") + + # Expects + assert actual is True + + def test_is_empty_exist_value(self): + """ + Cases: + 辞書型データの対象のキーの値が存在する場合、Falseが返る + Arranges: + - 辞書型のオブジェクト情報を準備する + - 辞書型チェックインスタンスを生成する + Expects: + - 戻り値が期待値と一致する + """ + + # Arranges + object_dict = { + "test_key": "test_value" + } + + sut = DictChecker(object_dict) + + # Act + actual = sut.is_empty("test_key") + + # Expects + assert actual is False + + def test_is_list_empty_no_value(self): + """ + Cases: + 辞書型のデータの対象のキーのリストの値が''(空文字)の場合、Falseが返る + Arranges: + - 辞書型のオブジェクト情報を準備する + - 辞書型チェックインスタンスを生成する + Expects: + - 戻り値が期待値と一致する + """ + + # Arranges + object_dict = { + "test_key": [ + "" + ] + } + + sut = DictChecker(object_dict) + + # Act + actual = sut.is_list_empty("test_key") + + # Expects + assert actual is False + + def test_is_list_empty_none(self): + """ + Cases: + 辞書型データの対象のキーのリストの値がNoneの場合、Falseが返る + Arranges: + - 辞書型のオブジェクト情報を準備する + - 辞書型チェックインスタンスを生成する + Expects: + - 戻り値が期待値と一致する + """ + + # Arranges + object_dict = { + "test_key": [ + None + ] + } + + sut = DictChecker(object_dict) + + # Act + actual = sut.is_list_empty("test_key") + + # Expects + assert actual is False + + def test_is_list_empty_blank(self): + """ + Cases: + 辞書型データの対象のキーのリストの値が[](空)の場合、Trueが返る + Arranges: + - 辞書型のオブジェクト情報を準備する + - 辞書型チェックインスタンスを生成する + Expects: + - 戻り値が期待値と一致する + """ + + # Arranges + object_dict = { + "test_key": [] + } + + sut = DictChecker(object_dict) + + # Act + actual = sut.is_list_empty("test_key") + + # Expects + assert actual is True + + def test_is_list_empty_exist_string(self): + """ + Cases: + 辞書型データの対象のキーの値に文字列が存在する場合、Falseが返る + Arranges: + - 辞書型のオブジェクト情報を準備する + - 辞書型チェックインスタンスを生成する + Expects: + - 戻り値が期待値と一致する + """ + + # Arranges + object_dict = { + "test_key": "test_value" + } + + sut = DictChecker(object_dict) + + # Act + actual = sut.is_list_empty("test_key") + + # Expects + assert actual is False + + def test_is_list_empty_exist_value(self): + """ + Cases: + 辞書型データの対象のキーのリストの値が存在する場合、Falseが返る + Arranges: + - 辞書型のオブジェクト情報を準備する + - 辞書型チェックインスタンスを生成する + Expects: + - 戻り値が期待値と一致する + """ + + # Arranges + object_dict = { + "test_key": [ + "test_value" + ] + } + + sut = DictChecker(object_dict) + + # Act + actual = sut.is_list_empty("test_key") + + # Expects + assert actual is False + + def test_check_key_exist(self) -> bool: + """ + Cases: + 辞書型データの対象のキーが存在する、かつ値が存在する場合、Trueが返る + Arranges: + - 辞書型のオブジェクト情報を準備する + - 辞書型チェックインスタンスを生成する + Expects: + - 戻り値が期待値と一致する + """ + + # Arranges + object_dict = { + "test_key": "test_value" + } + + sut = DictChecker(object_dict) + + # Act + actual = sut.check_key_exist("test_key") + + # Expects + assert actual is True + + def test_check_key_exist_no_key(self) -> bool: + """ + Cases: + 辞書型データの対象のキーが存在しない場合、Falseが返る + Arranges: + - 辞書型のオブジェクト情報を準備する + - 辞書型チェックインスタンスを生成する + Expects: + - 戻り値が期待値と一致する + """ + + # Arranges + object_dict = { + } + + sut = DictChecker(object_dict) + + # Act + actual = sut.check_key_exist("test_key") + + # Expects + assert actual is False + + def test_check_key_exist_no_value(self) -> bool: + """ + Cases: + 辞書型データの対象のキーの値が存在しない場合、Falseが返る + Arranges: + - 辞書型のオブジェクト情報を準備する + - 辞書型チェックインスタンスを生成する + Expects: + - 戻り値が期待値と一致する + """ + + # Arranges + object_dict = { + "test_key": "" + } + + sut = DictChecker(object_dict) + + # Act + actual = sut.check_key_exist("test_key") + + # Expects + assert actual is False + + def test_check_data_type(self) -> bool: + """ + Cases: + 辞書型データの対象のキーの値の型が指定した型と一致した場合、Trueが返る + Arranges: + - 辞書型のオブジェクト情報を準備する + - 辞書型チェックインスタンスを生成する + Expects: + - 戻り値が期待値と一致する + """ + + # Arranges + object_dict = { + "test_key": "test_value" + } + + sut = DictChecker(object_dict) + + # Act + actual = sut.check_data_type("test_key", str) + + # Expects + assert actual is True + + def test_check_data_type_other_type(self) -> bool: + """ + Cases: + 辞書型データの対象のキーの値の型が指定した型と一致しない場合、Falseが返る + Arranges: + - 辞書型のオブジェクト情報を準備する + - 辞書型チェックインスタンスを生成する + Expects: + - 戻り値が期待値と一致する + """ + + # Arranges + object_dict = { + "test_key": 1 + } + + sut = DictChecker(object_dict) + + # Act + actual = sut.check_data_type("test_key", str) + + # Expects + assert actual is False + + def test_check_match_pattern(self) -> bool: + """ + Cases: + 辞書型データの対象のキーの値の型が指定した正規表現と一致した場合、Trueが返る + Arranges: + - 辞書型のオブジェクト情報を準備する + - 辞書型チェックインスタンスを生成する + - 正規表現パターンの生成 + Expects: + - 戻り値が期待値と一致する + """ + + # Arranges + object_dict = { + "test_key": "2022-08-01T10:00:00.000Z" + } + + sut = DictChecker(object_dict) + + pattern = r'[12]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\.000Z' + + # Act + actual = sut.check_match_pattern(pattern, "test_key") + + # Expects + assert actual is True + + def test_check_match_pattern_not_match(self) -> bool: + """ + Cases: + 辞書型データの対象のキーの値の型が指定した正規表現と一致しない場合、Falseが返る + Arranges: + - 辞書型のオブジェクト情報を準備する + - 辞書型チェックインスタンスを生成する + - 正規表現パターンの生成 + Expects: + - 戻り値が期待値と一致する + """ + + # Arranges + object_dict = { + "test_key": "test_value" + } + + sut = DictChecker(object_dict) + + pattern = r'[12]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\.000Z' + + # Act + actual = sut.check_match_pattern(pattern, "test_key") + + # Expects + assert actual is False + + def test_assert_key_exist(self) -> None: + """ + Cases: + 辞書型データの対象のキーの値が存在する場合、例外が発生しないこと + Arranges: + - 辞書型のオブジェクト情報を準備する + - 辞書型チェックインスタンスを生成する + Expects: + - 例外が発生しないこと + """ + + # Arranges + object_dict = { + "test_key": "test_value" + } + + sut = DictChecker(object_dict) + + # Act + sut.assert_key_exist("test_key") + + # Expects + pass + + def test_raise_assert_key_exist(self) -> None: + """ + Cases: + 辞書型データの対象のキーの値が存在しない場合、例外が発生すること + Arranges: + - 辞書型のオブジェクト情報を準備する + - 辞書型チェックインスタンスを生成する + Expects: + - 発生した例外が期待値と一致すること + """ + + # Arranges + object_dict = { + "test_key": "" + } + + sut = DictChecker(object_dict) + + # Act + with pytest.raises(Exception) as e: + sut.assert_key_exist("test_key") + + # Expects + assert str(e.value) == '「test_key」キーは必須です' + + def test_assert_data_type(self) -> None: + """ + Cases: + 辞書型データの対象のキーの値の型が指定した型と一致した場合、例外が発生しないこと + Arranges: + - 辞書型のオブジェクト情報を準備する + - 辞書型チェックインスタンスを生成する + Expects: + - 例外が発生しないこと + """ + + # Arranges + object_dict = { + "test_key": "test_value" + } + + sut = DictChecker(object_dict) + + # Act + sut.assert_data_type("test_key", str) + + # Expects + pass + + def test_raise_assert_data_type(self) -> None: + """ + Cases: + 辞書型データの対象のキーの値の型が指定した型と一致しない場合、例外が発生すること + Arranges: + - 辞書型のオブジェクト情報を準備する + - 辞書型チェックインスタンスを生成する + Expects: + - 発生した例外が期待値と一致すること + """ + + # Arranges + object_dict = { + "test_key": 1 + } + + sut = DictChecker(object_dict) + + # Act + with pytest.raises(Exception) as e: + sut.assert_data_type("test_key", str) + + # Expects + assert str(e.value) == "「test_key」キーの値は「」でなければなりません" + + def test_assert_match_pattern(self): + """ + Cases: + 辞書型データの対象のキーの値の型が指定した正規表現と一致した場合、例外が発生しないこと + Arranges: + - 辞書型のオブジェクト情報を準備する + - 辞書型チェックインスタンスを生成する + - 正規表現パターンの生成 + Expects: + - 例外が発生しないこと + """ + + # Arranges + object_dict = { + "test_key": "2022-08-01T10:00:00.000Z" + } + + sut = DictChecker(object_dict) + + pattern = r'[12]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\.000Z' + + # Act + sut.assert_match_pattern("test_key", pattern, 'YYYY-MM-DDTHH:MM:SS.000Z') + + # Expects + pass + + def test_raise_assert_match_pattern(self): + """ + Cases: + 辞書型データの対象のキーの値の型が指定した正規表現と一致しない場合、例外が発生すること + Arranges: + - 辞書型のオブジェクト情報を準備する + - 辞書型チェックインスタンスを生成する + - 正規表現パターンの生成 + Expects: + - 発生した例外が期待値と一致すること + """ + + # Arranges + object_dict = { + "test_key": "test_value" + } + + sut = DictChecker(object_dict) + + pattern = r'[12]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\.000Z' + + # Act + with pytest.raises(Exception) as e: + sut.assert_match_pattern("test_key", pattern, 'YYYY-MM-DDTHH:MM:SS.000Z') + + assert str(e.value) == '「test_key」キーの値の正規表現チェックに失敗しました 「YYYY-MM-DDTHH:MM:SS.000Z」形式である必要があります' + + def test_assert_list_empty(self): + """ + Cases: + 辞書型データの対象のキーのリストの値が存在する場合、例外が発生しないこと + Arranges: + - 辞書型のオブジェクト情報を準備する + - 辞書型チェックインスタンスを生成する + Expects: + - 例外が発生しないこと + """ + + # Arranges + object_dict = { + "test_key": [ + "test_value" + ] + } + + sut = DictChecker(object_dict) + + # Act + sut.assert_list_empty("test_key") + + # Expects + pass + + def test_raise_assert_list_empty(self): + """ + Cases: + 辞書型データの対象のキーのリストの値が存在しない場合、例外が発生すること + Arranges: + - 辞書型のオブジェクト情報を準備する + - 辞書型チェックインスタンスを生成する + Expects: + - 発生した例外が期待値と一致すること + """ + + # Arranges + object_dict = { + "test_key": [ + ] + } + + sut = DictChecker(object_dict) + + # Act + with pytest.raises(Exception) as e: + sut.assert_list_empty("test_key") + + # Expects + assert str(e.value) == '「test_key」キーのリストの値は必須です'