fix: add motivation config precedence regression test
Codify the article's nested Config scenario to verify YAML base values are overridden by dotenv and finally by process environment variables. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,58 @@
|
|||||||
|
package config_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/eslider/go-config/env"
|
||||||
|
"github.com/eslider/go-config/yaml"
|
||||||
|
)
|
||||||
|
|
||||||
|
type motivationConfig struct {
|
||||||
|
HTTP struct {
|
||||||
|
Listen string `mapstructure:"listen"`
|
||||||
|
TLS bool `mapstructure:"tls"`
|
||||||
|
} `mapstructure:"http"`
|
||||||
|
Database struct {
|
||||||
|
URL string `mapstructure:"url"`
|
||||||
|
} `mapstructure:"database"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMotivationConfig_YAMLThenEnvThenProcessEnv(t *testing.T) {
|
||||||
|
t.Setenv("HTTP_LISTEN", ":10000")
|
||||||
|
t.Setenv("HTTP_TLS", "true")
|
||||||
|
t.Setenv("DATABASE_URL", "postgres://process-env")
|
||||||
|
|
||||||
|
yamlCfg := yaml.New(yaml.WithBytes([]byte(`
|
||||||
|
http:
|
||||||
|
listen: ":8080"
|
||||||
|
tls: false
|
||||||
|
database:
|
||||||
|
url: "postgres://yaml"
|
||||||
|
`)))
|
||||||
|
|
||||||
|
envCfg := env.New(
|
||||||
|
env.WithBytes([]byte(`
|
||||||
|
HTTP_LISTEN=:9090
|
||||||
|
DATABASE_URL=postgres://dotenv
|
||||||
|
`)),
|
||||||
|
env.WithCurrentEnvironment(),
|
||||||
|
)
|
||||||
|
|
||||||
|
var cfg motivationConfig
|
||||||
|
if err := yamlCfg.Unmarshal(&cfg); err != nil {
|
||||||
|
t.Fatalf("yaml unmarshal: %v", err)
|
||||||
|
}
|
||||||
|
if err := envCfg.Unmarshal(&cfg); err != nil {
|
||||||
|
t.Fatalf("env unmarshal: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if cfg.HTTP.Listen != ":10000" {
|
||||||
|
t.Fatalf("HTTP.Listen=%q", cfg.HTTP.Listen)
|
||||||
|
}
|
||||||
|
if !cfg.HTTP.TLS {
|
||||||
|
t.Fatalf("HTTP.TLS=%v", cfg.HTTP.TLS)
|
||||||
|
}
|
||||||
|
if cfg.Database.URL != "postgres://process-env" {
|
||||||
|
t.Fatalf("Database.URL=%q", cfg.Database.URL)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user