2121import graphql .GraphQL ;
2222import graphql .execution .instrumentation .ChainedInstrumentation ;
2323import graphql .execution .instrumentation .Instrumentation ;
24+ import graphql .schema .FieldCoordinates ;
25+ import graphql .schema .GraphQLFieldDefinition ;
26+ import graphql .schema .GraphQLObjectType ;
27+ import graphql .schema .GraphQLOutputType ;
2428import graphql .schema .GraphQLSchema ;
29+ import graphql .schema .PropertyDataFetcher ;
2530import graphql .schema .idl .RuntimeWiring ;
2631import graphql .schema .visibility .DefaultGraphqlFieldVisibility ;
2732import graphql .schema .visibility .NoIntrospectionGraphqlFieldVisibility ;
3944import org .springframework .core .io .ClassPathResource ;
4045import org .springframework .graphql .ExecutionGraphQlService ;
4146import org .springframework .graphql .data .method .annotation .support .AnnotatedControllerConfigurer ;
47+ import org .springframework .graphql .data .pagination .EncodingCursorStrategy ;
4248import org .springframework .graphql .execution .BatchLoaderRegistry ;
4349import org .springframework .graphql .execution .DataFetcherExceptionResolver ;
4450import org .springframework .graphql .execution .DataLoaderRegistrar ;
@@ -58,12 +64,11 @@ class GraphQlAutoConfigurationTests {
5864
5965 @ Test
6066 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 ));
6772 }
6873
6974 @ Test
@@ -195,6 +200,29 @@ void shouldRegisterHints() {
195200 assertThat (RuntimeHintsPredicates .resource ().forResource ("graphql/other.graphqls" )).accepts (hints );
196201 }
197202
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+
198226 @ Configuration (proxyBeanMethods = false )
199227 static class CustomGraphQlBuilderConfiguration {
200228
0 commit comments