From 27673a23e9321ce0504bf633700a0bc15280f9b8 Mon Sep 17 00:00:00 2001 From: Christian Schwarz Date: Mon, 20 Jul 2020 00:00:31 +0200 Subject: [PATCH] config: add test for fromdefaults behavior --- config/config_dep_test.go | 90 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 config/config_dep_test.go diff --git a/config/config_dep_test.go b/config/config_dep_test.go new file mode 100644 index 0000000..4026721 --- /dev/null +++ b/config/config_dep_test.go @@ -0,0 +1,90 @@ +package config + +import ( + "fmt" + "testing" + + "github.com/stretchr/testify/require" + "github.com/zrepl/yaml-config" +) + +type A struct { + B *B `yaml:"b,optional,fromdefaults"` + A1 string `yaml:"a1,optional"` +} + +type B struct { + C *C `yaml:"c,optional,fromdefaults"` + D string `yaml:"d,default=ddd"` + E string `yaml:"e,optional"` +} + +type C struct { + Q string `yaml:"q,optional"` + R string `yaml:"r,default=r"` +} + +func TestDepFromDefaults(t *testing.T) { + + type testcase struct { + name string + yaml string + expect *A + } + + tcs := []testcase{ + { + name: "empty", + yaml: `{}`, + expect: &A{ + B: &B{ + C: &C{ + R: "r", + }, + D: "ddd", + }, + }, + }, + { + name: "a1 set", + yaml: `{"a1":"blah"}`, + expect: &A{ + A1: "blah", + B: &B{ + C: &C{ + R: "r", + }, + D: "ddd", + }, + }, + }, + { + name: "D set", + yaml: ` +b: + d: 4d +`, + expect: &A{ + B: &B{ + D: "4d", + C: &C{ + R: "r", + }, + }, + }, + }, + } + + for tci := range tcs { + t.Run(fmt.Sprintf("%d-%s", tci, tcs[tci].name), func(t *testing.T) { + tc := tcs[tci] + + var a A + err := yaml.UnmarshalStrict([]byte(tc.yaml), &a) + require.NoError(t, err) + + require.Equal(t, tc.expect, &a) + }) + } + +}