21
21
import graphql .GraphQL ;
22
22
import graphql .execution .instrumentation .ChainedInstrumentation ;
23
23
import graphql .execution .instrumentation .Instrumentation ;
24
+ import graphql .schema .FieldCoordinates ;
25
+ import graphql .schema .GraphQLFieldDefinition ;
26
+ import graphql .schema .GraphQLObjectType ;
27
+ import graphql .schema .GraphQLOutputType ;
24
28
import graphql .schema .GraphQLSchema ;
29
+ import graphql .schema .PropertyDataFetcher ;
25
30
import graphql .schema .idl .RuntimeWiring ;
26
31
import graphql .schema .visibility .DefaultGraphqlFieldVisibility ;
27
32
import graphql .schema .visibility .NoIntrospectionGraphqlFieldVisibility ;
39
44
import org .springframework .core .io .ClassPathResource ;
40
45
import org .springframework .graphql .ExecutionGraphQlService ;
41
46
import org .springframework .graphql .data .method .annotation .support .AnnotatedControllerConfigurer ;
47
+ import org .springframework .graphql .data .pagination .EncodingCursorStrategy ;
42
48
import org .springframework .graphql .execution .BatchLoaderRegistry ;
43
49
import org .springframework .graphql .execution .DataFetcherExceptionResolver ;
44
50
import org .springframework .graphql .execution .DataLoaderRegistrar ;
@@ -58,12 +64,11 @@ class GraphQlAutoConfigurationTests {
58
64
59
65
@ Test
60
66
void shouldContributeDefaultBeans () {
61
- this .contextRunner .run ((context ) -> {
62
- assertThat (context ).hasSingleBean (GraphQlSource .class );
63
- assertThat (context ).hasSingleBean (BatchLoaderRegistry .class );
64
- assertThat (context ).hasSingleBean (ExecutionGraphQlService .class );
65
- assertThat (context ).hasSingleBean (AnnotatedControllerConfigurer .class );
66
- });
67
+ this .contextRunner .run ((context ) -> assertThat (context ).hasSingleBean (GraphQlSource .class )
68
+ .hasSingleBean (BatchLoaderRegistry .class )
69
+ .hasSingleBean (ExecutionGraphQlService .class )
70
+ .hasSingleBean (AnnotatedControllerConfigurer .class )
71
+ .hasSingleBean (EncodingCursorStrategy .class ));
67
72
}
68
73
69
74
@ Test
@@ -195,6 +200,29 @@ void shouldRegisterHints() {
195
200
assertThat (RuntimeHintsPredicates .resource ().forResource ("graphql/other.graphqls" )).accepts (hints );
196
201
}
197
202
203
+ @ Test
204
+ void shouldContributeConnectionTypeDefinitionConfigurer () {
205
+ this .contextRunner .withUserConfiguration (CustomGraphQlBuilderConfiguration .class ).run ((context ) -> {
206
+ GraphQlSource graphQlSource = context .getBean (GraphQlSource .class );
207
+ GraphQLSchema schema = graphQlSource .schema ();
208
+ GraphQLOutputType bookConnection = schema .getQueryType ().getField ("books" ).getType ();
209
+ assertThat (bookConnection ).isNotNull ().isInstanceOf (GraphQLObjectType .class );
210
+ assertThat ((GraphQLObjectType ) bookConnection )
211
+ .satisfies ((connection ) -> assertThat (connection .getFieldDefinition ("edges" )).isNotNull ());
212
+ });
213
+ }
214
+
215
+ @ Test
216
+ void shouldContributeConnectionDataFetcher () {
217
+ this .contextRunner .withUserConfiguration (CustomGraphQlBuilderConfiguration .class ).run ((context ) -> {
218
+ GraphQlSource graphQlSource = context .getBean (GraphQlSource .class );
219
+ GraphQLFieldDefinition books = graphQlSource .schema ().getQueryType ().getField ("books" );
220
+ FieldCoordinates booksCoordinates = FieldCoordinates .coordinates ("Query" , "books" );
221
+ assertThat (graphQlSource .schema ().getCodeRegistry ().getDataFetcher (booksCoordinates , books ))
222
+ .isNotInstanceOf (PropertyDataFetcher .class );
223
+ });
224
+ }
225
+
198
226
@ Configuration (proxyBeanMethods = false )
199
227
static class CustomGraphQlBuilderConfiguration {
200
228
0 commit comments