@@ -12,15 +12,34 @@ import (
12
12
"github.com/vektah/gqlparser/v2/gqlerror"
13
13
)
14
14
15
- func TestMakeRequest_HTTPError (t * testing.T ) {
15
+ func makeServer (t * testing.T , responseCode int , responseBody any ) * httptest.Server {
16
+ return httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
17
+ w .WriteHeader (responseCode )
18
+ err := json .NewEncoder (w ).Encode (responseBody )
19
+ if err != nil {
20
+ t .Fatalf ("Failed to write response: %v" , err )
21
+ }
22
+ }))
23
+ }
24
+
25
+ func makeRequest (server * httptest.Server ) (* Response , error ) {
26
+ client := NewClient (server .URL , server .Client ())
27
+ req := & Request {Query : "query { test }" }
28
+ resp := & Response {}
29
+
30
+ err := client .MakeRequest (context .Background (), req , resp )
31
+ return resp , err
32
+ }
33
+
34
+ func TestMakeRequestHTTPError (t * testing.T ) {
16
35
testCases := []struct {
17
36
expectedError * HTTPError
18
37
serverResponseBody any
19
38
name string
20
39
serverResponseCode int
21
40
}{
22
41
{
23
- name : "plain_text_error " ,
42
+ name : "PlainTextError " ,
24
43
serverResponseCode : http .StatusBadRequest ,
25
44
serverResponseBody : "Bad Request" ,
26
45
expectedError : & HTTPError {
@@ -35,7 +54,7 @@ func TestMakeRequest_HTTPError(t *testing.T) {
35
54
},
36
55
},
37
56
{
38
- name : "json_error_with_extensions " ,
57
+ name : "JSONErrorWithExtensions " ,
39
58
serverResponseCode : http .StatusTooManyRequests ,
40
59
serverResponseBody : Response {
41
60
Errors : gqlerror.List {
@@ -65,22 +84,9 @@ func TestMakeRequest_HTTPError(t *testing.T) {
65
84
66
85
for _ , tc := range testCases {
67
86
t .Run (tc .name , func (t * testing.T ) {
68
- server := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
69
- w .WriteHeader (tc .serverResponseCode )
70
- err := json .NewEncoder (w ).Encode (tc .serverResponseBody )
71
- if err != nil {
72
- t .Fatalf ("Failed to write response: %v" , err )
73
- }
74
- }))
87
+ server := makeServer (t , tc .serverResponseCode , tc .serverResponseBody )
75
88
defer server .Close ()
76
-
77
- client := NewClient (server .URL , server .Client ())
78
- req := & Request {
79
- Query : "query { test }" ,
80
- }
81
- resp := & Response {}
82
-
83
- err := client .MakeRequest (context .Background (), req , resp )
89
+ _ , err := makeRequest (server )
84
90
85
91
assert .Error (t , err )
86
92
var httpErr * HTTPError
@@ -90,27 +96,25 @@ func TestMakeRequest_HTTPError(t *testing.T) {
90
96
}
91
97
}
92
98
93
- func TestMakeRequest_Success (t * testing.T ) {
94
- server := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
95
- w .WriteHeader (http .StatusOK )
96
- err := json .NewEncoder (w ).Encode (map [string ]interface {}{
97
- "data" : map [string ]string {
98
- "test" : "success" ,
99
- },
100
- })
101
- if err != nil {
102
- t .Fatalf ("Failed to encode response: %v" , err )
103
- }
104
- }))
99
+ func TestMakeRequestHTTPErrors (t * testing.T ) {
100
+ server := makeServer (t , http .StatusOK , Response {
101
+ Errors : gqlerror.List {& gqlerror.Error {Message : "Rate limit exceeded" }},
102
+ })
105
103
defer server .Close ()
104
+ _ , err := makeRequest (server )
106
105
107
- client := NewClient ( server . URL , server . Client () )
108
- req := & Request {
109
- Query : "query { test }" ,
110
- }
111
- resp := & Response { }
106
+ assert . Error ( t , err )
107
+ var gqlErr gqlerror. List
108
+ assert . True ( t , errors . As ( err , & gqlErr ), "Error should be of type *gqlerror.List" )
109
+ assert . Equal ( t , gqlerror. List { & gqlerror. Error { Message : "Rate limit exceeded" }}, gqlErr )
110
+ }
112
111
113
- err := client .MakeRequest (context .Background (), req , resp )
112
+ func TestMakeRequestSuccess (t * testing.T ) {
113
+ server := makeServer (t , http .StatusOK , map [string ]interface {}{
114
+ "data" : map [string ]string {"test" : "success" },
115
+ })
116
+ defer server .Close ()
117
+ resp , err := makeRequest (server )
114
118
115
119
assert .NoError (t , err )
116
120
assert .Equal (t , map [string ]interface {}{"test" : "success" }, resp .Data )
0 commit comments