From de8e2540b7192242b0ff25ed8bf6e845dea38a11 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Fri, 14 May 2021 06:56:53 +0100 Subject: [PATCH] Polishing tests --- .../ReactorDataFetcherAdapterTests.java | 75 ++++++++----------- .../graphql/web/GraphQLDataFetchers.java | 8 +- .../webflux/GraphQLWebSocketHandlerTests.java | 4 +- .../webmvc/GraphQLWebSocketHandlerTests.java | 4 +- 4 files changed, 41 insertions(+), 50 deletions(-) diff --git a/spring-graphql/src/test/java/org/springframework/graphql/support/ReactorDataFetcherAdapterTests.java b/spring-graphql/src/test/java/org/springframework/graphql/support/ReactorDataFetcherAdapterTests.java index f5b4e71c..73086b86 100644 --- a/spring-graphql/src/test/java/org/springframework/graphql/support/ReactorDataFetcherAdapterTests.java +++ b/spring-graphql/src/test/java/org/springframework/graphql/support/ReactorDataFetcherAdapterTests.java @@ -17,14 +17,13 @@ package org.springframework.graphql.support; import java.nio.charset.StandardCharsets; import java.time.Duration; -import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.function.Consumer; import graphql.ExecutionInput; import graphql.ExecutionResult; import graphql.GraphQL; +import graphql.schema.DataFetcher; import graphql.schema.idl.RuntimeWiring; import org.junit.jupiter.api.Test; import org.reactivestreams.Publisher; @@ -43,53 +42,47 @@ public class ReactorDataFetcherAdapterTests { @Test void monoDataFetcher() throws Exception { + GraphQL graphQL = graphQL("type Query { greeting: String }", + "Query", "greeting", env -> + Mono.deferContextual(context -> { + Object name = context.get("name"); + return Mono.delay(Duration.ofMillis(50)).map(aLong -> "Hello " + name); + })); - GraphQL graphQL = initGraphQL("type Query { greeting: String }", builder -> { - builder.type("Query", typeBuilder -> typeBuilder.dataFetcher("greeting", - env -> Mono.deferContextual(context -> { - Object name = context.get("name"); - return Mono.delay(Duration.ofMillis(50)).map(aLong -> "Hello " + name); - }))); - }); - - ExecutionInput executionInput = initExecutionInput("{ greeting }", Context.of("name", "007")); - Map data = graphQL.executeAsync(executionInput).get().getData(); + ExecutionInput input = executionInput("{ greeting }", Context.of("name", "007")); + Map data = graphQL.executeAsync(input).get().getData(); assertThat(data).hasSize(1).containsEntry("greeting", "Hello 007"); } @Test void fluxDataFetcher() throws Exception { + GraphQL graphQL = graphQL("type Query { greetings: [String] }", + "Query", "greetings", env -> + Mono.delay(Duration.ofMillis(50)).flatMapMany(aLong -> + Flux.deferContextual(context -> { + String name = context.get("name"); + return Flux.just("Hi", "Bonjour", "Hola").map(s -> s + " " + name); + }))); - GraphQL graphQL = initGraphQL("type Query { greetings: [String] }", builder -> { - builder.type("Query", typeBuilder -> typeBuilder.dataFetcher("greetings", - env -> Mono.delay(Duration.ofMillis(50)).flatMapMany(aLong -> - Flux.deferContextual(context -> { - String name = context.get("name"); - return Flux.just("Hi", "Bonjour", "Hola").map(s -> s + " " + name); - })))); - }); + ExecutionInput input = executionInput("{ greetings }", Context.of("name", "007")); + Map data = graphQL.executeAsync(input).get().getData(); - ExecutionInput executionInput = initExecutionInput("{ greetings }", Context.of("name", "007")); - - Map data = graphQL.executeAsync(executionInput).get().getData(); assertThat((List) data.get("greetings")).containsExactly("Hi 007", "Bonjour 007", "Hola 007"); } @Test void fluxDataFetcherSubscription() throws Exception { + GraphQL graphQL = graphQL( + "type Query { greeting: String } type Subscription { greetings: String }", + "Subscription", "greetings", env -> + Mono.delay(Duration.ofMillis(50)).flatMapMany(aLong -> + Flux.deferContextual(context -> { + String name = context.get("name"); + return Flux.just("Hi", "Bonjour", "Hola").map(s -> s + " " + name); + }))); - GraphQL graphQL = initGraphQL( - "type Query { greeting: String } type Subscription { greetings: String }", builder -> - builder.type("Subscription", typeBuilder -> typeBuilder.dataFetcher("greetings", - env -> Mono.delay(Duration.ofMillis(50)).flatMapMany(aLong -> - Flux.deferContextual(context -> { - String name = context.get("name"); - return Flux.just("Hi", "Bonjour", "Hola").map(s -> s + " " + name); - })) - ))); - - ExecutionInput input = initExecutionInput("subscription { greetings }", Context.of("name", "007")); + ExecutionInput input = executionInput("subscription { greetings }", Context.of("name", "007")); Publisher publisher = graphQL.executeAsync(input).get().getData(); List actual = Flux.from(publisher) @@ -102,20 +95,18 @@ public class ReactorDataFetcherAdapterTests { assertThat(actual).containsExactly("Hi 007", "Bonjour 007", "Hola 007"); } - - private GraphQL initGraphQL(String schemaValue, Consumer consumer) { - RuntimeWiring.Builder wiringBuilder = RuntimeWiring.newRuntimeWiring(); - consumer.accept(wiringBuilder); - + private GraphQL graphQL(String schemaValue, String typeName, String fieldName, DataFetcher dataFetcher) { + RuntimeWiring wiring = RuntimeWiring.newRuntimeWiring() + .type(typeName, builder -> builder.dataFetcher(fieldName, dataFetcher)) + .build(); return GraphQLSource.builder() .schemaResource(new ByteArrayResource(schemaValue.getBytes(StandardCharsets.UTF_8))) - .runtimeWiring(wiringBuilder.build()) - .typeVisitors(Collections.singletonList(ReactorDataFetcherAdapter.TYPE_VISITOR)) + .runtimeWiring(wiring) .build() .graphQL(); } - private ExecutionInput initExecutionInput(String query, Context reactorContext) { + private ExecutionInput executionInput(String query, Context reactorContext) { ExecutionInput input = ExecutionInput.newExecutionInput().query(query).build(); ReactorDataFetcherAdapter.addReactorContext(input, reactorContext); return input; diff --git a/spring-graphql/src/test/java/org/springframework/graphql/web/GraphQLDataFetchers.java b/spring-graphql/src/test/java/org/springframework/graphql/web/GraphQLDataFetchers.java index 0d833cba..df0acf99 100644 --- a/spring-graphql/src/test/java/org/springframework/graphql/web/GraphQLDataFetchers.java +++ b/spring-graphql/src/test/java/org/springframework/graphql/web/GraphQLDataFetchers.java @@ -16,15 +16,15 @@ public class GraphQLDataFetchers { public static DataFetcher getBookByIdDataFetcher() { - return environment -> books.stream() - .filter(book -> book.getId().equals(environment.getArgument("id"))) + return env -> books.stream() + .filter(book -> book.getId().equals(env.getArgument("id"))) .findFirst() .orElse(null); } public static DataFetcher getBooksOnSale() { - return environment -> Flux.fromIterable(books) - .filter(book -> book.getPageCount() >= (int) environment.getArgument("minPages")); + return env -> Flux.fromIterable(books) + .filter(book -> book.getPageCount() >= (int) env.getArgument("minPages")); } } diff --git a/spring-graphql/src/test/java/org/springframework/graphql/web/webflux/GraphQLWebSocketHandlerTests.java b/spring-graphql/src/test/java/org/springframework/graphql/web/webflux/GraphQLWebSocketHandlerTests.java index d7166518..831c2edb 100644 --- a/spring-graphql/src/test/java/org/springframework/graphql/web/webflux/GraphQLWebSocketHandlerTests.java +++ b/spring-graphql/src/test/java/org/springframework/graphql/web/webflux/GraphQLWebSocketHandlerTests.java @@ -276,14 +276,14 @@ public class GraphQLWebSocketHandlerTests { WebGraphQLHandler graphQLHandler = WebInterceptor.createHandler( (interceptors != null ? interceptors : Collections.emptyList()), - new ExecutionGraphQLService(initGraphQLSource())); + new ExecutionGraphQLService(graphQLSource())); return new GraphQLWebSocketHandler(graphQLHandler, ServerCodecConfigurer.create(), (initTimeoutDuration != null ? initTimeoutDuration : Duration.ofSeconds(60))); } - private static GraphQLSource initGraphQLSource() { + private static GraphQLSource graphQLSource() { RuntimeWiring.Builder builder = RuntimeWiring.newRuntimeWiring(); builder.type(newTypeWiring("Query").dataFetcher("bookById", GraphQLDataFetchers.getBookByIdDataFetcher())); builder.type(newTypeWiring("Subscription").dataFetcher("bookSearch", GraphQLDataFetchers.getBooksOnSale())); diff --git a/spring-graphql/src/test/java/org/springframework/graphql/web/webmvc/GraphQLWebSocketHandlerTests.java b/spring-graphql/src/test/java/org/springframework/graphql/web/webmvc/GraphQLWebSocketHandlerTests.java index 07db8d1f..bc0e0cbb 100644 --- a/spring-graphql/src/test/java/org/springframework/graphql/web/webmvc/GraphQLWebSocketHandlerTests.java +++ b/spring-graphql/src/test/java/org/springframework/graphql/web/webmvc/GraphQLWebSocketHandlerTests.java @@ -260,7 +260,7 @@ public class GraphQLWebSocketHandlerTests { try { WebGraphQLHandler graphQLHandler = WebInterceptor.createHandler( (interceptors != null ? interceptors : Collections.emptyList()), - new ExecutionGraphQLService(initGraphQLSource())); + new ExecutionGraphQLService(graphQLSource())); return new GraphQLWebSocketHandler(graphQLHandler, converter, (initTimeoutDuration != null ? initTimeoutDuration : Duration.ofSeconds(60))); @@ -270,7 +270,7 @@ public class GraphQLWebSocketHandlerTests { } } - private static GraphQLSource initGraphQLSource() throws Exception { + private static GraphQLSource graphQLSource() { RuntimeWiring.Builder builder = RuntimeWiring.newRuntimeWiring(); builder.type(newTypeWiring("Query").dataFetcher("bookById", GraphQLDataFetchers.getBookByIdDataFetcher())); builder.type(newTypeWiring("Subscription").dataFetcher("bookSearch", GraphQLDataFetchers.getBooksOnSale()));