package env import ( "flag" "fmt" "os" "testing" ) func TestDefaultString(t *testing.T) { v := defaultString("a", "test") if v != "test" { t.Fatal("v must be test") } if err := os.Setenv("a", "test1"); err != nil { t.Fatal(err) } v = defaultString("a", "test") if v != "test1" { t.Fatal("v must be test1") } } func TestEnv(t *testing.T) { tests := []struct { flag string env string def string val *string }{ { "region", "REGION", _region, &Region, }, { "zone", "ZONE", _zone, &Zone, }, { "deploy.env", "DEPLOY_ENV", _deployEnv, &DeployEnv, }, { "appid", "APP_ID", "", &AppID, }, { "deploy.color", "DEPLOY_COLOR", "", &Color, }, } for _, test := range tests { // flag set value t.Run(fmt.Sprintf("%s: flag set", test.env), func(t *testing.T) { fs := flag.NewFlagSet("", flag.ContinueOnError) addFlag(fs) err := fs.Parse([]string{fmt.Sprintf("-%s=%s", test.flag, "test")}) if err != nil { t.Fatal(err) } if *test.val != "test" { t.Fatal("val must be test") } }) // flag not set, env set t.Run(fmt.Sprintf("%s: flag not set, env set", test.env), func(t *testing.T) { *test.val = "" os.Setenv(test.env, "test2") fs := flag.NewFlagSet("", flag.ContinueOnError) addFlag(fs) err := fs.Parse([]string{}) if err != nil { t.Fatal(err) } if *test.val != "test2" { t.Fatal("val must be test") } }) // flag not set, env not set t.Run(fmt.Sprintf("%s: flag not set, env not set", test.env), func(t *testing.T) { *test.val = "" os.Setenv(test.env, "") fs := flag.NewFlagSet("", flag.ContinueOnError) addFlag(fs) err := fs.Parse([]string{}) if err != nil { t.Fatal(err) } if *test.val != test.def { t.Fatal("val must be test") } }) } }