From ea06daae8ec4b38d45e2a0c342adb279b823af97 Mon Sep 17 00:00:00 2001 From: Andrei Shakirin Date: Tue, 2 Aug 2022 15:47:48 +0200 Subject: [PATCH 01/13] Added versions redefinition finder --- .../DependenciesExplicitVersionsFinder.java | 65 +++++ ...ependenciesExplicitVersionsFinderTest.java | 253 ++++++++++++++++++ 2 files changed, 318 insertions(+) create mode 100644 components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/DependenciesExplicitVersionsFinder.java create mode 100644 components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/DependenciesExplicitVersionsFinderTest.java diff --git a/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/DependenciesExplicitVersionsFinder.java b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/DependenciesExplicitVersionsFinder.java new file mode 100644 index 000000000..17d472b5f --- /dev/null +++ b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/DependenciesExplicitVersionsFinder.java @@ -0,0 +1,65 @@ +package org.springframework.sbm.boot.upgrade_27_30.checks; + +import org.jetbrains.annotations.NotNull; +import org.openrewrite.maven.tree.MavenResolutionResult; +import org.openrewrite.maven.tree.ResolvedManagedDependency; +import org.springframework.sbm.build.api.ApplicationModule; +import org.springframework.sbm.build.api.Dependency; +import org.springframework.sbm.build.impl.OpenRewriteMavenBuildFile; +import org.springframework.sbm.engine.context.ProjectContext; + +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +public class DependenciesExplicitVersionsFinder implements Sbm30_Finder> { + private final Set analysingDependencies = new HashSet<>(); + + public DependenciesExplicitVersionsFinder() { + } + + public DependenciesExplicitVersionsFinder(Set analysingDependencies) { + this.analysingDependencies.addAll(analysingDependencies); + } + + @NotNull + @Override + public Set findMatches(ProjectContext context) { + Set result = new HashSet<>(); + context.getApplicationModules().stream() + .forEach(am -> { + List requestedDependencies = ((MavenResolutionResult) (((OpenRewriteMavenBuildFile) am.getBuildFile()).getPom())).getPom().getRequestedDependencies(); + Map managedMap = prepareManagedDependenciesMap(am); + List declaredDependencies = am.getBuildFile().getDeclaredDependencies(); + Set dependenciesWithExplicitVersions = requestedDependencies.stream() + .filter(d -> analysingDependencies.isEmpty() || analysingDependencies.contains(getGroupAndArtifactKey(d))) + .filter(d -> d.getVersion() != null && !d.getVersion().isEmpty()) + .filter(d -> managedMap.containsKey(getGroupAndArtifactKey(d))) + .filter(d -> !managedMap.get(getGroupAndArtifactKey(d)).equals(d.getVersion())) + .map(d -> Dependency.builder().groupId(d.getGroupId()).artifactId(d.getArtifactId()).version(d.getVersion()).build()) + .collect(Collectors.toSet()); + result.addAll(dependenciesWithExplicitVersions); + }); + return result; + } + + @NotNull + private Map prepareManagedDependenciesMap(ApplicationModule am) { + List managedDependencies = ((MavenResolutionResult) (((OpenRewriteMavenBuildFile) am.getBuildFile()).getPom())).getPom().getDependencyManagement(); + return managedDependencies.stream() + .filter(d -> d.getVersion() != null && !d.getVersion().isEmpty()) + .collect(Collectors.toMap(this::getGroupAndArtifactKeyResolved, ResolvedManagedDependency::getVersion, (d1, d2) -> d2)); + } + + @NotNull + private String getGroupAndArtifactKeyResolved(ResolvedManagedDependency d) { + return d.getGroupId() + ":" + d.getArtifactId(); + } + + @NotNull + private String getGroupAndArtifactKey(org.openrewrite.maven.tree.Dependency d) { + return d.getGroupId() + ":" + d.getArtifactId(); + } +} diff --git a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/DependenciesExplicitVersionsFinderTest.java b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/DependenciesExplicitVersionsFinderTest.java new file mode 100644 index 000000000..013b53e50 --- /dev/null +++ b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/DependenciesExplicitVersionsFinderTest.java @@ -0,0 +1,253 @@ +package org.springframework.sbm.boot.upgrade_27_30.checks; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; +import org.springframework.sbm.build.api.Dependency; +import org.springframework.sbm.engine.context.ProjectContext; +import org.springframework.sbm.project.resource.TestProjectContext; + +import java.util.Set; + +import static org.assertj.core.api.Assertions.assertThat; + +class DependenciesExplicitVersionsFinderTest { + + @Test + void shouldFindDependencyRedefinedParentVersion() { + @Language("xml") + String parentPomXml = + """ + + + 4.0.0 + com.example + parent + 1.0.0 + pom + + + + com.dependency.group + artifact1 + 3.0.0 + + + com.dependency.group + artifact2 + 3.0.0 + + + + + """; + + @Language("xml") + String module1PomXml = + """ + + + 4.0.0 + + com.example + parent + 1.0.0 + + module1 + jar + + + + com.dependency.group + artifact1 + 3.0.0 + + + + + + com.dependency.group + artifact1 + 2.0.0 + + + com.dependency.group + artifact2 + + + com.dependency.group + artifact3 + 1.0.0 + + + + """; + + ProjectContext context = TestProjectContext.buildProjectContext() + .withMavenBuildFileSource("", parentPomXml) + .withMavenBuildFileSource("module1", module1PomXml) + .build(); + + String explicitVersionDependencyCoordinates = "com.dependency.group:artifact1:2.0.0"; + DependenciesExplicitVersionsFinder finder = new DependenciesExplicitVersionsFinder(Set.of("com.dependency.group:artifact1", "com.dependency.group:artifact2")); + Set matches = finder.findMatches(context); + assertThat(context.getApplicationModules().list()).hasSize(2); + assertThat(matches).isNotEmpty(); + assertThat(matches).hasSize(1); + assertThat(matches.iterator().next().getCoordinates()).isEqualTo(explicitVersionDependencyCoordinates); + } + + @Test + void shouldIgnoreSameVersion() { + @Language("xml") + String parentPomXml = + """ + + + 4.0.0 + com.example + parent + 1.0.0 + pom + + + + com.dependency.group + artifact1 + 3.0.0 + + + com.dependency.group + artifact2 + 3.0.0 + + + + + """; + + @Language("xml") + String module1PomXml = + """ + + + 4.0.0 + + com.example + parent + 1.0.0 + + module1 + jar + + + com.dependency.group + artifact1 + 3.0.0 + + + com.dependency.group + artifact2 + + + com.dependency.group + artifact3 + 3.0.0 + + + + """; + + ProjectContext context = TestProjectContext.buildProjectContext() + .withMavenBuildFileSource("", parentPomXml) + .withMavenBuildFileSource("module1", module1PomXml) + .build(); + + DependenciesExplicitVersionsFinder finder = new DependenciesExplicitVersionsFinder(); + Set matches = finder.findMatches(context); + assertThat(context.getApplicationModules().list()).hasSize(2); + assertThat(matches).isEmpty(); + } + + @Test + void shouldFindDependencyRedefinedBomVersion() { + @Language("xml") + String parentPomXml = + """ + + + 4.0.0 + com.example + bom + 1.0.0 + pom + + + + com.dependency.group + artifact1 + 3.0.0 + + + com.dependency.group + artifact2 + 3.0.0 + + + + + """; + + @Language("xml") + String module1PomXml = + """ + + + 4.0.0 + com.example + module1 + 1.0.0 + jar + + + + com.example + bom + 1.0.0 + pom + import + + + + + + com.dependency.group + artifact1 + 2.0.0 + + + com.dependency.group + artifact2 + + + com.dependency.group + artifact3 + 1.0.0 + + + + """; + + ProjectContext context = TestProjectContext.buildProjectContext() + .withMavenBuildFileSource("", parentPomXml) + .withMavenBuildFileSource("module1", module1PomXml) + .build(); + + String explicitVersionDependencyCoordinates = "com.dependency.group:artifact1:2.0.0"; + DependenciesExplicitVersionsFinder finder = new DependenciesExplicitVersionsFinder(Set.of("com.dependency.group:artifact1", "com.dependency.group:artifact2")); + Set matches = finder.findMatches(context); + assertThat(context.getApplicationModules().list()).hasSize(2); + assertThat(matches).isNotEmpty(); + assertThat(matches).hasSize(1); + assertThat(matches.iterator().next().getCoordinates()).isEqualTo(explicitVersionDependencyCoordinates); + } +} \ No newline at end of file From 1c5ebc30c1817b95a64c312c3bc52c966bc248a7 Mon Sep 17 00:00:00 2001 From: Andrei Shakirin Date: Wed, 3 Aug 2022 10:40:21 +0200 Subject: [PATCH 02/13] Names refactoring for dependencies redeclaration finder --- .../checks/RedeclaredDependenciesBuilder.java | 30 ++++++++++++++ ...java => RedeclaredDependenciesFinder.java} | 31 ++++++++++---- ...pendenciesExplicitVersionsBuilderTest.java | 40 +++++++++++++++++++ ...ependenciesExplicitVersionsFinderTest.java | 20 +++++----- 4 files changed, 104 insertions(+), 17 deletions(-) create mode 100644 components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilder.java rename components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/{DependenciesExplicitVersionsFinder.java => RedeclaredDependenciesFinder.java} (69%) create mode 100644 components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/DependenciesExplicitVersionsBuilderTest.java diff --git a/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilder.java b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilder.java new file mode 100644 index 000000000..51c0008aa --- /dev/null +++ b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilder.java @@ -0,0 +1,30 @@ +package org.springframework.sbm.boot.upgrade_27_30.checks; + +import org.springframework.sbm.boot.asciidoctor.Section; +import org.springframework.sbm.boot.upgrade_27_30.Sbu30_PreconditionCheck; +import org.springframework.sbm.boot.upgrade_27_30.Sbu30_PreconditionCheckResult; +import org.springframework.sbm.boot.upgrade_27_30.Sbu30_UpgradeSectionBuilder; +import org.springframework.sbm.engine.context.ProjectContext; + +public class RedeclaredDependenciesBuilder implements Sbu30_PreconditionCheck, Sbu30_UpgradeSectionBuilder { + private final RedeclaredDependenciesFinder finder; + + public RedeclaredDependenciesBuilder(RedeclaredDependenciesFinder finder) { + this.finder = finder; + } + + @Override + public boolean isApplicable(ProjectContext projectContext) { + return false; + } + + @Override + public Section build(ProjectContext projectContext) { + return null; + } + + @Override + public Sbu30_PreconditionCheckResult run(ProjectContext context) { + return null; + } +} diff --git a/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/DependenciesExplicitVersionsFinder.java b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinder.java similarity index 69% rename from components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/DependenciesExplicitVersionsFinder.java rename to components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinder.java index 17d472b5f..059966f59 100644 --- a/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/DependenciesExplicitVersionsFinder.java +++ b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinder.java @@ -14,33 +14,36 @@ import java.util.Set; import java.util.stream.Collectors; -public class DependenciesExplicitVersionsFinder implements Sbm30_Finder> { +public class RedeclaredDependenciesFinder implements Sbm30_Finder> { private final Set analysingDependencies = new HashSet<>(); - public DependenciesExplicitVersionsFinder() { + public RedeclaredDependenciesFinder() { } - public DependenciesExplicitVersionsFinder(Set analysingDependencies) { + public RedeclaredDependenciesFinder(Set analysingDependencies) { this.analysingDependencies.addAll(analysingDependencies); } @NotNull @Override - public Set findMatches(ProjectContext context) { - Set result = new HashSet<>(); + public Set findMatches(ProjectContext context) { + Set result = new HashSet<>(); context.getApplicationModules().stream() .forEach(am -> { List requestedDependencies = ((MavenResolutionResult) (((OpenRewriteMavenBuildFile) am.getBuildFile()).getPom())).getPom().getRequestedDependencies(); Map managedMap = prepareManagedDependenciesMap(am); List declaredDependencies = am.getBuildFile().getDeclaredDependencies(); - Set dependenciesWithExplicitVersions = requestedDependencies.stream() + Set redeclaredDependencies = requestedDependencies.stream() .filter(d -> analysingDependencies.isEmpty() || analysingDependencies.contains(getGroupAndArtifactKey(d))) .filter(d -> d.getVersion() != null && !d.getVersion().isEmpty()) .filter(d -> managedMap.containsKey(getGroupAndArtifactKey(d))) .filter(d -> !managedMap.get(getGroupAndArtifactKey(d)).equals(d.getVersion())) - .map(d -> Dependency.builder().groupId(d.getGroupId()).artifactId(d.getArtifactId()).version(d.getVersion()).build()) + .map(d -> { + Dependency dependency = Dependency.builder().groupId(d.getGroupId()).artifactId(d.getArtifactId()).version(d.getVersion()).build(); + return new RedeclaredDependency(dependency, managedMap.get(getGroupAndArtifactKey(d))); + }) .collect(Collectors.toSet()); - result.addAll(dependenciesWithExplicitVersions); + result.addAll(redeclaredDependencies); }); return result; } @@ -62,4 +65,16 @@ private String getGroupAndArtifactKeyResolved(ResolvedManagedDependency d) { private String getGroupAndArtifactKey(org.openrewrite.maven.tree.Dependency d) { return d.getGroupId() + ":" + d.getArtifactId(); } + + public record RedeclaredDependency(Dependency redeclaredDependency, + String originalVersion) { + + public Dependency getRedeclaredDependency() { + return redeclaredDependency; + } + + public String getOriginalVersion() { + return originalVersion; + } + } } diff --git a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/DependenciesExplicitVersionsBuilderTest.java b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/DependenciesExplicitVersionsBuilderTest.java new file mode 100644 index 000000000..2fedb062d --- /dev/null +++ b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/DependenciesExplicitVersionsBuilderTest.java @@ -0,0 +1,40 @@ +/* + * Copyright 2021 - 2022 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.sbm.boot.upgrade_27_30.checks; + +import org.junit.jupiter.api.Test; +import org.springframework.sbm.boot.upgrade_27_30.checks.RedeclaredDependenciesFinder.RedeclaredDependency; +import org.springframework.sbm.engine.context.ProjectContext; + +import java.util.Set; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class DependenciesExplicitVersionsBuilderTest { + + @Test + void shouldBuildSectionWhenFinderHasNoMatches(){ + Set matches = Set.of(); + ProjectContext context = mock(ProjectContext.class); + RedeclaredDependenciesFinder finder = mock(RedeclaredDependenciesFinder.class); + when(finder.findMatches(context)).thenReturn(matches); + RedeclaredDependenciesBuilder sut = new RedeclaredDependenciesBuilder(finder); + assertThat(sut.isApplicable(context)).isFalse(); + } +} diff --git a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/DependenciesExplicitVersionsFinderTest.java b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/DependenciesExplicitVersionsFinderTest.java index 013b53e50..145c3d46d 100644 --- a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/DependenciesExplicitVersionsFinderTest.java +++ b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/DependenciesExplicitVersionsFinderTest.java @@ -2,7 +2,7 @@ import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.Test; -import org.springframework.sbm.build.api.Dependency; +import org.springframework.sbm.boot.upgrade_27_30.checks.RedeclaredDependenciesFinder.RedeclaredDependency; import org.springframework.sbm.engine.context.ProjectContext; import org.springframework.sbm.project.resource.TestProjectContext; @@ -88,12 +88,14 @@ void shouldFindDependencyRedefinedParentVersion() { .build(); String explicitVersionDependencyCoordinates = "com.dependency.group:artifact1:2.0.0"; - DependenciesExplicitVersionsFinder finder = new DependenciesExplicitVersionsFinder(Set.of("com.dependency.group:artifact1", "com.dependency.group:artifact2")); - Set matches = finder.findMatches(context); + RedeclaredDependenciesFinder finder = new RedeclaredDependenciesFinder(Set.of("com.dependency.group:artifact1", "com.dependency.group:artifact2")); + Set matches = finder.findMatches(context); assertThat(context.getApplicationModules().list()).hasSize(2); assertThat(matches).isNotEmpty(); assertThat(matches).hasSize(1); - assertThat(matches.iterator().next().getCoordinates()).isEqualTo(explicitVersionDependencyCoordinates); + RedeclaredDependency explicitDependency = matches.iterator().next(); + assertThat(explicitDependency.getRedeclaredDependency().getCoordinates()).isEqualTo(explicitVersionDependencyCoordinates); + assertThat(explicitDependency.getOriginalVersion()).isEqualTo("3.0.0"); } @Test @@ -162,8 +164,8 @@ void shouldIgnoreSameVersion() { .withMavenBuildFileSource("module1", module1PomXml) .build(); - DependenciesExplicitVersionsFinder finder = new DependenciesExplicitVersionsFinder(); - Set matches = finder.findMatches(context); + RedeclaredDependenciesFinder finder = new RedeclaredDependenciesFinder(); + Set matches = finder.findMatches(context); assertThat(context.getApplicationModules().list()).hasSize(2); assertThat(matches).isEmpty(); } @@ -243,11 +245,11 @@ void shouldFindDependencyRedefinedBomVersion() { .build(); String explicitVersionDependencyCoordinates = "com.dependency.group:artifact1:2.0.0"; - DependenciesExplicitVersionsFinder finder = new DependenciesExplicitVersionsFinder(Set.of("com.dependency.group:artifact1", "com.dependency.group:artifact2")); - Set matches = finder.findMatches(context); + RedeclaredDependenciesFinder finder = new RedeclaredDependenciesFinder(Set.of("com.dependency.group:artifact1", "com.dependency.group:artifact2")); + Set matches = finder.findMatches(context); assertThat(context.getApplicationModules().list()).hasSize(2); assertThat(matches).isNotEmpty(); assertThat(matches).hasSize(1); - assertThat(matches.iterator().next().getCoordinates()).isEqualTo(explicitVersionDependencyCoordinates); + assertThat(matches.iterator().next().getRedeclaredDependency().getCoordinates()).isEqualTo(explicitVersionDependencyCoordinates); } } \ No newline at end of file From 9e056329d7075f99d1e9b900c5b2cdca1aa2957b Mon Sep 17 00:00:00 2001 From: Andrei Shakirin Date: Wed, 3 Aug 2022 10:41:29 +0200 Subject: [PATCH 03/13] Names refactoring for dependencies redeclaration finder tests --- ...sBuilderTest.java => RedeclaredDependenciesBuilderTest.java} | 2 +- ...onsFinderTest.java => RedeclaredDependenciesFinderTest.java} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/{DependenciesExplicitVersionsBuilderTest.java => RedeclaredDependenciesBuilderTest.java} (96%) rename components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/{DependenciesExplicitVersionsFinderTest.java => RedeclaredDependenciesFinderTest.java} (99%) diff --git a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/DependenciesExplicitVersionsBuilderTest.java b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java similarity index 96% rename from components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/DependenciesExplicitVersionsBuilderTest.java rename to components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java index 2fedb062d..7e4da15ff 100644 --- a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/DependenciesExplicitVersionsBuilderTest.java +++ b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java @@ -26,7 +26,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -public class DependenciesExplicitVersionsBuilderTest { +public class RedeclaredDependenciesBuilderTest { @Test void shouldBuildSectionWhenFinderHasNoMatches(){ diff --git a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/DependenciesExplicitVersionsFinderTest.java b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinderTest.java similarity index 99% rename from components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/DependenciesExplicitVersionsFinderTest.java rename to components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinderTest.java index 145c3d46d..c4a81d2e9 100644 --- a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/DependenciesExplicitVersionsFinderTest.java +++ b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinderTest.java @@ -10,7 +10,7 @@ import static org.assertj.core.api.Assertions.assertThat; -class DependenciesExplicitVersionsFinderTest { +class RedeclaredDependenciesFinderTest { @Test void shouldFindDependencyRedefinedParentVersion() { From 65b3b0dbc14c0425e624d758ad8da3ed1e061a56 Mon Sep 17 00:00:00 2001 From: Andrei Shakirin Date: Wed, 3 Aug 2022 11:42:48 +0200 Subject: [PATCH 04/13] Added test to detect all redeclared dependencies --- .../RedeclaredDependenciesBuilderTest.java | 17 +- .../RedeclaredDependenciesFinderTest.java | 155 ++++++++++++++++-- 2 files changed, 158 insertions(+), 14 deletions(-) diff --git a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java index 7e4da15ff..a7a46a3bf 100644 --- a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java +++ b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java @@ -18,6 +18,8 @@ import org.junit.jupiter.api.Test; import org.springframework.sbm.boot.upgrade_27_30.checks.RedeclaredDependenciesFinder.RedeclaredDependency; +import org.springframework.sbm.build.api.ApplicationModule; +import org.springframework.sbm.build.api.Dependency; import org.springframework.sbm.engine.context.ProjectContext; import java.util.Set; @@ -28,13 +30,24 @@ public class RedeclaredDependenciesBuilderTest { + @Test + void shouldBuildSectionWhenFinderHasMatches(){ + Set matches = Set.of(new RedeclaredDependency(Dependency.builder().build(), "")); + ProjectContext context = mock(ProjectContext.class); + RedeclaredDependenciesFinder finder = mock(RedeclaredDependenciesFinder.class); + when(finder.findMatches(context)).thenReturn(matches); + RedeclaredDependenciesBuilder builder = new RedeclaredDependenciesBuilder(finder); + assertThat(builder.isApplicable(context)).isTrue(); + } + @Test void shouldBuildSectionWhenFinderHasNoMatches(){ Set matches = Set.of(); ProjectContext context = mock(ProjectContext.class); RedeclaredDependenciesFinder finder = mock(RedeclaredDependenciesFinder.class); when(finder.findMatches(context)).thenReturn(matches); - RedeclaredDependenciesBuilder sut = new RedeclaredDependenciesBuilder(finder); - assertThat(sut.isApplicable(context)).isFalse(); + RedeclaredDependenciesBuilder builder = new RedeclaredDependenciesBuilder(finder); + assertThat(builder.isApplicable(context)).isFalse(); } + } diff --git a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinderTest.java b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinderTest.java index c4a81d2e9..ee95f4a2a 100644 --- a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinderTest.java +++ b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinderTest.java @@ -3,6 +3,7 @@ import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.Test; import org.springframework.sbm.boot.upgrade_27_30.checks.RedeclaredDependenciesFinder.RedeclaredDependency; +import org.springframework.sbm.build.api.Dependency; import org.springframework.sbm.engine.context.ProjectContext; import org.springframework.sbm.project.resource.TestProjectContext; @@ -54,15 +55,6 @@ void shouldFindDependencyRedefinedParentVersion() { module1 jar - - - - com.dependency.group - artifact1 - 3.0.0 - - - com.dependency.group @@ -87,13 +79,12 @@ void shouldFindDependencyRedefinedParentVersion() { .withMavenBuildFileSource("module1", module1PomXml) .build(); - String explicitVersionDependencyCoordinates = "com.dependency.group:artifact1:2.0.0"; - RedeclaredDependenciesFinder finder = new RedeclaredDependenciesFinder(Set.of("com.dependency.group:artifact1", "com.dependency.group:artifact2")); + RedeclaredDependenciesFinder finder = new RedeclaredDependenciesFinder(Set.of("com.dependency.group:artifact1", "com.dependency.group:artifact2", "com.dependency.group:artifact3")); Set matches = finder.findMatches(context); assertThat(context.getApplicationModules().list()).hasSize(2); - assertThat(matches).isNotEmpty(); assertThat(matches).hasSize(1); RedeclaredDependency explicitDependency = matches.iterator().next(); + String explicitVersionDependencyCoordinates = "com.dependency.group:artifact1:2.0.0"; assertThat(explicitDependency.getRedeclaredDependency().getCoordinates()).isEqualTo(explicitVersionDependencyCoordinates); assertThat(explicitDependency.getOriginalVersion()).isEqualTo("3.0.0"); } @@ -252,4 +243,144 @@ void shouldFindDependencyRedefinedBomVersion() { assertThat(matches).hasSize(1); assertThat(matches.iterator().next().getRedeclaredDependency().getCoordinates()).isEqualTo(explicitVersionDependencyCoordinates); } + + @Test + void shouldIgnoreWithoutDependencyManagement() { + @Language("xml") + String module1PomXml = + """ + + + 4.0.0 + com.example + module1 + 1.0.0 + jar + + + com.dependency.group + artifact1 + 2.0.0 + + + com.dependency.group + artifact2 + 2.0.0 + + + com.dependency.group + artifact3 + 1.0.0 + + + + """; + + ProjectContext context = TestProjectContext.buildProjectContext() + .withMavenBuildFileSource("module1", module1PomXml) + .build(); + + RedeclaredDependenciesFinder finder = new RedeclaredDependenciesFinder(Set.of("com.dependency.group:artifact1", "com.dependency.group:artifact2", "com.dependency.group:artifact3")); + Set matches = finder.findMatches(context); + assertThat(context.getApplicationModules().list()).hasSize(1); + assertThat(matches).isEmpty(); + } + + @Test + void shouldFindAllRedefinedDependencies() { + @Language("xml") + String parentPomXml = + """ + + + 4.0.0 + com.example + parent + 1.0.0 + pom + + + + com.dependency.group + artifact1 + 3.0.0 + + + com.dependency.group + artifact2 + 3.0.0 + + + + + """; + + @Language("xml") + String module1PomXml = + """ + + + 4.0.0 + + com.example + parent + 1.0.0 + + module1 + jar + + + + com.dependency.group + artifact3 + 3.0.0 + + + + + + + com.dependency.group + artifact1 + 2.0.0 + + + com.dependency.group + artifact2 + 1.5.0 + + + com.dependency.group + artifact3 + 1.0.0 + + + + """; + + ProjectContext context = TestProjectContext.buildProjectContext() + .withMavenBuildFileSource("", parentPomXml) + .withMavenBuildFileSource("module1", module1PomXml) + .build(); + + RedeclaredDependenciesFinder finder = new RedeclaredDependenciesFinder(Set.of()); + Set matches = finder.findMatches(context); + assertThat(context.getApplicationModules().list()).hasSize(2); + assertThat(matches).hasSize(3); + assertThat(matches).contains(new RedeclaredDependency( + Dependency.builder() + .groupId("com.dependency.group") + .artifactId("artifact1") + .version("2.0.0").build(), "3.0.0")); + assertThat(matches).contains(new RedeclaredDependency( + Dependency.builder() + .groupId("com.dependency.group") + .artifactId("artifact2") + .version("1.5.0").build(), "3.0.0")); + assertThat(matches).contains(new RedeclaredDependency( + Dependency.builder() + .groupId("com.dependency.group") + .artifactId("artifact3") + .version("1.0.0").build(), "3.0.0")); + } } \ No newline at end of file From 35ca392cf32cf827d3af887e74b7d32053f7b28f Mon Sep 17 00:00:00 2001 From: Andrei Shakirin Date: Wed, 3 Aug 2022 18:16:40 +0200 Subject: [PATCH 05/13] Added licenses --- .../checks/RedeclaredDependenciesBuilder.java | 16 ++++++++++++++++ .../checks/RedeclaredDependenciesFinder.java | 16 ++++++++++++++++ .../RedeclaredDependenciesBuilderTest.java | 16 ++++++++++++++++ .../checks/RedeclaredDependenciesFinderTest.java | 16 ++++++++++++++++ 4 files changed, 64 insertions(+) diff --git a/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilder.java b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilder.java index 51c0008aa..6ca9ad0ca 100644 --- a/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilder.java +++ b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilder.java @@ -1,3 +1,19 @@ +/* + * Copyright 2021 - 2022 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package org.springframework.sbm.boot.upgrade_27_30.checks; import org.springframework.sbm.boot.asciidoctor.Section; diff --git a/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinder.java b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinder.java index 059966f59..172d6e3d0 100644 --- a/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinder.java +++ b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinder.java @@ -1,3 +1,19 @@ +/* + * Copyright 2021 - 2022 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package org.springframework.sbm.boot.upgrade_27_30.checks; import org.jetbrains.annotations.NotNull; diff --git a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java index a7a46a3bf..048b27860 100644 --- a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java +++ b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java @@ -28,6 +28,22 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +/* + * Copyright 2021 - 2022 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + public class RedeclaredDependenciesBuilderTest { @Test diff --git a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinderTest.java b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinderTest.java index ee95f4a2a..764d575a0 100644 --- a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinderTest.java +++ b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinderTest.java @@ -1,3 +1,19 @@ +/* + * Copyright 2021 - 2022 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package org.springframework.sbm.boot.upgrade_27_30.checks; import org.intellij.lang.annotations.Language; From 149f2e964a5fd272b8cf7002d2fe02746509e26a Mon Sep 17 00:00:00 2001 From: Andrei Shakirin Date: Tue, 9 Aug 2022 12:55:52 +0200 Subject: [PATCH 06/13] Added test for the redeclared dependencies from the list --- .../RedeclaredDependenciesFinderTest.java | 77 ++++++++++++++++++- 1 file changed, 75 insertions(+), 2 deletions(-) diff --git a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinderTest.java b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinderTest.java index 764d575a0..cc04a2caa 100644 --- a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinderTest.java +++ b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinderTest.java @@ -95,7 +95,7 @@ void shouldFindDependencyRedefinedParentVersion() { .withMavenBuildFileSource("module1", module1PomXml) .build(); - RedeclaredDependenciesFinder finder = new RedeclaredDependenciesFinder(Set.of("com.dependency.group:artifact1", "com.dependency.group:artifact2", "com.dependency.group:artifact3")); + RedeclaredDependenciesFinder finder = new RedeclaredDependenciesFinder(); Set matches = finder.findMatches(context); assertThat(context.getApplicationModules().list()).hasSize(2); assertThat(matches).hasSize(1); @@ -399,4 +399,77 @@ void shouldFindAllRedefinedDependencies() { .artifactId("artifact3") .version("1.0.0").build(), "3.0.0")); } -} \ No newline at end of file + + @Test + void shouldFindRedeclaredDependenciesOnlyFromList() { + @Language("xml") + String parentPomXml = + """ + + + 4.0.0 + com.example + parent + 1.0.0 + pom + + + + com.dependency.group + artifact1 + 3.0.0 + + + com.dependency.group + artifact2 + 3.0.0 + + + + + """; + + @Language("xml") + String module1PomXml = + """ + + + 4.0.0 + + com.example + parent + 1.0.0 + + module1 + jar + + + com.dependency.group + artifact1 + 2.0.0 + + + com.dependency.group + artifact2 + 2.0.0 + + + + """; + + ProjectContext context = TestProjectContext.buildProjectContext() + .withMavenBuildFileSource("", parentPomXml) + .withMavenBuildFileSource("module1", module1PomXml) + .build(); + + RedeclaredDependenciesFinder finder = new RedeclaredDependenciesFinder(Set.of("com.dependency.group:artifact1")); + Set matches = finder.findMatches(context); + assertThat(context.getApplicationModules().list()).hasSize(2); + assertThat(matches).hasSize(1); + RedeclaredDependency explicitDependency = matches.iterator().next(); + String explicitVersionDependencyCoordinates = "com.dependency.group:artifact1:2.0.0"; + assertThat(explicitDependency.getRedeclaredDependency().getCoordinates()).isEqualTo(explicitVersionDependencyCoordinates); + assertThat(explicitDependency.getOriginalVersion()).isEqualTo("3.0.0"); + } + +} From 16ed31899162fda7fe48f68fda64ec007bb6cd0f Mon Sep 17 00:00:00 2001 From: Andrei Shakirin Date: Tue, 9 Aug 2022 12:59:01 +0200 Subject: [PATCH 07/13] Ping test for explicit dependencies builder --- .../upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java index 048b27860..90137bfc4 100644 --- a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java +++ b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java @@ -48,7 +48,7 @@ public class RedeclaredDependenciesBuilderTest { @Test void shouldBuildSectionWhenFinderHasMatches(){ - Set matches = Set.of(new RedeclaredDependency(Dependency.builder().build(), "")); + Set matches = Set.of(new RedeclaredDependency(Dependency.builder().groupId("test.group").artifactId("test-artifact").version("2.0.0").build(), "1.0.0")); ProjectContext context = mock(ProjectContext.class); RedeclaredDependenciesFinder finder = mock(RedeclaredDependenciesFinder.class); when(finder.findMatches(context)).thenReturn(matches); From dd0057394b9b27eb0e7c5c4bf3b80d7670b76891 Mon Sep 17 00:00:00 2001 From: sanagaraj-pivotal Date: Tue, 9 Aug 2022 12:03:44 +0100 Subject: [PATCH 08/13] Passing test --- .../checks/RedeclaredDependenciesBuilder.java | 2 +- .../checks/RedeclaredDependenciesBuilderTest.java | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilder.java b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilder.java index 6ca9ad0ca..7d1555c1d 100644 --- a/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilder.java +++ b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilder.java @@ -31,7 +31,7 @@ public RedeclaredDependenciesBuilder(RedeclaredDependenciesFinder finder) { @Override public boolean isApplicable(ProjectContext projectContext) { - return false; + return !finder.findMatches(projectContext).isEmpty(); } @Override diff --git a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java index 90137bfc4..e7b6f08b4 100644 --- a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java +++ b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java @@ -47,8 +47,16 @@ public class RedeclaredDependenciesBuilderTest { @Test - void shouldBuildSectionWhenFinderHasMatches(){ - Set matches = Set.of(new RedeclaredDependency(Dependency.builder().groupId("test.group").artifactId("test-artifact").version("2.0.0").build(), "1.0.0")); + void shouldBuildSectionWhenFinderHasMatches() { + Set matches = Set.of(new RedeclaredDependency( + Dependency.builder() + .groupId("test.group") + .artifactId("test-artifact") + .version("2.0.0") + .build(), + "1.0.0" + )); + ProjectContext context = mock(ProjectContext.class); RedeclaredDependenciesFinder finder = mock(RedeclaredDependenciesFinder.class); when(finder.findMatches(context)).thenReturn(matches); @@ -57,7 +65,7 @@ void shouldBuildSectionWhenFinderHasMatches(){ } @Test - void shouldBuildSectionWhenFinderHasNoMatches(){ + void shouldBuildSectionWhenFinderHasNoMatches() { Set matches = Set.of(); ProjectContext context = mock(ProjectContext.class); RedeclaredDependenciesFinder finder = mock(RedeclaredDependenciesFinder.class); From 4d6396d07553dac17945106058d4f1905cbbbd28 Mon Sep 17 00:00:00 2001 From: sanagaraj-pivotal Date: Tue, 9 Aug 2022 12:16:46 +0100 Subject: [PATCH 09/13] Failing test case --- .../RedeclaredDependenciesBuilderTest.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java index e7b6f08b4..fb910f2fb 100644 --- a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java +++ b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java @@ -17,11 +17,15 @@ package org.springframework.sbm.boot.upgrade_27_30.checks; import org.junit.jupiter.api.Test; +import org.springframework.sbm.boot.asciidoctor.ChangeSection; +import org.springframework.sbm.boot.asciidoctor.Section; +import org.springframework.sbm.boot.asciidoctor.TodoList; import org.springframework.sbm.boot.upgrade_27_30.checks.RedeclaredDependenciesFinder.RedeclaredDependency; import org.springframework.sbm.build.api.ApplicationModule; import org.springframework.sbm.build.api.Dependency; import org.springframework.sbm.engine.context.ProjectContext; +import java.util.List; import java.util.Set; import static org.assertj.core.api.Assertions.assertThat; @@ -74,4 +78,38 @@ void shouldBuildSectionWhenFinderHasNoMatches() { assertThat(builder.isApplicable(context)).isFalse(); } + @Test + void assertContent() { + + Set matches = Set.of(new RedeclaredDependency( + Dependency.builder() + .groupId("test.group") + .artifactId("test-artifact") + .version("2.0.0") + .build(), + "1.0.0" + ), + new RedeclaredDependency( + Dependency.builder() + .groupId("test.group") + .artifactId("test-artifact2") + .version("3.0.0") + .build(), + "2.0.0" + )); + + ProjectContext context = mock(ProjectContext.class); + RedeclaredDependenciesFinder finder = mock(RedeclaredDependenciesFinder.class); + when(finder.findMatches(context)).thenReturn(matches); + RedeclaredDependenciesBuilder builder = new RedeclaredDependenciesBuilder(finder); + + Section section = builder.build(context); + + assertThat(section).isInstanceOf(ChangeSection.class); + ChangeSection relevantChangeSection = ChangeSection.class.cast(section); + assertThat(relevantChangeSection.getTitle()).isEqualTo("Remove redundant explicit version declaration"); + List todos = relevantChangeSection.getTodoSection().getTodoLists().get(0).getTodos(); + assertThat(todos.get(0).getText()).isEqualTo("Remove explicit declaration of version for artifact: test.group:test-artifact:1.0.0, its already declared with version 2.0.0"); + assertThat(todos.get(1).getText()).isEqualTo("Remove explicit declaration of version for artifact: test.group:test-artifact2:2.0.0, its already declared with version 3.0.0"); + } } From 4bbf548c3f6582b12b2a23154255e621334dd4b4 Mon Sep 17 00:00:00 2001 From: Andrei Shakirin Date: Tue, 9 Aug 2022 15:03:02 +0200 Subject: [PATCH 10/13] Fixed test for report section --- .../checks/RedeclaredDependenciesBuilder.java | 28 +++++++++++++++---- .../checks/RedeclaredDependenciesFinder.java | 2 ++ .../RedeclaredDependenciesBuilderTest.java | 8 ++++-- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilder.java b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilder.java index 7d1555c1d..ad9bf1b22 100644 --- a/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilder.java +++ b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilder.java @@ -16,13 +16,21 @@ package org.springframework.sbm.boot.upgrade_27_30.checks; +import org.springframework.sbm.boot.asciidoctor.ChangeSection; import org.springframework.sbm.boot.asciidoctor.Section; +import org.springframework.sbm.boot.asciidoctor.TodoList; import org.springframework.sbm.boot.upgrade_27_30.Sbu30_PreconditionCheck; import org.springframework.sbm.boot.upgrade_27_30.Sbu30_PreconditionCheckResult; import org.springframework.sbm.boot.upgrade_27_30.Sbu30_UpgradeSectionBuilder; import org.springframework.sbm.engine.context.ProjectContext; +import org.springframework.stereotype.Component; -public class RedeclaredDependenciesBuilder implements Sbu30_PreconditionCheck, Sbu30_UpgradeSectionBuilder { +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +@Component +public class RedeclaredDependenciesBuilder implements Sbu30_UpgradeSectionBuilder { private final RedeclaredDependenciesFinder finder; public RedeclaredDependenciesBuilder(RedeclaredDependenciesFinder finder) { @@ -36,11 +44,19 @@ public boolean isApplicable(ProjectContext projectContext) { @Override public Section build(ProjectContext projectContext) { - return null; - } + Set matches = finder.findMatches(projectContext); + List todos = matches.stream() + .map(m -> TodoList.Todo.builder() + .text(String.format("Remove explicit declaration of version for artifact: %s, its already declared with version %s", m.getRedeclaredDependency().getCoordinates(), m.originalVersion())) + .build()).toList(); - @Override - public Sbu30_PreconditionCheckResult run(ProjectContext context) { - return null; + return ChangeSection.RelevantChangeSection.builder() + .title("Remove redundant explicit version declaration") + .relevanceSection() + .todoSection() + .todoList(TodoList.builder() + .todos(todos) + .build()) + .build(); } } diff --git a/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinder.java b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinder.java index 172d6e3d0..66173c8bc 100644 --- a/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinder.java +++ b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinder.java @@ -23,6 +23,7 @@ import org.springframework.sbm.build.api.Dependency; import org.springframework.sbm.build.impl.OpenRewriteMavenBuildFile; import org.springframework.sbm.engine.context.ProjectContext; +import org.springframework.stereotype.Component; import java.util.HashSet; import java.util.List; @@ -30,6 +31,7 @@ import java.util.Set; import java.util.stream.Collectors; +@Component public class RedeclaredDependenciesFinder implements Sbm30_Finder> { private final Set analysingDependencies = new HashSet<>(); diff --git a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java index fb910f2fb..baf7f70a2 100644 --- a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java +++ b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java @@ -27,6 +27,7 @@ import java.util.List; import java.util.Set; +import java.util.stream.Collectors; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; @@ -109,7 +110,10 @@ void assertContent() { ChangeSection relevantChangeSection = ChangeSection.class.cast(section); assertThat(relevantChangeSection.getTitle()).isEqualTo("Remove redundant explicit version declaration"); List todos = relevantChangeSection.getTodoSection().getTodoLists().get(0).getTodos(); - assertThat(todos.get(0).getText()).isEqualTo("Remove explicit declaration of version for artifact: test.group:test-artifact:1.0.0, its already declared with version 2.0.0"); - assertThat(todos.get(1).getText()).isEqualTo("Remove explicit declaration of version for artifact: test.group:test-artifact2:2.0.0, its already declared with version 3.0.0"); + List stringToDos = todos.stream() + .map(TodoList.Todo::getText) + .collect(Collectors.toList()); + assertThat(stringToDos).contains("Remove explicit declaration of version for artifact: test.group:test-artifact:2.0.0, its already declared with version 1.0.0"); + assertThat(stringToDos).contains("Remove explicit declaration of version for artifact: test.group:test-artifact2:3.0.0, its already declared with version 2.0.0"); } } From 82ad738152a858bf59999ca894c33ae93e31e6e8 Mon Sep 17 00:00:00 2001 From: Andrei Shakirin Date: Tue, 9 Aug 2022 15:52:45 +0200 Subject: [PATCH 11/13] Reported redeclared dependencies with the same versions --- .../checks/RedeclaredDependenciesFinder.java | 1 - .../checks/RedeclaredDependenciesFinderTest.java | 8 ++++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinder.java b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinder.java index 66173c8bc..4c0f7d878 100644 --- a/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinder.java +++ b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinder.java @@ -55,7 +55,6 @@ public Set findMatches(ProjectContext context) { .filter(d -> analysingDependencies.isEmpty() || analysingDependencies.contains(getGroupAndArtifactKey(d))) .filter(d -> d.getVersion() != null && !d.getVersion().isEmpty()) .filter(d -> managedMap.containsKey(getGroupAndArtifactKey(d))) - .filter(d -> !managedMap.get(getGroupAndArtifactKey(d)).equals(d.getVersion())) .map(d -> { Dependency dependency = Dependency.builder().groupId(d.getGroupId()).artifactId(d.getArtifactId()).version(d.getVersion()).build(); return new RedeclaredDependency(dependency, managedMap.get(getGroupAndArtifactKey(d))); diff --git a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinderTest.java b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinderTest.java index cc04a2caa..8a7ad0724 100644 --- a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinderTest.java +++ b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesFinderTest.java @@ -106,7 +106,7 @@ void shouldFindDependencyRedefinedParentVersion() { } @Test - void shouldIgnoreSameVersion() { + void shouldReportSameVersion() { @Language("xml") String parentPomXml = """ @@ -174,7 +174,11 @@ void shouldIgnoreSameVersion() { RedeclaredDependenciesFinder finder = new RedeclaredDependenciesFinder(); Set matches = finder.findMatches(context); assertThat(context.getApplicationModules().list()).hasSize(2); - assertThat(matches).isEmpty(); + assertThat(matches).hasSize(1); + RedeclaredDependency explicitDependency = matches.iterator().next(); + String explicitVersionDependencyCoordinates = "com.dependency.group:artifact1:3.0.0"; + assertThat(explicitDependency.getRedeclaredDependency().getCoordinates()).isEqualTo(explicitVersionDependencyCoordinates); + assertThat(explicitDependency.getOriginalVersion()).isEqualTo("3.0.0"); } @Test From 7c9ab560b32f6bece301cf25ab74726608a674dd Mon Sep 17 00:00:00 2001 From: Andrei Shakirin Date: Tue, 9 Aug 2022 15:58:50 +0200 Subject: [PATCH 12/13] Added paragraph for redeclared dependencies report --- .../upgrade_27_30/checks/RedeclaredDependenciesBuilder.java | 5 +++++ .../checks/RedeclaredDependenciesBuilderTest.java | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilder.java b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilder.java index ad9bf1b22..df6ff5208 100644 --- a/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilder.java +++ b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilder.java @@ -53,6 +53,11 @@ public Section build(ProjectContext projectContext) { return ChangeSection.RelevantChangeSection.builder() .title("Remove redundant explicit version declaration") .relevanceSection() + .paragraph(""" + The scan found one or more redeclared dependencies in build files. + Please check them and remove redundant declarations. + """ + ) .todoSection() .todoList(TodoList.builder() .todos(todos) diff --git a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java index baf7f70a2..3b67553b5 100644 --- a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java +++ b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java @@ -109,6 +109,11 @@ void assertContent() { assertThat(section).isInstanceOf(ChangeSection.class); ChangeSection relevantChangeSection = ChangeSection.class.cast(section); assertThat(relevantChangeSection.getTitle()).isEqualTo("Remove redundant explicit version declaration"); + assertThat(relevantChangeSection.getParagraphs()).hasSize(1); + assertThat(relevantChangeSection.getParagraphs().get(0)).isEqualTo(""" + The scan found one or more redeclared dependencies in build files. + Please check them and remove redundant declarations. + """); List todos = relevantChangeSection.getTodoSection().getTodoLists().get(0).getTodos(); List stringToDos = todos.stream() .map(TodoList.Todo::getText) From 23e78f1f38a247d439d4bacb99a443ccdb9c8723 Mon Sep 17 00:00:00 2001 From: Andrei Shakirin Date: Thu, 11 Aug 2022 14:38:42 +0200 Subject: [PATCH 13/13] Fixed paragraph test --- .../checks/RedeclaredDependenciesBuilderTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java index 3b67553b5..3572ef119 100644 --- a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java +++ b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/checks/RedeclaredDependenciesBuilderTest.java @@ -109,8 +109,9 @@ void assertContent() { assertThat(section).isInstanceOf(ChangeSection.class); ChangeSection relevantChangeSection = ChangeSection.class.cast(section); assertThat(relevantChangeSection.getTitle()).isEqualTo("Remove redundant explicit version declaration"); - assertThat(relevantChangeSection.getParagraphs()).hasSize(1); - assertThat(relevantChangeSection.getParagraphs().get(0)).isEqualTo(""" + assertThat(relevantChangeSection.getRelevanceSection()).isNotNull(); + assertThat(relevantChangeSection.getRelevanceSection().getParagraphs()).hasSize(1); + assertThat(relevantChangeSection.getRelevanceSection().getParagraphs().get(0).getText()).isEqualTo(""" The scan found one or more redeclared dependencies in build files. Please check them and remove redundant declarations. """);