fix: unify verify_ssl semantics across config sources
YAML verify_ssl: true раньше подставлял захардкоженный путь /etc/ssl/certs/ca-certificates.crt, а REDMINE_VERIFY=true — bool True. Путь отсутствует на части дистрибутивов, семантика источников различалась. Теперь едино для YAML и env: - true (bool/строка) → True: стандартная проверка TLS средствами requests; - false (bool/строка) → False (+ сохраняется warning из #57); - иная строка → путь к CA-bundle как есть. - дефолт (значение не задано) → True вместо захардкоженного пути. Существующие тесты на путь-от-true переписаны под новую семантику (изменение поведения): test_verify_ssl_true_returns_default_ca_path → test_verify_ssl_true_returns_true. Closes #62
This commit is contained in:
@@ -5,12 +5,7 @@ from unittest import mock
|
||||
|
||||
import pytest
|
||||
|
||||
from redmine_reporter.config import (
|
||||
DEFAULT_REDMINE_VERIFY,
|
||||
AppConfig,
|
||||
Config,
|
||||
EmailConfig,
|
||||
)
|
||||
from redmine_reporter.config import AppConfig, Config, EmailConfig
|
||||
|
||||
|
||||
@mock.patch.dict(
|
||||
@@ -106,7 +101,9 @@ def test_get_default_date_range_fallback():
|
||||
|
||||
@mock.patch.dict(os.environ, {}, clear=True)
|
||||
def test_get_redmine_verify_default():
|
||||
assert Config.get_redmine_verify() == DEFAULT_REDMINE_VERIFY
|
||||
"""Без явной настройки проверка TLS включена (стандартные CA requests)."""
|
||||
Config._app = None
|
||||
assert Config.get_redmine_verify() is True
|
||||
|
||||
|
||||
@pytest.mark.parametrize("value", ["0", "false", "False", "no", "off"])
|
||||
@@ -355,16 +352,57 @@ class TestAppConfigFromYaml:
|
||||
|
||||
assert cfg.redmine_api_key == "secret-token"
|
||||
|
||||
def test_verify_ssl_true_returns_default_ca_path(self):
|
||||
"""verify_ssl: true → DEFAULT_REDMINE_VERIFY (путь), не Python True."""
|
||||
def test_verify_ssl_true_returns_true(self):
|
||||
"""verify_ssl: true → bool True (стандартная проверка TLS)."""
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
yaml_path = Path(tmp) / "config.yml"
|
||||
yaml_path.write_text("redmine:\n verify_ssl: true\n")
|
||||
|
||||
cfg = AppConfig.from_yaml(yaml_path)
|
||||
|
||||
assert cfg.redmine_verify == DEFAULT_REDMINE_VERIFY
|
||||
assert cfg.redmine_verify is not True # не бул!
|
||||
assert cfg.redmine_verify is True
|
||||
|
||||
@pytest.mark.parametrize("value", ["true", "True", "yes", "on", "1"])
|
||||
def test_verify_ssl_true_string_returns_true(self, value):
|
||||
"""Строковые true-значения в YAML → bool True, как и из env."""
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
yaml_path = Path(tmp) / "config.yml"
|
||||
yaml_path.write_text(f"redmine:\n verify_ssl: '{value}'\n")
|
||||
|
||||
cfg = AppConfig.from_yaml(yaml_path)
|
||||
|
||||
assert cfg.redmine_verify is True
|
||||
|
||||
def test_verify_ssl_custom_path_returns_path(self):
|
||||
"""Явный путь к CA-bundle в YAML передаётся как есть."""
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
yaml_path = Path(tmp) / "config.yml"
|
||||
yaml_path.write_text("redmine:\n verify_ssl: /etc/ssl/my-ca.pem\n")
|
||||
|
||||
cfg = AppConfig.from_yaml(yaml_path)
|
||||
|
||||
assert cfg.redmine_verify == "/etc/ssl/my-ca.pem"
|
||||
|
||||
@pytest.mark.parametrize("value", ["false", "False", "no", "off", "0"])
|
||||
def test_verify_ssl_false_string_returns_false(self, value):
|
||||
"""Строковые false-значения в YAML → bool False."""
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
yaml_path = Path(tmp) / "config.yml"
|
||||
yaml_path.write_text(f"redmine:\n verify_ssl: '{value}'\n")
|
||||
|
||||
cfg = AppConfig.from_yaml(yaml_path)
|
||||
|
||||
assert cfg.redmine_verify is False
|
||||
|
||||
def test_verify_ssl_missing_returns_true(self):
|
||||
"""Без verify_ssl в YAML — проверка TLS включена (True)."""
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
yaml_path = Path(tmp) / "config.yml"
|
||||
yaml_path.write_text("redmine:\n url: https://x.com/\n")
|
||||
|
||||
cfg = AppConfig.from_yaml(yaml_path)
|
||||
|
||||
assert cfg.redmine_verify is True
|
||||
|
||||
def test_verify_ssl_false_returns_false(self):
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
|
||||
Reference in New Issue
Block a user