Skip to content

Commit

Permalink
feat(config): Added env var helper (#14)
Browse files Browse the repository at this point in the history
  • Loading branch information
ekkinox authored Jan 11, 2024
1 parent f598602 commit 1a3743b
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 22 deletions.
9 changes: 5 additions & 4 deletions config/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -145,10 +145,11 @@ func main() {
cfg, _ := config.NewDefaultConfigFactory().Create()
// helpers
fmt.Printf("name: %s", cfg.AppName()) // name: app
fmt.Printf("env: %s", cfg.AppEnv()) // env: test
fmt.Printf("version: %s", cfg.AppVersion()) // version: 0.1.0
fmt.Printf("debug: %v", cfg.AppDebug()) // debug: true
fmt.Printf("var: %s", cfg.GetEnvVar("APP_ENV")) // var: test
fmt.Printf("name: %s", cfg.AppName()) // name: app
fmt.Printf("env: %s", cfg.AppEnv()) // env: test
fmt.Printf("version: %s", cfg.AppVersion()) // version: 0.1.0
fmt.Printf("debug: %v", cfg.AppDebug()) // debug: true
// others
fmt.Printf("string_value: %s", cfg.GetString("config.values.string_value")) // string_value: test
Expand Down
6 changes: 6 additions & 0 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package config

import (
"github.com/spf13/viper"
"os"
)

const (
Expand All @@ -20,6 +21,11 @@ type Config struct {
*viper.Viper
}

// GetEnvVar returns the value of an env var.
func (c *Config) GetEnvVar(envVar string) string {
return os.Getenv(envVar)
}

// AppName returns the configured application name (from config field app.name or env var APP_NAME).
func (c *Config) AppName() string {
return c.GetString("app.name")
Expand Down
45 changes: 27 additions & 18 deletions config/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,15 @@ import (
"github.com/stretchr/testify/assert"
)

func TestGetEnvVar(t *testing.T) {
cfg, err := createTestConfig()
assert.NoError(t, err)

t.Setenv("foo", "bar")

assert.Equal(t, "bar", cfg.GetEnvVar("foo"))
}

func TestAppNameFromDefaultConfig(t *testing.T) {
cfg, err := createTestConfig()

Expand All @@ -19,7 +28,7 @@ func TestAppNameOverrideFromTestEnvConfig(t *testing.T) {

cfg, err := createTestConfig()

assert.Nil(t, err)
assert.NoError(t, err)
assert.Equal(t, "test-app", cfg.AppName())
}

Expand All @@ -28,7 +37,7 @@ func TestAppNameOverrideFromCustomEnvConfig(t *testing.T) {

cfg, err := createTestConfig()

assert.Nil(t, err)
assert.NoError(t, err)
assert.Equal(t, "custom-app", cfg.AppName())
}

Expand All @@ -53,7 +62,7 @@ func TestAppNameOverrideFromEnvVar(t *testing.T) {
func TestAppEnvFromConfig(t *testing.T) {
cfg, err := createTestConfig()

assert.Nil(t, err)
assert.NoError(t, err)
assert.Equal(t, config.AppEnvDev, cfg.AppEnv())
assert.False(t, cfg.IsProdEnv())
assert.True(t, cfg.IsDevEnv())
Expand All @@ -65,7 +74,7 @@ func TestAppEnvOverrideFromTestEnvConfig(t *testing.T) {

cfg, err := createTestConfig()

assert.Nil(t, err)
assert.NoError(t, err)
assert.Equal(t, config.AppEnvTest, cfg.AppEnv())
assert.False(t, cfg.IsProdEnv())
assert.False(t, cfg.IsDevEnv())
Expand All @@ -77,7 +86,7 @@ func TestAppEnvOverrideFromCustomEnvConfig(t *testing.T) {

cfg, err := createTestConfig()

assert.Nil(t, err)
assert.NoError(t, err)
assert.Equal(t, "custom", cfg.AppEnv())
assert.False(t, cfg.IsProdEnv())
assert.False(t, cfg.IsDevEnv())
Expand All @@ -87,7 +96,7 @@ func TestAppEnvOverrideFromCustomEnvConfig(t *testing.T) {
func TestAppDebugFromConfig(t *testing.T) {
cfg, err := createTestConfig()

assert.Nil(t, err)
assert.NoError(t, err)
assert.False(t, cfg.AppDebug())
}

Expand All @@ -96,7 +105,7 @@ func TestAppDebugOverrideFromTestEnvConfig(t *testing.T) {

cfg, err := createTestConfig()

assert.Nil(t, err)
assert.NoError(t, err)
assert.True(t, cfg.AppDebug())
}

Expand All @@ -105,14 +114,14 @@ func TestAppDebugOverrideFromEnvVar(t *testing.T) {

cfg, err := createTestConfig()

assert.Nil(t, err)
assert.NoError(t, err)
assert.True(t, cfg.AppDebug())
}

func TestAppVersionFromConfig(t *testing.T) {
cfg, err := createTestConfig()

assert.Nil(t, err)
assert.NoError(t, err)
assert.Equal(t, "0.1.0", cfg.AppVersion())
}

Expand All @@ -121,7 +130,7 @@ func TestAppVersionOverrideFromTestEnvConfig(t *testing.T) {

cfg, err := createTestConfig()

assert.Nil(t, err)
assert.NoError(t, err)
assert.Equal(t, "0.1.0", cfg.AppVersion())
}

Expand All @@ -130,14 +139,14 @@ func TestAppVersionOverrideFromEnvVar(t *testing.T) {

cfg, err := createTestConfig()

assert.Nil(t, err)
assert.NoError(t, err)
assert.Equal(t, "0.1.2", cfg.AppVersion())
}

func TestValuesFromConfig(t *testing.T) {
cfg, err := createTestConfig()

assert.Nil(t, err)
assert.NoError(t, err)
assert.Equal(t, "default", cfg.GetString("config.values.string_value"))
assert.Equal(t, 0, cfg.GetInt("config.values.int_value"))
}
Expand All @@ -147,7 +156,7 @@ func TestValuesOverrideFromTestEnvConfig(t *testing.T) {

cfg, err := createTestConfig()

assert.Nil(t, err)
assert.NoError(t, err)
assert.Equal(t, "test", cfg.GetString("config.values.string_value"))
assert.Equal(t, 0, cfg.GetInt("config.values.int_value"))
}
Expand All @@ -157,36 +166,36 @@ func TestValuesOverrideFromCustomEnvConfig(t *testing.T) {

cfg, err := createTestConfig()

assert.Nil(t, err)
assert.NoError(t, err)
assert.Equal(t, "custom", cfg.GetString("config.values.string_value"))
assert.Equal(t, 0, cfg.GetInt("config.values.int_value"))
}

func TestValuesWithEnvVarsPlaceholder(t *testing.T) {
cfg, err := createTestConfig()

assert.Nil(t, err)
assert.NoError(t, err)
assert.Equal(t, "foo--baz", cfg.GetString("config.placeholder"))

t.Setenv("BAR", "bar")

cfg, err = createTestConfig()

assert.Nil(t, err)
assert.NoError(t, err)
assert.Equal(t, "foo-bar-baz", cfg.GetString("config.placeholder"))
}

func TestValuesWithEnvVarsSubstitution(t *testing.T) {
cfg, err := createTestConfig()

assert.Nil(t, err)
assert.NoError(t, err)
assert.Equal(t, "foo", cfg.GetString("config.substitution"))

t.Setenv("CONFIG_SUBSTITUTION", "bar")

cfg, err = createTestConfig()

assert.Nil(t, err)
assert.NoError(t, err)
assert.Equal(t, "bar", cfg.GetString("config.substitution"))
}

Expand Down

0 comments on commit 1a3743b

Please sign in to comment.