mirror of
https://gitee.com/dcren/initializr.git
synced 2025-09-21 02:58:08 +08:00
Improve auto-configuration tests
Closes gh-484
This commit is contained in:
@@ -41,7 +41,6 @@ import io.spring.initializr.web.ui.UiController;
|
||||
|
||||
import org.springframework.beans.factory.ObjectProvider;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
||||
import org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.cache.JCacheManagerCustomizer;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
@@ -68,7 +67,7 @@ import org.springframework.web.servlet.resource.ResourceUrlProvider;
|
||||
*/
|
||||
@Configuration
|
||||
@EnableConfigurationProperties(InitializrProperties.class)
|
||||
@AutoConfigureAfter({ CacheAutoConfiguration.class, JacksonAutoConfiguration.class,
|
||||
@AutoConfigureAfter({ JacksonAutoConfiguration.class,
|
||||
RestTemplateAutoConfiguration.class })
|
||||
public class InitializrAutoConfiguration {
|
||||
|
||||
@@ -103,6 +102,7 @@ public class InitializrAutoConfiguration {
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
public ProjectResourceLocator projectResourceLocator() {
|
||||
return new ProjectResourceLocator();
|
||||
}
|
||||
|
@@ -16,14 +16,27 @@
|
||||
|
||||
package io.spring.initializr.web.autoconfigure;
|
||||
|
||||
import io.spring.initializr.generator.ProjectGenerator;
|
||||
import io.spring.initializr.generator.ProjectRequestResolver;
|
||||
import io.spring.initializr.generator.ProjectResourceLocator;
|
||||
import io.spring.initializr.metadata.DependencyMetadataProvider;
|
||||
import io.spring.initializr.metadata.InitializrMetadataProvider;
|
||||
import io.spring.initializr.util.TemplateRenderer;
|
||||
import io.spring.initializr.web.project.MainController;
|
||||
import io.spring.initializr.web.ui.UiController;
|
||||
import org.junit.Test;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
import org.springframework.beans.DirectFieldAccessor;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigurations;
|
||||
import org.springframework.boot.autoconfigure.cache.JCacheManagerCustomizer;
|
||||
import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration;
|
||||
import org.springframework.boot.test.context.FilteredClassLoader;
|
||||
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
||||
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
|
||||
import org.springframework.boot.web.client.RestTemplateCustomizer;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
@@ -37,6 +50,7 @@ import static org.mockito.Mockito.mock;
|
||||
* Tests for {@link InitializrAutoConfiguration}.
|
||||
*
|
||||
* @author Stephane Nicoll
|
||||
* @author Madhura Bhave
|
||||
*/
|
||||
public class InitializrAutoConfigurationTests {
|
||||
|
||||
@@ -44,6 +58,104 @@ public class InitializrAutoConfigurationTests {
|
||||
.withConfiguration(AutoConfigurations.of(RestTemplateAutoConfiguration.class,
|
||||
JacksonAutoConfiguration.class, InitializrAutoConfiguration.class));
|
||||
|
||||
@Test
|
||||
public void autoConfigRegistersProjectGenerator() {
|
||||
this.contextRunner.run(
|
||||
(context) -> assertThat(context).hasSingleBean(ProjectGenerator.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void autoConfigWhenProjectGeneratorBeanPresentDoesNotRegisterProjectGenerator() {
|
||||
this.contextRunner
|
||||
.withUserConfiguration(CustomProjectGeneratorConfiguration.class)
|
||||
.run((context) -> {
|
||||
assertThat(context).hasSingleBean(ProjectGenerator.class);
|
||||
assertThat(context).hasBean("testProjectGenerator");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void autoConfigRegistersTemplateRenderer() {
|
||||
this.contextRunner.run(
|
||||
(context) -> assertThat(context).hasSingleBean(TemplateRenderer.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void autoConfigWhenTemplateRendererBeanPresentDoesNotRegisterTemplateRenderer() {
|
||||
this.contextRunner
|
||||
.withUserConfiguration(CustomTemplateRendererConfiguration.class)
|
||||
.run((context) -> {
|
||||
assertThat(context).hasSingleBean(TemplateRenderer.class);
|
||||
assertThat(context).hasBean("testTemplateRenderer");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void autoConfigRegistersProjectRequestResolver() {
|
||||
this.contextRunner.run((context) -> assertThat(context)
|
||||
.hasSingleBean(ProjectRequestResolver.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void autoConfigWhenProjectRequestResolverBeanPresentDoesNotRegisterProjectRequestResolver() {
|
||||
this.contextRunner
|
||||
.withUserConfiguration(CustomProjectRequestResolverConfiguration.class)
|
||||
.run((context) -> {
|
||||
assertThat(context).hasSingleBean(ProjectRequestResolver.class);
|
||||
assertThat(context).hasBean("testProjectRequestResolver");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void autoConfigRegistersProjectResourceLocator() {
|
||||
this.contextRunner.run((context) -> assertThat(context)
|
||||
.hasSingleBean(ProjectResourceLocator.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void autoConfigWhenProjectResourceLocatorBeanPresentDoesNotRegisterProjectResourceLocator() {
|
||||
this.contextRunner
|
||||
.withUserConfiguration(CustomProjectResourceLocatorConfiguration.class)
|
||||
.run((context) -> {
|
||||
assertThat(context).hasSingleBean(ProjectResourceLocator.class);
|
||||
assertThat(context).hasBean("testProjectResourceLocator");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void autoConfigRegistersInitializrMetadataProvider() {
|
||||
this.contextRunner.run((context) -> assertThat(context)
|
||||
.hasSingleBean(InitializrMetadataProvider.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void autoConfigWhenInitializrMetadataProviderBeanPresentDoesNotRegisterInitializrMetadataProvider() {
|
||||
this.contextRunner
|
||||
.withUserConfiguration(
|
||||
CustomInitializrMetadataProviderConfiguration.class)
|
||||
.run((context) -> {
|
||||
assertThat(context).hasSingleBean(InitializrMetadataProvider.class);
|
||||
assertThat(context).hasBean("testInitializrMetadataProvider");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void autoConfigRegistersDependencyMetadataProvider() {
|
||||
this.contextRunner.run((context) -> assertThat(context)
|
||||
.hasSingleBean(DependencyMetadataProvider.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void autoConfigWhenDependencyMetadataProviderBeanPresentDoesNotRegisterDependencyMetadataProvider() {
|
||||
this.contextRunner
|
||||
.withUserConfiguration(
|
||||
CustomDependencyMetadataProviderConfiguration.class)
|
||||
.run((context) -> {
|
||||
assertThat(context).hasSingleBean(DependencyMetadataProvider.class);
|
||||
assertThat(context).hasBean("testDependencyMetadataProvider");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void customRestTemplateBuilderIsUsed() {
|
||||
this.contextRunner.withUserConfiguration(CustomRestTemplateConfiguration.class)
|
||||
@@ -57,6 +169,45 @@ public class InitializrAutoConfigurationTests {
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void webConfiguration() {
|
||||
WebApplicationContextRunner webContextRunner = new WebApplicationContextRunner()
|
||||
.withConfiguration(
|
||||
AutoConfigurations.of(RestTemplateAutoConfiguration.class,
|
||||
JacksonAutoConfiguration.class,
|
||||
HttpMessageConvertersAutoConfiguration.class,
|
||||
WebMvcAutoConfiguration.class,
|
||||
InitializrAutoConfiguration.class));
|
||||
webContextRunner.run((context) -> {
|
||||
assertThat(context).hasSingleBean(InitializrWebConfig.class);
|
||||
assertThat(context).hasSingleBean(MainController.class);
|
||||
assertThat(context).hasSingleBean(UiController.class);
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void webConfigurationConditionalOnWebApplication() {
|
||||
this.contextRunner.run((context) -> {
|
||||
assertThat(context).doesNotHaveBean(InitializrWebConfig.class);
|
||||
assertThat(context).doesNotHaveBean(MainController.class);
|
||||
assertThat(context).doesNotHaveBean(UiController.class);
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void cacheConfiguration() {
|
||||
this.contextRunner.run((context) -> assertThat(context)
|
||||
.hasSingleBean(JCacheManagerCustomizer.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void cacheConfigurationConditionalOnClass() {
|
||||
this.contextRunner
|
||||
.withClassLoader(new FilteredClassLoader("javax.cache.CacheManager"))
|
||||
.run((context) -> assertThat(context)
|
||||
.doesNotHaveBean(JCacheManagerCustomizer.class));
|
||||
}
|
||||
|
||||
@Configuration
|
||||
static class CustomRestTemplateConfiguration {
|
||||
|
||||
@@ -70,4 +221,64 @@ public class InitializrAutoConfigurationTests {
|
||||
|
||||
}
|
||||
|
||||
@Configuration
|
||||
static class CustomProjectGeneratorConfiguration {
|
||||
|
||||
@Bean
|
||||
public ProjectGenerator testProjectGenerator() {
|
||||
return Mockito.mock(ProjectGenerator.class);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Configuration
|
||||
static class CustomTemplateRendererConfiguration {
|
||||
|
||||
@Bean
|
||||
public TemplateRenderer testTemplateRenderer() {
|
||||
return Mockito.mock(TemplateRenderer.class);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Configuration
|
||||
static class CustomProjectRequestResolverConfiguration {
|
||||
|
||||
@Bean
|
||||
public ProjectRequestResolver testProjectRequestResolver() {
|
||||
return Mockito.mock(ProjectRequestResolver.class);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Configuration
|
||||
static class CustomProjectResourceLocatorConfiguration {
|
||||
|
||||
@Bean
|
||||
public ProjectResourceLocator testProjectResourceLocator() {
|
||||
return Mockito.mock(ProjectResourceLocator.class);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Configuration
|
||||
static class CustomInitializrMetadataProviderConfiguration {
|
||||
|
||||
@Bean
|
||||
public InitializrMetadataProvider testInitializrMetadataProvider() {
|
||||
return Mockito.mock(InitializrMetadataProvider.class);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Configuration
|
||||
static class CustomDependencyMetadataProviderConfiguration {
|
||||
|
||||
@Bean
|
||||
public DependencyMetadataProvider testDependencyMetadataProvider() {
|
||||
return Mockito.mock(DependencyMetadataProvider.class);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user