From 2933f82aeef38871dcb0fc22150d36380a45371f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A0=D0=B0=D0=B3=D0=BE=D0=B7=D0=B8=D0=BD=20=D0=A0=D0=BE?= =?UTF-8?q?=D0=BC=D0=B0=D0=BD?= Date: Thu, 20 Jul 2017 13:39:18 +0300 Subject: [PATCH 1/4] Fixed bug with variables of graphql query --- handler.go | 5 ++--- request_options_test.go | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/handler.go b/handler.go index 6666f54..ea2a852 100644 --- a/handler.go +++ b/handler.go @@ -20,7 +20,6 @@ const ( type Handler struct { Schema *graphql.Schema - pretty bool graphiql bool } @@ -41,9 +40,9 @@ func getFromForm(values url.Values) *RequestOptions { query := values.Get("query") if query != "" { // get variables map - var variables map[string]interface{} + variables := make(map[string]interface{}) variablesStr := values.Get("variables") - json.Unmarshal([]byte(variablesStr), variables) + json.Unmarshal([]byte(variablesStr), &variables) return &RequestOptions{ Query: query, diff --git a/request_options_test.go b/request_options_test.go index 0236e62..5971b2d 100644 --- a/request_options_test.go +++ b/request_options_test.go @@ -150,6 +150,27 @@ func TestRequestOptions_POST_ContentTypeApplicationJSON(t *testing.T) { t.Fatalf("wrong result, graphql result diff: %v", testutil.Diff(expected, result)) } } + +func TestRequestOptions_GET_WithVariablesAsObject(t *testing.T) { + variables := url.QueryEscape(`{ "a": 1, "b": "2" }`) + query := url.QueryEscape("query RebelsShipsQuery { rebels { name } }") + queryString := fmt.Sprintf("query=%s&variables=%s", query, variables) + expected := &RequestOptions{ + Query: "query RebelsShipsQuery { rebels { name } }", + Variables: map[string]interface{}{ + "a": float64(1), + "b": "2", + }, + } + + req, _ := http.NewRequest("GET", fmt.Sprintf("/graphql?%v", queryString), nil) + result := NewRequestOptions(req) + + if !reflect.DeepEqual(result, expected) { + t.Fatalf("wrong result, graphql result diff: %v", testutil.Diff(expected, result)) + } +} + func TestRequestOptions_POST_ContentTypeApplicationJSON_WithVariablesAsObject(t *testing.T) { body := ` { From 73a62f85fe4f595f2a306fa672e7a839c4fdbe16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chris=20Ram=C3=B3n?= Date: Sun, 15 Oct 2017 12:13:40 -0500 Subject: [PATCH 2/4] gitignore: ignores *.swp files --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index daf913b..3a709f3 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,4 @@ _testmain.go *.exe *.test *.prof +*.swp From 31a6ded0710b6c57a5ce5e6981f1c5b1af41bcca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chris=20Ram=C3=B3n?= Date: Sun, 15 Oct 2017 12:15:12 -0500 Subject: [PATCH 3/4] request_options_test: matches correctly RequestOptions --- request_options_test.go | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/request_options_test.go b/request_options_test.go index 5971b2d..aab7cc8 100644 --- a/request_options_test.go +++ b/request_options_test.go @@ -14,7 +14,8 @@ import ( func TestRequestOptions_GET_BasicQueryString(t *testing.T) { queryString := "query=query RebelsShipsQuery { rebels { name } }" expected := &RequestOptions{ - Query: "query RebelsShipsQuery { rebels { name } }", + Query: "query RebelsShipsQuery { rebels { name } }", + Variables: make(map[string]interface{}), } req, _ := http.NewRequest("GET", fmt.Sprintf("/graphql?%v", queryString), nil) @@ -69,7 +70,8 @@ func TestRequestOptions_GET_ContentTypeApplicationUrlEncoded(t *testing.T) { func TestRequestOptions_POST_BasicQueryString_WithNoBody(t *testing.T) { queryString := "query=query RebelsShipsQuery { rebels { name } }" expected := &RequestOptions{ - Query: "query RebelsShipsQuery { rebels { name } }", + Query: "query RebelsShipsQuery { rebels { name } }", + Variables: make(map[string]interface{}), } req, _ := http.NewRequest("POST", fmt.Sprintf("/graphql?%v", queryString), nil) @@ -244,7 +246,8 @@ func TestRequestOptions_POST_ContentTypeApplicationUrlEncoded(t *testing.T) { data.Add("query", "query RebelsShipsQuery { rebels { name } }") expected := &RequestOptions{ - Query: "query RebelsShipsQuery { rebels { name } }", + Query: "query RebelsShipsQuery { rebels { name } }", + Variables: make(map[string]interface{}), } req, _ := http.NewRequest("POST", "/graphql", bytes.NewBufferString(data.Encode())) @@ -284,7 +287,8 @@ func TestRequestOptions_POST_ContentTypeApplicationUrlEncoded_WithNilBody(t *tes func TestRequestOptions_PUT_BasicQueryString(t *testing.T) { queryString := "query=query RebelsShipsQuery { rebels { name } }" expected := &RequestOptions{ - Query: "query RebelsShipsQuery { rebels { name } }", + Query: "query RebelsShipsQuery { rebels { name } }", + Variables: make(map[string]interface{}), } req, _ := http.NewRequest("PUT", fmt.Sprintf("/graphql?%v", queryString), nil) @@ -339,7 +343,8 @@ func TestRequestOptions_PUT_ContentTypeApplicationUrlEncoded(t *testing.T) { func TestRequestOptions_DELETE_BasicQueryString(t *testing.T) { queryString := "query=query RebelsShipsQuery { rebels { name } }" expected := &RequestOptions{ - Query: "query RebelsShipsQuery { rebels { name } }", + Query: "query RebelsShipsQuery { rebels { name } }", + Variables: make(map[string]interface{}), } req, _ := http.NewRequest("DELETE", fmt.Sprintf("/graphql?%v", queryString), nil) From f1c10e5e8c027e3ad4a1c2bd84e2b8ce5eaa9708 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chris=20Ram=C3=B3n?= Date: Sun, 15 Oct 2017 12:41:09 -0500 Subject: [PATCH 4/4] handler: use values length to preallocate --- handler.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/handler.go b/handler.go index ea2a852..cfcb1ca 100644 --- a/handler.go +++ b/handler.go @@ -40,7 +40,7 @@ func getFromForm(values url.Values) *RequestOptions { query := values.Get("query") if query != "" { // get variables map - variables := make(map[string]interface{}) + variables := make(map[string]interface{}, len(values)) variablesStr := values.Get("variables") json.Unmarshal([]byte(variablesStr), &variables)