Добавлены тесты для Environment
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
# DRF Rack
|
||||
# Библиотека классов расширений для Django REST Framework
|
||||
#
|
||||
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
||||
# Все права защищены. Лицензия: MIT
|
||||
|
||||
"""
|
||||
Описание класса EnvironmentInitializeTests
|
||||
"""
|
||||
|
||||
from unittest.mock import patch
|
||||
|
||||
from environ import Env
|
||||
|
||||
from net.xeaf.rack.core.testing import CoreSimpleTestCase
|
||||
from net.xeaf.rack.utils.settings import Environment
|
||||
|
||||
|
||||
class EnvironmentInitializeTests(CoreSimpleTestCase):
|
||||
"""
|
||||
Тестовый класс для Environment.initialize()
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
"""
|
||||
Подготовка тестовой среды: сброс состояния Environment
|
||||
"""
|
||||
|
||||
super().setUp()
|
||||
# Сбрасываем состояние класса перед каждым тестом
|
||||
Environment._is_initialized = False
|
||||
Environment._base_dir = ""
|
||||
Environment._env = Env()
|
||||
Environment._env_prefix = ""
|
||||
|
||||
@patch('environ.Env')
|
||||
@patch('os.path.join')
|
||||
def test_initialize_sets_base_dir_and_env(self, mock_join, mock_env_class):
|
||||
"""
|
||||
Тест проверяет, что initialize корректно устанавливает базовую директорию и объект Env
|
||||
"""
|
||||
|
||||
# Arrange
|
||||
base_dir = "/app/project"
|
||||
env_prefix = "APP_"
|
||||
mock_join.return_value = "/app/project/.env"
|
||||
|
||||
# Act
|
||||
Environment.initialize(base_dir, env_prefix)
|
||||
|
||||
# Assert
|
||||
self.assertEqual(Environment._base_dir, base_dir)
|
||||
self.assertEqual(Environment._env_prefix, env_prefix)
|
||||
self.assertTrue(Environment._is_initialized)
|
||||
mock_env_class.read_env.assert_called_once_with("/app/project/.env")
|
||||
|
||||
@patch('environ.Env')
|
||||
@patch('os.path.join')
|
||||
def test_initialize_with_empty_prefix(self, mock_join, mock_env_class):
|
||||
"""
|
||||
Тест проверяет инициализацию с пустым префиксом
|
||||
"""
|
||||
|
||||
# Arrange
|
||||
base_dir = "/app/project"
|
||||
env_prefix = ""
|
||||
mock_join.return_value = "/app/project/.env"
|
||||
|
||||
# Act
|
||||
Environment.initialize(base_dir, env_prefix)
|
||||
|
||||
# Assert
|
||||
self.assertEqual(Environment._env_prefix, "")
|
||||
mock_env_class.read_env.assert_called_once_with("/app/project/.env")
|
||||
|
||||
@patch('environ.Env')
|
||||
@patch('os.path.join')
|
||||
def test_initialize_called_multiple_times(self, mock_join, mock_env_class):
|
||||
"""
|
||||
Тест проверяет повторную инициализацию
|
||||
"""
|
||||
|
||||
# Arrange
|
||||
mock_join.return_value = "/app/project/.env"
|
||||
|
||||
# Act
|
||||
Environment.initialize("/app/project", "PREFIX_")
|
||||
first_env = Environment._env
|
||||
|
||||
# Меняем поведение join для второго вызова, если это необходимо по вашей логике
|
||||
mock_join.return_value = "/app/other/.env"
|
||||
Environment.initialize("/app/other", "OTHER_")
|
||||
second_env = Environment._env
|
||||
|
||||
# Assert
|
||||
self.assertEqual(first_env, second_env) # Оба должны указывать на наш mock_env_class
|
||||
self.assertEqual(Environment._base_dir, "/app/other")
|
||||
self.assertEqual(Environment._env_prefix, "OTHER_")
|
||||
self.assertEqual(mock_env_class.read_env.call_count, 2)
|
||||
|
||||
@patch('environ.Env')
|
||||
@patch('os.path.join')
|
||||
def test_initialize_reads_dot_env_file(self, mock_join, mock_env_class):
|
||||
"""
|
||||
Тест проверяет, что initialize читает файл .env через класс-метод
|
||||
"""
|
||||
|
||||
# Arrange
|
||||
base_dir = "/app/project"
|
||||
expected_env_path = "/app/project/.env"
|
||||
mock_join.return_value = expected_env_path
|
||||
|
||||
# Act
|
||||
Environment.initialize(base_dir)
|
||||
|
||||
# Assert
|
||||
mock_env_class.read_env.assert_called_once_with(expected_env_path)
|
||||
Reference in New Issue
Block a user