Skip to content

Commit

Permalink
Merge pull request #678 from Netflix/clienttests
Browse files Browse the repository at this point in the history
added tests for client
  • Loading branch information
paulbakker committed Oct 5, 2021
2 parents 6f4c311 + 69dc794 commit 9fd200f
Showing 1 changed file with 55 additions and 24 deletions.
Expand Up @@ -16,24 +16,39 @@

package com.netflix.graphql.client;

import com.netflix.graphql.dgs.client.DefaultGraphQLClient;
import com.netflix.graphql.dgs.client.GraphQLResponse;
import com.netflix.graphql.dgs.client.HttpResponse;
import com.netflix.graphql.dgs.client.RequestExecutor;
import com.netflix.graphql.dgs.client.*;
import org.junit.jupiter.api.Test;
import org.springframework.http.*;
import org.springframework.test.web.client.MockRestServiceServer;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;

import static java.util.Collections.emptyMap;
import static org.springframework.test.web.client.match.MockRestRequestMatchers.*;
import static org.springframework.test.web.client.response.MockRestResponseCreators.withSuccess;

@SuppressWarnings("deprecation")
public class GraphQLResponseJavaTest {

private final String query = "query SubmitReview {" +
"submitReview(review:{movieId:1, description:\"\"}) {" +
"submittedBy" +
"}" +
"}";
private final String jsonResponse = "{" +
"\"data\": {" +
"\"submitReview\": {" +
"\"submittedBy\": \"abc@netflix.com\"" +
"}" +
"}" +
"}";
RestTemplate restTemplate = new RestTemplate();
MockRestServiceServer server = MockRestServiceServer.bindTo(restTemplate).build();

String url = "http://localhost:8080/graphql";

DefaultGraphQLClient client = new DefaultGraphQLClient(url);

RequestExecutor requestExecutor = (url, headers, body) -> {
Expand All @@ -52,13 +67,6 @@ public class GraphQLResponseJavaTest {

@Test
public void responseWithoutHeaders() {
String jsonResponse = "{" +
"\"data\": {" +
"\"submitReview\": {" +
"\"submittedBy\": \"abc@netflix.com\"" +
"}" +
"}" +
"}";

server.expect(requestTo(url))
.andExpect(method(HttpMethod.POST))
Expand All @@ -67,11 +75,7 @@ public void responseWithoutHeaders() {
.andRespond(withSuccess(jsonResponse, MediaType.APPLICATION_JSON));

GraphQLResponse graphQLResponse = client.executeQuery(
"query SubmitReview {" +
"submitReview(review:{movieId:1, description:\"\"}) {" +
"submittedBy" +
"}" +
"}",
query,
emptyMap(), "SubmitReview", requestExecutor
);

Expand All @@ -95,19 +99,46 @@ public void responseWithHeaders() {
.andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
.andRespond(withSuccess(jsonResponse, MediaType.APPLICATION_JSON));

GraphQLResponse graphQLResponse = client.executeQuery(
"query {" +
"submitReview(review:{movieId:1, description:\"\"}) {" +
"submittedBy" +
"}" +
"}",
emptyMap(), requestExecutorWithResponseHeaders
);
GraphQLResponse graphQLResponse = client.executeQuery(query, emptyMap(), requestExecutorWithResponseHeaders);

String submittedBy = graphQLResponse.extractValueAsObject("submitReview.submittedBy", String.class);
assert(submittedBy).contentEquals("abc@netflix.com");
assert(graphQLResponse.getHeaders().get("Content-Type").get(0)).contentEquals("application/json");
server.verify();
}

@Test
public void testCustom() {
server.expect(requestTo(url))
.andExpect(method(HttpMethod.POST))
.andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
.andExpect(content().json("{\"operationName\":\"SubmitReview\"}"))
.andRespond(withSuccess(jsonResponse, MediaType.APPLICATION_JSON));

CustomGraphQLClient client = GraphQLClient.createCustom(url, requestExecutor);
GraphQLResponse graphQLResponse = client.executeQuery(query, emptyMap(), "SubmitReview");
String submittedBy = graphQLResponse.extractValueAsObject("submitReview.submittedBy", String.class);
assert(submittedBy).contentEquals("abc@netflix.com");
server.verify();
}

@Test
public void testCustomMono() {
server.expect(requestTo(url))
.andExpect(method(HttpMethod.POST))
.andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
.andExpect(content().json("{\"operationName\":\"SubmitReview\"}"))
.andRespond(withSuccess(jsonResponse, MediaType.APPLICATION_JSON));

CustomMonoGraphQLClient client = MonoGraphQLClient.createCustomReactive(url, (requestUrl, headers, body) -> {
HttpHeaders httpHeaders = new HttpHeaders();
headers.forEach(httpHeaders::addAll);
ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.POST, new HttpEntity<>(body, httpHeaders),String.class);
return Mono.just(new HttpResponse(exchange.getStatusCodeValue(), exchange.getBody(), exchange.getHeaders()));
});
Mono<GraphQLResponse> graphQLResponse = client.reactiveExecuteQuery(query, emptyMap(), "SubmitReview");
String submittedBy = graphQLResponse.map(r -> r.extractValueAsObject("submitReview.submittedBy", String.class)).block();
assert(submittedBy).contentEquals("abc@netflix.com");
server.verify();
}
}

0 comments on commit 9fd200f

Please sign in to comment.