From c893044e0015d5fe46bcd1264c87d85926a02606 Mon Sep 17 00:00:00 2001 From: Colin DAMON Date: Thu, 30 Jun 2022 10:14:21 +0200 Subject: [PATCH] Migrate gitpod to module --- .../project/domain/GeneratorAction.java | 1 - .../application/GitpodApplicationService.java | 15 +++---- .../gitpod/domain/GitpodDomainService.java | 30 -------------- .../gitpod/domain/GitpodModuleFactory.java | 25 ++++++++++++ .../setup/gitpod/domain/GitpodService.java | 7 ---- .../config/GitpodBeanConfiguration.java | 22 ----------- .../primary/GitpodModuleConfiguration.java | 22 +++++++++++ .../primary/rest/GitpodResource.java | 35 ----------------- src/test/features/gitpod.feature | 6 +++ .../GitpodApplicationServiceIT.java | 26 ------------- .../gitpod/application/GitpodAssertFiles.java | 18 --------- .../domain/GitpodDomainServiceTest.java | 34 ---------------- .../domain/GitpodModuleFactoryTest.java | 25 ++++++++++++ .../config/GitpodBeanConfigurationIT.java | 21 ---------- .../primary/rest/GitpodResourceIT.java | 39 ------------------- 15 files changed, 86 insertions(+), 240 deletions(-) delete mode 100644 src/main/java/tech/jhipster/lite/generator/setup/gitpod/domain/GitpodDomainService.java create mode 100644 src/main/java/tech/jhipster/lite/generator/setup/gitpod/domain/GitpodModuleFactory.java delete mode 100644 src/main/java/tech/jhipster/lite/generator/setup/gitpod/domain/GitpodService.java delete mode 100644 src/main/java/tech/jhipster/lite/generator/setup/gitpod/infrastructure/config/GitpodBeanConfiguration.java create mode 100644 src/main/java/tech/jhipster/lite/generator/setup/gitpod/infrastructure/primary/GitpodModuleConfiguration.java delete mode 100644 src/main/java/tech/jhipster/lite/generator/setup/gitpod/infrastructure/primary/rest/GitpodResource.java create mode 100644 src/test/features/gitpod.feature delete mode 100644 src/test/java/tech/jhipster/lite/generator/setup/gitpod/application/GitpodApplicationServiceIT.java delete mode 100644 src/test/java/tech/jhipster/lite/generator/setup/gitpod/application/GitpodAssertFiles.java delete mode 100644 src/test/java/tech/jhipster/lite/generator/setup/gitpod/domain/GitpodDomainServiceTest.java create mode 100644 src/test/java/tech/jhipster/lite/generator/setup/gitpod/domain/GitpodModuleFactoryTest.java delete mode 100644 src/test/java/tech/jhipster/lite/generator/setup/gitpod/infrastructure/config/GitpodBeanConfigurationIT.java delete mode 100644 src/test/java/tech/jhipster/lite/generator/setup/gitpod/infrastructure/primary/rest/GitpodResourceIT.java 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 5dbe33e097f..6e939860c16 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 @@ -112,7 +112,6 @@ private GeneratorAction() {} public static final String DOCKERFILE = "dockerfile"; public static final String GITHUB_CODESPACES = "github-codespaces"; - public static final String GITPOD = "gitpod"; public static final String SPRINGBOOT_WEBFLUX_NETTY = "springboot-webflux-netty"; diff --git a/src/main/java/tech/jhipster/lite/generator/setup/gitpod/application/GitpodApplicationService.java b/src/main/java/tech/jhipster/lite/generator/setup/gitpod/application/GitpodApplicationService.java index 7900dda863e..44dc62576e5 100644 --- a/src/main/java/tech/jhipster/lite/generator/setup/gitpod/application/GitpodApplicationService.java +++ b/src/main/java/tech/jhipster/lite/generator/setup/gitpod/application/GitpodApplicationService.java @@ -1,19 +1,20 @@ package tech.jhipster.lite.generator.setup.gitpod.application; import org.springframework.stereotype.Service; -import tech.jhipster.lite.generator.project.domain.Project; -import tech.jhipster.lite.generator.setup.gitpod.domain.GitpodService; +import tech.jhipster.lite.generator.setup.gitpod.domain.GitpodModuleFactory; +import tech.jhipster.lite.module.domain.JHipsterModule; +import tech.jhipster.lite.module.domain.properties.JHipsterModuleProperties; @Service public class GitpodApplicationService { - private final GitpodService gitpodService; + private final GitpodModuleFactory factory; - public GitpodApplicationService(GitpodService gitpodService) { - this.gitpodService = gitpodService; + public GitpodApplicationService() { + factory = new GitpodModuleFactory(); } - public void init(Project project) { - gitpodService.init(project); + public JHipsterModule buildModule(JHipsterModuleProperties properties) { + return factory.buildModule(properties); } } diff --git a/src/main/java/tech/jhipster/lite/generator/setup/gitpod/domain/GitpodDomainService.java b/src/main/java/tech/jhipster/lite/generator/setup/gitpod/domain/GitpodDomainService.java deleted file mode 100644 index f454936b045..00000000000 --- a/src/main/java/tech/jhipster/lite/generator/setup/gitpod/domain/GitpodDomainService.java +++ /dev/null @@ -1,30 +0,0 @@ -package tech.jhipster.lite.generator.setup.gitpod.domain; - -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 GitpodDomainService implements GitpodService { - - public static final String SOURCE = "setup/gitpod"; - - private final ProjectRepository projectRepository; - - public GitpodDomainService(ProjectRepository projectRepository) { - this.projectRepository = projectRepository; - } - - @Override - public void init(Project project) { - addConfig(project); - addDockerfile(project); - } - - private void addConfig(Project project) { - projectRepository.add(ProjectFile.forProject(project).withSource(SOURCE, ".gitpod.yml").withSameDestination()); - } - - private void addDockerfile(Project project) { - projectRepository.add(ProjectFile.forProject(project).withSource(SOURCE, ".gitpod.Dockerfile").withSameDestination()); - } -} diff --git a/src/main/java/tech/jhipster/lite/generator/setup/gitpod/domain/GitpodModuleFactory.java b/src/main/java/tech/jhipster/lite/generator/setup/gitpod/domain/GitpodModuleFactory.java new file mode 100644 index 00000000000..4ec16c00a6f --- /dev/null +++ b/src/main/java/tech/jhipster/lite/generator/setup/gitpod/domain/GitpodModuleFactory.java @@ -0,0 +1,25 @@ +package tech.jhipster.lite.generator.setup.gitpod.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.properties.JHipsterModuleProperties; + +public class GitpodModuleFactory { + + public JHipsterModule buildModule(JHipsterModuleProperties properties) { + Assert.notNull("properties", properties); + + //@formatter:off + return moduleBuilder(properties) + .files() + .batch(from("setup/gitpod"), to(".")) + .file(".gitpod.yml") + .file(".gitpod.Dockerfile") + .and() + .and() + .build(); + //@formatter:on + } +} diff --git a/src/main/java/tech/jhipster/lite/generator/setup/gitpod/domain/GitpodService.java b/src/main/java/tech/jhipster/lite/generator/setup/gitpod/domain/GitpodService.java deleted file mode 100644 index dbc6f9d043c..00000000000 --- a/src/main/java/tech/jhipster/lite/generator/setup/gitpod/domain/GitpodService.java +++ /dev/null @@ -1,7 +0,0 @@ -package tech.jhipster.lite.generator.setup.gitpod.domain; - -import tech.jhipster.lite.generator.project.domain.Project; - -public interface GitpodService { - void init(Project project); -} diff --git a/src/main/java/tech/jhipster/lite/generator/setup/gitpod/infrastructure/config/GitpodBeanConfiguration.java b/src/main/java/tech/jhipster/lite/generator/setup/gitpod/infrastructure/config/GitpodBeanConfiguration.java deleted file mode 100644 index 4df468d2fd8..00000000000 --- a/src/main/java/tech/jhipster/lite/generator/setup/gitpod/infrastructure/config/GitpodBeanConfiguration.java +++ /dev/null @@ -1,22 +0,0 @@ -package tech.jhipster.lite.generator.setup.gitpod.infrastructure.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import tech.jhipster.lite.generator.project.domain.ProjectRepository; -import tech.jhipster.lite.generator.setup.gitpod.domain.GitpodDomainService; -import tech.jhipster.lite.generator.setup.gitpod.domain.GitpodService; - -@Configuration -public class GitpodBeanConfiguration { - - private final ProjectRepository projectRepository; - - public GitpodBeanConfiguration(ProjectRepository projectRepository) { - this.projectRepository = projectRepository; - } - - @Bean - public GitpodService gitpodService() { - return new GitpodDomainService(projectRepository); - } -} diff --git a/src/main/java/tech/jhipster/lite/generator/setup/gitpod/infrastructure/primary/GitpodModuleConfiguration.java b/src/main/java/tech/jhipster/lite/generator/setup/gitpod/infrastructure/primary/GitpodModuleConfiguration.java new file mode 100644 index 00000000000..afe4a6d439c --- /dev/null +++ b/src/main/java/tech/jhipster/lite/generator/setup/gitpod/infrastructure/primary/GitpodModuleConfiguration.java @@ -0,0 +1,22 @@ +package tech.jhipster.lite.generator.setup.gitpod.infrastructure.primary; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import tech.jhipster.lite.generator.setup.gitpod.application.GitpodApplicationService; +import tech.jhipster.lite.module.infrastructure.primary.JHipsterModuleApiDoc; +import tech.jhipster.lite.module.infrastructure.primary.JHipsterModuleResource; + +@Configuration +class GitpodModuleConfiguration { + + @Bean + JHipsterModuleResource gitpodModule(GitpodApplicationService gitPods) { + return JHipsterModuleResource + .builder() + .legacyUrl("/api/developer-tools/gitpod") + .slug("gitpod") + .withoutProperties() + .apiDoc(new JHipsterModuleApiDoc("Gitpod", "Init Gitpod configuration files")) + .factory(gitPods::buildModule); + } +} diff --git a/src/main/java/tech/jhipster/lite/generator/setup/gitpod/infrastructure/primary/rest/GitpodResource.java b/src/main/java/tech/jhipster/lite/generator/setup/gitpod/infrastructure/primary/rest/GitpodResource.java deleted file mode 100644 index b46aef98542..00000000000 --- a/src/main/java/tech/jhipster/lite/generator/setup/gitpod/infrastructure/primary/rest/GitpodResource.java +++ /dev/null @@ -1,35 +0,0 @@ -package tech.jhipster.lite.generator.setup.gitpod.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.setup.gitpod.application.GitpodApplicationService; -import tech.jhipster.lite.technical.infrastructure.primary.annotation.GeneratorStep; - -@RestController -@RequestMapping("/api/developer-tools/gitpod") -@Tag(name = "Gitpod") -class GitpodResource { - - private final GitpodApplicationService gitpodApplicationService; - - public GitpodResource(GitpodApplicationService gitpodApplicationService) { - this.gitpodApplicationService = gitpodApplicationService; - } - - @Operation(summary = "Gitpod", description = "Init Gitpod configuration files") - @ApiResponse(responseCode = "500", description = "An error occurred while initializing Gitpod files.") - @PostMapping - @GeneratorStep(id = GeneratorAction.GITPOD) - public void init(@RequestBody ProjectDTO projectDTO) { - Project project = ProjectDTO.toProject(projectDTO); - gitpodApplicationService.init(project); - } -} diff --git a/src/test/features/gitpod.feature b/src/test/features/gitpod.feature new file mode 100644 index 00000000000..1744f721051 --- /dev/null +++ b/src/test/features/gitpod.feature @@ -0,0 +1,6 @@ +Feature: Gitpod + + Scenario: Should apply gitpod module + When I apply "gitpod" module to default project without properties + Then I should have files in "." + | .gitpod.yml | diff --git a/src/test/java/tech/jhipster/lite/generator/setup/gitpod/application/GitpodApplicationServiceIT.java b/src/test/java/tech/jhipster/lite/generator/setup/gitpod/application/GitpodApplicationServiceIT.java deleted file mode 100644 index ec12505a6ca..00000000000 --- a/src/test/java/tech/jhipster/lite/generator/setup/gitpod/application/GitpodApplicationServiceIT.java +++ /dev/null @@ -1,26 +0,0 @@ -package tech.jhipster.lite.generator.setup.gitpod.application; - -import static tech.jhipster.lite.TestUtils.tmpProject; -import static tech.jhipster.lite.generator.setup.gitpod.application.GitpodAssertFiles.assertFilesDockerfile; -import static tech.jhipster.lite.generator.setup.gitpod.application.GitpodAssertFiles.assertFilesGitpodYml; - -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 GitpodApplicationServiceIT { - - @Autowired - GitpodApplicationService gitpodApplicationService; - - @Test - void shouldInitFiles() { - Project project = tmpProject(); - - gitpodApplicationService.init(project); - assertFilesDockerfile(project); - assertFilesGitpodYml(project); - } -} diff --git a/src/test/java/tech/jhipster/lite/generator/setup/gitpod/application/GitpodAssertFiles.java b/src/test/java/tech/jhipster/lite/generator/setup/gitpod/application/GitpodAssertFiles.java deleted file mode 100644 index 25610e96a0b..00000000000 --- a/src/test/java/tech/jhipster/lite/generator/setup/gitpod/application/GitpodAssertFiles.java +++ /dev/null @@ -1,18 +0,0 @@ -package tech.jhipster.lite.generator.setup.gitpod.application; - -import static tech.jhipster.lite.TestUtils.assertFileExist; - -import tech.jhipster.lite.generator.project.domain.Project; - -public class GitpodAssertFiles { - - private GitpodAssertFiles() {} - - public static void assertFilesGitpodYml(Project project) { - assertFileExist(project, ".gitpod.yml"); - } - - public static void assertFilesDockerfile(Project project) { - assertFileExist(project, ".gitpod.Dockerfile"); - } -} diff --git a/src/test/java/tech/jhipster/lite/generator/setup/gitpod/domain/GitpodDomainServiceTest.java b/src/test/java/tech/jhipster/lite/generator/setup/gitpod/domain/GitpodDomainServiceTest.java deleted file mode 100644 index 20326c4f436..00000000000 --- a/src/test/java/tech/jhipster/lite/generator/setup/gitpod/domain/GitpodDomainServiceTest.java +++ /dev/null @@ -1,34 +0,0 @@ -package tech.jhipster.lite.generator.setup.gitpod.domain; - -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static tech.jhipster.lite.TestUtils.*; - -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.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 GitpodDomainServiceTest { - - @Mock - private ProjectRepository projectRepository; - - @InjectMocks - private GitpodDomainService gitpodDomainService; - - @Test - void shouldAddGitpodFiles() { - Project project = tmpProjectWithPackageJson(); - - gitpodDomainService.init(project); - verify(projectRepository, times(2)).add(any(ProjectFile.class)); - } -} diff --git a/src/test/java/tech/jhipster/lite/generator/setup/gitpod/domain/GitpodModuleFactoryTest.java b/src/test/java/tech/jhipster/lite/generator/setup/gitpod/domain/GitpodModuleFactoryTest.java new file mode 100644 index 00000000000..142b4fe5488 --- /dev/null +++ b/src/test/java/tech/jhipster/lite/generator/setup/gitpod/domain/GitpodModuleFactoryTest.java @@ -0,0 +1,25 @@ +package tech.jhipster.lite.generator.setup.gitpod.domain; + +import static tech.jhipster.lite.module.infrastructure.secondary.JHipsterModulesAssertions.*; + +import org.junit.jupiter.api.Test; +import tech.jhipster.lite.UnitTest; +import tech.jhipster.lite.common.domain.FileUtils; +import tech.jhipster.lite.module.domain.JHipsterModule; +import tech.jhipster.lite.module.domain.JHipsterModulesFixture; +import tech.jhipster.lite.module.domain.properties.JHipsterModuleProperties; + +@UnitTest +class GitpodModuleFactoryTest { + + private static final GitpodModuleFactory factory = new GitpodModuleFactory(); + + @Test + void shouldBuildModule() { + JHipsterModuleProperties properties = JHipsterModulesFixture.propertiesBuilder(FileUtils.tmpDirForTest()).build(); + + JHipsterModule module = factory.buildModule(properties); + + assertThatModule(module).createFiles(".gitpod.yml", ".gitpod.Dockerfile"); + } +} diff --git a/src/test/java/tech/jhipster/lite/generator/setup/gitpod/infrastructure/config/GitpodBeanConfigurationIT.java b/src/test/java/tech/jhipster/lite/generator/setup/gitpod/infrastructure/config/GitpodBeanConfigurationIT.java deleted file mode 100644 index 36368ac2d7c..00000000000 --- a/src/test/java/tech/jhipster/lite/generator/setup/gitpod/infrastructure/config/GitpodBeanConfigurationIT.java +++ /dev/null @@ -1,21 +0,0 @@ -package tech.jhipster.lite.generator.setup.gitpod.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.setup.gitpod.domain.GitpodDomainService; - -@IntegrationTest -class GitpodBeanConfigurationIT { - - @Autowired - ApplicationContext applicationContext; - - @Test - void shouldGetBean() { - assertThat(applicationContext.getBean("gitpodService")).isNotNull().isInstanceOf(GitpodDomainService.class); - } -} diff --git a/src/test/java/tech/jhipster/lite/generator/setup/gitpod/infrastructure/primary/rest/GitpodResourceIT.java b/src/test/java/tech/jhipster/lite/generator/setup/gitpod/infrastructure/primary/rest/GitpodResourceIT.java deleted file mode 100644 index 02ddab6953b..00000000000 --- a/src/test/java/tech/jhipster/lite/generator/setup/gitpod/infrastructure/primary/rest/GitpodResourceIT.java +++ /dev/null @@ -1,39 +0,0 @@ -package tech.jhipster.lite.generator.setup.gitpod.infrastructure.primary.rest; - -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -import static tech.jhipster.lite.TestUtils.convertObjectToJsonBytes; -import static tech.jhipster.lite.TestUtils.readFileToObject; -import static tech.jhipster.lite.common.domain.FileUtils.tmpDirForTest; -import static tech.jhipster.lite.generator.setup.gitpod.application.GitpodAssertFiles.assertFilesDockerfile; -import static tech.jhipster.lite.generator.setup.gitpod.application.GitpodAssertFiles.assertFilesGitpodYml; - -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.generator.project.domain.Project; -import tech.jhipster.lite.generator.project.infrastructure.primary.dto.ProjectDTO; - -@IntegrationTest -@AutoConfigureMockMvc -class GitpodResourceIT { - - @Autowired - MockMvc mockMvc; - - @Test - void shouldInit() throws Exception { - ProjectDTO projectDTO = readFileToObject("json/chips.json", ProjectDTO.class).folder(tmpDirForTest()); - Project project = ProjectDTO.toProject(projectDTO); - - mockMvc - .perform(post("/api/developer-tools/gitpod").contentType(MediaType.APPLICATION_JSON).content(convertObjectToJsonBytes(projectDTO))) - .andExpect(status().isOk()); - - assertFilesDockerfile(project); - assertFilesGitpodYml(project); - } -}