Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions router-tests/automatic_persisted_queries_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ func TestAutomaticPersistedQueries(t *testing.T) {
},
}, func(t *testing.T, xEnv *testenv.Environment) {
res := xEnv.MakeGraphQLRequestOK(testenv.GraphQLRequest{
Extensions: []byte(`{"persistedQuery": {"version": 1, "sha256Hash": "does-not-exist"}}`),
Extensions: []byte(`{"persistedQuery": {"version": 1, "sha256Hash": "` + cacheHashNotStored + `"}}`),
})
require.Equal(t, `{"errors":[{"message":"PersistedQueryNotFound","extensions":{"code":"PERSISTED_QUERY_NOT_FOUND"}}]}`, res.Body)
})
Expand Down Expand Up @@ -198,7 +198,7 @@ func TestAutomaticPersistedQueries(t *testing.T) {
},
}, func(t *testing.T, xEnv *testenv.Environment) {
res := xEnv.MakeGraphQLRequestOK(testenv.GraphQLRequest{
Extensions: []byte(`{"persistedQuery": {"version": 1, "sha256Hash": "does-not-exist"}}`),
Extensions: []byte(`{"persistedQuery": {"version": 1, "sha256Hash": "` + cacheHashNotStored + `"}}`),
})
require.Equal(t, `{"errors":[{"message":"PersistedQueryNotFound","extensions":{"code":"PERSISTED_QUERY_NOT_FOUND"}}]}`, res.Body)
})
Expand Down
2 changes: 1 addition & 1 deletion router-tests/batch_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ func TestBatch(t *testing.T) {
}, nil)
require.NoError(t, err)
require.Equal(t, http.StatusBadRequest, res.Response.StatusCode)
require.JSONEq(t, `{"errors":[{"message":"error parsing request body"}]}`, res.Body)
require.JSONEq(t, `{"errors":[{"message":"invalid request body: json: cannot unmarshal array into Go value of type core.GraphQLRequest"}]}`, res.Body)
},
)
})
Expand Down
44 changes: 44 additions & 0 deletions router-tests/graphql_over_get_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,50 @@ func TestOperationsOverGET(t *testing.T) {
})
})

t.Run("Invalid GET variables", func(t *testing.T) {
t.Parallel()
testenv.Run(t, &testenv.Config{}, func(t *testing.T, xEnv *testenv.Environment) {
res, err := xEnv.MakeGraphQLRequestOverGET(testenv.GraphQLRequest{
OperationName: []byte(`Find`),
Query: `query Find($criteria: SearchInput!) {findEmployees(criteria: $criteria){id details {forename surname}}}`,
Variables: []byte(`{"criteria":{ "nationality":GERMAN} } `),
})
require.NoError(t, err)
require.Equal(t, http.StatusBadRequest, res.Response.StatusCode)
require.Equal(t, `{"errors":[{"message":"invalid GET request: error parsing variables: invalid character 'G' looking for beginning of value"}]}`, res.Body)
})
})

t.Run("Invalid GET extensions from bool", func(t *testing.T) {
t.Parallel()
testenv.Run(t, &testenv.Config{}, func(t *testing.T, xEnv *testenv.Environment) {
res, err := xEnv.MakeGraphQLRequestOverGET(testenv.GraphQLRequest{
OperationName: []byte(`Find`),
Query: `query Find($criteria: SearchInput!) {findEmployees(criteria: $criteria){id details {forename surname}}}`,
Variables: []byte(`{"criteria":{ "nationality":"GERMAN"} } `),
Extensions: []byte(`true`),
})
require.NoError(t, err)
require.Equal(t, http.StatusBadRequest, res.Response.StatusCode)
require.Equal(t, `{"errors":[{"message":"invalid GET request: error parsing extensions: json: cannot unmarshal bool"}]}`, res.Body)
})
})

t.Run("Invalid GET extensions version from bool", func(t *testing.T) {
t.Parallel()
testenv.Run(t, &testenv.Config{}, func(t *testing.T, xEnv *testenv.Environment) {
res, err := xEnv.MakeGraphQLRequestOverGET(testenv.GraphQLRequest{
OperationName: []byte(`Find`),
Query: `query Find($criteria: SearchInput!) {findEmployees(criteria: $criteria){id details {forename surname}}}`,
Variables: []byte(`{"criteria":{ "nationality":"GERMAN"} } `),
Extensions: []byte(`{"persistedQuery": {"version": true, "sha256Hash": "` + cacheHashNotStored + `"}}`),
})
require.NoError(t, err)
require.Equal(t, http.StatusBadRequest, res.Response.StatusCode)
require.Equal(t, `{"errors":[{"message":"invalid GET request: error parsing extensions: json: cannot unmarshal bool"}]}`, res.Body)
})
})

t.Run("Only queries are supported over GET", func(t *testing.T) {
t.Parallel()
testenv.Run(t, &testenv.Config{}, func(t *testing.T, xEnv *testenv.Environment) {
Expand Down
12 changes: 6 additions & 6 deletions router-tests/graphql_over_http_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ func TestGraphQLOverHTTPCompatibility(t *testing.T) {
require.Equal(t, res.Header.Get("Content-Type"), "application/json; charset=utf-8")
data, err := io.ReadAll(res.Body)
require.NoError(t, err)
require.Equal(t, `{"errors":[{"message":"error parsing request body"}]}`, string(data))
require.Equal(t, `{"errors":[{"message":"invalid request body: variables must be a JSON object"}]}`, string(data))
})
t.Run("return 400 bad request when extensions is not a map", func(t *testing.T) {
header := http.Header{
Expand All @@ -74,7 +74,7 @@ func TestGraphQLOverHTTPCompatibility(t *testing.T) {
require.Equal(t, res.Header.Get("Content-Type"), "application/json; charset=utf-8")
data, err := io.ReadAll(res.Body)
require.NoError(t, err)
require.Equal(t, `{"errors":[{"message":"error parsing request body"}]}`, string(data))
require.Equal(t, `{"errors":[{"message":"invalid request body: error parsing extensions: json: cannot unmarshal bool"}]}`, string(data))
})
t.Run("valid request with Operation Name should return 200 OK with valid response", func(t *testing.T) {
header := http.Header{
Expand All @@ -101,7 +101,7 @@ func TestGraphQLOverHTTPCompatibility(t *testing.T) {
require.Equal(t, res.Header.Get("Content-Type"), "application/json; charset=utf-8")
data, err := io.ReadAll(res.Body)
require.NoError(t, err)
require.Equal(t, `{"errors":[{"message":"error parsing request body"}]}`, string(data))
require.Equal(t, `{"errors":[{"message":"invalid request body: invalid character 'q' looking for beginning of value"}]}`, string(data))
})
t.Run("malformed JSON variant should return 400", func(t *testing.T) {
header := http.Header{
Expand All @@ -115,7 +115,7 @@ func TestGraphQLOverHTTPCompatibility(t *testing.T) {
require.Equal(t, res.Header.Get("Content-Type"), "application/json; charset=utf-8")
data, err := io.ReadAll(res.Body)
require.NoError(t, err)
require.Equal(t, `{"errors":[{"message":"error parsing request body"}]}`, string(data))
require.Equal(t, `{"errors":[{"message":"invalid request body: invalid character '{' looking for beginning of object key string"}]}`, string(data))
})
t.Run("malformed JSON variant #2 should return 400", func(t *testing.T) {
header := http.Header{
Expand All @@ -129,7 +129,7 @@ func TestGraphQLOverHTTPCompatibility(t *testing.T) {
require.Equal(t, res.Header.Get("Content-Type"), "application/json; charset=utf-8")
data, err := io.ReadAll(res.Body)
require.NoError(t, err)
require.Equal(t, `{"errors":[{"message":"error parsing request body"}]}`, string(data))
require.Equal(t, `{"errors":[{"message":"empty request body"}]}`, string(data))
})
t.Run("malformed JSON variables variant should return 400", func(t *testing.T) {
header := http.Header{
Expand All @@ -143,7 +143,7 @@ func TestGraphQLOverHTTPCompatibility(t *testing.T) {
require.Equal(t, res.Header.Get("Content-Type"), "application/json; charset=utf-8")
data, err := io.ReadAll(res.Body)
require.NoError(t, err)
require.Equal(t, `{"errors":[{"message":"error parsing request body"}]}`, string(data))
require.Equal(t, `{"errors":[{"message":"invalid request body: invalid character 'G' looking for beginning of value"}]}`, string(data))
})
t.Run("missing variables should return 200 OK with validation errors response", func(t *testing.T) {
header := http.Header{
Expand Down
2 changes: 1 addition & 1 deletion router-tests/header_propagation_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ func TestCacheControl(t *testing.T) {
res := xEnv.MakeGraphQLRequestOK(testenv.GraphQLRequest{
Query: "", // Empty query
Variables: json.RawMessage(`{}`),
Extensions: json.RawMessage(`{"persistedQuery": {"version": 1, "sha256Hash": "invalid-hash"}}`),
Extensions: json.RawMessage(`{"persistedQuery": {"version": 1, "sha256Hash": "` + cacheHashNotStored + `"}}`),
})

require.Contains(t, res.Body, "PERSISTED_QUERY_NOT_FOUND")
Expand Down
8 changes: 4 additions & 4 deletions router-tests/integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -532,7 +532,7 @@ func TestVariables(t *testing.T) {
})
require.NoError(t, err)
require.Equal(t, http.StatusBadRequest, res.Response.StatusCode)
require.Equal(t, `{"errors":[{"message":"error parsing request body"}]}`, res.Body)
require.Equal(t, `{"errors":[{"message":"invalid request body: variables must be a JSON object"}]}`, res.Body)
})

t.Run("invalid string", func(t *testing.T) {
Expand All @@ -542,7 +542,7 @@ func TestVariables(t *testing.T) {
})
require.NoError(t, err)
require.Equal(t, http.StatusBadRequest, res.Response.StatusCode)
require.Equal(t, `{"errors":[{"message":"error parsing request body"}]}`, res.Body)
require.Equal(t, `{"errors":[{"message":"invalid request body: variables must be a JSON object"}]}`, res.Body)
})

t.Run("invalid boolean", func(t *testing.T) {
Expand All @@ -552,7 +552,7 @@ func TestVariables(t *testing.T) {
})
require.NoError(t, err)
require.Equal(t, http.StatusBadRequest, res.Response.StatusCode)
require.Equal(t, `{"errors":[{"message":"error parsing request body"}]}`, res.Body)
require.Equal(t, `{"errors":[{"message":"invalid request body: variables must be a JSON object"}]}`, res.Body)
})

t.Run("invalid array", func(t *testing.T) {
Expand All @@ -562,7 +562,7 @@ func TestVariables(t *testing.T) {
})
require.NoError(t, err)
require.Equal(t, http.StatusBadRequest, res.Response.StatusCode)
require.Equal(t, `{"errors":[{"message":"error parsing request body"}]}`, res.Body)
require.Equal(t, `{"errors":[{"message":"invalid request body: variables must be a JSON object"}]}`, res.Body)
})

t.Run("missing", func(t *testing.T) {
Expand Down
4 changes: 2 additions & 2 deletions router-tests/persisted_operations_over_get_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ func TestPersistedOperationOverGET(t *testing.T) {
header := make(http.Header)
header.Add("graphql-client-name", "my-client")
res, err := xEnv.MakeGraphQLRequestOverGET(testenv.GraphQLRequest{
Extensions: []byte(`{"persistedQuery": {"version": 1, "sha256Hash": "does-not-exist"}}`),
Extensions: []byte(`{"persistedQuery": {"version": 1, "sha256Hash": "` + cacheHashNotStored + `"}}`),
Header: header,
})
require.NoError(t, err)
Expand Down Expand Up @@ -99,7 +99,7 @@ func TestAutomatedPersistedQueriesOverGET(t *testing.T) {
header := make(http.Header)
header.Add("graphql-client-name", "my-client")
res, err := xEnv.MakeGraphQLRequestOverGET(testenv.GraphQLRequest{
Extensions: []byte(`{"persistedQuery": {"version": 1, "sha256Hash": "does-not-exist"}}`),
Extensions: []byte(`{"persistedQuery": {"version": 1, "sha256Hash": "` + cacheHashNotStored + `"}}`),
Header: header,
})
require.NoError(t, err)
Expand Down
Loading
Loading