Skip to content

Commit f0393b2

Browse files
authored
Merge pull request #29 from graphql-go/fix/variables-bug
handler: fixes queryparams variables
2 parents 707d93f + f1c10e5 commit f0393b2

File tree

3 files changed

+34
-8
lines changed

3 files changed

+34
-8
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,4 @@ _testmain.go
2222
*.exe
2323
*.test
2424
*.prof
25+
*.swp

handler.go

+2-3
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ const (
2020

2121
type Handler struct {
2222
Schema *graphql.Schema
23-
2423
pretty bool
2524
graphiql bool
2625
}
@@ -41,9 +40,9 @@ func getFromForm(values url.Values) *RequestOptions {
4140
query := values.Get("query")
4241
if query != "" {
4342
// get variables map
44-
var variables map[string]interface{}
43+
variables := make(map[string]interface{}, len(values))
4544
variablesStr := values.Get("variables")
46-
json.Unmarshal([]byte(variablesStr), variables)
45+
json.Unmarshal([]byte(variablesStr), &variables)
4746

4847
return &RequestOptions{
4948
Query: query,

request_options_test.go

+31-5
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ import (
1414
func TestRequestOptions_GET_BasicQueryString(t *testing.T) {
1515
queryString := "query=query RebelsShipsQuery { rebels { name } }"
1616
expected := &RequestOptions{
17-
Query: "query RebelsShipsQuery { rebels { name } }",
17+
Query: "query RebelsShipsQuery { rebels { name } }",
18+
Variables: make(map[string]interface{}),
1819
}
1920

2021
req, _ := http.NewRequest("GET", fmt.Sprintf("/graphql?%v", queryString), nil)
@@ -69,7 +70,8 @@ func TestRequestOptions_GET_ContentTypeApplicationUrlEncoded(t *testing.T) {
6970
func TestRequestOptions_POST_BasicQueryString_WithNoBody(t *testing.T) {
7071
queryString := "query=query RebelsShipsQuery { rebels { name } }"
7172
expected := &RequestOptions{
72-
Query: "query RebelsShipsQuery { rebels { name } }",
73+
Query: "query RebelsShipsQuery { rebels { name } }",
74+
Variables: make(map[string]interface{}),
7375
}
7476

7577
req, _ := http.NewRequest("POST", fmt.Sprintf("/graphql?%v", queryString), nil)
@@ -150,6 +152,27 @@ func TestRequestOptions_POST_ContentTypeApplicationJSON(t *testing.T) {
150152
t.Fatalf("wrong result, graphql result diff: %v", testutil.Diff(expected, result))
151153
}
152154
}
155+
156+
func TestRequestOptions_GET_WithVariablesAsObject(t *testing.T) {
157+
variables := url.QueryEscape(`{ "a": 1, "b": "2" }`)
158+
query := url.QueryEscape("query RebelsShipsQuery { rebels { name } }")
159+
queryString := fmt.Sprintf("query=%s&variables=%s", query, variables)
160+
expected := &RequestOptions{
161+
Query: "query RebelsShipsQuery { rebels { name } }",
162+
Variables: map[string]interface{}{
163+
"a": float64(1),
164+
"b": "2",
165+
},
166+
}
167+
168+
req, _ := http.NewRequest("GET", fmt.Sprintf("/graphql?%v", queryString), nil)
169+
result := NewRequestOptions(req)
170+
171+
if !reflect.DeepEqual(result, expected) {
172+
t.Fatalf("wrong result, graphql result diff: %v", testutil.Diff(expected, result))
173+
}
174+
}
175+
153176
func TestRequestOptions_POST_ContentTypeApplicationJSON_WithVariablesAsObject(t *testing.T) {
154177
body := `
155178
{
@@ -223,7 +246,8 @@ func TestRequestOptions_POST_ContentTypeApplicationUrlEncoded(t *testing.T) {
223246
data.Add("query", "query RebelsShipsQuery { rebels { name } }")
224247

225248
expected := &RequestOptions{
226-
Query: "query RebelsShipsQuery { rebels { name } }",
249+
Query: "query RebelsShipsQuery { rebels { name } }",
250+
Variables: make(map[string]interface{}),
227251
}
228252

229253
req, _ := http.NewRequest("POST", "/graphql", bytes.NewBufferString(data.Encode()))
@@ -263,7 +287,8 @@ func TestRequestOptions_POST_ContentTypeApplicationUrlEncoded_WithNilBody(t *tes
263287
func TestRequestOptions_PUT_BasicQueryString(t *testing.T) {
264288
queryString := "query=query RebelsShipsQuery { rebels { name } }"
265289
expected := &RequestOptions{
266-
Query: "query RebelsShipsQuery { rebels { name } }",
290+
Query: "query RebelsShipsQuery { rebels { name } }",
291+
Variables: make(map[string]interface{}),
267292
}
268293

269294
req, _ := http.NewRequest("PUT", fmt.Sprintf("/graphql?%v", queryString), nil)
@@ -318,7 +343,8 @@ func TestRequestOptions_PUT_ContentTypeApplicationUrlEncoded(t *testing.T) {
318343
func TestRequestOptions_DELETE_BasicQueryString(t *testing.T) {
319344
queryString := "query=query RebelsShipsQuery { rebels { name } }"
320345
expected := &RequestOptions{
321-
Query: "query RebelsShipsQuery { rebels { name } }",
346+
Query: "query RebelsShipsQuery { rebels { name } }",
347+
Variables: make(map[string]interface{}),
322348
}
323349

324350
req, _ := http.NewRequest("DELETE", fmt.Sprintf("/graphql?%v", queryString), nil)

0 commit comments

Comments
 (0)