Files
yourconfig/config_test.go
kjuulh 5682503665
All checks were successful
continuous-integration/drone/push Build is passing
feat: rename tag
2025-07-22 08:36:00 +02:00

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)
})
}