github.com/segakazzz/buffalo@v0.16.22-0.20210119082501-1f52048d3feb/binding/request_binder_test.go (about) 1 package binding 2 3 import ( 4 "errors" 5 "net/http" 6 "strings" 7 "testing" 8 9 "github.com/stretchr/testify/require" 10 ) 11 12 func Test_RequestBinder_Exec(t *testing.T) { 13 r := require.New(t) 14 15 var used bool 16 BaseRequestBinder.Register("paganotoni/test", func(*http.Request, interface{}) error { 17 used = true 18 return nil 19 }) 20 21 req, err := http.NewRequest("GET", "/home", strings.NewReader("")) 22 req.Header.Add("content-type", "paganotoni/test") 23 r.NoError(err) 24 25 data := &struct{}{} 26 r.NoError(BaseRequestBinder.Exec(req, data)) 27 r.True(used) 28 } 29 30 func Test_RequestBinder_Exec_BlankContentType(t *testing.T) { 31 r := require.New(t) 32 33 req, err := http.NewRequest("GET", "/home", strings.NewReader("")) 34 r.NoError(err) 35 36 data := &struct{}{} 37 r.Equal(BaseRequestBinder.Exec(req, data), errBlankContentType) 38 } 39 40 func Test_RequestBinder_Exec_Bindable(t *testing.T) { 41 r := require.New(t) 42 43 BaseRequestBinder.Register("paganotoni/orbison", func(req *http.Request, val interface{}) error { 44 switch v := val.(type) { 45 case orbison: 46 v.bound = false 47 } 48 49 return errors.New("this should not be called") 50 }) 51 52 req, err := http.NewRequest("GET", "/home", strings.NewReader("")) 53 req.Header.Add("content-type", "paganotoni/orbison") 54 r.NoError(err) 55 56 data := &orbison{} 57 r.NoError(BaseRequestBinder.Exec(req, data)) 58 r.True(data.bound) 59 } 60 61 func Test_RequestBinder_Exec_NoBinder(t *testing.T) { 62 r := require.New(t) 63 64 req, err := http.NewRequest("GET", "/home", strings.NewReader("")) 65 req.Header.Add("content-type", "paganotoni/other") 66 r.NoError(err) 67 68 err = BaseRequestBinder.Exec(req, &struct{}{}) 69 r.Error(err) 70 r.Equal(err.Error(), "could not find a binder for paganotoni/other") 71 }