Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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