-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhtest.go
96 lines (85 loc) · 2.26 KB
/
htest.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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package htest
import (
"bytes"
"io"
"net/http"
"testing"
)
// HTTPTester is an interface that represents the main entry point of HTest
type HTTPTester interface {
Get(path string) Requester
Head(path string) Requester
Post(path string) Requester
Put(path string) Requester
Delete(path string) Requester
Trace(path string) Requester
Options(path string) Requester
Connect(path string) Requester
Patch(path string) Requester
// Request allows to create a Requester object with the passed HTTP method and path
Request(method, path string) Requester
// Request allows to create a Requester object with the passed HTTP method, path and body.
RequestWithBody(method, path string, body io.Reader) Requester
// SetHandler changes the underlying http.Handler
SetHandler(handler http.Handler) HTTPTester
}
type htest struct {
handler http.Handler
t testing.TB
}
// New returns a new HTTPTester instance
func New(t testing.TB, handler http.Handler) HTTPTester {
return &htest{
handler: handler,
t: t,
}
}
func (h *htest) SetHandler(handler http.Handler) HTTPTester {
h.handler = handler
return h
}
func (h *htest) Get(path string) Requester {
return h.Request("GET", path)
}
func (h *htest) Head(path string) Requester {
return h.Request("HEAD", path)
}
func (h *htest) Post(path string) Requester {
return h.Request("POST", path)
}
func (h *htest) Put(path string) Requester {
return h.Request("PUT", path)
}
func (h *htest) Delete(path string) Requester {
return h.Request("DELETE", path)
}
func (h *htest) Trace(path string) Requester {
return h.Request("TRACE", path)
}
func (h *htest) Options(path string) Requester {
return h.Request("OPTIONS", path)
}
func (h *htest) Connect(path string) Requester {
return h.Request("CONNECT", path)
}
func (h *htest) Patch(path string) Requester {
return h.Request("PATCH", path)
}
func (h *htest) Request(method, path string) Requester {
return h.RequestWithBody(method, path, bytes.NewReader([]byte{}))
}
func (h *htest) RequestWithBody(method, path string, body io.Reader) Requester {
req, err := http.NewRequest(method, path, body)
if err != nil {
h.t.Error(err)
h.t.FailNow()
}
return &requester{
method: method,
path: path,
body: body,
t: h.t,
handler: h.handler,
request: req,
}
}