github.com/coryb/figtree@v1.0.2-0.20230811213450-d30f28e27093/marshal_test.go (about) 1 package figtree 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "os" 7 "testing" 8 9 yaml "gopkg.in/yaml.v3" 10 11 "github.com/stretchr/testify/assert" 12 "github.com/stretchr/testify/require" 13 ) 14 15 func yamlMarshal(opts interface{}) (string, error) { 16 buf := &bytes.Buffer{} 17 enc := yaml.NewEncoder(buf) 18 enc.SetIndent(2) 19 err := enc.Encode(opts) 20 return buf.String(), err 21 } 22 23 func TestOptionsMarshalYAML(t *testing.T) { 24 opts := TestOptions{} 25 require.NoError(t, os.Chdir("d1/d2/d3")) 26 t.Cleanup(func() { 27 _ = os.Chdir("../../..") 28 }) 29 fig := newFigTreeFromEnv() 30 err := fig.LoadAllConfigs("figtree.yml", &opts) 31 assert.NoError(t, err) 32 33 StringifyValue = true 34 defer func() { 35 StringifyValue = false 36 }() 37 got, err := yamlMarshal(&opts) 38 assert.NoError(t, err) 39 40 expected := `str1: d3str1val1 41 arr1: 42 - d3arr1val1 43 - d3arr1val2 44 - dupval 45 - "211" 46 - d2arr1val2 47 - d1arr1val1 48 - d1arr1val2 49 map1: 50 dup: d3dupval 51 key0: d1map1val0 52 key1: "211" 53 key2: d3map1val2 54 key3: d3map1val3 55 int1: 333 56 float1: 3.33 57 bool1: true 58 ` 59 assert.Equal(t, expected, got) 60 } 61 62 func TestOptionsMarshalJSON(t *testing.T) { 63 opts := TestOptions{} 64 require.NoError(t, os.Chdir("d1/d2/d3")) 65 t.Cleanup(func() { 66 _ = os.Chdir("../../..") 67 }) 68 fig := newFigTreeFromEnv() 69 err := fig.LoadAllConfigs("figtree.yml", &opts) 70 assert.NoError(t, err) 71 72 StringifyValue = true 73 defer func() { 74 StringifyValue = false 75 }() 76 got, err := json.Marshal(&opts) 77 assert.NoError(t, err) 78 // note that "leave-empty" is serialized even though "omitempty" tag is set 79 // this is because json always assumes structs are not empty and there 80 // is no interface to override this behavior 81 expected := `{"str1":"d3str1val1","leave-empty":"","arr1":["d3arr1val1","d3arr1val2","dupval","211","d2arr1val2","d1arr1val1","d1arr1val2"],"map1":{"dup":"d3dupval","key0":"d1map1val0","key1":"211","key2":"d3map1val2","key3":"d3map1val3"},"int1":333,"float1":3.33,"bool1":true}` 82 assert.Equal(t, expected, string(got)) 83 }