github.com/theliebeskind/genfig@v0.1.5-alpha/writers/schema_test.go (about) 1 package writers_test 2 3 import ( 4 "strings" 5 "testing" 6 7 "github.com/theliebeskind/genfig/writers" 8 9 "github.com/stretchr/testify/assert" 10 "github.com/stretchr/testify/require" 11 "github.com/theliebeskind/genfig/models" 12 "github.com/theliebeskind/genfig/util" 13 ) 14 15 func Test_WriteSchema(t *testing.T) { 16 tests := []struct { 17 name string 18 config map[string]interface{} 19 contains []string 20 wantSchema models.Schema 21 wantErr bool 22 }{ 23 {"empty", map[string]interface{}{}, []string{}, models.Schema{}, false}, 24 {"simple string", map[string]interface{}{"a": "b"}, []string{"A string"}, models.Schema{}, false}, 25 {"simple int", map[string]interface{}{"a": 1}, []string{"A int64"}, models.Schema{}, false}, 26 {"simple bool", map[string]interface{}{"a": true}, []string{"A bool"}, models.Schema{}, false}, 27 {"int array", map[string]interface{}{"a": []int{1, 2, 3}}, []string{"A []int"}, models.Schema{}, false}, 28 {"empty interface array", map[string]interface{}{"a": []interface{}{}}, []string{"A []interface {}"}, models.Schema{}, false}, 29 {"mixed interface array", map[string]interface{}{"a": []interface{}{1, ""}}, []string{"A []interface {}"}, models.Schema{}, false}, 30 {"int interface array", map[string]interface{}{"a": []interface{}{1, 2}}, []string{"A []int64"}, models.Schema{}, false}, 31 {"string interface array", map[string]interface{}{"a": []interface{}{"a", "b"}}, []string{"A []string"}, models.Schema{}, false}, 32 {"map", map[string]interface{}{"a": map[string]interface{}{"b": 1}}, []string{"A struct {", "B int"}, models.Schema{}, false}, 33 {"iface key map", map[string]interface{}{"a": map[interface{}]interface{}{"b": 1}}, []string{"A struct {", "B int"}, models.Schema{}, false}, 34 {"map of map", map[string]interface{}{"a": map[string]interface{}{"b": map[string]interface{}{"c": 1}}}, []string{"A struct {", "B struct {", "C int"}, models.Schema{}, false}, 35 } 36 for _, tt := range tests { 37 t.Run(tt.name, func(t *testing.T) { 38 s := &strings.Builder{} 39 _, err := writers.WriteAndReturnSchema(s, tt.config) 40 if tt.wantErr { 41 require.Error(t, err) 42 return 43 } 44 require.NoError(t, err) 45 got := s.String() 46 for _, c := range tt.contains { 47 assert.Contains(t, got, c) 48 } 49 }) 50 } 51 } 52 53 func Benchmark_WriteSchemaType(b *testing.B) { 54 w := util.NoopWriter{} 55 s := models.SchemaMap{} 56 m := map[string]interface{}{"a": map[interface{}]interface{}{"b0": 1, "b": map[string]interface{}{"c": []interface{}{1}, "d": "s", "e": 1}}} 57 for n := 0; n < b.N; n++ { 58 writers.WriteSchemaType(w, "Config", m, s, 0) 59 } 60 }