Best Webtau code snippet using org.testingisdocumenting.webtau.http.testserver.GraphQLResponseHandler.handle
Source:GraphQLResponseHandler.java
...19import graphql.GraphQL;20import graphql.schema.GraphQLSchema;21import org.eclipse.jetty.server.Handler;22import org.eclipse.jetty.server.Request;23import org.eclipse.jetty.server.handler.AbstractHandler;24import org.testingisdocumenting.webtau.utils.JsonUtils;25import javax.servlet.ServletException;26import javax.servlet.http.HttpServletRequest;27import javax.servlet.http.HttpServletResponse;28import java.io.IOException;29import java.util.Collections;30import java.util.HashMap;31import java.util.Map;32import java.util.Optional;33import java.util.function.Supplier;34import java.util.stream.Collectors;35/*36There is no "standard" for handling GraphQL over HTTP but GraphQL provides some best practices for this which we follow here:37https://graphql.org/learn/serving-over-http/.38Note: In this handler, GraphQL endpoints must start with "/grapqhl".39 */40public class GraphQLResponseHandler extends AbstractHandler {41 private final GraphQL graphQL;42 private final Optional<Handler> additionalHandler;43 private Optional<String> expectedAuthHeaderValue;44 private int successStatusCode = 200;45 public GraphQLResponseHandler(GraphQLSchema schema) {46 this(schema, null);47 }48 public GraphQLResponseHandler(GraphQLSchema schema, Handler additionalHandler) {49 this.graphQL = GraphQL.newGraphQL(schema).build();50 this.additionalHandler = Optional.ofNullable(additionalHandler);51 this.expectedAuthHeaderValue = Optional.empty();52 }53 /**54 * If the endpoint starts with "/graphql", treat it as a GraphQL request, otherwise delegate to55 * the optional additionalHandler.56 */57 @Override58 public void handle(String url, Request baseRequest, HttpServletRequest request,59 HttpServletResponse response) throws IOException, ServletException {60 if (baseRequest.getOriginalURI().startsWith("/graphql")) {61 handleGraphQLPathRequest(request, response);62 } else if (additionalHandler.isPresent()) {63 additionalHandler.get().handle(url, baseRequest, request, response);64 } else {65 response.setStatus(404);66 }67 baseRequest.setHandled(true);68 }69 public <R> R withAuthEnabled(String expectedAuthHeaderValue, Supplier<R> code) {70 this.expectedAuthHeaderValue = Optional.of(expectedAuthHeaderValue);71 try {72 return code.get();73 } finally {74 this.expectedAuthHeaderValue = Optional.empty();75 }76 }77 public void withAuthEnabled(String expectedAuthHeaderValue, Runnable code) {78 withAuthEnabled(expectedAuthHeaderValue, () -> { code.run(); return null; });79 }80 public void withSuccessStatusCode(int successStatusCode, Runnable code) {81 int originalSuccessCode = this.successStatusCode;82 this.successStatusCode = successStatusCode;83 try {84 code.run();85 } finally {86 this.successStatusCode = originalSuccessCode;87 }88 }89 private void handleGraphQLPathRequest(HttpServletRequest request, HttpServletResponse response) throws IOException {90 if (!isAuthenticated(request)) {91 response.setStatus(401);92 return;93 }94 if ("GET".equals(request.getMethod())) {95 String query = request.getParameter("query");96 String operationName = request.getParameter("operationName");97 @SuppressWarnings("unchecked")98 Map<String, Object> variables = (Map<String, Object>) JsonUtils.deserializeAsMap(request.getParameter("variables"));99 handle(query, operationName, variables, response);100 } else if ("POST".equals(request.getMethod())) {101 // Don't currently support the query param for POST102 if ("application/json".equals(request.getContentType())) {103 Map<String, ?> requestBody = JsonUtils.deserializeAsMap(request.getReader().lines().collect(Collectors.joining()));104 String query = (String) requestBody.get("query");105 String operationName = (String) requestBody.get("operationName");106 @SuppressWarnings("unchecked")107 Map<String, Object> variables = (Map<String, Object>) requestBody.get("variables");108 handle(query, operationName, variables, response);109 } else if ("application/graphql".equals(request.getContentType())) {110 String query = request.getReader().lines().collect(Collectors.joining());111 handle(query, (String) null, null, response);112 } else {113 response.setStatus(415);114 }115 } else {116 response.setStatus(405);117 }118 }119 private boolean isAuthenticated(HttpServletRequest request) {120 return expectedAuthHeaderValue121 .map(expectedVal -> expectedVal.equals(request.getHeader("Authorization")))122 .orElse(true);123 }124 private void handle(125 String query,126 String operationName,127 Map<String, Object> variables,128 HttpServletResponse response) throws IOException {129 ExecutionInput executionInput = ExecutionInput.newExecutionInput(query)130 .operationName(operationName)131 .variables(variables == null ? Collections.emptyMap() : variables)132 .build();133 ExecutionResult result = graphQL.execute(executionInput);134 Map<String, Object> responseBody = new HashMap<>();135 if (result.isDataPresent()) {136 responseBody.put("data", result.getData());137 }138 if (result.getErrors() != null && result.getErrors().size() > 0) {...
handle
Using AI Code Generation
1GraphQLResponseHandler handle = new GraphQLResponseHandler();2handle.handle(200, "{}");3handle.handle(200, "{\"errors\": []}");4handle.handle(200, "{\"errors\": [{}]}");5handle.handle(200, "{\"errors\": [{}], \"data\": {}}");6handle.handle(200, "{\"errors\": [{}], \"data\": {\"a\": 1}}");7handle.handle(200, "{\"errors\": [{}], \"data\": {\"a\": {}}}");8handle.handle(200, "{\"errors\": [{}], \"data\": {\"a\": {\"b\": \"c\"}}}");9handle.handle(200, "{\"errors\": [{}], \"data\": {\"a\": {\"b\": \"c\"}}}");
handle
Using AI Code Generation
1import org.testingisdocumenting.webtau.http.testserver.GraphQLResponseHandler2def response = http.post("/graphql", """{ "query": "query { test }" }""")3response.body.handle(GraphQLResponseHandler, (handler) -> {4 handler.assertNoErrors()5 handler.assertData("test", "test data")6})
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!