Skip to content

Commit

Permalink
feat: add test case for default value
Browse files Browse the repository at this point in the history
  • Loading branch information
sysulq committed Nov 4, 2024
1 parent affcbe0 commit 311a48a
Show file tree
Hide file tree
Showing 9 changed files with 191 additions and 17 deletions.
23 changes: 11 additions & 12 deletions registry.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,12 +93,7 @@ func (k *Kod) get(ctx context.Context, reg *Registration) (any, error) {
// Fill global config.
if c, ok := obj.(interface{ getGlobalConfig() any }); ok {
if cfg := c.getGlobalConfig(); cfg != nil {
err := defaults.Set(cfg)
if err != nil {
return nil, err
}

err = k.viper.Unmarshal(cfg)
err := k.setConfig("", cfg)
if err != nil {
return nil, err
}
Expand All @@ -108,12 +103,7 @@ func (k *Kod) get(ctx context.Context, reg *Registration) (any, error) {
// Fill config.
if c, ok := obj.(interface{ getConfig() any }); ok {
if cfg := c.getConfig(); cfg != nil {
err := defaults.Set(cfg)
if err != nil {
return nil, err
}

err = k.viper.UnmarshalKey(reg.Name, cfg)
err := k.setConfig(reg.Name, cfg)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -155,6 +145,15 @@ func (k *Kod) get(ctx context.Context, reg *Registration) (any, error) {
return obj, nil
}

func (k *Kod) setConfig(name string, cfg any) error {
err := defaults.Set(cfg)
if err != nil {
return err
}

return k.viper.UnmarshalKey(name, cfg)
}

func fillLog(name string, obj any, log *slog.Logger) error {
x, ok := obj.(interface{ setLogger(string, *slog.Logger) })
if !ok {
Expand Down
6 changes: 3 additions & 3 deletions tests/case1/case.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@ import (
)

type test1Config struct {
A string
A string `default:"a"`
Redis struct {
Addr string
Timeout time.Duration
Addr string `default:"localhost:6379"`
Timeout time.Duration `default:"1s"`
}
}

Expand Down
19 changes: 19 additions & 0 deletions tests/case1/case_default_config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package case1

import (
"github.com/go-kod/kod"
)

type errorConfig struct {
A int `default:"sss"`
}

type test1ComponentDefaultErrorImpl struct {
kod.Implements[test1ComponentDefaultError]
kod.WithConfig[*errorConfig]
}

type test1ComponentGlobalDefaultErrorImpl struct {
kod.Implements[test1ComponentGlobalDefaultError]
kod.WithGlobalConfig[*errorConfig]
}
54 changes: 54 additions & 0 deletions tests/case1/case_default_config_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package case1

import (
"context"
"testing"

"github.com/go-kod/kod"
"github.com/go-kod/kod/internal/mock"
"github.com/stretchr/testify/assert"
)

func TestDefaultConfig(t *testing.T) {
log, observer := kod.NewTestLogger()

kod.RunTest(t, func(ctx context.Context, k *test1Component) {
observer.Clean()

k.L(ctx).Info("hello", "config", k.Config())

assert.Equal(t, 1, observer.Len())
assert.Equal(t, "{\"component\":\"github.com/go-kod/kod/tests/case1/Test1Component\",\"config\":{\"A\":\"B\",\"Redis\":{\"Addr\":\"localhost:6379\",\"Timeout\":2000000000}},\"level\":\"INFO\",\"msg\":\"hello\"}\n",
observer.RemoveKeys("time").String())
}, kod.WithLogger(log))
}

func TestDefaultConfig2(t *testing.T) {
log, observer := kod.NewTestLogger()

kod.RunTest(t, func(ctx context.Context, k *test1Component) {
observer.Clean()

k.L(ctx).Info("hello", "config", k.Config())

assert.Equal(t, 1, observer.Len())
assert.Equal(t, "{\"component\":\"github.com/go-kod/kod/tests/case1/Test1Component\",\"config\":{\"A\":\"B2\",\"Redis\":{\"Addr\":\"localhost:6379\",\"Timeout\":1000000000}},\"level\":\"INFO\",\"msg\":\"hello\"}\n",
observer.RemoveKeys("time").String())
}, kod.WithLogger(log), kod.WithConfigFile("./kod2.toml"))
}

func TestDefaultConfigError(t *testing.T) {
mock.ExpectFailure(t, func(tb testing.TB) {
kod.RunTest(tb, func(ctx context.Context, k *test1ComponentDefaultErrorImpl) {
k.L(ctx).Info("hello", "config", k.Config())
}, kod.WithConfigFile("./kod2.toml"))
})
}

func TestDefaultGlobalConfigError(t *testing.T) {
mock.ExpectFailure(t, func(tb testing.TB) {
kod.RunTest(tb, func(ctx context.Context, k *test1ComponentGlobalDefaultErrorImpl) {
k.L(ctx).Info("hello", "config", k.Config())
}, kod.WithConfigFile("./kod2.toml"))
})
}
2 changes: 1 addition & 1 deletion tests/case1/case_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ func TestConfigNotFound(t *testing.T) {
kod.RunTest(t, func(ctx context.Context, k *test1Component) {
_, err := k.Foo(ctx, &FooReq{})
fmt.Println(err)
require.Equal(t, "test1:", err.Error())
require.Equal(t, "test1:a", err.Error())
}, kod.WithConfigFile("kod-notfound.toml"))
}

Expand Down
2 changes: 1 addition & 1 deletion tests/case1/kod2.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ debug = true

["github.com/go-kod/kod/tests/case1/Test1Component"]
A="B2"
redis = { addr = "localhost:6379", timeout = "2s" }
redis = { addr = "localhost:6379" }
44 changes: 44 additions & 0 deletions tests/case1/kod_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions tests/case1/kod_gen_interface.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

48 changes: 48 additions & 0 deletions tests/case1/kod_gen_mock.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 311a48a

Please sign in to comment.