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  }