diff --git a/src/main/java/tech/jhipster/lite/generator/project/domain/GeneratorAction.java b/src/main/java/tech/jhipster/lite/generator/project/domain/GeneratorAction.java index 11c4b0e0344..25a5111d1fe 100644 --- a/src/main/java/tech/jhipster/lite/generator/project/domain/GeneratorAction.java +++ b/src/main/java/tech/jhipster/lite/generator/project/domain/GeneratorAction.java @@ -59,8 +59,6 @@ private GeneratorAction() {} public static final String USER_AND_AUTHORITY_ENTITIES_MYSQL = "user-and-authority-entities-mysql"; public static final String USER_AND_AUTHORITY_ENTITIES_MARIADB = "user-and-authority-entities-mariadb"; - public static final String FRONTEND_MAVEN_PLUGIN = "frontend-maven-plugin"; - public static final String SPRINGBOOT_TOMCAT = "springboot-tomcat"; public static final String SPRINGBOOT_UNDERTOW = "springboot-undertow"; public static final String SPRINGBOOT_ACTUATOR = "springboot-actuator"; diff --git a/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/application/FrontendMavenApplicationService.java b/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/application/FrontendMavenApplicationService.java index b59a4e280dc..140a655f3af 100644 --- a/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/application/FrontendMavenApplicationService.java +++ b/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/application/FrontendMavenApplicationService.java @@ -1,19 +1,20 @@ package tech.jhipster.lite.generator.server.javatool.frontendmaven.application; import org.springframework.stereotype.Service; -import tech.jhipster.lite.generator.project.domain.Project; -import tech.jhipster.lite.generator.server.javatool.frontendmaven.domain.FrontendMavenService; +import tech.jhipster.lite.generator.server.javatool.frontendmaven.domain.FrontendMavenModuleFactory; +import tech.jhipster.lite.module.domain.JHipsterModule; +import tech.jhipster.lite.module.domain.properties.JHipsterModuleProperties; @Service public class FrontendMavenApplicationService { - private final FrontendMavenService frontendMavenService; + private final FrontendMavenModuleFactory factory; - public FrontendMavenApplicationService(FrontendMavenService frontendMavenService) { - this.frontendMavenService = frontendMavenService; + public FrontendMavenApplicationService() { + factory = new FrontendMavenModuleFactory(); } - public void addFrontendMavenPlugin(Project project) { - frontendMavenService.addFrontendMavenPlugin(project); + public JHipsterModule buildModule(JHipsterModuleProperties properties) { + return factory.buildModule(properties); } } diff --git a/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/domain/FrontendMavenDomainService.java b/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/domain/FrontendMavenDomainService.java deleted file mode 100644 index e03862015c5..00000000000 --- a/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/domain/FrontendMavenDomainService.java +++ /dev/null @@ -1,219 +0,0 @@ -package tech.jhipster.lite.generator.server.javatool.frontendmaven.domain; - -import static tech.jhipster.lite.common.domain.FileUtils.getPath; -import static tech.jhipster.lite.generator.project.domain.Constants.MAIN_JAVA; -import static tech.jhipster.lite.generator.project.domain.Constants.TECHNICAL_INFRASTRUCTURE_PRIMARY; -import static tech.jhipster.lite.generator.project.domain.Constants.TEST_JAVA; -import static tech.jhipster.lite.generator.project.domain.DefaultConfig.BASE_NAME; -import static tech.jhipster.lite.generator.project.domain.DefaultConfig.PACKAGE_NAME; -import static tech.jhipster.lite.generator.project.domain.DefaultConfig.PACKAGE_PATH; - -import java.util.List; -import tech.jhipster.lite.error.domain.GeneratorException; -import tech.jhipster.lite.generator.buildtool.generic.domain.BuildToolService; -import tech.jhipster.lite.generator.buildtool.generic.domain.Plugin; -import tech.jhipster.lite.generator.project.domain.Project; -import tech.jhipster.lite.generator.project.domain.ProjectFile; -import tech.jhipster.lite.generator.project.domain.ProjectRepository; - -public class FrontendMavenDomainService implements FrontendMavenService { - - private static final String SOURCE = "server/springboot/mvc/web/src"; - private static final String TEST = "server/springboot/mvc/web/test"; - - private final BuildToolService buildToolService; - private final ProjectRepository projectRepository; - - public FrontendMavenDomainService(BuildToolService buildToolService, ProjectRepository projectRepository) { - this.buildToolService = buildToolService; - this.projectRepository = projectRepository; - } - - @Override - public void addFrontendMavenPlugin(Project project) { - List - .of("node", "npm", "frontend-maven-plugin", "checksum-maven-plugin", "maven-antrun-plugin") - .forEach(key -> addProperty(project, key)); - - buildToolService.addPlugin(project, checksumMavenPlugin()); - buildToolService.addPlugin(project, mavenAntrunPlugin()); - buildToolService.addPlugin(project, frontendMavenPlugin()); - - addRedirectionToWebappFiles(project); - } - - private void addRedirectionToWebappFiles(Project project) { - project.addDefaultConfig(PACKAGE_NAME); - project.addDefaultConfig(BASE_NAME); - String packageNamePath = project.getPackageNamePath().orElse(getPath(PACKAGE_PATH)); - String redirectionPath = getPath(TECHNICAL_INFRASTRUCTURE_PRIMARY, "redirection"); - - projectRepository.template( - ProjectFile - .forProject(project) - .withSource(SOURCE, "RedirectionResource.java") - .withDestinationFolder(getPath(MAIN_JAVA, packageNamePath, redirectionPath)) - ); - projectRepository.template( - ProjectFile - .forProject(project) - .withSource(TEST, "RedirectionResourceIT.java") - .withDestinationFolder(getPath(TEST_JAVA, packageNamePath, redirectionPath)) - ); - } - - private Plugin frontendMavenPlugin() { - return Plugin - .builder() - .groupId("com.github.eirslett") - .artifactId("frontend-maven-plugin") - .version("\\${frontend-maven-plugin.version}") - .additionalElements( - """ - - - install-node-and-npm - - install-node-and-npm - - - \\${node.version} - \\${npm.version} - - - - npm install - - npm - - - - build front - - npm - - generate-resources - - run build - - \\${project.version} - - false - - - - front test - - npm - - test - - run test - false - - - - """ - ) - .build(); - } - - private Plugin mavenAntrunPlugin() { - return Plugin - .builder() - .groupId("org.apache.maven.plugins") - .artifactId("maven-antrun-plugin") - .version("\\${maven-antrun-plugin.version}") - .additionalElements( - """ - - - eval-frontend-checksum - generate-resources - - run - - - - - - - - - - - - true - - - - """ - ) - .build(); - } - - private Plugin checksumMavenPlugin() { - return Plugin - .builder() - .groupId("net.nicoulaj.maven.plugins") - .artifactId("checksum-maven-plugin") - .version("\\${checksum-maven-plugin.version}") - .additionalElements( - """ - - - create-pre-compiled-webapp-checksum - generate-resources - - files - - - - create-compiled-webapp-checksum - - files - - compile - - checksums.csv.old - - - - - - - \\${project.basedir} - - src/main/webapp/**/*.* - target/classes/static/**/*.* - package-lock.json - package.json - tsconfig.json - - - - false - false - false - - SHA-1 - - true - true - - """ - ) - .build(); - } - - private void addProperty(Project project, String key) { - buildToolService - .getVersion(project, key) - .ifPresentOrElse( - version -> buildToolService.addProperty(project, key + ".version", version), - () -> { - throw new GeneratorException("Version not found: " + key); - } - ); - } -} diff --git a/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/domain/FrontendMavenModuleFactory.java b/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/domain/FrontendMavenModuleFactory.java new file mode 100644 index 00000000000..86a9d42c7c0 --- /dev/null +++ b/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/domain/FrontendMavenModuleFactory.java @@ -0,0 +1,192 @@ +package tech.jhipster.lite.generator.server.javatool.frontendmaven.domain; + +import static tech.jhipster.lite.module.domain.JHipsterModule.*; + +import tech.jhipster.lite.error.domain.Assert; +import tech.jhipster.lite.module.domain.JHipsterModule; +import tech.jhipster.lite.module.domain.JHipsterSource; +import tech.jhipster.lite.module.domain.javabuildplugin.JavaBuildPlugin; +import tech.jhipster.lite.module.domain.properties.JHipsterModuleProperties; + +public class FrontendMavenModuleFactory { + + private static final JHipsterSource SOURCE = from("server/springboot/mvc/web"); + private static final JHipsterSource MAIN_SOURCE = SOURCE.append("src"); + private static final JHipsterSource TEST_SOURCE = SOURCE.append("test"); + + private static final String REDIRECTION_PRIMARY = "technical/infrastructure/primary/redirection"; + + private static final String NODE_VERSION = "v16.16.0"; + private static final String NPM_VERSION = "8.5.0"; + + public JHipsterModule buildModule(JHipsterModuleProperties properties) { + Assert.notNull("properties", properties); + + String basePath = properties.basePackage().path(); + + //@formatter:off + return moduleBuilder(properties) + .javaDependencies() + .version(javaDependencyVersion("node", NODE_VERSION)) + .version(javaDependencyVersion("npm", NPM_VERSION)) + .and() + .javaBuildPlugins() + .plugin(checksumPlugin()) + .plugin(antrunPlugin()) + .plugin(frontendMavenPlugin()) + .and() + .files() + .add( + MAIN_SOURCE.template("RedirectionResource.java"), + toSrcMainJava().append(basePath).append(REDIRECTION_PRIMARY).append("RedirectionResource.java") + ) + .add( + TEST_SOURCE.template("RedirectionResourceIT.java"), + toSrcTestJava().append(basePath).append(REDIRECTION_PRIMARY).append("RedirectionResourceIT.java") + ) + .and() + .build(); + //@formatter:on + } + + private JavaBuildPlugin checksumPlugin() { + return javaBuildPlugin() + .groupId("net.nicoulaj.maven.plugins") + .artifactId("checksum-maven-plugin") + .versionSlug("checksum-maven-plugin") + .additionalElements( + """ + + + create-pre-compiled-webapp-checksum + generate-resources + + files + + + + create-compiled-webapp-checksum + + files + + compile + + checksums.csv.old + + + + + + + ${project.basedir} + + src/main/webapp/**/*.* + target/classes/static/**/*.* + package-lock.json + package.json + tsconfig.json + + + + false + false + false + + SHA-1 + + true + true + + """ + ) + .build(); + } + + private JavaBuildPlugin antrunPlugin() { + return javaBuildPlugin() + .groupId("org.apache.maven.plugins") + .artifactId("maven-antrun-plugin") + .versionSlug("maven-antrun-plugin") + .additionalElements( + """ + + + eval-frontend-checksum + generate-resources + + run + + + + + + + + + + + + true + + + + """ + ) + .build(); + } + + private JavaBuildPlugin frontendMavenPlugin() { + return javaBuildPlugin() + .groupId("com.github.eirslett") + .artifactId("frontend-maven-plugin") + .versionSlug("frontend-maven-plugin") + .additionalElements( + """ + + + install-node-and-npm + + install-node-and-npm + + + ${node.version} + ${npm.version} + + + + npm install + + npm + + + + build front + + npm + + generate-resources + + run build + + ${project.version} + + false + + + + front test + + npm + + test + + run test + false + + + + """ + ) + .build(); + } +} diff --git a/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/domain/FrontendMavenService.java b/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/domain/FrontendMavenService.java deleted file mode 100644 index dd7d85c67e9..00000000000 --- a/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/domain/FrontendMavenService.java +++ /dev/null @@ -1,7 +0,0 @@ -package tech.jhipster.lite.generator.server.javatool.frontendmaven.domain; - -import tech.jhipster.lite.generator.project.domain.Project; - -public interface FrontendMavenService { - void addFrontendMavenPlugin(Project project); -} diff --git a/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/infrastructure/config/FrontendMavenBeanConfiguration.java b/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/infrastructure/config/FrontendMavenBeanConfiguration.java deleted file mode 100644 index 530e7c83bb9..00000000000 --- a/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/infrastructure/config/FrontendMavenBeanConfiguration.java +++ /dev/null @@ -1,25 +0,0 @@ -package tech.jhipster.lite.generator.server.javatool.frontendmaven.infrastructure.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import tech.jhipster.lite.generator.buildtool.generic.domain.BuildToolService; -import tech.jhipster.lite.generator.project.domain.ProjectRepository; -import tech.jhipster.lite.generator.server.javatool.frontendmaven.domain.FrontendMavenDomainService; -import tech.jhipster.lite.generator.server.javatool.frontendmaven.domain.FrontendMavenService; - -@Configuration -public class FrontendMavenBeanConfiguration { - - private final BuildToolService buildToolService; - private final ProjectRepository projectRepository; - - public FrontendMavenBeanConfiguration(BuildToolService buildToolService, ProjectRepository projectRepository) { - this.buildToolService = buildToolService; - this.projectRepository = projectRepository; - } - - @Bean - public FrontendMavenService frontendMavenService() { - return new FrontendMavenDomainService(buildToolService, projectRepository); - } -} diff --git a/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/infrastructure/primary/FrontendMavenModuleConfiguration.java b/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/infrastructure/primary/FrontendMavenModuleConfiguration.java new file mode 100644 index 00000000000..d90ef5f3d77 --- /dev/null +++ b/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/infrastructure/primary/FrontendMavenModuleConfiguration.java @@ -0,0 +1,23 @@ +package tech.jhipster.lite.generator.server.javatool.frontendmaven.infrastructure.primary; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import tech.jhipster.lite.generator.server.javatool.frontendmaven.application.FrontendMavenApplicationService; +import tech.jhipster.lite.module.domain.properties.JHipsterModulePropertiesDefinition; +import tech.jhipster.lite.module.infrastructure.primary.JHipsterModuleApiDoc; +import tech.jhipster.lite.module.infrastructure.primary.JHipsterModuleResource; + +@Configuration +class FrontendMavenModuleConfiguration { + + @Bean + JHipsterModuleResource frontendMavenModule(FrontendMavenApplicationService frontendMaven) { + return JHipsterModuleResource + .builder() + .legacyUrl("/api/developer-tools/frontend-maven-plugin") + .slug("frontend-maven-plugin") + .propertiesDefinition(JHipsterModulePropertiesDefinition.builder().addBasePackage().addProjectBaseName().addIndentation().build()) + .apiDoc(new JHipsterModuleApiDoc("Frontend Maven Plugin", "Add Frontend Maven Plugin")) + .factory(frontendMaven::buildModule); + } +} diff --git a/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/infrastructure/primary/rest/FrontendMavenResource.java b/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/infrastructure/primary/rest/FrontendMavenResource.java deleted file mode 100644 index 864f40c04af..00000000000 --- a/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/infrastructure/primary/rest/FrontendMavenResource.java +++ /dev/null @@ -1,35 +0,0 @@ -package tech.jhipster.lite.generator.server.javatool.frontendmaven.infrastructure.primary.rest; - -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.tags.Tag; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -import tech.jhipster.lite.generator.project.domain.GeneratorAction; -import tech.jhipster.lite.generator.project.domain.Project; -import tech.jhipster.lite.generator.project.infrastructure.primary.dto.ProjectDTO; -import tech.jhipster.lite.generator.server.javatool.frontendmaven.application.FrontendMavenApplicationService; -import tech.jhipster.lite.technical.infrastructure.primary.annotation.GeneratorStep; - -@RestController -@RequestMapping("/api/developer-tools/frontend-maven-plugin") -@Tag(name = "Frontend Maven Plugin") -class FrontendMavenResource { - - private final FrontendMavenApplicationService frontendMavenApplicationService; - - public FrontendMavenResource(FrontendMavenApplicationService frontendMavenApplicationService) { - this.frontendMavenApplicationService = frontendMavenApplicationService; - } - - @Operation(summary = "Init", description = "Add Frontend Maven Plugin") - @ApiResponse(responseCode = "500", description = "An error occurred while adding Frontend Maven Plugin") - @PostMapping - @GeneratorStep(id = GeneratorAction.FRONTEND_MAVEN_PLUGIN) - public void addFrontendMavenPlugin(@RequestBody ProjectDTO projectDTO) { - Project project = ProjectDTO.toProject(projectDTO); - frontendMavenApplicationService.addFrontendMavenPlugin(project); - } -} diff --git a/src/main/java/tech/jhipster/lite/module/domain/JHipsterModule.java b/src/main/java/tech/jhipster/lite/module/domain/JHipsterModule.java index cdf36656fca..30fb62d1603 100644 --- a/src/main/java/tech/jhipster/lite/module/domain/JHipsterModule.java +++ b/src/main/java/tech/jhipster/lite/module/domain/JHipsterModule.java @@ -23,6 +23,7 @@ import tech.jhipster.lite.module.domain.javadependency.JHipsterModuleJavaDependencies.JHipsterModuleJavaDependenciesBuilder; import tech.jhipster.lite.module.domain.javadependency.JavaDependency; import tech.jhipster.lite.module.domain.javadependency.JavaDependency.JavaDependencyGroupIdBuilder; +import tech.jhipster.lite.module.domain.javadependency.JavaDependencyVersion; import tech.jhipster.lite.module.domain.javaproperties.JHipsterModuleSpringProperties; import tech.jhipster.lite.module.domain.javaproperties.JHipsterModuleSpringProperties.JHipsterModuleSpringPropertiesBuilder; import tech.jhipster.lite.module.domain.javaproperties.PropertyKey; @@ -113,6 +114,10 @@ public static JavaDependencyGroupIdBuilder javaDependency() { return JavaDependency.builder(); } + public static JavaDependencyVersion javaDependencyVersion(String slug, String version) { + return new JavaDependencyVersion(slug, version); + } + public static JavaBuildPluginGroupIdBuilder javaBuildPlugin() { return JavaBuildPlugin.builder(); } diff --git a/src/main/java/tech/jhipster/lite/module/domain/javadependency/JHipsterModuleJavaDependencies.java b/src/main/java/tech/jhipster/lite/module/domain/javadependency/JHipsterModuleJavaDependencies.java index dfc37ebd16b..21c90ff9d8d 100644 --- a/src/main/java/tech/jhipster/lite/module/domain/javadependency/JHipsterModuleJavaDependencies.java +++ b/src/main/java/tech/jhipster/lite/module/domain/javadependency/JHipsterModuleJavaDependencies.java @@ -2,20 +2,25 @@ import java.util.ArrayList; import java.util.Collection; +import java.util.function.Function; import java.util.stream.Stream; import tech.jhipster.lite.error.domain.Assert; import tech.jhipster.lite.module.domain.JHipsterModule.JHipsterModuleBuilder; import tech.jhipster.lite.module.domain.javabuild.ArtifactId; import tech.jhipster.lite.module.domain.javabuild.GroupId; import tech.jhipster.lite.module.domain.javabuild.VersionSlug; +import tech.jhipster.lite.module.domain.javabuild.command.JavaBuildCommand; import tech.jhipster.lite.module.domain.javabuild.command.JavaBuildCommands; +import tech.jhipster.lite.module.domain.javabuild.command.SetVersion; public class JHipsterModuleJavaDependencies { + private final Collection versions; private final Collection dependenciesManagement; private final Collection dependencies; private JHipsterModuleJavaDependencies(JHipsterModuleJavaDependenciesBuilder builder) { + versions = builder.versions; dependenciesManagement = builder.dependenciesManagement; dependencies = builder.dependencies; } @@ -29,13 +34,23 @@ public JavaBuildCommands buildChanges(CurrentJavaDependenciesVersions currentVer Assert.notNull("projectDependencies", projectDependencies); return Stream - .concat( + .of( + settedVersionsCommands(), dependenciesManagementChanges(currentVersions, projectDependencies), dependenciesChanges(currentVersions, projectDependencies) ) + .flatMap(Function.identity()) .reduce(JavaBuildCommands.EMPTY, JavaBuildCommands::merge); } + private Stream settedVersionsCommands() { + return Stream.of(new JavaBuildCommands(versions.stream().map(toSetVersionCommand()).toList())); + } + + private Function toSetVersionCommand() { + return (Function) SetVersion::new; + } + private Stream dependenciesManagementChanges( CurrentJavaDependenciesVersions currentVersions, ProjectJavaDependencies projectDependencies @@ -53,6 +68,7 @@ private Stream dependenciesChanges( public static class JHipsterModuleJavaDependenciesBuilder { private final JHipsterModuleBuilder module; + private final Collection versions = new ArrayList<>(); private final Collection dependencies = new ArrayList<>(); private final Collection dependenciesManagement = new ArrayList<>(); @@ -80,6 +96,14 @@ public JHipsterModuleJavaDependenciesBuilder dependency(JavaDependency dependenc return this; } + public JHipsterModuleJavaDependenciesBuilder version(JavaDependencyVersion version) { + Assert.notNull("version", version); + + versions.add(version); + + return this; + } + public JHipsterModuleJavaDependenciesBuilder dependencyManagement(JavaDependency dependency) { Assert.notNull("dependency", dependency); diff --git a/src/main/resources/generator/dependencies/pom.xml b/src/main/resources/generator/dependencies/pom.xml index 7a29b6cb7bf..3e8079340b4 100644 --- a/src/main/resources/generator/dependencies/pom.xml +++ b/src/main/resources/generator/dependencies/pom.xml @@ -21,8 +21,6 @@ 3.1.3 1.6.9 1.16.2 - v16.15.0 - 8.5.0 1.12.1 1.11 3.1.0 diff --git a/src/test/features/frontend-maven.feature b/src/test/features/frontend-maven.feature new file mode 100644 index 00000000000..b267e81092f --- /dev/null +++ b/src/test/features/frontend-maven.feature @@ -0,0 +1,8 @@ +Feature: Frontend maven module + + Scenario: Should apply frontend maven module + When I apply "frontend-maven-plugin" module to default project with maven file + | packageName | tech.jhipster.chips | + | baseName | jhipster | + Then I should have files in "src/main/java/tech/jhipster/chips/technical/infrastructure/primary/redirection" + | RedirectionResource.java | diff --git a/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/application/FrontendMavenApplicationServiceIT.java b/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/application/FrontendMavenApplicationServiceIT.java deleted file mode 100644 index be8de959921..00000000000 --- a/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/application/FrontendMavenApplicationServiceIT.java +++ /dev/null @@ -1,31 +0,0 @@ -package tech.jhipster.lite.generator.server.javatool.frontendmaven.application; - -import static tech.jhipster.lite.TestUtils.tmpProjectWithPomXml; -import static tech.jhipster.lite.generator.server.javatool.frontendmaven.application.FrontendMavenAssert.assertChecksumMavenPlugin; -import static tech.jhipster.lite.generator.server.javatool.frontendmaven.application.FrontendMavenAssert.assertFrontendMavenPlugin; -import static tech.jhipster.lite.generator.server.javatool.frontendmaven.application.FrontendMavenAssert.assertMavenAntrunPlugin; -import static tech.jhipster.lite.generator.server.javatool.frontendmaven.application.FrontendMavenAssert.assertRedirectionFiles; - -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import tech.jhipster.lite.IntegrationTest; -import tech.jhipster.lite.generator.project.domain.Project; - -@IntegrationTest -class FrontendMavenApplicationServiceIT { - - @Autowired - FrontendMavenApplicationService frontendMavenApplicationService; - - @Test - void shouldAddFrontendMavenPlugin() { - Project project = tmpProjectWithPomXml(); - - frontendMavenApplicationService.addFrontendMavenPlugin(project); - - assertChecksumMavenPlugin(project); - assertMavenAntrunPlugin(project); - assertFrontendMavenPlugin(project); - assertRedirectionFiles(project); - } -} diff --git a/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/application/FrontendMavenAssert.java b/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/application/FrontendMavenAssert.java deleted file mode 100644 index df01032ebd1..00000000000 --- a/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/application/FrontendMavenAssert.java +++ /dev/null @@ -1,83 +0,0 @@ -package tech.jhipster.lite.generator.server.javatool.frontendmaven.application; - -import static tech.jhipster.lite.TestUtils.assertFileContent; -import static tech.jhipster.lite.TestUtils.assertFileExist; -import static tech.jhipster.lite.common.domain.FileUtils.getPath; -import static tech.jhipster.lite.generator.project.domain.Constants.MAIN_JAVA; -import static tech.jhipster.lite.generator.project.domain.Constants.POM_XML; -import static tech.jhipster.lite.generator.project.domain.Constants.TECHNICAL_INFRASTRUCTURE_PRIMARY; -import static tech.jhipster.lite.generator.project.domain.Constants.TEST_JAVA; - -import java.util.List; -import tech.jhipster.lite.generator.project.domain.DefaultConfig; -import tech.jhipster.lite.generator.project.domain.Project; - -public class FrontendMavenAssert { - - private FrontendMavenAssert() {} - - public static void assertChecksumMavenPlugin(Project project) { - assertFileContent(project, POM_XML, ""); - assertFileContent( - project, - POM_XML, - List.of( - "", - "net.nicoulaj.maven.plugins", - "checksum-maven-plugin", - "${checksum-maven-plugin.version}", - "" - ) - ); - } - - public static void assertMavenAntrunPlugin(Project project) { - assertFileContent(project, POM_XML, ""); - assertFileContent( - project, - POM_XML, - List.of( - "", - "org.apache.maven.plugins", - "maven-antrun-plugin", - "${maven-antrun-plugin.version}", - "" - ) - ); - } - - public static void assertFrontendMavenPlugin(Project project) { - assertFileContent(project, POM_XML, ""); - assertFileContent(project, POM_XML, ""); - assertFileContent(project, POM_XML, ""); - assertFileContent( - project, - POM_XML, - List.of( - "", - "com.github.eirslett", - "frontend-maven-plugin", - "${frontend-maven-plugin.version}", - "" - ) - ); - } - - public static void assertRedirectionFiles(Project project) { - String path = getPath( - MAIN_JAVA, - project.getPackageNamePath().orElse(DefaultConfig.PACKAGE_PATH), - TECHNICAL_INFRASTRUCTURE_PRIMARY, - "redirection" - ); - String testPath = getPath( - TEST_JAVA, - project.getPackageNamePath().orElse(DefaultConfig.PACKAGE_PATH), - TECHNICAL_INFRASTRUCTURE_PRIMARY, - "redirection" - ); - - assertFileExist(project, path, "RedirectionResource.java"); - assertFileExist(project, testPath, "RedirectionResourceIT.java"); - } -} diff --git a/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/domain/FrontendMavenDomainServiceTest.java b/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/domain/FrontendMavenDomainServiceTest.java deleted file mode 100644 index 719297c582f..00000000000 --- a/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/domain/FrontendMavenDomainServiceTest.java +++ /dev/null @@ -1,54 +0,0 @@ -package tech.jhipster.lite.generator.server.javatool.frontendmaven.domain; - -import static org.mockito.Mockito.*; -import static tech.jhipster.lite.TestUtils.*; - -import java.util.Optional; -import org.assertj.core.api.Assertions; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; -import tech.jhipster.lite.UnitTest; -import tech.jhipster.lite.error.domain.GeneratorException; -import tech.jhipster.lite.generator.buildtool.generic.domain.BuildToolService; -import tech.jhipster.lite.generator.buildtool.generic.domain.Plugin; -import tech.jhipster.lite.generator.project.domain.Project; -import tech.jhipster.lite.generator.project.domain.ProjectFile; -import tech.jhipster.lite.generator.project.domain.ProjectRepository; - -@UnitTest -@ExtendWith(MockitoExtension.class) -class FrontendMavenDomainServiceTest { - - @Mock - BuildToolService buildToolService; - - @Mock - ProjectRepository projectRepository; - - @InjectMocks - FrontendMavenDomainService frontendMavenDomainService; - - @Test - void shouldAddFrontendMavenPlugin() { - Project project = tmpProjectWithPomXml(); - when(buildToolService.getVersion(any(Project.class), anyString())).thenReturn(Optional.of("0.0.0")); - - frontendMavenDomainService.addFrontendMavenPlugin(project); - - verify(buildToolService, times(5)).addProperty(any(Project.class), anyString(), anyString()); - verify(buildToolService, times(3)).addPlugin(any(Project.class), any(Plugin.class)); - verify(projectRepository, times(2)).template(any(ProjectFile.class)); - } - - @Test - void shouldNotAddFrontendMavenPlugin() { - Project project = tmpProjectWithPomXml(); - - Assertions - .assertThatThrownBy(() -> frontendMavenDomainService.addFrontendMavenPlugin(project)) - .isExactlyInstanceOf(GeneratorException.class); - } -} diff --git a/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/domain/FrontendMavenModuleFactoryTest.java b/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/domain/FrontendMavenModuleFactoryTest.java new file mode 100644 index 00000000000..0c46ce3ebc5 --- /dev/null +++ b/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/domain/FrontendMavenModuleFactoryTest.java @@ -0,0 +1,167 @@ +package tech.jhipster.lite.generator.server.javatool.frontendmaven.domain; + +import static tech.jhipster.lite.module.infrastructure.secondary.JHipsterModulesAssertions.*; + +import org.junit.jupiter.api.Test; +import tech.jhipster.lite.TestFileUtils; +import tech.jhipster.lite.UnitTest; +import tech.jhipster.lite.module.domain.JHipsterModule; +import tech.jhipster.lite.module.domain.JHipsterModulesFixture; +import tech.jhipster.lite.module.domain.properties.JHipsterModuleProperties; + +@UnitTest +class FrontendMavenModuleFactoryTest { + + private static final FrontendMavenModuleFactory factory = new FrontendMavenModuleFactory(); + + @Test + void shouldBuildModule() { + JHipsterModuleProperties properties = JHipsterModulesFixture + .propertiesBuilder(TestFileUtils.tmpDirForTest()) + .basePackage("com.jhipster.test") + .projectBaseName("myapp") + .build(); + + JHipsterModule module = factory.buildModule(properties); + + assertThatModuleWithFiles(module, pomFile()) + .createFile("pom.xml") + .containing(" ") + .containing(" ") + .containing( + """ + + net.nicoulaj.maven.plugins + checksum-maven-plugin + ${checksum-maven-plugin.version} + + + create-pre-compiled-webapp-checksum + generate-resources + + files + + + + create-compiled-webapp-checksum + + files + + compile + + checksums.csv.old + + + + + + + ${project.basedir} + + src/main/webapp/**/*.* + target/classes/static/**/*.* + package-lock.json + package.json + tsconfig.json + + + + false + false + false + + SHA-1 + + true + true + + + """ + ) + .containing( + """ + + org.apache.maven.plugins + maven-antrun-plugin + ${maven-antrun-plugin.version} + + + eval-frontend-checksum + generate-resources + + run + + + + + + + + + + + + true + + + + + """ + ) + .containing( + """ + + com.github.eirslett + frontend-maven-plugin + ${frontend-maven-plugin.version} + + + install-node-and-npm + + install-node-and-npm + + + ${node.version} + ${npm.version} + + + + npm install + + npm + + + + build front + + npm + + generate-resources + + run build + + ${project.version} + + false + + + + front test + + npm + + test + + run test + false + + + + + """ + ) + .and() + .createJavaSources("com/jhipster/test/technical/infrastructure/primary/redirection/RedirectionResource.java") + .createJavaTests("com/jhipster/test/technical/infrastructure/primary/redirection/RedirectionResourceIT.java"); + } +} diff --git a/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/infrastructure/config/FrontendMavenBeanConfigurationIT.java b/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/infrastructure/config/FrontendMavenBeanConfigurationIT.java deleted file mode 100644 index de032142ea9..00000000000 --- a/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/infrastructure/config/FrontendMavenBeanConfigurationIT.java +++ /dev/null @@ -1,21 +0,0 @@ -package tech.jhipster.lite.generator.server.javatool.frontendmaven.infrastructure.config; - -import static org.assertj.core.api.Assertions.assertThat; - -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationContext; -import tech.jhipster.lite.IntegrationTest; -import tech.jhipster.lite.generator.server.javatool.frontendmaven.domain.FrontendMavenDomainService; - -@IntegrationTest -class FrontendMavenBeanConfigurationIT { - - @Autowired - ApplicationContext applicationContext; - - @Test - void shouldGetBean() { - assertThat(applicationContext.getBean("frontendMavenService")).isNotNull().isInstanceOf(FrontendMavenDomainService.class); - } -} diff --git a/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/infrastructure/primary/rest/FrontendMavenResourceIT.java b/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/infrastructure/primary/rest/FrontendMavenResourceIT.java deleted file mode 100644 index f0d1e171967..00000000000 --- a/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/infrastructure/primary/rest/FrontendMavenResourceIT.java +++ /dev/null @@ -1,45 +0,0 @@ -package tech.jhipster.lite.generator.server.javatool.frontendmaven.infrastructure.primary.rest; - -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; -import static tech.jhipster.lite.generator.server.javatool.frontendmaven.application.FrontendMavenAssert.*; - -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MockMvc; -import tech.jhipster.lite.IntegrationTest; -import tech.jhipster.lite.TestFileUtils; -import tech.jhipster.lite.TestUtils; -import tech.jhipster.lite.generator.project.domain.Project; -import tech.jhipster.lite.generator.project.infrastructure.primary.dto.ProjectDTO; -import tech.jhipster.lite.module.infrastructure.secondary.TestJHipsterModules; - -@IntegrationTest -@AutoConfigureMockMvc -class FrontendMavenResourceIT { - - @Autowired - private MockMvc mockMvc; - - @Test - void shouldAddFrontendMavenPlugin() throws Exception { - ProjectDTO projectDTO = TestUtils.readFileToObject("json/chips.json", ProjectDTO.class).folder(TestFileUtils.tmpDirForTest()); - Project project = ProjectDTO.toProject(projectDTO); - TestJHipsterModules.applyInit(project); - TestJHipsterModules.applyMaven(project); - - mockMvc - .perform( - post("/api/developer-tools/frontend-maven-plugin") - .contentType(MediaType.APPLICATION_JSON) - .content(TestUtils.convertObjectToJsonBytes(projectDTO)) - ) - .andExpect(status().isOk()); - - assertChecksumMavenPlugin(project); - assertMavenAntrunPlugin(project); - assertFrontendMavenPlugin(project); - } -} diff --git a/src/test/java/tech/jhipster/lite/module/domain/JHipsterModulesFixture.java b/src/test/java/tech/jhipster/lite/module/domain/JHipsterModulesFixture.java index f2960662794..991ce5444b0 100644 --- a/src/test/java/tech/jhipster/lite/module/domain/JHipsterModulesFixture.java +++ b/src/test/java/tech/jhipster/lite/module/domain/JHipsterModulesFixture.java @@ -65,6 +65,7 @@ public static JHipsterModule module() { .and() .and() .javaDependencies() + .version(new JavaDependencyVersion("dummy-dependency", "4.5.8")) .dependency(groupId("org.springframework.boot"), artifactId("spring-boot-starter")) .dependency(groupId("org.zalando"), artifactId("problem-spring-web"), versionSlug("problem-spring")) .dependency(groupId("io.jsonwebtoken"), artifactId("jjwt-api"), versionSlug("jjwt.version")) diff --git a/src/test/java/tech/jhipster/lite/module/infrastructure/secondary/FileSystemJHipsterModulesRepositoryTest.java b/src/test/java/tech/jhipster/lite/module/infrastructure/secondary/FileSystemJHipsterModulesRepositoryTest.java index 29ba3a52dca..8b51e9ef53f 100644 --- a/src/test/java/tech/jhipster/lite/module/infrastructure/secondary/FileSystemJHipsterModulesRepositoryTest.java +++ b/src/test/java/tech/jhipster/lite/module/infrastructure/secondary/FileSystemJHipsterModulesRepositoryTest.java @@ -38,6 +38,7 @@ void shouldApplyModule() { .containing("com.test.myapp") .and() .createFile("pom.xml") + .containing("4.5.8") .containing( """