test_settings.py 5.6 KB

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