From eddd0249a9fdcacccf49a93f6be0e74121016c4f Mon Sep 17 00:00:00 2001 From: simon jakubowski Date: Fri, 13 Dec 2019 15:27:39 +0100 Subject: [PATCH 1/2] Set characterEncoding for the HttpServletResponse of the SingleQueryResponseWriter; Added Test for the SingleQueryResponseWriter; --- .../servlet/SingleQueryResponseWriter.java | 8 ++-- .../SingleQueryResponseWriterTest.groovy | 40 +++++++++++++++++++ 2 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 graphql-java-servlet/src/test/groovy/graphql/servlet/SingleQueryResponseWriterTest.groovy diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/SingleQueryResponseWriter.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/SingleQueryResponseWriter.java index 671ebdf7..77ae2ed7 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/SingleQueryResponseWriter.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/SingleQueryResponseWriter.java @@ -2,11 +2,12 @@ import graphql.ExecutionResult; import graphql.kickstart.execution.GraphQLObjectMapper; +import lombok.RequiredArgsConstructor; + import java.io.IOException; import java.nio.charset.StandardCharsets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import lombok.RequiredArgsConstructor; @RequiredArgsConstructor class SingleQueryResponseWriter implements QueryResponseWriter { @@ -16,8 +17,9 @@ class SingleQueryResponseWriter implements QueryResponseWriter { @Override public void write(HttpServletRequest request, HttpServletResponse response) throws IOException { - response.setContentType(HttpRequestHandler.APPLICATION_JSON_UTF8); - response.setStatus(HttpRequestHandler.STATUS_OK); + response.setContentType(APPLICATION_JSON_UTF8); + response.setStatus(STATUS_OK); + response.setCharacterEncoding(StandardCharsets.UTF_8.displayName()); String responseContent = graphQLObjectMapper.serializeResultAsJson(result); response.setContentLength(responseContent.getBytes(StandardCharsets.UTF_8).length); response.getWriter().write(responseContent); diff --git a/graphql-java-servlet/src/test/groovy/graphql/servlet/SingleQueryResponseWriterTest.groovy b/graphql-java-servlet/src/test/groovy/graphql/servlet/SingleQueryResponseWriterTest.groovy new file mode 100644 index 00000000..a70acef8 --- /dev/null +++ b/graphql-java-servlet/src/test/groovy/graphql/servlet/SingleQueryResponseWriterTest.groovy @@ -0,0 +1,40 @@ +package graphql.servlet + +import com.fasterxml.jackson.databind.ObjectMapper +import graphql.ExecutionResultImpl +import graphql.kickstart.execution.GraphQLObjectMapper +import org.codehaus.groovy.runtime.StringBufferWriter +import spock.lang.Specification +import spock.lang.Unroll + +import javax.servlet.http.HttpServletRequest +import javax.servlet.http.HttpServletResponse + +class SingleQueryResponseWriterTest extends Specification { + + @Unroll + def "should write utf8 results into the response with content #result"() { + given: + def graphQLObjectMapperMock = GraphQLObjectMapper.newBuilder().withObjectMapperProvider({ new ObjectMapper() }).build() + graphQLObjectMapperMock.getJacksonMapper() >> new ObjectMapper() + + def requestMock = Mock(HttpServletRequest) + def responseMock = Mock(HttpServletResponse) + + def responseContentBuffer = new StringBuffer() + responseMock.getWriter() >> new PrintWriter(new StringBufferWriter(responseContentBuffer)) + 1 * responseMock.setContentLength(expectedContentLenght) + 1 * responseMock.setCharacterEncoding("UTF-8") + + expect: + def writer = new SingleQueryResponseWriter(new ExecutionResultImpl(result, []), graphQLObjectMapperMock) + writer.write(requestMock, responseMock) + + responseContentBuffer.toString() == expectedResponseContent + + where: + result || expectedContentLenght | expectedResponseContent + [testValue: "abcde"] || 30 | """{"data":{"testValue":"abcde"}}""" + [testValue: "äöüüöß"] || 37 | """{"data":{"testValue":"äöüüöß"}}""" + } +} From d18efe3d807d103fa3b9325bb40a5d8e8646b51c Mon Sep 17 00:00:00 2001 From: simon jakubowski Date: Tue, 18 Feb 2020 12:57:41 +0100 Subject: [PATCH 2/2] moved SingleQueryResponseWriterTest to graphql.kickstart.servlet --- .../kickstart/servlet/SingleQueryResponseWriter.java | 6 +++--- .../servlet/SingleQueryResponseWriterTest.groovy | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) rename graphql-java-servlet/src/test/groovy/graphql/{ => kickstart}/servlet/SingleQueryResponseWriterTest.groovy (97%) diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/SingleQueryResponseWriter.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/SingleQueryResponseWriter.java index 77ae2ed7..417cad69 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/SingleQueryResponseWriter.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/SingleQueryResponseWriter.java @@ -17,9 +17,9 @@ class SingleQueryResponseWriter implements QueryResponseWriter { @Override public void write(HttpServletRequest request, HttpServletResponse response) throws IOException { - response.setContentType(APPLICATION_JSON_UTF8); - response.setStatus(STATUS_OK); - response.setCharacterEncoding(StandardCharsets.UTF_8.displayName()); + response.setContentType(HttpRequestHandler.APPLICATION_JSON_UTF8); + response.setStatus(HttpRequestHandler.STATUS_OK); + response.setCharacterEncoding(StandardCharsets.UTF_8.name()); String responseContent = graphQLObjectMapper.serializeResultAsJson(result); response.setContentLength(responseContent.getBytes(StandardCharsets.UTF_8).length); response.getWriter().write(responseContent); diff --git a/graphql-java-servlet/src/test/groovy/graphql/servlet/SingleQueryResponseWriterTest.groovy b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/SingleQueryResponseWriterTest.groovy similarity index 97% rename from graphql-java-servlet/src/test/groovy/graphql/servlet/SingleQueryResponseWriterTest.groovy rename to graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/SingleQueryResponseWriterTest.groovy index a70acef8..4c7a6ca9 100644 --- a/graphql-java-servlet/src/test/groovy/graphql/servlet/SingleQueryResponseWriterTest.groovy +++ b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/SingleQueryResponseWriterTest.groovy @@ -1,4 +1,4 @@ -package graphql.servlet +package graphql.kickstart.servlet import com.fasterxml.jackson.databind.ObjectMapper import graphql.ExecutionResultImpl