github.com/johnnyeven/libtools@v0.0.0-20191126065708-61829c1adf46/courier/transport_http/transform/parameter_map_test.go (about)

     1  package transform
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  
     9  	"github.com/johnnyeven/libtools/reflectx"
    10  )
    11  
    12  func TestParameterMap(t *testing.T) {
    13  	tt := assert.New(t)
    14  
    15  	pm := ParameterMap{}
    16  
    17  	type SomeReq struct {
    18  		Query   string  `name:"query" in:"query" validate:"@string[3,]"`
    19  		Pointer *string `name:"pointer" in:"query" validate:"@string[3,]"`
    20  	}
    21  
    22  	req := &SomeReq{}
    23  	tpe := reflectx.IndirectType(reflect.TypeOf(req))
    24  	rv := reflect.Indirect(reflect.ValueOf(req))
    25  
    26  	for i := 0; i < tpe.NumField(); i++ {
    27  		field := tpe.Field(i)
    28  		fieldValue := rv.Field(i)
    29  
    30  		tagIn, _, tagInFlags := GetTagIn(&field)
    31  		pm.Add(NewParameterMeta(&field, fieldValue, tagIn, tagInFlags))
    32  	}
    33  
    34  	tt.Equal(2, len(pm.List()))
    35  	tt.Equal(2, pm.Len())
    36  
    37  	{
    38  		p, ok := pm.Get("Query")
    39  		tt.True(ok)
    40  		tt.Equal("query", p.In)
    41  	}
    42  }