diff --git a/applications/spring-shell/src/test/java/org/springframework/sbm/BootUpgrade_27_30_MultiModule_IntegrationTest.java b/applications/spring-shell/src/test/java/org/springframework/sbm/BootUpgrade_27_30_MultiModule_IntegrationTest.java index a52b4689f..c97672567 100644 --- a/applications/spring-shell/src/test/java/org/springframework/sbm/BootUpgrade_27_30_MultiModule_IntegrationTest.java +++ b/applications/spring-shell/src/test/java/org/springframework/sbm/BootUpgrade_27_30_MultiModule_IntegrationTest.java @@ -16,8 +16,19 @@ package org.springframework.sbm; +import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; +import org.openrewrite.maven.MavenParser; +import org.openrewrite.maven.tree.Dependency; +import org.openrewrite.maven.tree.MavenResolutionResult; +import org.openrewrite.xml.tree.Xml; + +import java.nio.file.Path; +import java.util.List; +import java.util.Optional; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; public class BootUpgrade_27_30_MultiModule_IntegrationTest extends IntegrationTestBaseClass { @Override @@ -35,6 +46,81 @@ void migrateMultiModuleApplication() { applyRecipe("boot-2.7-3.0-dependency-version-update"); buildProject(); + + verifyParentPomVersion(); + verifyEhCacheVersionIsUpgraded(); + } + + private void verifyEhCacheVersionIsUpgraded() { + Optional ehcacheResult = getDependencyByArtifactId("ehcache", "spring-app/"); + + assertThat(ehcacheResult).isPresent(); + + Dependency ehcacheDependency = ehcacheResult.get(); + + assertThat(ehcacheDependency.getArtifactId()).isEqualTo("ehcache"); + assertThat(ehcacheDependency.getGav().getGroupId()).isEqualTo("org.ehcache"); + assertThat(ehcacheDependency.getGav().getVersion()).isNull(); + assertThat(ehcacheDependency.getClassifier()).isEqualTo("jakarta"); + } + + private Optional getDependencyByArtifactId(String artifactId, String module) { + Xml.Document mavenAsXMLDocument = getBuildFileByModule(module); + List dependencies = getDependencies(mavenAsXMLDocument); + return dependencies + .stream() + .filter(dependency -> dependency.getArtifactId().equals(artifactId)) + .findFirst(); + } + + private List getDependencies(Xml.Document mavenAsXMLDocument) { + return mavenAsXMLDocument + .getMarkers() + .findFirst(MavenResolutionResult.class) + .get() + .getPom() + .getRequestedDependencies(); + } + + private void verifyParentPomVersion() { + Xml.Document mavenAsXMLDocument = getRootBuildFile(); + + Xml.Tag parentTag = mavenAsXMLDocument + .getRoot() + .getChildren("parent").get(0); + + String version = parentTag.getChildValue("version").get(); + + String groupId = parentTag.getChildValue("groupId").get(); + String artifactId = parentTag.getChildValue("artifactId").get(); + + assertThat(version).isEqualTo("3.0.0-M3"); + assertThat(groupId).isEqualTo("org.springframework.boot"); + assertThat(artifactId).isEqualTo("spring-boot-starter-parent"); + } + + @NotNull + private Xml.Document getRootBuildFile() { + return parsePom(loadFile(Path.of("pom.xml"))); + } + + @NotNull + private Xml.Document getBuildFileByModule(String app) { + + return parseSubmodulePom(loadFile(Path.of("pom.xml")), loadFile(Path.of(app + "pom.xml"))); + } + + + @NotNull + private Xml.Document parsePom(String pomContent) { + MavenParser mavenParser = new MavenParser.Builder().build(); + return mavenParser.parse(pomContent).get(0); + } + + @NotNull + private Xml.Document parseSubmodulePom(String parentPom, String pomContent) { + MavenParser mavenParser = new MavenParser.Builder().build(); + return mavenParser.parse(parentPom, pomContent).get(1); } private void buildProject() {