github.com/segakazzz/buffalo@v0.16.22-0.20210119082501-1f52048d3feb/binding/binding_test.go (about)

     1  package binding
     2  
     3  import (
     4  	"net/http"
     5  	"net/url"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/require"
     9  )
    10  
    11  type blogPost struct {
    12  	Tags     []string
    13  	Dislikes int
    14  	Likes    int32
    15  }
    16  
    17  func Test_Register(t *testing.T) {
    18  	r := require.New(t)
    19  
    20  	Register("foo/bar", func(*http.Request, interface{}) error {
    21  		return nil
    22  	})
    23  
    24  	r.NotNil(BaseRequestBinder.binders["foo/bar"])
    25  
    26  	req, err := http.NewRequest("POST", "/", nil)
    27  	r.NoError(err)
    28  
    29  	req.Header.Set("Content-Type", "foo/bar")
    30  	req.Form = url.Values{
    31  		"Tags":     []string{"AAA"},
    32  		"Likes":    []string{"12"},
    33  		"Dislikes": []string{"1000"},
    34  	}
    35  
    36  	req.ParseForm()
    37  
    38  	var post blogPost
    39  	r.NoError(Exec(req, &post))
    40  
    41  	r.Equal([]string(nil), post.Tags)
    42  	r.Equal(int32(0), post.Likes)
    43  	r.Equal(0, post.Dislikes)
    44  
    45  }
    46  
    47  func Test_RegisterCustomDecoder(t *testing.T) {
    48  	r := require.New(t)
    49  
    50  	RegisterCustomDecoder(func(vals []string) (interface{}, error) {
    51  		return []string{"X"}, nil
    52  	}, []interface{}{[]string{}}, nil)
    53  
    54  	RegisterCustomDecoder(func(vals []string) (interface{}, error) {
    55  		return 0, nil
    56  	}, []interface{}{int(0)}, nil)
    57  
    58  	post := blogPost{}
    59  	req, err := http.NewRequest("POST", "/", nil)
    60  	r.NoError(err)
    61  
    62  	req.Header.Set("Content-Type", "application/html")
    63  	req.Form = url.Values{
    64  		"Tags":     []string{"AAA"},
    65  		"Likes":    []string{"12"},
    66  		"Dislikes": []string{"1000"},
    67  	}
    68  	req.ParseForm()
    69  
    70  	r.NoError(Exec(req, &post))
    71  	r.Equal([]string{"X"}, post.Tags)
    72  	r.Equal(int32(12), post.Likes)
    73  	r.Equal(0, post.Dislikes)
    74  }