Skip to content

Commit 2243c42

Browse files
authored
Merge pull request #3603 from ActiveState/DX-3162
Unify graphQL client code
2 parents bcc739d + f50e832 commit 2243c42

File tree

9 files changed

+441
-456
lines changed

9 files changed

+441
-456
lines changed

internal/gqlclient/gqlclient.go

Lines changed: 355 additions & 88 deletions
Large diffs are not rendered by default.
Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package graphql
1+
package gqlclient
22

33
import (
44
"context"
@@ -32,12 +32,12 @@ func TestDoJSON(t *testing.T) {
3232
defer srv.Close()
3333

3434
ctx := context.Background()
35-
client := NewClient(srv.URL)
35+
client := newClient(srv.URL)
3636

3737
ctx, cancel := context.WithTimeout(ctx, 1*time.Second)
3838
defer cancel()
3939
var responseData map[string]interface{}
40-
err := client.Run(ctx, &Request{q: "query {}"}, &responseData)
40+
err := client.RunWithContext(ctx, &TestRequest{"query {}", nil, nil}, &responseData)
4141
is.NoErr(err)
4242
is.Equal(calls, 1) // calls
4343
is.Equal(responseData["something"], "yes")
@@ -59,10 +59,10 @@ func TestQueryJSON(t *testing.T) {
5959
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second)
6060
defer cancel()
6161

62-
client := NewClient(srv.URL)
62+
client := newClient(srv.URL)
6363

64-
req := NewRequest("query {}")
65-
req.Var("username", "matryer")
64+
req := NewTestRequest("query {}")
65+
req.vars["username"] = "matryer"
6666

6767
// check variables
6868
is.True(req != nil)
@@ -71,7 +71,7 @@ func TestQueryJSON(t *testing.T) {
7171
var resp struct {
7272
Value string
7373
}
74-
err := client.Run(ctx, req, &resp)
74+
err := client.RunWithContext(ctx, req, &resp)
7575
is.NoErr(err)
7676
is.Equal(calls, 1)
7777

@@ -99,15 +99,14 @@ func TestHeader(t *testing.T) {
9999
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second)
100100
defer cancel()
101101

102-
client := NewClient(srv.URL)
103-
104-
req := NewRequest("query {}")
105-
req.Header.Set("X-Custom-Header", "123")
102+
client := newClient(srv.URL)
106103

104+
req := NewTestRequest("query {}")
105+
req.headers["X-Custom-Header"] = []string{"123"}
107106
var resp struct {
108107
Value string
109108
}
110-
err := client.Run(ctx, req, &resp)
109+
err := client.RunWithContext(ctx, req, &resp)
111110
is.NoErr(err)
112111
is.Equal(calls, 1)
113112

internal/graphql/graphql_multipart_test.go renamed to internal/gqlclient/gqlclient_multipart_test.go

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package graphql
1+
package gqlclient
22

33
import (
44
"context"
@@ -27,10 +27,9 @@ func TestWithClient(t *testing.T) {
2727
}
2828

2929
ctx := context.Background()
30-
client := NewClient("", WithHTTPClient(testClient), UseMultipartForm())
30+
client := newClient("", WithHTTPClient(testClient), UseMultipartForm())
3131

32-
req := NewRequest(``)
33-
client.Run(ctx, req, nil)
32+
client.RunWithContext(ctx, NewTestRequest("query {}"), nil)
3433

3534
is.Equal(calls, 1) // calls
3635
}
@@ -54,12 +53,12 @@ func TestDoUseMultipartForm(t *testing.T) {
5453
defer srv.Close()
5554

5655
ctx := context.Background()
57-
client := NewClient(srv.URL, UseMultipartForm())
56+
client := newClient(srv.URL, UseMultipartForm())
5857

5958
ctx, cancel := context.WithTimeout(ctx, 1*time.Second)
6059
defer cancel()
6160
var responseData map[string]interface{}
62-
err := client.Run(ctx, &Request{q: "query {}"}, &responseData)
61+
err := client.RunWithContext(ctx, NewTestRequest("query {}"), &responseData)
6362
is.NoErr(err)
6463
is.Equal(calls, 1) // calls
6564
is.Equal(responseData["something"], "yes")
@@ -82,12 +81,12 @@ func TestDoErr(t *testing.T) {
8281
defer srv.Close()
8382

8483
ctx := context.Background()
85-
client := NewClient(srv.URL, UseMultipartForm())
84+
client := newClient(srv.URL, UseMultipartForm())
8685

8786
ctx, cancel := context.WithTimeout(ctx, 1*time.Second)
8887
defer cancel()
8988
var responseData map[string]interface{}
90-
err := client.Run(ctx, &Request{q: "query {}"}, &responseData)
89+
err := client.RunWithContext(ctx, NewTestRequest("query {}"), &responseData)
9190
is.True(err != nil)
9291
is.Equal(err.Error(), "graphql: Something went wrong")
9392
}
@@ -109,11 +108,11 @@ func TestDoNoResponse(t *testing.T) {
109108
defer srv.Close()
110109

111110
ctx := context.Background()
112-
client := NewClient(srv.URL, UseMultipartForm())
111+
client := newClient(srv.URL, UseMultipartForm())
113112

114113
ctx, cancel := context.WithTimeout(ctx, 1*time.Second)
115114
defer cancel()
116-
err := client.Run(ctx, &Request{q: "query {}"}, nil)
115+
err := client.RunWithContext(ctx, NewTestRequest("query {}"), nil)
117116
is.NoErr(err)
118117
is.Equal(calls, 1) // calls
119118
}
@@ -134,10 +133,10 @@ func TestQuery(t *testing.T) {
134133
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second)
135134
defer cancel()
136135

137-
client := NewClient(srv.URL, UseMultipartForm())
136+
client := newClient(srv.URL, UseMultipartForm())
138137

139-
req := NewRequest("query {}")
140-
req.Var("username", "matryer")
138+
req := NewTestRequest("query {}")
139+
req.vars["username"] = "matryer"
141140

142141
// check variables
143142
is.True(req != nil)
@@ -146,7 +145,7 @@ func TestQuery(t *testing.T) {
146145
var resp struct {
147146
Value string
148147
}
149-
err := client.Run(ctx, req, &resp)
148+
err := client.RunWithContext(ctx, req, &resp)
150149
is.NoErr(err)
151150
is.Equal(calls, 1)
152151

@@ -160,7 +159,7 @@ func TestFile(t *testing.T) {
160159
var calls int
161160
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
162161
calls++
163-
file, header, err := r.FormFile("file")
162+
file, header, err := r.FormFile("0")
164163
is.NoErr(err)
165164
defer file.Close()
166165
is.Equal(header.Filename, "filename.txt")
@@ -175,11 +174,12 @@ func TestFile(t *testing.T) {
175174
defer srv.Close()
176175
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second)
177176
defer cancel()
178-
client := NewClient(srv.URL, UseMultipartForm())
177+
client := newClient(srv.URL, UseMultipartForm())
179178
f := strings.NewReader(`This is a file`)
180-
req := NewRequest("query {}")
181-
req.File("file", "filename.txt", f)
182-
err := client.Run(ctx, req, nil)
179+
req := NewTestRequestWithFiles("query {}")
180+
req.files = append(req.files, File{Field: "file", Name: "filename.txt", R: f})
181+
var resp string
182+
err := client.RunWithContext(ctx, req, &resp)
183183
is.NoErr(err)
184184
}
185185

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package gqlclient
2+
3+
type TestRequest struct {
4+
q string
5+
vars map[string]interface{}
6+
headers map[string][]string
7+
}
8+
9+
func NewTestRequest(q string) *TestRequest {
10+
return &TestRequest{
11+
q: q,
12+
vars: make(map[string]interface{}),
13+
headers: make(map[string][]string),
14+
}
15+
}
16+
17+
func (r *TestRequest) Query() string {
18+
return r.q
19+
}
20+
21+
func (r *TestRequest) Vars() (map[string]interface{}, error) {
22+
return r.vars, nil
23+
}
24+
25+
func (r *TestRequest) Headers() map[string][]string {
26+
return r.headers
27+
}
28+
29+
type TestRequestWithFiles struct {
30+
*TestRequest
31+
files []File
32+
}
33+
34+
func NewTestRequestWithFiles(q string) *TestRequestWithFiles {
35+
return &TestRequestWithFiles{
36+
TestRequest: NewTestRequest(q),
37+
files: make([]File, 0),
38+
}
39+
}
40+
41+
func (r *TestRequestWithFiles) Files() []File {
42+
return r.files
43+
}
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package graphql
1+
package gqlclient
22

33
import (
44
"context"
@@ -25,7 +25,7 @@ func TestClient_SingleField(t *testing.T) {
2525
}))
2626
defer server.Close()
2727

28-
client := NewClient(server.URL)
28+
client := newClient(server.URL)
2929

3030
tests := []struct {
3131
name string
@@ -104,10 +104,10 @@ func TestClient_SingleField(t *testing.T) {
104104

105105
for _, tt := range tests {
106106
t.Run(tt.name, func(t *testing.T) {
107-
req := NewRequest(tt.query)
107+
req := NewTestRequest(tt.query)
108108

109109
var resp interface{}
110-
err := client.Run(context.Background(), req, &resp)
110+
err := client.RunWithContext(context.Background(), req, &resp)
111111
if err != nil {
112112
t.Fatalf("unexpected error: %v", err)
113113
}
@@ -145,7 +145,7 @@ func TestClient_MultipleFields(t *testing.T) {
145145
}))
146146
defer server.Close()
147147

148-
client := NewClient(server.URL)
148+
client := newClient(server.URL)
149149

150150
tests := []struct {
151151
name string
@@ -179,10 +179,10 @@ func TestClient_MultipleFields(t *testing.T) {
179179

180180
for _, tt := range tests {
181181
t.Run(tt.name, func(t *testing.T) {
182-
req := NewRequest(tt.query)
182+
req := NewTestRequest(tt.query)
183183

184184
var resp interface{}
185-
err := client.Run(context.Background(), req, &resp)
185+
err := client.RunWithContext(context.Background(), req, &resp)
186186
if err != nil {
187187
t.Fatalf("unexpected error: %v", err)
188188
}

0 commit comments

Comments
 (0)