/
liquid-g
/
liquid-code
Обзор
Документация
Войти
/
liquid-g
/
liquid-code
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
tests/test_env.py
289 строк
10 KB
User
ci: настроен Black и flake8 для автоматического форматирования кода
04 июл 2026, 08:14
04 июл 2026, 08:14
4778ed6
Код
Авторство
О чём код?
"""Тесты для поддержки .env конфигурации.""" import os import tempfile import pytest from pathlib import Path from liquidcode.env import load_env class TestEnvModule: """Тесты для модуля env.""" def test_load_env_file_not_found(self): """Загрузка несуществующего .env файла возвращает False.""" with tempfile.TemporaryDirectory() as tmpdir: # Устанавливаем рабочую директорию original_cwd = os.getcwd() try: os.chdir(tmpdir) result = load_env(".env") assert result is False finally: os.chdir(original_cwd) def test_load_env_empty_file(self): """Загрузка пустого .env файла.""" with tempfile.TemporaryDirectory() as tmpdir: env_file = Path(tmpdir) / ".env" env_file.write_text("") original_cwd = os.getcwd() original_env = os.environ.copy() try: os.chdir(tmpdir) result = load_env(".env") # python-dotenv возвращает False для пустых файлов assert result is False finally: os.chdir(original_cwd) os.environ.clear() os.environ.update(original_env) def test_load_env_single_variable(self): """Загрузка одной переменной.""" with tempfile.TemporaryDirectory() as tmpdir: env_file = Path(tmpdir) / ".env" env_file.write_text("MY_VAR=value123") original_cwd = os.getcwd() original_env = os.environ.copy() try: os.chdir(tmpdir) result = load_env(".env") assert result is True assert os.environ.get("MY_VAR") == "value123" finally: os.chdir(original_cwd) os.environ.clear() os.environ.update(original_env) def test_load_env_multiple_variables(self): """Загрузка нескольких переменных.""" with tempfile.TemporaryDirectory() as tmpdir: env_file = Path(tmpdir) / ".env" env_file.write_text("VAR1=value1\nVAR2=value2\nVAR3=value3") original_cwd = os.getcwd() original_env = os.environ.copy() try: os.chdir(tmpdir) result = load_env(".env") assert result is True assert os.environ.get("VAR1") == "value1" assert os.environ.get("VAR2") == "value2" assert os.environ.get("VAR3") == "value3" finally: os.chdir(original_cwd) os.environ.clear() os.environ.update(original_env) def test_load_env_with_quotes(self): """Загрузка переменных с кавычками.""" with tempfile.TemporaryDirectory() as tmpdir: env_file = Path(tmpdir) / ".env" env_file.write_text("VAR1=\"quoted value\"\nVAR2='single quotes'") original_cwd = os.getcwd() original_env = os.environ.copy() try: os.chdir(tmpdir) result = load_env(".env") assert result is True # python-dotenv удаляет кавычки автоматически assert os.environ.get("VAR1") == "quoted value" assert os.environ.get("VAR2") == "single quotes" finally: os.chdir(original_cwd) os.environ.clear() os.environ.update(original_env) def test_load_env_with_special_chars(self): """Загрузка переменных со специальными символами.""" with tempfile.TemporaryDirectory() as tmpdir: env_file = Path(tmpdir) / ".env" env_file.write_text( "SECRET_KEY=my-secret-key_123\nAPI_URL=https://api.example.com/v1" ) original_cwd = os.getcwd() original_env = os.environ.copy() try: os.chdir(tmpdir) result = load_env(".env") assert result is True assert os.environ.get("SECRET_KEY") == "my-secret-key_123" assert os.environ.get("API_URL") == "https://api.example.com/v1" finally: os.chdir(original_cwd) os.environ.clear() os.environ.update(original_env) def test_load_env_absolute_path(self): """Загрузка по абсолютному пути.""" with tempfile.TemporaryDirectory() as tmpdir: env_file = Path(tmpdir) / ".env" env_file.write_text("ABS_VAR=absolute") original_env = os.environ.copy() try: result = load_env(str(env_file)) assert result is True assert os.environ.get("ABS_VAR") == "absolute" finally: os.environ.clear() os.environ.update(original_env) def test_load_env_override_existing(self): """Переопределение существующих переменных.""" with tempfile.TemporaryDirectory() as tmpdir: env_file = Path(tmpdir) / ".env" env_file.write_text("OVERRIDE_VAR=updated") original_env = os.environ.copy() try: os.environ["OVERRIDE_VAR"] = "original" original_cwd = os.getcwd() try: os.chdir(tmpdir) result = load_env(".env") assert result is True assert os.environ.get("OVERRIDE_VAR") == "updated" finally: os.chdir(original_cwd) finally: os.environ.clear() os.environ.update(original_env) class TestApplicationEnv: """Тесты для load_env в Application.""" def test_application_load_env(self): """Application.load_env() загружает переменные.""" with tempfile.TemporaryDirectory() as tmpdir: env_file = Path(tmpdir) / ".env" env_file.write_text("APP_HOST=localhost\nAPP_PORT=8080") original_cwd = os.getcwd() original_env = os.environ.copy() try: os.chdir(tmpdir) from liquidcode import Application app = Application() # Переменные должны быть загружены app.load_env(".env") assert os.environ.get("APP_HOST") == "localhost" assert os.environ.get("APP_PORT") == "8080" finally: os.chdir(original_cwd) os.environ.clear() os.environ.update(original_env) def test_application_load_env_custom_path(self): """Application.load_env() с кастомным путём.""" with tempfile.TemporaryDirectory() as tmpdir: env_file = Path(tmpdir) / "custom.env" env_file.write_text("CUSTOM_VAR=test") original_env = os.environ.copy() try: from liquidcode import Application app = Application() app.load_env(str(env_file)) assert os.environ.get("CUSTOM_VAR") == "test" finally: os.environ.clear() os.environ.update(original_env) def test_application_load_env_default_path(self): """Application.load_env() с путём по умолчанию.""" with tempfile.TemporaryDirectory() as tmpdir: env_file = Path(tmpdir) / ".env" env_file.write_text("DEFAULT_VAR=loaded") original_cwd = os.getcwd() original_env = os.environ.copy() try: os.chdir(tmpdir) from liquidcode import Application app = Application() app.load_env() assert os.environ.get("DEFAULT_VAR") == "loaded" finally: os.chdir(original_cwd) os.environ.clear() os.environ.update(original_env) class TestConfigEnvInterpolation: """Тесты для интерполяции переменных в конфиге.""" def test_interpolate_simple(self): """Простая интерполяция переменных в конфиге.""" with tempfile.TemporaryDirectory() as tmpdir: env_file = Path(tmpdir) / ".env" env_file.write_text("HOST=localhost\nPORT=8080") config_file = Path(tmpdir) / "config.yaml" config_file.write_text("parameters:\n host: ${HOST}\n port: ${PORT}") original_cwd = os.getcwd() original_env = os.environ.copy() try: os.chdir(tmpdir) from liquidcode import Application app = Application() app.load_env(".env") app.load_config("config.yaml") assert app.host == "localhost" assert app.port == 8080 finally: os.chdir(original_cwd) os.environ.clear() os.environ.update(original_env) def test_interpolate_with_fallback(self): """Интерполяция с fallback (но в текущей версии без поддержки ${VAR:-default}).""" with tempfile.TemporaryDirectory() as tmpdir: # Без .env файла, переменная не установлена config_file = Path(tmpdir) / "config.yaml" config_file.write_text("parameters:\n host: localhost\n port: 8080") original_cwd = os.getcwd() original_env = os.environ.copy() try: os.chdir(tmpdir) from liquidcode import Application app = Application() app.load_config("config.yaml") assert app.host == "localhost" assert app.port == 8080 finally: os.chdir(original_cwd) os.environ.clear() os.environ.update(original_env)