How to use handle method of org.testingisdocumenting.webtau.http.testserver.GraphQLResponseHandler class

Best Webtau code snippet using org.testingisdocumenting.webtau.http.testserver.GraphQLResponseHandler.handle

Source:GraphQLResponseHandler.java Github

copy

Full Screen

...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) {...

Full Screen

Full Screen

handle

Using AI Code Generation

copy

Full Screen

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\"}}}");

Full Screen

Full Screen

handle

Using AI Code Generation

copy

Full Screen

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})

Full Screen

Full Screen

Automation Testing Tutorials

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.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run Webtau automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful