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  }