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  }