Explorar o código

Moved validation to settings_validator.py; Added corresponding unit tests

Vsevolod Levitan hai 1 ano
pai
achega
c903398113
Modificáronse 2 ficheiros con 89 adicións e 10 borrados
  1. 22 8
      src/settings.py
  2. 67 2
      tests/test_settings.py

+ 22 - 8
src/settings.py

@@ -1,3 +1,4 @@
+from src.settings_validator import settings_validator
 
 
 class settings:
@@ -17,6 +18,13 @@ class settings:
     __property_type = ""
 
 
+    # Валидатор
+    __vtor = None
+
+    def __init__(self):
+        self.__vtor = settings_validator()
+
+
     def __validate(value, exp_type=None, length=None):
         """
             Валидация аргумента по типу и/или длине
@@ -53,10 +61,10 @@ class settings:
             value (str): Полное наименование
 
         Raises:
-            TypeError: Некорректный аргумента
+            TypeError: Некорректный аргумент
         """
 
-        settings.__validate(value, str)
+        self.__vtor.check_type(value, str)
         
         self.__first_name = value.strip()
 
@@ -76,7 +84,8 @@ class settings:
             ValueError: Некорректная длина аргумента
         """
 
-        settings.__validate(value, int, 12)
+        self.__vtor.check_type(value, int)
+        self.__vtor.check_length(value, 12)
 
         self.__tax_id = value
     
@@ -97,6 +106,8 @@ class settings:
         """
 
         settings.__validate(value, int, 9)
+        self.__vtor.check_type(value, int)
+        self.__vtor.check_length(value, 9)
 
         self.__bank_id = value
 
@@ -117,7 +128,8 @@ class settings:
             ValueError: Некорректная длина аргумента
         """
 
-        settings.__validate(value, int, 11)
+        self.__vtor.check_type(value, int)
+        self.__vtor.check_length(value, 11)
 
         self.__bank_account_id = value
         
@@ -138,7 +150,8 @@ class settings:
             ValueError: Некорректная длина аргумента
         """
 
-        settings.__validate(value, int, 11)
+        self.__vtor.check_type(value, int)
+        self.__vtor.check_length(value, 11)
 
         self.__corresp_account_id = value
 
@@ -158,7 +171,7 @@ class settings:
             TypeError: Некорректный тип аргумента
         """
 
-        settings.__validate(value, str) 
+        self.__vtor.check_type(value, str)
 
         self.__property_name = value
 
@@ -179,6 +192,7 @@ class settings:
             ValueError: Некорректная длина аргумента
         """
 
-        settings.__validate(value, str, 5)
+        self.__vtor.check_type(value, str)
+        self.__vtor.check_length(value, 5)
 
-        self.__property_type = value
+        self.__property_type = value

+ 67 - 2
tests/test_settings.py

@@ -1,5 +1,6 @@
 from src.settings import settings
 from src.settings_manager import settings_manager
+from src.settings_validator import settings_validator
 import unittest, os, random
     
 
@@ -64,7 +65,6 @@ class test_settings(unittest.TestCase):
         # Проверка
         for key in dict.keys():
             assert len(str(dict[key])) != 0
-
     
     #
     #   Проверить, что менеджер настроек может открыть файл
@@ -96,4 +96,69 @@ class test_settings(unittest.TestCase):
 
         # Очистка
         os.remove(filename)
-        os.removedirs(dirname)
+        os.removedirs(dirname)
+
+
+    # Проверить, что валидатор не допускает значения неподходящей длины
+    def test_check_validator_typeguard(self):
+        # Подготовка
+        validator = settings_validator()
+
+        # Действие
+
+        # Проверка
+        assert validator.check_type("", str)
+        self.assertRaises(TypeError, lambda: validator.check_type("", int))
+
+    def test_check_validator_len_exact(self):
+        # Подготовка
+        validator = settings_validator()
+
+        # Действие
+
+        # Проверка
+        assert validator.check_length("aa", 2)
+        self.assertRaises(ValueError, lambda: validator.check_length("aa", 1))
+        self.assertRaises(ValueError, lambda: validator.check_length("aa", 3))
+
+    def test_check_validator_len_int(self):
+        # Подготовка
+        validator = settings_validator()
+
+        # Действие
+
+        # Проверка
+        assert validator.check_length(10, 2)
+        self.assertRaises(ValueError, lambda: validator.check_length(10, 1))
+        self.assertRaises(ValueError, lambda: validator.check_length(10, 3))
+
+    def test_check_validator_len_bound(self):
+        # Подготовка
+        validator = settings_validator()
+
+        # Действие
+
+        # Проверка
+
+        # Вхождение в минимум
+        assert validator.check_length_bound("abc", 3, 10)
+        # Вхождение в максимум
+        assert validator.check_length_bound("abc", 1, 3)
+        # Невхождение в максимум
+        self.assertRaises(ValueError, lambda: validator.check_length_bound("abc", 1, 2))
+        # Невхождение в минимум
+        self.assertRaises(ValueError, lambda: validator.check_length_bound("abc", 4, 5))
+        # Невхождение в исключительный минимум
+        self.assertRaises(ValueError, lambda: validator.check_length_bound("abc", 3, 5, inclusive_min=False))
+        # Невхождение в исключительный максимум
+        self.assertRaises(ValueError, lambda: validator.check_length_bound("abc", 1, 3, inclusive_max=False))
+
+    def test_check_regex(self):
+        # Подготовка
+        validator = settings_validator()
+
+        # Действие
+
+        # Проверка
+        assert validator.check_regex("abc", ".*b[c]+")
+        self.assertRaises(ValueError, lambda: validator.check_regex("abc", ".*b[c]+[a]+"))