Skip to content

Commit eeb784e

Browse files
committed
Add reactor-test if the project has a reactive dependency which is not a Spring Boot starter
Closes gh-1974
1 parent 1de118a commit eeb784e

File tree

3 files changed

+40
-2
lines changed

3 files changed

+40
-2
lines changed

start-site/src/main/java/io/spring/start/site/extension/dependency/DependencyProjectGenerationConfiguration.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ AddTestStartersBuildCustomizer addTestStartersBuildCustomizer() {
6565
}
6666

6767
@Bean
68-
@ConditionalOnPlatformVersion("[3.4.0,4.0.0-RC1]")
6968
public ReactorTestBuildCustomizer reactorTestBuildCustomizer(ProjectDescription description) {
7069
return new ReactorTestBuildCustomizer(this.metadata, description);
7170
}

start-site/src/main/java/io/spring/start/site/extension/dependency/reactor/ReactorTestBuildCustomizer.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222
import io.spring.initializr.generator.project.ProjectDescription;
2323
import io.spring.initializr.generator.spring.build.BuildCustomizer;
2424
import io.spring.initializr.generator.spring.build.BuildMetadataResolver;
25+
import io.spring.initializr.generator.version.Version;
26+
import io.spring.initializr.generator.version.VersionParser;
27+
import io.spring.initializr.generator.version.VersionRange;
2528
import io.spring.initializr.metadata.InitializrMetadata;
2629

2730
/**
@@ -30,22 +33,46 @@
3033
*
3134
* @author Stephane Nicoll
3235
* @author Madhura Bhave
36+
* @author Moritz Halbritter
3337
*/
3438
public class ReactorTestBuildCustomizer implements BuildCustomizer<Build> {
3539

40+
private static final VersionRange SPRING_BOOT_4_0_RC2_OR_LATER = VersionParser.DEFAULT.parseRange("4.0.0-RC2");
41+
3642
private final BuildMetadataResolver buildResolver;
3743

44+
private final Version bootVersion;
45+
3846
public ReactorTestBuildCustomizer(InitializrMetadata metadata, ProjectDescription description) {
47+
this.bootVersion = description.getPlatformVersion();
3948
this.buildResolver = new BuildMetadataResolver(metadata, description.getPlatformVersion());
4049
}
4150

4251
@Override
4352
public void customize(Build build) {
44-
if (this.buildResolver.hasFacet(build, "reactive")) {
53+
if (shouldAddReactorTestDependency(build)) {
4554
build.dependencies()
4655
.add("reactor-test", Dependency.withCoordinates("io.projectreactor", "reactor-test")
4756
.scope(DependencyScope.TEST_COMPILE));
4857
}
4958
}
5059

60+
private boolean shouldAddReactorTestDependency(Build build) {
61+
if (SPRING_BOOT_4_0_RC2_OR_LATER.match(this.bootVersion)) {
62+
// Starting with Boot 4.0.0-RC2, all Spring Boot reactive starters have a
63+
// dependency on io.projectreactor:reactor-test in their test starter
64+
return this.buildResolver.dependencies(build)
65+
.anyMatch((dependency) -> hasReactiveFacet(dependency) && !isSpringBootStarter(dependency));
66+
}
67+
return this.buildResolver.hasFacet(build, "reactive");
68+
}
69+
70+
private boolean hasReactiveFacet(io.spring.initializr.metadata.Dependency dependency) {
71+
return dependency.getFacets().contains("reactive");
72+
}
73+
74+
private boolean isSpringBootStarter(io.spring.initializr.metadata.Dependency dependency) {
75+
return dependency.isStarter() && dependency.getGroupId().equals("org.springframework.boot");
76+
}
77+
5178
}

start-site/src/test/java/io/spring/start/site/extension/dependency/reactor/ReactorTestBuildCustomizerTests.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,22 @@ void shouldNotAddTestDependencyWithoutReactiveFacet() {
4444
assertThat(mavenPom(request)).doesNotHaveDependency("io.projectreactor", "reactor-test");
4545
}
4646

47+
@Test
48+
void shouldNotAddTestDependencyForBoot4WithoutReactiveFacet() {
49+
ProjectRequest request = createProjectRequest(SupportedBootVersion.V4_0, "web");
50+
assertThat(mavenPom(request)).doesNotHaveDependency("io.projectreactor", "reactor-test");
51+
}
52+
4753
@Test
4854
void shouldNotAddTestDependencyForBoot4() {
4955
ProjectRequest request = createProjectRequest(SupportedBootVersion.V4_0, "webflux");
5056
assertThat(mavenPom(request)).doesNotHaveDependency("io.projectreactor", "reactor-test");
5157
}
5258

59+
@Test
60+
void shouldAddTestDependencyForBoot4IfNonBootStarterIsUsed() {
61+
ProjectRequest request = createProjectRequest(SupportedBootVersion.V4_0, "cloud-gateway-reactive");
62+
assertThat(mavenPom(request)).hasDependency("io.projectreactor", "reactor-test", null, Dependency.SCOPE_TEST);
63+
}
64+
5365
}

0 commit comments

Comments
 (0)