import os import pytest from unittest import mock from redmine_reporter.config import Config # Config читает os.getenv() в момент определения класса (class-level атрибуты), # поэтому mock.patch.dict(os.environ) не помогает -- класс уже загружен. # Правильный способ -- патчить атрибуты самого класса. @mock.patch.multiple( Config, REDMINE_URL="https://red.eltex.loc", REDMINE_USER="test", REDMINE_PASSWORD="secret", ) def test_config_valid(): Config.validate() # не должно быть исключения @mock.patch.multiple( Config, REDMINE_URL="", REDMINE_USER=None, REDMINE_PASSWORD=None, ) def test_config_missing(): with pytest.raises(ValueError, match="REDMINE_URL"): Config.validate() @mock.patch.multiple(Config, REDMINE_AUTHOR="Иванов И.И.") def test_get_author(): assert Config.get_author("") == "Иванов И.И." assert Config.get_author("Петров П.П.") == "Петров П.П." @mock.patch.multiple(Config, REDMINE_AUTHOR=None) def test_get_author_fallback(): """Если ни CLI, ни .env не задали автора -- возвращается пустая строка.""" assert Config.get_author("") == "" @mock.patch.multiple( Config, DEFAULT_FROM_DATE="2026-01-01", DEFAULT_TO_DATE="2026-01-31", ) def test_get_default_date_range_from_env(): assert Config.get_default_date_range() == "2026-01-01--2026-01-31" @mock.patch.multiple(Config, DEFAULT_FROM_DATE=None, DEFAULT_TO_DATE=None) def test_get_default_date_range_fallback(): """Если даты не заданы -- используется хардкод-заглушка.""" result = Config.get_default_date_range() assert "--" in result # формат YYYY-MM-DD--YYYY-MM-DD