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

     1  package transform
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  
     8  	"github.com/johnnyeven/libtools/courier/status_error"
     9  )
    10  
    11  type Anonymous string
    12  
    13  type SomeData struct {
    14  	String  string  `json:"string" validate:"@string[3,]"`
    15  	Pointer *string `json:"pointer" validate:"@string[3,]"`
    16  }
    17  
    18  type SomeReq struct {
    19  	a string
    20  	Anonymous
    21  	P       P        `name:"p" in:"query"`
    22  	Query   string   `name:"query" in:"query" validate:"@string[3,]"`
    23  	Pointer *string  `name:"pointer" in:"query" validate:"@string[3,]"`
    24  	Bytes   []byte   `name:"bytes" in:"query"`
    25  	Data    SomeData `in:"body"`
    26  }
    27  
    28  func (v SomeReq) ValidateQuery() string {
    29  	return "hook failed"
    30  }
    31  
    32  func TestParameterGroupFromValue(t *testing.T) {
    33  	tt := assert.New(t)
    34  
    35  	pg := ParameterGroupFromValue(&SomeReq{})
    36  
    37  	tt.Len(pg.Parameters.List(), 4)
    38  
    39  	valid, errFields := pg.ValidateNoBodyByHook()
    40  	tt.False(valid)
    41  	tt.Equal(status_error.ErrorFields{
    42  		status_error.NewErrorField("query", "query", "hook failed"),
    43  	}, errFields)
    44  }
    45  
    46  type SomeFormData struct {
    47  	a string
    48  	Anonymous
    49  	String  string  `name:"string" validate:"@string[3,]"`
    50  	Pointer *string `name:"pointer" validate:"@string[3,]"`
    51  }
    52  
    53  type SomeReqWithFormData struct {
    54  	S        string       `in:"formData" name:"s" validate:"@string[3,]"`
    55  	FormData SomeFormData `in:"formData"`
    56  }
    57  
    58  func TestParameterGroupFromWithFormData(t *testing.T) {
    59  	tt := assert.New(t)
    60  
    61  	pg := ParameterGroupFromValue(&SomeReqWithFormData{})
    62  
    63  	tt.Len(pg.Parameters.List(), 0)
    64  	tt.Len(pg.FormData.List(), 3)
    65  }