Skip to content

Commit 26cdad4

Browse files
committed
Fix unit tests
1 parent 088e5e5 commit 26cdad4

8 files changed

+38
-20
lines changed

src/main/java/graphql/servlet/AbstractGraphQLInvocationInputParser.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ abstract class AbstractGraphQLInvocationInputParser implements GraphQLInvocation
1313
final ContextSetting contextSetting;
1414

1515
boolean isSingleQuery(String query) {
16-
return !isArrayStart(query);
16+
return query != null && !query.trim().isEmpty() && !query.trim().startsWith("[");
1717
}
1818

19-
private boolean isArrayStart(String s) {
20-
return s != null && s.trim().startsWith("[");
19+
boolean isBatchedQuery(String query) {
20+
return query != null && !query.trim().isEmpty() && query.trim().startsWith("[");
2121
}
2222

2323
}

src/main/java/graphql/servlet/GraphQLErrorQueryResult.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package graphql.servlet;
22

3-
import graphql.ExecutionResult;
4-
import java.util.List;
53
import lombok.Getter;
64
import lombok.RequiredArgsConstructor;
75

@@ -14,7 +12,7 @@ class GraphQLErrorQueryResult implements GraphQLQueryResult {
1412

1513
@Override
1614
public boolean isBatched() {
17-
return true;
15+
return false;
1816
}
1917

2018
@Override

src/main/java/graphql/servlet/GraphQLGetInvocationInputParser.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public GraphQLInvocationInput getGraphQLInvocationInput(HttpServletRequest reque
3232

3333
String query = request.getParameter("query");
3434
if (query == null) {
35-
throw new GraphQLException("Query not found in request");
35+
throw new GraphQLException("Query parameter not found in GET request");
3636
}
3737

3838
if (isSingleQuery(query)) {
@@ -42,8 +42,8 @@ public GraphQLInvocationInput getGraphQLInvocationInput(HttpServletRequest reque
4242
return invocationInputFactory.createReadOnly(graphqlRequest, request, response);
4343
}
4444

45-
List<GraphQLRequest> requests = graphQLObjectMapper.readBatchedGraphQLRequest(query);
46-
return invocationInputFactory.createReadOnly(contextSetting, requests, request, response);
45+
List<GraphQLRequest> graphqlRequests = graphQLObjectMapper.readBatchedGraphQLRequest(query);
46+
return invocationInputFactory.createReadOnly(contextSetting, graphqlRequests, request, response);
4747
}
4848

4949
private boolean isIntrospectionQuery(HttpServletRequest request) {

src/main/java/graphql/servlet/GraphQLMultipartInvocationInputParser.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -59,18 +59,18 @@ public GraphQLInvocationInput getGraphQLInvocationInput(HttpServletRequest reque
5959
final Optional<Map<String, List<String>>> variablesMap =
6060
getPart(parts, "map").map(graphQLObjectMapper::deserializeMultipartMap);
6161

62-
if ("query".equals(key)) {
63-
GraphQLRequest graphqlRequest = buildRequestFromQuery(inputStream, graphQLObjectMapper, parts);
62+
String query = read(inputStream);
63+
if ("query".equals(key) && isSingleQuery(query)) {
64+
GraphQLRequest graphqlRequest = buildRequestFromQuery(query, graphQLObjectMapper, parts);
6465
variablesMap.ifPresent(m -> mapMultipartVariables(graphqlRequest, m, parts));
6566
return invocationInputFactory.create(graphqlRequest, request, response);
6667
} else {
67-
String body = read(inputStream);
68-
if (isSingleQuery(body)) {
69-
GraphQLRequest graphqlRequest = graphQLObjectMapper.readGraphQLRequest(body);
68+
if (isSingleQuery(query)) {
69+
GraphQLRequest graphqlRequest = graphQLObjectMapper.readGraphQLRequest(query);
7070
variablesMap.ifPresent(m -> mapMultipartVariables(graphqlRequest, m, parts));
7171
return invocationInputFactory.create(graphqlRequest, request, response);
7272
} else {
73-
List<GraphQLRequest> graphqlRequests = graphQLObjectMapper.readBatchedGraphQLRequest(body);
73+
List<GraphQLRequest> graphqlRequests = graphQLObjectMapper.readBatchedGraphQLRequest(query);
7474
variablesMap.ifPresent(map -> graphqlRequests.forEach(r -> mapMultipartVariables(r, map, parts)));
7575
return invocationInputFactory.create(contextSetting, graphqlRequests, request, response);
7676
}
@@ -103,11 +103,9 @@ private void mapMultipartVariables(GraphQLRequest request,
103103
});
104104
}
105105

106-
private GraphQLRequest buildRequestFromQuery(InputStream inputStream,
106+
private GraphQLRequest buildRequestFromQuery(String query,
107107
GraphQLObjectMapper graphQLObjectMapper,
108108
Map<String, List<Part>> parts) throws IOException {
109-
String query = read(inputStream);
110-
111109
Map<String, Object> variables = null;
112110
final Optional<Part> variablesItem = getPart(parts, "variables");
113111
if (variablesItem.isPresent()) {

src/main/java/graphql/servlet/GraphQLPostInvocationInputParser.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import static graphql.servlet.HttpRequestHandler.APPLICATION_GRAPHQL;
44
import static java.util.stream.Collectors.joining;
55

6+
import graphql.GraphQLException;
67
import graphql.servlet.context.ContextSetting;
78
import graphql.servlet.core.GraphQLObjectMapper;
89
import graphql.servlet.core.internal.GraphQLRequest;
@@ -34,8 +35,12 @@ public GraphQLInvocationInput getGraphQLInvocationInput(HttpServletRequest reque
3435
return invocationInputFactory.create(graphqlRequest, request, response);
3536
}
3637

37-
List<GraphQLRequest> requests = graphQLObjectMapper.readBatchedGraphQLRequest(body);
38-
return invocationInputFactory.create(contextSetting, requests, request, response);
38+
if (isBatchedQuery(body)) {
39+
List<GraphQLRequest> requests = graphQLObjectMapper.readBatchedGraphQLRequest(body);
40+
return invocationInputFactory.create(contextSetting, requests, request, response);
41+
}
42+
43+
throw new GraphQLException("No valid query found in request");
3944
}
4045

4146
}

src/main/java/graphql/servlet/HttpRequestHandlerImpl.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@
22

33
import static graphql.servlet.QueryResponseWriter.createWriter;
44

5+
import graphql.GraphQLException;
56
import graphql.servlet.config.GraphQLConfiguration;
67
import graphql.servlet.core.GraphQLQueryInvoker;
78
import graphql.servlet.input.BatchInputPreProcessResult;
89
import graphql.servlet.input.BatchInputPreProcessor;
910
import graphql.servlet.input.GraphQLBatchedInvocationInput;
1011
import graphql.servlet.input.GraphQLInvocationInput;
1112
import graphql.servlet.input.GraphQLSingleInvocationInput;
13+
import java.util.Optional;
1214
import javax.servlet.http.HttpServletRequest;
1315
import javax.servlet.http.HttpServletResponse;
1416
import lombok.extern.slf4j.Slf4j;
@@ -34,7 +36,19 @@ public void handle(HttpServletRequest request, HttpServletResponse response) {
3436
configuration.getContextSetting()
3537
);
3638
GraphQLInvocationInput invocationInput = invocationInputParser.getGraphQLInvocationInput(request, response);
39+
execute(invocationInput, request, response);
40+
} catch (GraphQLException e) {
41+
response.setStatus(STATUS_BAD_REQUEST);
42+
log.info("Bad request: cannot create invocation input parser", e);
43+
} catch (Throwable t) {
44+
response.setStatus(500);
45+
log.info("Bad request: cannot create invocation input parser", t);
46+
}
47+
}
3748

49+
private void execute(GraphQLInvocationInput invocationInput, HttpServletRequest request,
50+
HttpServletResponse response) {
51+
try {
3852
GraphQLQueryResult queryResult = invoke(invocationInput, request, response);
3953

4054
QueryResponseWriter queryResponseWriter = createWriter(queryResult, configuration.getObjectMapper(),

src/test/groovy/graphql/servlet/AbstractGraphQLHttpServletSpec.groovy

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,7 @@ class AbstractGraphQLHttpServletSpec extends Specification {
392392

393393
def "query over HTTP POST without part or body returns bad request"() {
394394
when:
395+
request.setMethod("POST")
395396
servlet.doPost(request, response)
396397

397398
then:

src/test/groovy/graphql/servlet/DataLoaderDispatchingSpec.groovy

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ class DataLoaderDispatchingSpec extends Specification {
131131
request.addParameter('query', '[{ "query": "query { query(arg:\\"test\\") { echo(arg:\\"test\\") { echo(arg:\\"test\\") } }}" }, { "query": "query{query(arg:\\"test\\") { echo (arg:\\"test\\") { echo(arg:\\"test\\")} }}" },' +
132132
' { "query": "query{queryTwo(arg:\\"test\\") { echo (arg:\\"test\\")}}" }, { "query": "query{queryTwo(arg:\\"test\\") { echo (arg:\\"test\\")}}" }]')
133133
resetCounters()
134+
request.setMethod("GET")
134135

135136
when:
136137
servlet.doGet(request, response)
@@ -156,6 +157,7 @@ class DataLoaderDispatchingSpec extends Specification {
156157
request.addParameter('query', '[{ "query": "query { query(arg:\\"test\\") { echo(arg:\\"test\\") { echo(arg:\\"test\\") } }}" }, { "query": "query{query(arg:\\"test\\") { echo (arg:\\"test\\") { echo(arg:\\"test\\")} }}" },' +
157158
' { "query": "query{queryTwo(arg:\\"test\\") { echo (arg:\\"test\\")}}" }, { "query": "query{queryTwo(arg:\\"test\\") { echo (arg:\\"test\\")}}" }]')
158159
resetCounters()
160+
request.setMethod("GET")
159161

160162
when:
161163
servlet.doGet(request, response)

0 commit comments

Comments
 (0)