forked from saltbo/gopkg
/
request.go
81 lines (65 loc) · 1.42 KB
/
request.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package testutil
import (
"bytes"
"fmt"
"io"
"io/ioutil"
"net/http"
"net/http/httptest"
"net/http/httputil"
)
var defaultMux = &mockServer{}
type testRequest struct {
req *http.Request
mux http.Handler
debug bool
}
func TestRequest(method, path string) *testRequest {
req, _ := http.NewRequest(method, path, nil)
return &testRequest{
req: req,
mux: defaultMux,
}
}
func (tr *testRequest) Debug() *testRequest {
tr.debug = true
return tr
}
func (tr *testRequest) Mux(mux http.Handler) *testRequest {
tr.mux = mux
return tr
}
func (tr *testRequest) Host(host string) *testRequest {
tr.req.Host = host
return tr
}
func (tr *testRequest) Body(body []byte) *testRequest {
return tr.BodyReader(bytes.NewBuffer(body))
}
func (tr *testRequest) BodyReader(br io.Reader) *testRequest {
tr.req.Body = ioutil.NopCloser(br)
return tr
}
func (tr *testRequest) Header(k, v string) *testRequest {
tr.req.Header.Set(k, v)
return tr
}
func (tr *testRequest) Cookie(cookies ...*http.Cookie) *testRequest {
for _, cookie := range cookies {
tr.req.AddCookie(cookie)
}
return tr
}
func (tr *testRequest) Do() *httptest.ResponseRecorder {
if tr.debug {
b, err := httputil.DumpRequest(tr.req, true)
if err != nil {
fmt.Printf("httputil.DumpRequest failed: %s", err)
return nil
}
fmt.Printf("========= Test Request =========\n%s\n", string(b))
}
w := httptest.NewRecorder()
tr.mux.ServeHTTP(w, tr.req)
return w
}