feat: 完善后端脚手架基础能力
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
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")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user