Файли
2026-11-07 21:15:39 +00:00

92 рядки
2.0 KiB
Go

package config
import (
"strings"
"testing"
)
func TestValidate(t *testing.T) {
tests := []struct {
name string
cfg Config
wantErr string
}{
{
name: "valid",
cfg: Config{TelegramBotToken: "token", BotOwnerID: 42, DatabaseURL: "postgres://db"},
},
{
name: "missing token",
cfg: Config{BotOwnerID: 42, DatabaseURL: "postgres://db"},
wantErr: "TELEGRAM_BOT_TOKEN",
},
{
name: "missing database url",
cfg: Config{TelegramBotToken: "token", BotOwnerID: 42},
wantErr: "DATABASE_URL",
},
{
name: "missing bot owner",
cfg: Config{TelegramBotToken: "token", DatabaseURL: "postgres://db"},
wantErr: "BOT_OWNER_ID",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := tt.cfg.validate()
if tt.wantErr == "" {
if err != nil {
t.Fatalf("validate() error = %v, want nil", err)
}
return
}
if err == nil || !strings.Contains(err.Error(), tt.wantErr) {
t.Fatalf("validate() error = %v, want containing %q", err, tt.wantErr)
}
})
}
}
func TestLoadAutoMigrate(t *testing.T) {
t.Chdir(t.TempDir())
t.Setenv("TELEGRAM_BOT_TOKEN", "token")
t.Setenv("BOT_OWNER_ID", "42")
t.Setenv("DATABASE_URL", "postgres://db")
t.Run("default true", func(t *testing.T) {
cfg, err := Load()
if err != nil {
t.Fatalf("Load() error = %v", err)
}
if !cfg.AutoMigrate {
t.Fatal("AutoMigrate = false, want true")
}
})
t.Run("explicit false", func(t *testing.T) {
t.Setenv("AUTO_MIGRATE", "false")
cfg, err := Load()
if err != nil {
t.Fatalf("Load() error = %v", err)
}
if cfg.AutoMigrate {
t.Fatal("AutoMigrate = true, want false")
}
})
t.Run("invalid", func(t *testing.T) {
t.Setenv("AUTO_MIGRATE", "sometimes")
if _, err := Load(); err == nil {
t.Fatal("Load() error = nil, want error")
}
})
t.Run("invalid bot owner", func(t *testing.T) {
t.Setenv("BOT_OWNER_ID", "not-a-number")
if _, err := Load(); err == nil {
t.Fatal("Load() error = nil, want error")
}
})
}