1+ package graphql .spring .web .reactive .components ;
2+
3+ import graphql .ExecutionInput ;
4+ import graphql .ExecutionResult ;
5+ import graphql .GraphQL ;
6+ import graphql .spring .web .reactive .ExecutionInputCustomizer ;
7+ import graphql .spring .web .reactive .GraphQLInvocationData ;
8+ import org .junit .Test ;
9+ import org .mockito .ArgumentCaptor ;
10+ import org .springframework .web .server .ServerWebExchange ;
11+ import reactor .core .publisher .Mono ;
12+
13+ import java .util .LinkedHashMap ;
14+ import java .util .Map ;
15+
16+ import static java .util .concurrent .CompletableFuture .completedFuture ;
17+ import static org .assertj .core .api .Assertions .assertThat ;
18+ import static org .mockito .ArgumentMatchers .any ;
19+ import static org .mockito .Mockito .mock ;
20+ import static org .mockito .Mockito .verify ;
21+ import static org .mockito .Mockito .when ;
22+
23+ public class DefaultGraphQLInvocationTest {
24+
25+
26+ @ Test
27+ public void testCustomizerIsCalled () {
28+
29+ String query = "query myQuery {foo}" ;
30+ String operationName = "myQuery" ;
31+ Map <String , Object > variables = new LinkedHashMap <>();
32+
33+ DefaultGraphQLInvocation defaultGraphQLInvocation = new DefaultGraphQLInvocation ();
34+ ExecutionInputCustomizer executionInputCustomizer = mock (ExecutionInputCustomizer .class );
35+ defaultGraphQLInvocation .executionInputCustomizer = executionInputCustomizer ;
36+ GraphQL graphQL = mock (GraphQL .class );
37+ defaultGraphQLInvocation .graphQL = graphQL ;
38+ ExecutionResult executionResult = mock (ExecutionResult .class );
39+ when (graphQL .executeAsync (any (ExecutionInput .class ))).thenReturn (completedFuture (executionResult ));
40+
41+ GraphQLInvocationData graphQLInvocationData = new GraphQLInvocationData (query , operationName , variables );
42+ ServerWebExchange serverWebExchange = mock (ServerWebExchange .class );
43+
44+ ArgumentCaptor <ExecutionInput > captor1 = ArgumentCaptor .forClass (ExecutionInput .class );
45+ ArgumentCaptor <ServerWebExchange > captor2 = ArgumentCaptor .forClass (ServerWebExchange .class );
46+ ExecutionInput executionInputResult = mock (ExecutionInput .class );
47+ when (executionInputCustomizer .customizeExecutionInput (captor1 .capture (), captor2 .capture ())).thenReturn (Mono .just (executionInputResult ));
48+
49+ Mono <ExecutionResult > invoke = defaultGraphQLInvocation .invoke (graphQLInvocationData , serverWebExchange );
50+
51+ assertThat (captor1 .getValue ().getQuery ()).isEqualTo (query );
52+ assertThat (captor1 .getValue ().getOperationName ()).isEqualTo (operationName );
53+ assertThat (captor1 .getValue ().getVariables ()).isSameAs (variables );
54+
55+ invoke .block ();
56+
57+ verify (graphQL ).executeAsync (executionInputResult );
58+
59+ }
60+
61+
62+ }
0 commit comments