Files

47 lines
1.6 KiB
Python

import pytest
import config
@pytest.fixture
def env_file(tmp_path, monkeypatch):
for name in tuple(config.os.environ):
if name.startswith("N8N_"):
monkeypatch.delenv(name)
path = tmp_path / ".env"
monkeypatch.setattr(config, "ENV_FILE", path)
return path
def test_file_loads_from_other_working_directory(env_file, tmp_path, monkeypatch):
env_file.write_text(
'N8N_CHAT_WEBHOOK_URL="https://example.com/chat"\n'
'N8N_UPLOAD_WEBHOOK_URL=https://example.com/upload\n'
'N8N_CHAT_TIMEOUT_SECONDS=15\nN8N_MAX_FILE_BYTES=2048\n',
encoding="utf-8-sig",
)
elsewhere = tmp_path / "elsewhere"
elsewhere.mkdir()
monkeypatch.chdir(elsewhere)
settings = config.Settings.from_env()
assert settings.chat_webhook_url == "https://example.com/chat"
assert settings.upload_webhook_url == "https://example.com/upload"
assert settings.chat_timeout_seconds == 15
assert settings.max_file_bytes == 2048
def test_environment_overrides_file(env_file, monkeypatch):
env_file.write_text("N8N_CHAT_WEBHOOK_URL=https://example.com/file\n")
monkeypatch.setenv("N8N_CHAT_WEBHOOK_URL", "https://example.com/environment")
assert config.Settings.from_env().chat_webhook_url.endswith("/environment")
def test_missing_file_uses_defaults(env_file):
assert config.Settings.from_env() == config.Settings()
def test_invalid_file_setting_has_friendly_error(env_file):
env_file.write_text("N8N_CHAT_TIMEOUT_SECONDS=abc\n")
with pytest.raises(config.ConfigurationError, match="числовые"):
config.Settings.from_env()