github.com/lingyao2333/mo-zero@v1.4.1/rest/httpc/service_test.go (about) 1 package httpc 2 3 import ( 4 "context" 5 "net/http" 6 "net/http/httptest" 7 "testing" 8 9 "github.com/lingyao2333/mo-zero/rest/internal/header" 10 "github.com/stretchr/testify/assert" 11 ) 12 13 func TestNamedService_DoRequest(t *testing.T) { 14 svr := httptest.NewServer(http.RedirectHandler("/foo", http.StatusMovedPermanently)) 15 defer svr.Close() 16 req, err := http.NewRequest(http.MethodGet, svr.URL, nil) 17 assert.Nil(t, err) 18 service := NewService("foo") 19 _, err = service.DoRequest(req) 20 // too many redirects 21 assert.NotNil(t, err) 22 } 23 24 func TestNamedService_DoRequestGet(t *testing.T) { 25 svr := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 26 w.Header().Set("foo", r.Header.Get("foo")) 27 })) 28 defer svr.Close() 29 service := NewService("foo", func(r *http.Request) *http.Request { 30 r.Header.Set("foo", "bar") 31 return r 32 }) 33 req, err := http.NewRequest(http.MethodGet, svr.URL, nil) 34 assert.Nil(t, err) 35 resp, err := service.DoRequest(req) 36 assert.Nil(t, err) 37 assert.Equal(t, http.StatusOK, resp.StatusCode) 38 assert.Equal(t, "bar", resp.Header.Get("foo")) 39 } 40 41 func TestNamedService_DoRequestPost(t *testing.T) { 42 svr := httptest.NewServer(http.NotFoundHandler()) 43 defer svr.Close() 44 service := NewService("foo") 45 req, err := http.NewRequest(http.MethodPost, svr.URL, nil) 46 assert.Nil(t, err) 47 req.Header.Set(header.ContentType, header.JsonContentType) 48 resp, err := service.DoRequest(req) 49 assert.Nil(t, err) 50 assert.Equal(t, http.StatusNotFound, resp.StatusCode) 51 } 52 53 func TestNamedService_Do(t *testing.T) { 54 type Data struct { 55 Key string `path:"key"` 56 Value int `form:"value"` 57 Header string `header:"X-Header"` 58 Body string `json:"body"` 59 } 60 61 svr := httptest.NewServer(http.NotFoundHandler()) 62 defer svr.Close() 63 64 service := NewService("foo") 65 data := Data{ 66 Key: "foo", 67 Value: 10, 68 Header: "my-header", 69 Body: "my body", 70 } 71 resp, err := service.Do(context.Background(), http.MethodPost, svr.URL+"/nodes/:key", data) 72 assert.Nil(t, err) 73 assert.Equal(t, http.StatusNotFound, resp.StatusCode) 74 } 75 76 func TestNamedService_DoBadRequest(t *testing.T) { 77 val := struct { 78 Value string `json:"value,options=[a,b]"` 79 }{ 80 Value: "c", 81 } 82 83 service := NewService("foo") 84 _, err := service.Do(context.Background(), http.MethodPost, "/nodes/:key", val) 85 assert.NotNil(t, err) 86 }