"""Settings parsing: CSV env values, aliases, defaults.""" from __future__ import annotations from datetime import date from us2kr.config import Settings def test_csv_env_values_are_split(monkeypatch): monkeypatch.setenv("MINIMAX_FALLBACK_MODELS", "MiniMax-M2.7, MiniMax-M2.5") monkeypatch.setenv("US2KR_KRX_EXTRA_HOLIDAYS", "2026-06-03,2026-12-31") s = Settings(_env_file=None) assert s.minimax_fallback_models == ["MiniMax-M2.7", "MiniMax-M2.5"] assert s.krx_extra_holidays == [date(2026, 6, 3), date(2026, 12, 31)] def test_empty_csv_gives_empty_list(monkeypatch): monkeypatch.setenv("US2KR_KRX_EXTRA_HOLIDAYS", "") monkeypatch.setenv("MINIMAX_FALLBACK_MODELS", "") s = Settings(_env_file=None) assert s.krx_extra_holidays == [] assert s.minimax_fallback_models == [] def test_defaults_without_env(monkeypatch): for k in ("MINIMAX_FALLBACK_MODELS", "US2KR_KRX_EXTRA_HOLIDAYS", "TELEGRAM_BOT_TOKEN", "TELEGRAM_CHAT_ID"): monkeypatch.delenv(k, raising=False) s = Settings(_env_file=None) assert s.minimax_model == "MiniMax-M3" assert s.minimax_fallback_models == ["MiniMax-M2.7", "MiniMax-M2.5"] assert s.krx_extra_holidays == [] assert s.telegram_enabled is False def test_init_kwargs_accept_field_name_and_alias(monkeypatch): monkeypatch.delenv("US2KR_RUN_OFFSET_MINUTES", raising=False) assert Settings(_env_file=None, run_offset_minutes=30).run_offset_minutes == 30 assert Settings(_env_file=None, US2KR_RUN_OFFSET_MINUTES=45).run_offset_minutes == 45 def test_telegram_enabled_requires_both(monkeypatch): monkeypatch.setenv("TELEGRAM_BOT_TOKEN", "123456:abcdefghijklmnopqrstuvwxyz") monkeypatch.delenv("TELEGRAM_CHAT_ID", raising=False) assert Settings(_env_file=None).telegram_enabled is False monkeypatch.setenv("TELEGRAM_CHAT_ID", "42") assert Settings(_env_file=None).telegram_enabled is True