diff --git a/src/main/java/tech/jhipster/lite/module/infrastructure/secondary/javadependency/gradle/GradleCommandHandler.java b/src/main/java/tech/jhipster/lite/module/infrastructure/secondary/javadependency/gradle/GradleCommandHandler.java index 7bf6244a6e1..3066eee99e5 100644 --- a/src/main/java/tech/jhipster/lite/module/infrastructure/secondary/javadependency/gradle/GradleCommandHandler.java +++ b/src/main/java/tech/jhipster/lite/module/infrastructure/secondary/javadependency/gradle/GradleCommandHandler.java @@ -19,6 +19,7 @@ import tech.jhipster.lite.module.domain.javabuild.command.RemoveJavaDependencyManagement; import tech.jhipster.lite.module.domain.javabuild.command.SetVersion; import tech.jhipster.lite.module.domain.javadependency.JavaDependency; +import tech.jhipster.lite.module.domain.javadependency.JavaDependencyScope; import tech.jhipster.lite.module.domain.properties.JHipsterProjectFolder; import tech.jhipster.lite.module.domain.replacement.ContentReplacers; import tech.jhipster.lite.module.domain.replacement.MandatoryFileReplacer; @@ -65,18 +66,22 @@ public void handle(AddDirectJavaDependency command) { Assert.notNull(COMMAND, command); versionsCatalog.addLibrary(command.dependency()); - addJavaDependencyToBuildGradle(command.dependency()); + addDependencyToBuildGradle(command.dependency()); } - private void addJavaDependencyToBuildGradle(JavaDependency dependency) { + private void addDependencyToBuildGradle(JavaDependency dependency) { GradleDependencyScope gradleScope = gradleDependencyScope(dependency); + String libraryVersionCatalogReference = "libs.%s".formatted(VersionsCatalog.dependencySlug(dependency).replace("-", ".")); + String dependencyDeclaration = dependency.scope() == JavaDependencyScope.IMPORT + ? "%s%s(platform(%s))".formatted(indentation.times(1), gradleScope.command(), libraryVersionCatalogReference) + : "%s%s(%s)".formatted(indentation.times(1), gradleScope.command(), libraryVersionCatalogReference); MandatoryReplacer replacer = new MandatoryReplacer( new RegexNeedleBeforeReplacer( (contentBeforeReplacement, newText) -> !contentBeforeReplacement.contains(newText), gradleScope == GradleDependencyScope.TEST_IMPLEMENTATION ? GRADLE_TEST_DEPENDENCY_NEEDLE : GRADLE_DEPENDENCY_NEEDLE ), - "%s%s(libs.%s)".formatted(indentation.times(1), gradleScope.command(), VersionsCatalog.dependencySlug(dependency).replace("-", ".")) + dependencyDeclaration ); fileReplacer.handle(projectFolder, ContentReplacers.of(new MandatoryFileReplacer(new JHipsterProjectFilePath(BUILD_GRADLE_FILE), replacer))); } @@ -92,16 +97,16 @@ private static GradleDependencyScope gradleDependencyScope(JavaDependency depend @Override public void handle(RemoveDirectJavaDependency command) { - versionsCatalog.retrieveDependencySlugsFrom(command.dependency()).forEach(this::removeJavaDependencyFromBuildGradle); + versionsCatalog.retrieveDependencySlugsFrom(command.dependency()).forEach(this::removeDependencyFromBuildGradle); versionsCatalog.removeLibrary(command.dependency()); } - private void removeJavaDependencyFromBuildGradle(DependencySlug dependencySlug) { + private void removeDependencyFromBuildGradle(DependencySlug dependencySlug) { String scopePattern = Stream.of(GradleDependencyScope.values()) .map(GradleDependencyScope::command) .collect(Collectors.joining("|", "(", ")")); Pattern dependencyLinePattern = Pattern.compile( - "^\\s+%s\\(libs\\.%s\\)$".formatted(scopePattern, dependencySlug.slug().replace("-", "\\.")), + "^\\s+%s\\((platform\\()?libs\\.%s\\)?\\)$".formatted(scopePattern, dependencySlug.slug().replace("-", "\\.")), Pattern.MULTILINE ); MandatoryReplacer replacer = new MandatoryReplacer(new RegexReplacer(always(), dependencyLinePattern), ""); @@ -109,15 +114,15 @@ private void removeJavaDependencyFromBuildGradle(DependencySlug dependencySlug) } @Override - @ExcludeFromGeneratedCodeCoverage(reason = "Not yet implemented") public void handle(RemoveJavaDependencyManagement command) { - throw new NotImplementedException(NOT_YET_IMPLEMENTED); + versionsCatalog.retrieveDependencySlugsFrom(command.dependency()).forEach(this::removeDependencyFromBuildGradle); + versionsCatalog.removeLibrary(command.dependency()); } @Override - @ExcludeFromGeneratedCodeCoverage(reason = "Not yet implemented") public void handle(AddJavaDependencyManagement command) { - throw new NotImplementedException(NOT_YET_IMPLEMENTED); + versionsCatalog.addLibrary(command.dependency()); + addDependencyToBuildGradle(command.dependency()); } @Override diff --git a/src/test/java/tech/jhipster/lite/module/infrastructure/secondary/javadependency/gradle/GradleCommandHandlerTest.java b/src/test/java/tech/jhipster/lite/module/infrastructure/secondary/javadependency/gradle/GradleCommandHandlerTest.java index 71270174193..4cf89fa1eec 100644 --- a/src/test/java/tech/jhipster/lite/module/infrastructure/secondary/javadependency/gradle/GradleCommandHandlerTest.java +++ b/src/test/java/tech/jhipster/lite/module/infrastructure/secondary/javadependency/gradle/GradleCommandHandlerTest.java @@ -132,7 +132,7 @@ void shouldIncludeVersionRefInLibrariesSectionOfTomlVersionCatalog() { """); } - @EnumSource(value = JavaDependencyScope.class, mode = EXCLUDE, names = {"TEST", "RUNTIME", "PROVIDED"}) + @EnumSource(value = JavaDependencyScope.class, mode = EXCLUDE, names = {"TEST", "RUNTIME", "PROVIDED", "IMPORT"}) @ParameterizedTest void shouldAddImplementationDependencyInBuildGradleFileForScope(JavaDependencyScope scope) { JavaDependency dependency = javaDependency() @@ -258,6 +258,68 @@ void shouldRemoveProvidedDependencyInBuildGradleFile() { } } + @Nested + class HandleAddJavaDependencyManagement { + + private final JHipsterProjectFolder projectFolder = projectFrom("src/test/resources/projects/empty-gradle"); + + @Test + void shouldAddEntryInLibrariesSectionToExistingTomlVersionCatalog() { + new GradleCommandHandler(Indentation.DEFAULT, projectFolder).handle(new AddJavaDependencyManagement(springBootDependencyManagement())); + + assertThat(versionCatalogContent(projectFolder)) + .contains(""" + [libraries.spring-boot-dependencies] + \t\tname = "spring-boot-dependencies" + \t\tgroup = "org.springframework.boot" + """); + + assertThat(versionCatalogContent(projectFolder)) + .contains(""" + [libraries.spring-boot-dependencies.version] + \t\t\tref = "spring-boot" + """); + } + + @Test + void shouldAddImplementationDependencyInBuildGradleFileForScope() { + new GradleCommandHandler(Indentation.DEFAULT, projectFolder).handle(new AddJavaDependencyManagement(springBootDependencyManagement())); + + assertThat(buildGradleContent(projectFolder)).contains("implementation(platform(libs.spring.boot.dependencies))"); + } + } + + @Nested + class HandleRemoveJavaDependencyManagement { + + private final JHipsterProjectFolder projectFolder = projectFrom("src/test/resources/projects/empty-gradle"); + + @Test + void shouldRemoveEntryInLibrariesSection() { + GradleCommandHandler gradleCommandHandler = new GradleCommandHandler(Indentation.DEFAULT, projectFolder); + gradleCommandHandler.handle(new AddJavaDependencyManagement(springBootDependencyManagement())); + + gradleCommandHandler.handle(new RemoveJavaDependencyManagement(springBootDependencyManagement().id())); + + assertThat(versionCatalogContent(projectFolder)) + .doesNotContain("[libraries.spring-boot-dependencies]") + .doesNotContain(""" + \t\tname = "spring-boot-dependencies" + \t\tgroup = "org.springframework.boot" + """); + } + + @Test + void shouldRemoveDependencyInBuildGradleFile() { + GradleCommandHandler gradleCommandHandler = new GradleCommandHandler(Indentation.DEFAULT, projectFolder); + gradleCommandHandler.handle(new AddJavaDependencyManagement(springBootDependencyManagement())); + + gradleCommandHandler.handle(new RemoveJavaDependencyManagement(springBootDependencyManagement().id())); + + assertThat(buildGradleContent(projectFolder)).doesNotContain("implementation(platform(libs.spring.boot.dependencies))"); + } + } + private static String buildGradleContent(JHipsterProjectFolder projectFolder) { return content(Paths.get(projectFolder.get()).resolve("build.gradle.kts")); } diff --git a/tests-ci/generate.sh b/tests-ci/generate.sh index 74e808b3ac9..c36c337f343 100755 --- a/tests-ci/generate.sh +++ b/tests-ci/generate.sh @@ -109,7 +109,8 @@ elif [[ $application == 'gradleapp' ]]; then applyModules \ "init" \ "gradle-java" \ - "java-base" + "java-base" \ + "pagination-domain" elif [[ $application == 'fullapp' ]]; then spring_boot_mvc