Files
zarinpal-analytics-backend/internal/config/config_test.go

59 lines
2.0 KiB
Go

package config
import "testing"
func TestLoadRequiresDatabaseURL(t *testing.T) {
t.Setenv("DATABASE_URL", "")
if _, err := Load(); err == nil {
t.Fatal("Load() error = nil, want required database url error")
}
}
func TestValidateAPIRequiresLongSecret(t *testing.T) {
t.Parallel()
cfg := Config{SessionSecret: "short", CursorSecret: "cursor-secret-that-is-at-least-32-bytes"}
if err := cfg.ValidateAPI(); err == nil {
t.Fatal("ValidateAPI() error = nil, want secret length error")
}
}
func TestValidateAPIRequiresLongCursorSecret(t *testing.T) {
t.Parallel()
cfg := Config{SessionSecret: "session-secret-that-is-at-least-32-bytes", CursorSecret: "short"}
if err := cfg.ValidateAPI(); err == nil {
t.Fatal("ValidateAPI() error = nil, want cursor secret length error")
}
}
func TestValidateAPIRequiresIndependentCursorSecret(t *testing.T) {
t.Parallel()
secret := "shared-secret-that-is-at-least-32-characters"
cfg := Config{SessionSecret: secret, CursorSecret: secret}
if err := cfg.ValidateAPI(); err == nil {
t.Fatal("ValidateAPI() error = nil, want independent secrets error")
}
}
func TestValidateAPIRequiresGrowthBudgetsInProduction(t *testing.T) {
t.Parallel()
cfg := Config{SessionSecret: "session-secret-that-is-at-least-32-bytes", CursorSecret: "cursor-secret-that-is-at-least-32-bytes", AppEnv: "production", AIGrowthEnabled: true, AvalAIAPIKey: "key", AvalAIModel: "model", AIMaxConcurrent: 4, AICreatePerMinute: 10, AIUncachedScopesPerDay: 5}
if err := cfg.ValidateAPI(); err == nil {
t.Fatal("ValidateAPI() error = nil, want AI budget error")
}
cfg.AIDailyRequestBudget, cfg.AIDailyTokenBudget = 10, 10_000
if err := cfg.ValidateAPI(); err != nil {
t.Fatalf("ValidateAPI() error = %v", err)
}
}
func TestLoadGrowthDefaultsAreCostSafe(t *testing.T) {
t.Setenv("DATABASE_URL", "postgresql://example")
cfg, err := Load()
if err != nil {
t.Fatal(err)
}
if cfg.AIGrowthEnabled || cfg.AIDailyRequestBudget != 0 || cfg.AIDailyTokenBudget != 0 || cfg.AIMaxConcurrent != 4 {
t.Fatalf("unsafe AI defaults: %+v", cfg)
}
}