169 lines
4.0 KiB
Go
169 lines
4.0 KiB
Go
package yourconfig_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/kjuulh/yourconfig"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestLoad(t *testing.T) {
|
|
t.Run("no types", func(t *testing.T) {
|
|
type Config struct {
|
|
SomeItem string
|
|
someOtherItem string
|
|
someBool bool
|
|
}
|
|
|
|
val, err := yourconfig.Load[Config]()
|
|
require.NoError(t, err)
|
|
|
|
assert.Zero(t, val)
|
|
})
|
|
|
|
t.Run("default tag, nothing set, no env set", func(t *testing.T) {
|
|
type Config struct {
|
|
SomeItem string `cfg:""`
|
|
someOtherItem string
|
|
someBool bool
|
|
}
|
|
|
|
val, err := yourconfig.Load[Config]()
|
|
require.NoError(t, err)
|
|
|
|
assert.Zero(t, val)
|
|
})
|
|
|
|
t.Run("default tag (required=true), nothing set, no env set, err", func(t *testing.T) {
|
|
type Config struct {
|
|
SomeItem string `cfg:"required:true"`
|
|
someOtherItem string
|
|
someBool bool
|
|
}
|
|
|
|
val, err := yourconfig.Load[Config]()
|
|
require.Error(t, err)
|
|
require.Zero(t, val)
|
|
|
|
assert.Equal(t, "config failed: field: SomeItem (env=SOME_ITEM) is not set and is required", err.Error())
|
|
})
|
|
|
|
t.Run("default tag (required=false), nothing set, no env set no error", func(t *testing.T) {
|
|
type Config struct {
|
|
SomeItem string `cfg:"required:false"`
|
|
someOtherItem string
|
|
someBool bool
|
|
}
|
|
|
|
val, err := yourconfig.Load[Config]()
|
|
require.NoError(t, err)
|
|
|
|
assert.Zero(t, val)
|
|
})
|
|
|
|
t.Run("env tag nothing set, no env set, no error", func(t *testing.T) {
|
|
type Config struct {
|
|
SomeItem string `cfg:"SOME_ITEM"`
|
|
someOtherItem string
|
|
someBool bool
|
|
}
|
|
|
|
val, err := yourconfig.Load[Config]()
|
|
require.NoError(t, err)
|
|
|
|
assert.Zero(t, val)
|
|
})
|
|
|
|
t.Run("default tag (required=true), nothing set, no env set, err", func(t *testing.T) {
|
|
type Config struct {
|
|
SomeItem string `cfg:"SOME_ITEM,required:true"`
|
|
someOtherItem string
|
|
someBool bool
|
|
}
|
|
|
|
val, err := yourconfig.Load[Config]()
|
|
require.Error(t, err)
|
|
require.Zero(t, val)
|
|
|
|
assert.Equal(t, "config failed: field: SomeItem (env=SOME_ITEM) is not set and is required", err.Error())
|
|
})
|
|
|
|
t.Run("default tag (required), nothing set, no env set, err", func(t *testing.T) {
|
|
type Config struct {
|
|
SomeItem string `cfg:"SOME_ITEM,required"`
|
|
someOtherItem string
|
|
someBool bool
|
|
}
|
|
|
|
val, err := yourconfig.Load[Config]()
|
|
require.Error(t, err)
|
|
require.Zero(t, val)
|
|
|
|
assert.Equal(t, "config failed: field: SomeItem (env=SOME_ITEM) is not set and is required", err.Error())
|
|
})
|
|
|
|
t.Run("default tag private, trying to set, err", func(t *testing.T) {
|
|
type Config struct {
|
|
SomeItem string
|
|
someOtherItem string `cfg:"required:true"`
|
|
someBool bool
|
|
}
|
|
|
|
t.Setenv("SOME_OTHER_ITEM", "unsettable")
|
|
|
|
val, err := yourconfig.Load[Config]()
|
|
require.Error(t, err)
|
|
require.Zero(t, val)
|
|
|
|
assert.Equal(t, "config failed: field: someOtherItem is not settable", err.Error())
|
|
})
|
|
|
|
t.Run("env tag and env set, no error", func(t *testing.T) {
|
|
type Config struct {
|
|
SomeItem string `cfg:"required:true"`
|
|
someOtherItem string
|
|
someBool bool
|
|
}
|
|
|
|
t.Setenv("SOME_ITEM", "some-item")
|
|
|
|
val, err := yourconfig.Load[Config]()
|
|
require.NoError(t, err)
|
|
|
|
assert.Equal(t, "some-item", val.SomeItem)
|
|
})
|
|
|
|
t.Run("env tag (different name) and env set, no error", func(t *testing.T) {
|
|
type Config struct {
|
|
SomeItem string `cfg:"DIFFERENT_NAME,required:true"`
|
|
someOtherItem string
|
|
someBool bool
|
|
}
|
|
|
|
t.Setenv("DIFFERENT_NAME", "some-item")
|
|
|
|
val, err := yourconfig.Load[Config]()
|
|
require.NoError(t, err)
|
|
|
|
assert.Equal(t, "some-item", val.SomeItem)
|
|
})
|
|
|
|
t.Run("multiple env tag and env set, no error", func(t *testing.T) {
|
|
type Config struct {
|
|
SomeItem string `cfg:"required:true"`
|
|
SomeOtherItem string `cfg:"required:true"`
|
|
someBool bool
|
|
}
|
|
|
|
t.Setenv("SOME_ITEM", "some-item")
|
|
t.Setenv("SOME_OTHER_ITEM", "some-other-item")
|
|
|
|
val, err := yourconfig.Load[Config]()
|
|
require.NoError(t, err)
|
|
|
|
assert.Equal(t, "some-item", val.SomeItem)
|
|
assert.Equal(t, "some-other-item", val.SomeOtherItem)
|
|
})
|
|
}
|