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 }