package config import ( "os" "path/filepath" "testing" ) func TestLoadFromEnvironmentOverridesYAML(t *testing.T) { path := filepath.Join(t.TempDir(), "app.yaml") if err := os.WriteFile(path, []byte("database:\n driver: postgres\nredis:\n enabled: false\n"), 0600); err != nil { t.Fatal(err) } t.Setenv("DATABASE_DRIVER", "mysql") t.Setenv("DATABASE_PORT", "3307") t.Setenv("REDIS_ENABLED", "true") t.Setenv("JWT_ACCESS_EXPIRE_MINUTES", "30") cfg, err := LoadFrom(path) if err != nil { t.Fatalf("LoadFrom() error = %v", err) } if cfg.Database.Driver != "mysql" || cfg.Database.Port != 3307 { t.Fatalf("database override failed: %+v", cfg.Database) } if !cfg.Redis.Enabled || cfg.JWT.AccessExpireMinutes != 30 { t.Fatalf("environment override failed: redis=%v jwt=%+v", cfg.Redis.Enabled, cfg.JWT) } } func TestSQLiteDefaults(t *testing.T) { path := filepath.Join(t.TempDir(), "app.yaml") if err := os.WriteFile(path, []byte("database:\n driver: sqlite\n"), 0600); err != nil { t.Fatal(err) } cfg, err := LoadFrom(path) if err != nil { t.Fatal(err) } if cfg.Database.SQLitePath == "" || cfg.Database.MaxOpenConns != 1 { t.Fatalf("unexpected SQLite defaults: %+v", cfg.Database) } } func TestProductionRejectsDefaultJWTSecret(t *testing.T) { path := filepath.Join(t.TempDir(), "app.yaml") if err := os.WriteFile(path, []byte("app:\n environment: production\ndatabase:\n driver: sqlite\n"), 0600); err != nil { t.Fatal(err) } if _, err := LoadFrom(path); err == nil { t.Fatal("production config accepted the default JWT secret") } }