From 84db8d20be6b976626fdbc0173131fd9c9e5dd7d Mon Sep 17 00:00:00 2001 From: jbannon Date: Tue, 5 Apr 2022 07:00:45 +0000 Subject: [PATCH] make validator abstract, unit tests for bool and str validator --- tests/unit/validators/__init__.py | 0 tests/unit/validators/conftest.py | 0 tests/unit/validators/test_bool_validator.py | 20 +++++++++++++++++++ .../unit/validators/test_string_validator.py | 20 +++++++++++++++++++ ytdl_subscribe/validators/base/validators.py | 3 ++- 5 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 tests/unit/validators/__init__.py create mode 100644 tests/unit/validators/conftest.py create mode 100644 tests/unit/validators/test_bool_validator.py create mode 100644 tests/unit/validators/test_string_validator.py diff --git a/tests/unit/validators/__init__.py b/tests/unit/validators/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/unit/validators/conftest.py b/tests/unit/validators/conftest.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/unit/validators/test_bool_validator.py b/tests/unit/validators/test_bool_validator.py new file mode 100644 index 00000000..bbfee237 --- /dev/null +++ b/tests/unit/validators/test_bool_validator.py @@ -0,0 +1,20 @@ +import pytest + +from ytdl_subscribe.validators.base.validators import BoolValidator +from ytdl_subscribe.validators.exceptions import ValidationException + + +@pytest.mark.parametrize("value", [True, False]) +def test_bool_validator(value): + bool_validator = BoolValidator(name="good_bool_validator", value=value) + assert bool_validator._name == "good_bool_validator" + assert bool_validator._value == value + assert bool_validator.value == value + + +@pytest.mark.parametrize("value", [None, {}, "True", 0]) +def test_bool_validator_fails_bad_value(value): + with pytest.raises( + ValidationException, match="Validation error in fail: should be of type bool" + ): + _ = BoolValidator(name="fail", value=value) diff --git a/tests/unit/validators/test_string_validator.py b/tests/unit/validators/test_string_validator.py new file mode 100644 index 00000000..6b25c231 --- /dev/null +++ b/tests/unit/validators/test_string_validator.py @@ -0,0 +1,20 @@ +import pytest + +from ytdl_subscribe.validators.base.validators import StringValidator +from ytdl_subscribe.validators.exceptions import ValidationException + + +@pytest.mark.parametrize("value", ["a", "unicode 💩", ""]) +def test_string_validator(value): + bool_validator = StringValidator(name="good_str_validator", value=value) + assert bool_validator._name == "good_str_validator" + assert bool_validator._value == value + assert bool_validator.value == value + + +@pytest.mark.parametrize("value", [None, {}, True, 0]) +def test_bool_validator_fails_bad_value(value): + with pytest.raises( + ValidationException, match="Validation error in fail: should be of type string" + ): + _ = StringValidator(name="fail", value=value) diff --git a/ytdl_subscribe/validators/base/validators.py b/ytdl_subscribe/validators/base/validators.py index 686baf96..6ee38a59 100644 --- a/ytdl_subscribe/validators/base/validators.py +++ b/ytdl_subscribe/validators/base/validators.py @@ -1,3 +1,4 @@ +from abc import ABC from typing import Any from typing import Dict from typing import List @@ -8,7 +9,7 @@ from typing import TypeVar from ytdl_subscribe.validators.exceptions import ValidationException -class Validator: +class Validator(ABC): """ Used to validate the value of a python object. This is the 'base' class that will first check that the value's type matches the expected type. Validators that inherit from this should