From d0adceee4be1b11213a54a6e9aa9ae62383b0f16 Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Wed, 24 Nov 2021 10:16:38 +0100 Subject: [PATCH] Configure GraphQlProperties even if GraphQlSource is defined Prior to this commit, the main GraphQL auto-configuration would be guarded with a condition on a `GraphQlSource` bean being missing. While we want to prevent the auto-configuration from registering such a bean if the user configuration already did so, we should still contribute the `GraphQlProperties` bean to the context, as it is required for other purposes. This commit moves the condition directly on the bean method to avoid this. Fixes gh-186 --- .../boot/GraphQlAutoConfiguration.java | 2 +- .../boot/GraphQlAutoConfigurationTests.java | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/GraphQlAutoConfiguration.java b/graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/GraphQlAutoConfiguration.java index ac030a7c..593fce80 100644 --- a/graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/GraphQlAutoConfiguration.java +++ b/graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/GraphQlAutoConfiguration.java @@ -50,13 +50,13 @@ import org.springframework.graphql.execution.RuntimeWiringConfigurer; */ @Configuration(proxyBeanMethods = false) @ConditionalOnClass({GraphQL.class, GraphQlSource.class}) -@ConditionalOnMissingBean(GraphQlSource.class) @EnableConfigurationProperties(GraphQlProperties.class) public class GraphQlAutoConfiguration { private static final Log logger = LogFactory.getLog(GraphQlAutoConfiguration.class); @Bean + @ConditionalOnMissingBean public GraphQlSource graphQlSource(ResourcePatternResolver resourcePatternResolver, GraphQlProperties properties, ObjectProvider exceptionResolversProvider, ObjectProvider instrumentationsProvider, diff --git a/graphql-spring-boot-starter/src/test/java/org/springframework/graphql/boot/GraphQlAutoConfigurationTests.java b/graphql-spring-boot-starter/src/test/java/org/springframework/graphql/boot/GraphQlAutoConfigurationTests.java index eb0fd1ac..bffc3248 100644 --- a/graphql-spring-boot-starter/src/test/java/org/springframework/graphql/boot/GraphQlAutoConfigurationTests.java +++ b/graphql-spring-boot-starter/src/test/java/org/springframework/graphql/boot/GraphQlAutoConfigurationTests.java @@ -28,6 +28,7 @@ import org.springframework.graphql.execution.GraphQlSource; import org.springframework.graphql.execution.MissingSchemaException; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; /** * Tests for {@link GraphQlAutoConfiguration} @@ -74,6 +75,15 @@ class GraphQlAutoConfigurationTests { }); } + @Test + void shouldBackOffWithCustomGraphQlSource() { + this.contextRunner.withUserConfiguration(CustomGraphQlSourceConfiguration.class) + .run((context) -> { + assertThat(context).getBeanNames(GraphQlSource.class).containsOnly("customGraphQlSource"); + assertThat(context).hasSingleBean(GraphQlProperties.class); + }); + } + @Configuration(proxyBeanMethods = false) static class CustomGraphQlBuilderConfiguration { @@ -84,4 +94,14 @@ class GraphQlAutoConfigurationTests { } + @Configuration(proxyBeanMethods = false) + static class CustomGraphQlSourceConfiguration { + + @Bean + GraphQlSource customGraphQlSource() { + return mock(GraphQlSource.class); + } + + } + }