test_settings.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. from src.settings import settings
  2. from src.settings_manager import settings_manager
  3. from src.settings_validator import settings_validator
  4. import unittest, os, random
  5. class test_settings(unittest.TestCase):
  6. projdir = os.path.dirname(__file__) + "/.."
  7. #
  8. # Провеиить корректность заполнения поля first_name
  9. #
  10. def test_check_first_name(self):
  11. # Подготовка
  12. item = settings()
  13. # Действие
  14. item.first_name = "a "
  15. # Проверка
  16. assert item.first_name == "a"
  17. #
  18. # Проверить, что settings_manager инстанциируется только один раз
  19. #
  20. def test_check_settings_manager_singleton(self):
  21. # Подготовка
  22. man1 = settings_manager()
  23. man2 = settings_manager()
  24. # Действие
  25. # Проверка
  26. assert man1 is man2
  27. #
  28. # Проверить корректность загрузки настроек
  29. #
  30. def test_check_open_settings(self):
  31. # Подготовка
  32. man = settings_manager()
  33. # Действие
  34. result = man.open(f"{self.projdir}/config/settings.json")
  35. # Проверка
  36. assert result == True
  37. #
  38. # Проверить, что все поля настроек не пусты
  39. #
  40. def test_check_settings_fields_nonempty(self):
  41. # Подготовка
  42. man = settings_manager()
  43. settings = None
  44. # Действие
  45. man.open(f"{self.projdir}/config/settings.json")
  46. settings = man.settings
  47. dict = settings.__dict__
  48. # Проверка
  49. for key in dict.keys():
  50. assert len(str(dict[key])) != 0
  51. #
  52. # Проверить, что менеджер настроек может открыть файл
  53. # с любым названием и в любой папке
  54. #
  55. def test_settings_any_filename(self):
  56. # Подготовка
  57. if not os.path.exists(f"{self.projdir}/.test_data"):
  58. os.mkdir(f"{self.projdir}/.test_data")
  59. alp = "abcdefghijklmnopqrstuvwxyz"
  60. dirname = f"{self.projdir}/.test_data/"
  61. dirname += ''.join(random.choice(alp) for _ in range(6))
  62. filename = f"{dirname}/"
  63. filename += ''.join(random.choice(alp) for _ in range(6)) + ".json"
  64. os.mkdir(dirname)
  65. print(filename)
  66. f = open(filename, "w", encoding="UTF-8")
  67. f2 = open(f"{self.projdir}/config/settings.json", encoding="UTF-8")
  68. f.write(f2.read())
  69. f.close()
  70. f2.close()
  71. # Действие
  72. man = settings_manager()
  73. man.open(filename)
  74. # Проверка
  75. assert settings is not None
  76. # Очистка
  77. os.remove(filename)
  78. os.removedirs(dirname)
  79. # Проверить, что валидатор не допускает значения неподходящей длины
  80. def test_check_validator_typeguard(self):
  81. # Подготовка
  82. validator = settings_validator()
  83. # Действие
  84. # Проверка
  85. assert validator.check_type("", str)
  86. self.assertRaises(TypeError, lambda: validator.check_type("", int))
  87. def test_check_validator_len_exact(self):
  88. # Подготовка
  89. validator = settings_validator()
  90. # Действие
  91. # Проверка
  92. assert validator.check_length("aa", 2)
  93. self.assertRaises(ValueError, lambda: validator.check_length("aa", 1))
  94. self.assertRaises(ValueError, lambda: validator.check_length("aa", 3))
  95. def test_check_validator_len_int(self):
  96. # Подготовка
  97. validator = settings_validator()
  98. # Действие
  99. # Проверка
  100. assert validator.check_length(10, 2)
  101. self.assertRaises(ValueError, lambda: validator.check_length(10, 1))
  102. self.assertRaises(ValueError, lambda: validator.check_length(10, 3))
  103. def test_check_validator_len_bound(self):
  104. # Подготовка
  105. validator = settings_validator()
  106. # Действие
  107. # Проверка
  108. # Вхождение в минимум
  109. assert validator.check_length_bound("abc", 3, 10)
  110. # Вхождение в максимум
  111. assert validator.check_length_bound("abc", 1, 3)
  112. # Невхождение в максимум
  113. self.assertRaises(ValueError, lambda: validator.check_length_bound("abc", 1, 2))
  114. # Невхождение в минимум
  115. self.assertRaises(ValueError, lambda: validator.check_length_bound("abc", 4, 5))
  116. # Невхождение в исключительный минимум
  117. self.assertRaises(ValueError, lambda: validator.check_length_bound("abc", 3, 5, inclusive_min=False))
  118. # Невхождение в исключительный максимум
  119. self.assertRaises(ValueError, lambda: validator.check_length_bound("abc", 1, 3, inclusive_max=False))
  120. def test_check_regex(self):
  121. # Подготовка
  122. validator = settings_validator()
  123. # Действие
  124. # Проверка
  125. assert validator.check_regex("abc", ".*b[c]+")
  126. self.assertRaises(ValueError, lambda: validator.check_regex("abc", ".*b[c]+[a]+"))