-
Notifications
You must be signed in to change notification settings - Fork 0
/
with_req_test.go
98 lines (85 loc) · 1.85 KB
/
with_req_test.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
97
98
package withttp
import (
"bytes"
"context"
"io"
"net/http"
"testing"
)
func TestCall_StreamingRequestFromSlice(t *testing.T) {
type (
payload struct {
Name string `json:"name"`
}
args struct {
Stream []payload
}
want struct {
expectedErr error
ReceivedPayload []byte
}
testCase struct {
name string
args args
want want
}
)
tests := []testCase{
{
name: "one element in the stream",
args: args{
Stream: []payload{
{
Name: "I am the first payload",
},
},
},
want: want{
ReceivedPayload: []byte(`{"name":"I am the first payload"}`),
},
},
{
name: "several elements in the stream",
args: args{
Stream: []payload{
{
Name: "I am the first payload",
},
{
Name: "I am the second payload",
},
},
},
want: want{
ReceivedPayload: streamTextJoin("\n", []string{
`{"name":"I am the first payload"}`,
`{"name":"I am the second payload"}`,
}),
},
},
}
endpoint := NewEndpoint("mock").
Response(WithMockedRes(func(res Response) {
res.SetStatus(http.StatusOK)
res.SetBody(io.NopCloser(bytes.NewReader(nil)))
}))
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
call := NewCall[any](NewMockHttpClientAdapter()).
WithContentType(ContentTypeJSONEachRow).
WithRequestStreamBody(
WithRequestStreamBody[any, payload](Slice[payload](test.args.Stream)),
).
WithExpectedStatusCodes(http.StatusOK)
err := call.CallEndpoint(context.TODO(), endpoint)
if !assertError(t, test.want.expectedErr, err) {
t.FailNow()
}
actualReceivedBody := call.Req.Body()
if !BytesEquals(test.want.ReceivedPayload, actualReceivedBody) {
t.Errorf("unexpected received payload\nwant '%s'\nhave '%s'",
string(test.want.ReceivedPayload), string(actualReceivedBody))
}
})
}
}