Добавлены тесты для Environment

This commit is contained in:
2026-07-20 15:33:46 +03:00
parent 781e885ffb
commit 304fa18bce
16 changed files with 928 additions and 14 deletions

View File

@@ -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)