feat(config): отключаемый Telegram-канал (telegram.enabled)
- TelegramCfg.Enabled (дефолт true); при false канал не создаётся и не крепится в Router, long-poll не стартует — нет сетевых вызовов к api.telegram.org - Validate требует token/chat_id только при enabled - Load пресетит enabled=true до unmarshal (applyDefaults для bool не различает явный false) - тесты, README и config.yaml.example обновлены
This commit is contained in:
@@ -277,7 +277,7 @@ paths:
|
||||
}
|
||||
|
||||
func TestLoad_MissingRequired(t *testing.T) {
|
||||
// пустой конфиг — все обязательные поля отсутствуют
|
||||
// пустой конфиг — все обязательные поля отсутствуют (telegram.enabled по дефолту true)
|
||||
t.Setenv("TG_TOKEN", "")
|
||||
t.Setenv("TG_CHAT_ID", "")
|
||||
|
||||
@@ -298,6 +298,41 @@ func TestLoad_MissingRequired(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoad_TelegramDisabledSkipsToken(t *testing.T) {
|
||||
// enabled: false — token/chat_id не обязательны, конфиг валиден
|
||||
t.Setenv("TG_TOKEN", "")
|
||||
t.Setenv("TG_CHAT_ID", "")
|
||||
|
||||
yaml := `telegram:
|
||||
enabled: false
|
||||
token: ""
|
||||
chat_id: ""
|
||||
`
|
||||
path := writeCfg(t, yaml)
|
||||
cfg, err := Load(path)
|
||||
if err != nil {
|
||||
t.Fatalf("Load: %v", err)
|
||||
}
|
||||
if cfg.Telegram.Enabled {
|
||||
t.Error("telegram.enabled = true, want false")
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoad_TelegramEnabledDefaultTrue(t *testing.T) {
|
||||
// enabled не задан — дефолт true, token обязателен
|
||||
t.Setenv("TG_TOKEN", "")
|
||||
t.Setenv("TG_CHAT_ID", "42")
|
||||
|
||||
yaml := `telegram:
|
||||
chat_id: "42"
|
||||
`
|
||||
path := writeCfg(t, yaml)
|
||||
_, err := Load(path)
|
||||
if err == nil || !strings.Contains(err.Error(), "telegram.token") {
|
||||
t.Errorf("ожидалась ошибка telegram.token (enabled по дефолту true), got %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoad_InvalidDuration(t *testing.T) {
|
||||
t.Setenv("TG_TOKEN", "x")
|
||||
t.Setenv("TG_CHAT_ID", "x")
|
||||
|
||||
Reference in New Issue
Block a user