/
testhelpers.go
63 lines (57 loc) · 1.27 KB
/
testhelpers.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
package payjp
import (
"bytes"
"io/ioutil"
"net/http"
)
func newMockClient(status int, response []byte) (*http.Client, *mockTransport) {
transport := &mockTransport{
responses: []*responsePair{&responsePair{status, response}},
}
return &http.Client{
Transport: transport,
}, transport
}
type responsePair struct {
status int
response []byte
}
type mockTransport struct {
responses []*responsePair
index int
URL string
Method string
Body *string
Header http.Header
}
// Implement http.RoundTripper
func (t *mockTransport) RoundTrip(req *http.Request) (*http.Response, error) {
t.URL = req.URL.String()
t.Method = req.Method
t.Header = req.Header
t.Body = nil
if req.Body != nil {
b, _ := ioutil.ReadAll(req.Body)
s := string(b)
t.Body = &s
}
// Create mocked http.Response
responseSet := t.responses[t.index]
t.index++
if t.index == len(t.responses) {
t.index--
}
response := &http.Response{
Header: make(http.Header),
Request: req,
StatusCode: responseSet.status,
}
response.Body = ioutil.NopCloser(bytes.NewReader(responseSet.response))
return response, nil
}
func (t *mockTransport) AddResponse(status int, body []byte) {
t.responses = append(t.responses, &responsePair{
status: status,
response: body,
})
}