from src.settings import settings from src.settings_manager import settings_manager from src.validator import validator import unittest, os, random class test_settings(unittest.TestCase): projdir = os.path.dirname(__file__) + "/.." def first_name_setter(self): """Проверить корректность заполнения поля first_name""" # Подготовка item = settings() # Действие item.first_name = "a " # Проверка assert item.first_name == "a" def settings_manager_singleton(self): """Проверить, что settings_manager имплементирует singleton""" # Подготовка man1 = settings_manager() man2 = settings_manager() # Действие # Проверка assert man1 is man2 def open_settings(self): """Проверить корректность загрузки настроек""" # Подготовка man = settings_manager() # Действие result = man.open(f"{self.projdir}/config/settings.json") # Проверка assert result == True def settings_fields_nonempty(self): """Проверить, что все поля настроек не пусты после считывания настроек""" # Подготовка man = settings_manager() settings = None # Действие man.open(f"{self.projdir}/config/settings.json") settings = man.settings dict = settings.__dict__ # Проверка for key in dict.keys(): assert len(str(dict[key])) != 0 def settings_any_filename(self): """Проверить, что менеджер настроек может открыть файл с любым названием и в любой папке""" # Подготовка if not os.path.exists(f"{self.projdir}/.test_data"): os.mkdir(f"{self.projdir}/.test_data") alp = "abcdefghijklmnopqrstuvwxyz" dirname = f"{self.projdir}/.test_data/" dirname += ''.join(random.choice(alp) for _ in range(6)) filename = f"{dirname}/" filename += ''.join(random.choice(alp) for _ in range(6)) + ".json" os.mkdir(dirname) print(filename) f = open(filename, "w", encoding="UTF-8") f2 = open(f"{self.projdir}/config/settings.json", encoding="UTF-8") f.write(f2.read()) f.close() f2.close() # Действие man = settings_manager() man.open(filename) # Проверка assert settings is not None # Очистка os.remove(filename) os.removedirs(dirname) def settings_validator_typeguard(self): """Проверить работоспособность settings_validation.check_type()""" # Подготовка validator = validator() # Действие # Проверка assert validator.check_type("", str) self.assertRaises(TypeError, lambda: validator.check_type("", int)) def settings_validator_len_exact(self): """Проверить работоспособность settings_validator.check_length()""" # Подготовка validator = 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 settings_validator_len_int(self): """Проверить работоспособность settings_validator.check_length() при передаче int""" # Подготовка validator = 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 settings_validator_len_bound(self): """Проверить работоспособность settings_validator.check_length_bound()""" # Подготовка validator = 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 settings_validator_regex(self): """Проверить работоспособность settings_validator.check_regex()""" # Подготовка validator = validator() # Действие # Проверка assert validator.check_regex("abc", ".*b[c]+") self.assertRaises(ValueError, lambda: validator.check_regex("abc", ".*b[c]+[a]+"))