92 рядки
2.0 KiB
Go
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")
|
|
}
|
|
})
|
|
}
|