From 5bbd211df50a06ffd0983f58364078953f172de9 Mon Sep 17 00:00:00 2001 From: Hippolyte Durix Date: Wed, 15 Jun 2022 18:55:13 +0200 Subject: [PATCH] Forced project folder --- .../primary/dto/ProjectDTO.java | 3 ++ .../primary/rest/ProjectFoldersResource.java | 29 +++++++++++ .../primary/JHipsterModulesResources.java | 2 +- .../InvalidProjectFolderException.java | 10 ++++ .../JacksonProjectFolderDeserializer.java | 26 ++++++++++ .../resources/config/application.properties | 1 + src/main/webapp/app/main.ts | 3 ++ .../app/springboot/domain/FolderName.ts | 1 + .../springboot/domain/ProjectFolderService.ts | 5 ++ .../springboot/primary/Generator.component.ts | 4 ++ .../app/springboot/primary/Generator.vue | 2 +- .../secondary/ProjectFolderRepository.ts | 11 ++++ .../tech/jhipster/lite/IntegrationTest.java | 2 +- .../domain/GradleDomainServiceTest.java | 1 - .../GitHubActionsDomainServiceTest.java | 1 - .../core/domain/AngularDomainServiceTest.java | 1 - .../domain/AngularJwtDomainServiceTest.java | 1 - .../AngularOauth2DomainServiceTest.java | 1 - .../core/domain/ReactDomainServiceTest.java | 1 - .../core/domain/SvelteDomainServiceTest.java | 1 - .../domain/CypressDomainServiceTest.java | 1 - .../rest/ProjectFoldersResourceIT.java | 24 +++++++++ .../secondary/ProjectLocalRepositoryTest.java | 1 - .../FrontendMavenDomainServiceTest.java | 1 - .../kafka/domain/KafkaDomainServiceTest.java | 1 - .../domain/PulsarDomainServiceTest.java | 1 - .../domain/SpringBootDomainServiceTest.java | 1 - .../domain/MongodbDomainServiceTest.java | 1 - .../domain/MssqlDomainServiceUnitTest.java | 1 - .../domain/SQLCommonDomainServiceTest.java | 1 - .../domain/FlywayDomainServiceTest.java | 1 - .../domain/JwtSecurityDomainServiceTest.java | 1 - .../SpringBootMvcDomainServiceTest.java | 1 - .../SpringBootWebfluxDomainServiceTest.java | 1 - .../primary/HistoryResourceTest.java | 1 - .../GeneratorHistoryLocalRepositoryTest.java | 1 - .../module/domain/JHipsterModulesFixture.java | 22 ++++---- .../primary/JHipsterModulesResourcesTest.java | 8 +++ .../primary/ForcedProjectFolderPrefixIT.java | 50 +++++++++++++++++++ .../primary/ProjectFakeController.java | 15 ++++++ .../cypress/integration/Generator.spec.ts | 10 ++-- .../domain/ProjectFolderService.fixture.ts | 10 ++++ .../spec/springboot/primary/Generator.spec.ts | 31 +++++++++++- .../secondary/ProjectFolderRepository.spec.ts | 14 ++++++ 44 files changed, 261 insertions(+), 44 deletions(-) create mode 100644 src/main/java/tech/jhipster/lite/generator/project/infrastructure/primary/rest/ProjectFoldersResource.java create mode 100644 src/main/java/tech/jhipster/lite/technical/infrastructure/primary/jackson/InvalidProjectFolderException.java create mode 100644 src/main/java/tech/jhipster/lite/technical/infrastructure/primary/jackson/JacksonProjectFolderDeserializer.java create mode 100644 src/main/webapp/app/springboot/domain/FolderName.ts create mode 100644 src/main/webapp/app/springboot/domain/ProjectFolderService.ts create mode 100644 src/main/webapp/app/springboot/secondary/ProjectFolderRepository.ts create mode 100644 src/test/java/tech/jhipster/lite/generator/project/infrastructure/primary/rest/ProjectFoldersResourceIT.java create mode 100644 src/test/java/tech/jhipster/lite/technical/infrastructure/primary/ForcedProjectFolderPrefixIT.java create mode 100644 src/test/java/tech/jhipster/lite/technical/infrastructure/primary/ProjectFakeController.java create mode 100644 src/test/javascript/spec/springboot/domain/ProjectFolderService.fixture.ts create mode 100644 src/test/javascript/spec/springboot/secondary/ProjectFolderRepository.spec.ts diff --git a/src/main/java/tech/jhipster/lite/generator/project/infrastructure/primary/dto/ProjectDTO.java b/src/main/java/tech/jhipster/lite/generator/project/infrastructure/primary/dto/ProjectDTO.java index cd1fa50d548..e3cd6d13183 100644 --- a/src/main/java/tech/jhipster/lite/generator/project/infrastructure/primary/dto/ProjectDTO.java +++ b/src/main/java/tech/jhipster/lite/generator/project/infrastructure/primary/dto/ProjectDTO.java @@ -1,16 +1,19 @@ package tech.jhipster.lite.generator.project.infrastructure.primary.dto; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import io.swagger.v3.oas.annotations.media.Schema; import java.util.Map; import tech.jhipster.lite.error.domain.Assert; import tech.jhipster.lite.generator.project.domain.Project; import tech.jhipster.lite.module.domain.properties.JHipsterModuleProperties; +import tech.jhipster.lite.technical.infrastructure.primary.jackson.JacksonProjectFolderDeserializer; @Schema(description = "Project DTO") public class ProjectDTO { @JsonProperty("folder") + @JsonDeserialize(using = JacksonProjectFolderDeserializer.class) @Schema(description = "folder", example = "/tmp/jhlite/jhipster", required = true) private String folder; diff --git a/src/main/java/tech/jhipster/lite/generator/project/infrastructure/primary/rest/ProjectFoldersResource.java b/src/main/java/tech/jhipster/lite/generator/project/infrastructure/primary/rest/ProjectFoldersResource.java new file mode 100644 index 00000000000..1b3a28d4385 --- /dev/null +++ b/src/main/java/tech/jhipster/lite/generator/project/infrastructure/primary/rest/ProjectFoldersResource.java @@ -0,0 +1,29 @@ +package tech.jhipster.lite.generator.project.infrastructure.primary.rest; + +import java.util.UUID; +import org.apache.commons.lang3.SystemUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/project-folders") +class ProjectFoldersResource { + + @Value("${application.forced-project-folder:}") + private String forcedProjectFolder; + + @GetMapping + public String getAvailableFolderName() { + return rootFolder().replaceAll("([^/])$", "$1/") + UUID.randomUUID(); + } + + private String rootFolder() { + if (forcedProjectFolder.isBlank()) { + return SystemUtils.JAVA_IO_TMPDIR; + } + + return forcedProjectFolder; + } +} diff --git a/src/main/java/tech/jhipster/lite/module/infrastructure/primary/JHipsterModulesResources.java b/src/main/java/tech/jhipster/lite/module/infrastructure/primary/JHipsterModulesResources.java index 7ce5faa9511..49f1fa628c3 100644 --- a/src/main/java/tech/jhipster/lite/module/infrastructure/primary/JHipsterModulesResources.java +++ b/src/main/java/tech/jhipster/lite/module/infrastructure/primary/JHipsterModulesResources.java @@ -7,7 +7,7 @@ record JHipsterModulesResources(Collection modulesResources) { public JHipsterModulesResources { - Assert.field("modulesrouces", modulesResources).noNullElement().notEmpty(); + Assert.field("modulesResources", modulesResources).noNullElement().notEmpty(); assertUniqSlugs(modulesResources); } diff --git a/src/main/java/tech/jhipster/lite/technical/infrastructure/primary/jackson/InvalidProjectFolderException.java b/src/main/java/tech/jhipster/lite/technical/infrastructure/primary/jackson/InvalidProjectFolderException.java new file mode 100644 index 00000000000..5016a8fe0d6 --- /dev/null +++ b/src/main/java/tech/jhipster/lite/technical/infrastructure/primary/jackson/InvalidProjectFolderException.java @@ -0,0 +1,10 @@ +package tech.jhipster.lite.technical.infrastructure.primary.jackson; + +import tech.jhipster.lite.error.domain.GeneratorException; + +public class InvalidProjectFolderException extends GeneratorException { + + public InvalidProjectFolderException(String fixedFolderPath) { + super("Should start with " + fixedFolderPath); + } +} diff --git a/src/main/java/tech/jhipster/lite/technical/infrastructure/primary/jackson/JacksonProjectFolderDeserializer.java b/src/main/java/tech/jhipster/lite/technical/infrastructure/primary/jackson/JacksonProjectFolderDeserializer.java new file mode 100644 index 00000000000..ad20b167bc8 --- /dev/null +++ b/src/main/java/tech/jhipster/lite/technical/infrastructure/primary/jackson/JacksonProjectFolderDeserializer.java @@ -0,0 +1,26 @@ +package tech.jhipster.lite.technical.infrastructure.primary.jackson; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import java.io.IOException; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import tech.jhipster.lite.error.domain.GeneratorException; +import tech.jhipster.lite.technical.infrastructure.primary.exception.BadRequestAlertException; + +@Component +public class JacksonProjectFolderDeserializer extends JsonDeserializer { + + @Value("${application.forced-project-folder:}") + private String forcedProjectFolder; + + @Override + public String deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException { + String text = jsonParser.getText(); + if (!text.startsWith(forcedProjectFolder) || text.contains("..")) { + throw new InvalidProjectFolderException(forcedProjectFolder); + } + return text; + } +} diff --git a/src/main/resources/config/application.properties b/src/main/resources/config/application.properties index a48c4755a16..51cd995cea2 100644 --- a/src/main/resources/config/application.properties +++ b/src/main/resources/config/application.properties @@ -25,6 +25,7 @@ application.cors.allowed-origin-patterns=https://*.githubpreview.dev application.cmd.timeout=120 application.version=@project.version@ +#application.forced-project-folder=/tmp/jhlite # Spring Boot Actuator management.endpoints.web.base-path=/management diff --git a/src/main/webapp/app/main.ts b/src/main/webapp/app/main.ts index ebffa536d30..04625d5e263 100644 --- a/src/main/webapp/app/main.ts +++ b/src/main/webapp/app/main.ts @@ -26,6 +26,7 @@ import '../content/css/custom.css'; import { MittAlertListener } from '@/common/secondary/alert/MittAlertListener'; import { RestModulesRepository } from './module/secondary/RestModulesRepository'; import SetupRepository from '@/springboot/secondary/SetupRepository'; +import ProjectFolderRepository from '@/springboot/secondary/ProjectFolderRepository'; const app = createApp(App); const pinia = createPinia(); @@ -42,6 +43,7 @@ const historyStore = useHistoryStore(); const projectStore = useProjectStore(); const projectHistoryRepository = new ProjectHistoryRepository(axiosHttp, historyStore); const projectRepository = new ProjectRepository(axiosHttp, projectHistoryRepository, projectStore); +const projectFolderRepository = new ProjectFolderRepository(axiosHttp); const angularRepository = new AngularRepository(axiosHttp, projectHistoryRepository); const reactRepository = new ReactRepository(axiosHttp, projectHistoryRepository); const springBootRepository = new SpringBootRepository(axiosHttp, projectHistoryRepository); @@ -59,6 +61,7 @@ app.provide('historyStore', historyStore); app.provide('projectStore', projectStore); app.provide('logger', consoleLogger); app.provide('projectService', projectRepository); +app.provide('projectFolderService', projectFolderRepository); app.provide('projectHistoryService', projectHistoryRepository); app.provide('reactService', reactRepository); app.provide('springBootService', springBootRepository); diff --git a/src/main/webapp/app/springboot/domain/FolderName.ts b/src/main/webapp/app/springboot/domain/FolderName.ts new file mode 100644 index 00000000000..f08b3f10ffc --- /dev/null +++ b/src/main/webapp/app/springboot/domain/FolderName.ts @@ -0,0 +1 @@ +export type FolderName = string; diff --git a/src/main/webapp/app/springboot/domain/ProjectFolderService.ts b/src/main/webapp/app/springboot/domain/ProjectFolderService.ts new file mode 100644 index 00000000000..8c384a4a132 --- /dev/null +++ b/src/main/webapp/app/springboot/domain/ProjectFolderService.ts @@ -0,0 +1,5 @@ +import { FolderName } from '@/springboot/domain/FolderName'; + +export interface ProjectFolderService { + get(): Promise; +} diff --git a/src/main/webapp/app/springboot/primary/Generator.component.ts b/src/main/webapp/app/springboot/primary/Generator.component.ts index 800a98630db..2ef1a76ef76 100644 --- a/src/main/webapp/app/springboot/primary/Generator.component.ts +++ b/src/main/webapp/app/springboot/primary/Generator.component.ts @@ -16,6 +16,7 @@ import { StoreGeneric } from 'pinia'; import { SetupGeneratorVue } from '@/springboot/primary/generator/setup-generator'; import { AlertBus } from '@/common/domain/alert/AlertBus'; import { FileDownloader } from '@/common/primary/FileDownloader'; +import { ProjectFolderService } from '@/springboot/domain/ProjectFolderService'; export default defineComponent({ name: 'GeneratorComponent', @@ -34,6 +35,7 @@ export default defineComponent({ setup() { const projectHistoryService = inject('projectHistoryService') as ProjectHistoryService; const projectService = inject('projectService') as ProjectService; + const projectFolderService = inject('projectFolderService') as ProjectFolderService; const globalWindow = inject('globalWindow') as Window; const projectStore = inject('projectStore') as StoreGeneric; const selectorPrefix = 'generator'; @@ -56,6 +58,8 @@ export default defineComponent({ project.value.serverPort = state.project.serverPort ?? project.value.serverPort; }); + projectFolderService.get().then(folderName => (project.value.folder = folderName)); + let timeoutId: number | undefined = undefined; const getCurrentProjectHistory = (): Promise => projectHistoryService.get(project.value.folder); const getProjectDetails = (): Promise => projectService.getProjectDetails(project.value.folder); diff --git a/src/main/webapp/app/springboot/primary/Generator.vue b/src/main/webapp/app/springboot/primary/Generator.vue index c27a178dd92..c56c13872ca 100644 --- a/src/main/webapp/app/springboot/primary/Generator.vue +++ b/src/main/webapp/app/springboot/primary/Generator.vue @@ -9,12 +9,12 @@ diff --git a/src/main/webapp/app/springboot/secondary/ProjectFolderRepository.ts b/src/main/webapp/app/springboot/secondary/ProjectFolderRepository.ts new file mode 100644 index 00000000000..c66e469fe99 --- /dev/null +++ b/src/main/webapp/app/springboot/secondary/ProjectFolderRepository.ts @@ -0,0 +1,11 @@ +import { AxiosHttp } from '@/http/AxiosHttp'; +import { ProjectFolderService } from '@/springboot/domain/ProjectFolderService'; +import { FolderName } from '@/springboot/domain/FolderName'; + +export default class ProjectFolderRepository implements ProjectFolderService { + constructor(private axiosHttp: AxiosHttp) {} + + async get(): Promise { + return await this.axiosHttp.get('api/project-folders').then(res => res.data); + } +} diff --git a/src/test/java/tech/jhipster/lite/IntegrationTest.java b/src/test/java/tech/jhipster/lite/IntegrationTest.java index a6ff86337cd..a5ce55e7b93 100644 --- a/src/test/java/tech/jhipster/lite/IntegrationTest.java +++ b/src/test/java/tech/jhipster/lite/IntegrationTest.java @@ -12,5 +12,5 @@ @SpringBootTest(classes = { JHLiteApp.class }) @Target(ElementType.TYPE) public @interface IntegrationTest { - public String[] properties() default {}; + String[] properties() default {}; } diff --git a/src/test/java/tech/jhipster/lite/generator/buildtool/gradle/domain/GradleDomainServiceTest.java b/src/test/java/tech/jhipster/lite/generator/buildtool/gradle/domain/GradleDomainServiceTest.java index 1efa891d945..2c2f7806e61 100644 --- a/src/test/java/tech/jhipster/lite/generator/buildtool/gradle/domain/GradleDomainServiceTest.java +++ b/src/test/java/tech/jhipster/lite/generator/buildtool/gradle/domain/GradleDomainServiceTest.java @@ -1,7 +1,6 @@ package tech.jhipster.lite.generator.buildtool.gradle.domain; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import static tech.jhipster.lite.TestUtils.*; import static tech.jhipster.lite.common.domain.FileUtils.*; diff --git a/src/test/java/tech/jhipster/lite/generator/ci/github/actions/domain/GitHubActionsDomainServiceTest.java b/src/test/java/tech/jhipster/lite/generator/ci/github/actions/domain/GitHubActionsDomainServiceTest.java index 0480aea9331..1fcb17fb216 100644 --- a/src/test/java/tech/jhipster/lite/generator/ci/github/actions/domain/GitHubActionsDomainServiceTest.java +++ b/src/test/java/tech/jhipster/lite/generator/ci/github/actions/domain/GitHubActionsDomainServiceTest.java @@ -1,7 +1,6 @@ package tech.jhipster.lite.generator.ci.github.actions.domain; import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import static tech.jhipster.lite.TestUtils.*; diff --git a/src/test/java/tech/jhipster/lite/generator/client/angular/core/domain/AngularDomainServiceTest.java b/src/test/java/tech/jhipster/lite/generator/client/angular/core/domain/AngularDomainServiceTest.java index 6ae787141b5..7b5e4d3b528 100644 --- a/src/test/java/tech/jhipster/lite/generator/client/angular/core/domain/AngularDomainServiceTest.java +++ b/src/test/java/tech/jhipster/lite/generator/client/angular/core/domain/AngularDomainServiceTest.java @@ -1,7 +1,6 @@ package tech.jhipster.lite.generator.client.angular.core.domain; import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import static tech.jhipster.lite.TestUtils.*; import static tech.jhipster.lite.generator.project.domain.ProjectFilesAsserter.*; diff --git a/src/test/java/tech/jhipster/lite/generator/client/angular/security/jwt/domain/AngularJwtDomainServiceTest.java b/src/test/java/tech/jhipster/lite/generator/client/angular/security/jwt/domain/AngularJwtDomainServiceTest.java index 32decf241b2..362f0ba82da 100644 --- a/src/test/java/tech/jhipster/lite/generator/client/angular/security/jwt/domain/AngularJwtDomainServiceTest.java +++ b/src/test/java/tech/jhipster/lite/generator/client/angular/security/jwt/domain/AngularJwtDomainServiceTest.java @@ -1,7 +1,6 @@ package tech.jhipster.lite.generator.client.angular.security.jwt.domain; import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import static tech.jhipster.lite.TestUtils.*; diff --git a/src/test/java/tech/jhipster/lite/generator/client/angular/security/oauth2/domain/AngularOauth2DomainServiceTest.java b/src/test/java/tech/jhipster/lite/generator/client/angular/security/oauth2/domain/AngularOauth2DomainServiceTest.java index 7b558b55915..fc5c295cc3b 100644 --- a/src/test/java/tech/jhipster/lite/generator/client/angular/security/oauth2/domain/AngularOauth2DomainServiceTest.java +++ b/src/test/java/tech/jhipster/lite/generator/client/angular/security/oauth2/domain/AngularOauth2DomainServiceTest.java @@ -2,7 +2,6 @@ import static org.assertj.core.api.Assertions.*; import static org.assertj.core.groups.Tuple.tuple; -import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import static tech.jhipster.lite.generator.client.angular.security.oauth2.domain.AngularOauth2.*; diff --git a/src/test/java/tech/jhipster/lite/generator/client/react/core/domain/ReactDomainServiceTest.java b/src/test/java/tech/jhipster/lite/generator/client/react/core/domain/ReactDomainServiceTest.java index 5e18cd54506..6f0f7c43669 100644 --- a/src/test/java/tech/jhipster/lite/generator/client/react/core/domain/ReactDomainServiceTest.java +++ b/src/test/java/tech/jhipster/lite/generator/client/react/core/domain/ReactDomainServiceTest.java @@ -1,7 +1,6 @@ package tech.jhipster.lite.generator.client.react.core.domain; import static org.assertj.core.api.AssertionsForClassTypes.*; -import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import static tech.jhipster.lite.TestUtils.*; import static tech.jhipster.lite.generator.project.domain.ProjectFilesAsserter.*; diff --git a/src/test/java/tech/jhipster/lite/generator/client/svelte/core/domain/SvelteDomainServiceTest.java b/src/test/java/tech/jhipster/lite/generator/client/svelte/core/domain/SvelteDomainServiceTest.java index 25a0a7ad9c4..668567a0bd9 100644 --- a/src/test/java/tech/jhipster/lite/generator/client/svelte/core/domain/SvelteDomainServiceTest.java +++ b/src/test/java/tech/jhipster/lite/generator/client/svelte/core/domain/SvelteDomainServiceTest.java @@ -1,7 +1,6 @@ package tech.jhipster.lite.generator.client.svelte.core.domain; import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import static tech.jhipster.lite.TestUtils.*; import static tech.jhipster.lite.generator.project.domain.ProjectFilesAsserter.*; diff --git a/src/test/java/tech/jhipster/lite/generator/client/tools/cypress/domain/CypressDomainServiceTest.java b/src/test/java/tech/jhipster/lite/generator/client/tools/cypress/domain/CypressDomainServiceTest.java index 8016a4ba13e..3f5b9823fdd 100644 --- a/src/test/java/tech/jhipster/lite/generator/client/tools/cypress/domain/CypressDomainServiceTest.java +++ b/src/test/java/tech/jhipster/lite/generator/client/tools/cypress/domain/CypressDomainServiceTest.java @@ -1,7 +1,6 @@ package tech.jhipster.lite.generator.client.tools.cypress.domain; import static org.assertj.core.api.AssertionsForClassTypes.*; -import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import static tech.jhipster.lite.TestUtils.*; import static tech.jhipster.lite.generator.project.domain.ProjectFilesAsserter.*; diff --git a/src/test/java/tech/jhipster/lite/generator/project/infrastructure/primary/rest/ProjectFoldersResourceIT.java b/src/test/java/tech/jhipster/lite/generator/project/infrastructure/primary/rest/ProjectFoldersResourceIT.java new file mode 100644 index 00000000000..4da0462f750 --- /dev/null +++ b/src/test/java/tech/jhipster/lite/generator/project/infrastructure/primary/rest/ProjectFoldersResourceIT.java @@ -0,0 +1,24 @@ +package tech.jhipster.lite.generator.project.infrastructure.primary.rest; + +import static org.hamcrest.Matchers.matchesRegex; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; + +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.test.web.servlet.MockMvc; +import tech.jhipster.lite.IntegrationTest; + +@IntegrationTest +@AutoConfigureMockMvc +class ProjectFoldersResourceIT { + + @Autowired + private MockMvc mockMvc; + + @Test + void shouldGetProject() throws Exception { + mockMvc.perform(get("/api/project-folders")).andExpect(content().string(matchesRegex("^/tmp/.{36}$"))); + } +} diff --git a/src/test/java/tech/jhipster/lite/generator/project/infrastructure/secondary/ProjectLocalRepositoryTest.java b/src/test/java/tech/jhipster/lite/generator/project/infrastructure/secondary/ProjectLocalRepositoryTest.java index cf8aa66eec5..a8b17ffb6ad 100644 --- a/src/test/java/tech/jhipster/lite/generator/project/infrastructure/secondary/ProjectLocalRepositoryTest.java +++ b/src/test/java/tech/jhipster/lite/generator/project/infrastructure/secondary/ProjectLocalRepositoryTest.java @@ -1,7 +1,6 @@ package tech.jhipster.lite.generator.project.infrastructure.secondary; import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import static tech.jhipster.lite.TestUtils.*; import static tech.jhipster.lite.common.domain.FileUtils.*; 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 index 876dd10bef9..719297c582f 100644 --- 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 @@ -1,6 +1,5 @@ package tech.jhipster.lite.generator.server.javatool.frontendmaven.domain; -import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import static tech.jhipster.lite.TestUtils.*; diff --git a/src/test/java/tech/jhipster/lite/generator/server/springboot/broker/kafka/domain/KafkaDomainServiceTest.java b/src/test/java/tech/jhipster/lite/generator/server/springboot/broker/kafka/domain/KafkaDomainServiceTest.java index c6bd26ca632..0fca445ceb5 100644 --- a/src/test/java/tech/jhipster/lite/generator/server/springboot/broker/kafka/domain/KafkaDomainServiceTest.java +++ b/src/test/java/tech/jhipster/lite/generator/server/springboot/broker/kafka/domain/KafkaDomainServiceTest.java @@ -1,6 +1,5 @@ package tech.jhipster.lite.generator.server.springboot.broker.kafka.domain; -import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import static tech.jhipster.lite.TestUtils.*; diff --git a/src/test/java/tech/jhipster/lite/generator/server/springboot/broker/pulsar/domain/PulsarDomainServiceTest.java b/src/test/java/tech/jhipster/lite/generator/server/springboot/broker/pulsar/domain/PulsarDomainServiceTest.java index 078b914c20d..20f1bc1255a 100644 --- a/src/test/java/tech/jhipster/lite/generator/server/springboot/broker/pulsar/domain/PulsarDomainServiceTest.java +++ b/src/test/java/tech/jhipster/lite/generator/server/springboot/broker/pulsar/domain/PulsarDomainServiceTest.java @@ -1,6 +1,5 @@ package tech.jhipster.lite.generator.server.springboot.broker.pulsar.domain; -import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import static tech.jhipster.lite.TestUtils.*; diff --git a/src/test/java/tech/jhipster/lite/generator/server/springboot/core/domain/SpringBootDomainServiceTest.java b/src/test/java/tech/jhipster/lite/generator/server/springboot/core/domain/SpringBootDomainServiceTest.java index 02ae9a4a1a5..925c5df4e92 100644 --- a/src/test/java/tech/jhipster/lite/generator/server/springboot/core/domain/SpringBootDomainServiceTest.java +++ b/src/test/java/tech/jhipster/lite/generator/server/springboot/core/domain/SpringBootDomainServiceTest.java @@ -1,7 +1,6 @@ package tech.jhipster.lite.generator.server.springboot.core.domain; import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import static tech.jhipster.lite.TestUtils.*; diff --git a/src/test/java/tech/jhipster/lite/generator/server/springboot/database/mongodb/domain/MongodbDomainServiceTest.java b/src/test/java/tech/jhipster/lite/generator/server/springboot/database/mongodb/domain/MongodbDomainServiceTest.java index f3457b352e1..9f5969e2e81 100644 --- a/src/test/java/tech/jhipster/lite/generator/server/springboot/database/mongodb/domain/MongodbDomainServiceTest.java +++ b/src/test/java/tech/jhipster/lite/generator/server/springboot/database/mongodb/domain/MongodbDomainServiceTest.java @@ -1,6 +1,5 @@ package tech.jhipster.lite.generator.server.springboot.database.mongodb.domain; -import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import static tech.jhipster.lite.TestUtils.*; diff --git a/src/test/java/tech/jhipster/lite/generator/server/springboot/database/mssql/domain/MssqlDomainServiceUnitTest.java b/src/test/java/tech/jhipster/lite/generator/server/springboot/database/mssql/domain/MssqlDomainServiceUnitTest.java index 5cd44ee3e12..e8d8b12ecd5 100644 --- a/src/test/java/tech/jhipster/lite/generator/server/springboot/database/mssql/domain/MssqlDomainServiceUnitTest.java +++ b/src/test/java/tech/jhipster/lite/generator/server/springboot/database/mssql/domain/MssqlDomainServiceUnitTest.java @@ -1,7 +1,6 @@ package tech.jhipster.lite.generator.server.springboot.database.mssql.domain; import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import static tech.jhipster.lite.TestUtils.*; diff --git a/src/test/java/tech/jhipster/lite/generator/server/springboot/database/sqlcommon/domain/SQLCommonDomainServiceTest.java b/src/test/java/tech/jhipster/lite/generator/server/springboot/database/sqlcommon/domain/SQLCommonDomainServiceTest.java index 9e0b9c74659..9a90de98737 100644 --- a/src/test/java/tech/jhipster/lite/generator/server/springboot/database/sqlcommon/domain/SQLCommonDomainServiceTest.java +++ b/src/test/java/tech/jhipster/lite/generator/server/springboot/database/sqlcommon/domain/SQLCommonDomainServiceTest.java @@ -1,7 +1,6 @@ package tech.jhipster.lite.generator.server.springboot.database.sqlcommon.domain; import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import static tech.jhipster.lite.TestUtils.*; diff --git a/src/test/java/tech/jhipster/lite/generator/server/springboot/dbmigration/flyway/domain/FlywayDomainServiceTest.java b/src/test/java/tech/jhipster/lite/generator/server/springboot/dbmigration/flyway/domain/FlywayDomainServiceTest.java index 3263782d0c3..2ef75f93d9b 100644 --- a/src/test/java/tech/jhipster/lite/generator/server/springboot/dbmigration/flyway/domain/FlywayDomainServiceTest.java +++ b/src/test/java/tech/jhipster/lite/generator/server/springboot/dbmigration/flyway/domain/FlywayDomainServiceTest.java @@ -1,7 +1,6 @@ package tech.jhipster.lite.generator.server.springboot.dbmigration.flyway.domain; import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import static tech.jhipster.lite.TestUtils.*; import static tech.jhipster.lite.generator.project.domain.ProjectFilesAsserter.*; diff --git a/src/test/java/tech/jhipster/lite/generator/server/springboot/mvc/security/jwt/domain/JwtSecurityDomainServiceTest.java b/src/test/java/tech/jhipster/lite/generator/server/springboot/mvc/security/jwt/domain/JwtSecurityDomainServiceTest.java index 04b8fbba38e..cb477f98bad 100644 --- a/src/test/java/tech/jhipster/lite/generator/server/springboot/mvc/security/jwt/domain/JwtSecurityDomainServiceTest.java +++ b/src/test/java/tech/jhipster/lite/generator/server/springboot/mvc/security/jwt/domain/JwtSecurityDomainServiceTest.java @@ -1,7 +1,6 @@ package tech.jhipster.lite.generator.server.springboot.mvc.security.jwt.domain; import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import static tech.jhipster.lite.TestUtils.*; diff --git a/src/test/java/tech/jhipster/lite/generator/server/springboot/mvc/web/domain/SpringBootMvcDomainServiceTest.java b/src/test/java/tech/jhipster/lite/generator/server/springboot/mvc/web/domain/SpringBootMvcDomainServiceTest.java index bb1c2905a5c..64aaf7b3f71 100644 --- a/src/test/java/tech/jhipster/lite/generator/server/springboot/mvc/web/domain/SpringBootMvcDomainServiceTest.java +++ b/src/test/java/tech/jhipster/lite/generator/server/springboot/mvc/web/domain/SpringBootMvcDomainServiceTest.java @@ -1,7 +1,6 @@ package tech.jhipster.lite.generator.server.springboot.mvc.web.domain; import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import static tech.jhipster.lite.TestUtils.*; diff --git a/src/test/java/tech/jhipster/lite/generator/server/springboot/webflux/web/domain/SpringBootWebfluxDomainServiceTest.java b/src/test/java/tech/jhipster/lite/generator/server/springboot/webflux/web/domain/SpringBootWebfluxDomainServiceTest.java index 970a9664c85..cc196060de4 100644 --- a/src/test/java/tech/jhipster/lite/generator/server/springboot/webflux/web/domain/SpringBootWebfluxDomainServiceTest.java +++ b/src/test/java/tech/jhipster/lite/generator/server/springboot/webflux/web/domain/SpringBootWebfluxDomainServiceTest.java @@ -1,7 +1,6 @@ package tech.jhipster.lite.generator.server.springboot.webflux.web.domain; import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import java.util.HashMap; diff --git a/src/test/java/tech/jhipster/lite/history/infrastructure/primary/HistoryResourceTest.java b/src/test/java/tech/jhipster/lite/history/infrastructure/primary/HistoryResourceTest.java index 2e77c939cb9..414737a9ead 100644 --- a/src/test/java/tech/jhipster/lite/history/infrastructure/primary/HistoryResourceTest.java +++ b/src/test/java/tech/jhipster/lite/history/infrastructure/primary/HistoryResourceTest.java @@ -1,7 +1,6 @@ package tech.jhipster.lite.history.infrastructure.primary; import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import static tech.jhipster.lite.history.infrastructure.primary.dto.HistoryDTOTest.*; diff --git a/src/test/java/tech/jhipster/lite/history/infrastructure/secondary/GeneratorHistoryLocalRepositoryTest.java b/src/test/java/tech/jhipster/lite/history/infrastructure/secondary/GeneratorHistoryLocalRepositoryTest.java index 69b63d80840..7b166ef45ce 100644 --- a/src/test/java/tech/jhipster/lite/history/infrastructure/secondary/GeneratorHistoryLocalRepositoryTest.java +++ b/src/test/java/tech/jhipster/lite/history/infrastructure/secondary/GeneratorHistoryLocalRepositoryTest.java @@ -1,7 +1,6 @@ package tech.jhipster.lite.history.infrastructure.secondary; import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import static tech.jhipster.lite.history.domain.HistoryProjectsFixture.*; 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 2641a968580..fe90ae3cecd 100644 --- a/src/test/java/tech/jhipster/lite/module/domain/JHipsterModulesFixture.java +++ b/src/test/java/tech/jhipster/lite/module/domain/JHipsterModulesFixture.java @@ -1,15 +1,9 @@ package tech.jhipster.lite.module.domain; -import static tech.jhipster.lite.module.domain.JHipsterModule.*; -import static tech.jhipster.lite.module.domain.properties.JHipsterModulePropertyDefinition.*; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import tech.jhipster.lite.TestFileUtils; -import tech.jhipster.lite.module.domain.JHipsterModule.JHipsterModuleBuilder; +import tech.jhipster.lite.module.domain.JHipsterModule.*; import tech.jhipster.lite.module.domain.javabuild.ArtifactId; import tech.jhipster.lite.module.domain.javabuild.GroupId; import tech.jhipster.lite.module.domain.javabuild.command.AddDirectJavaDependency; @@ -17,13 +11,8 @@ import tech.jhipster.lite.module.domain.javabuild.command.RemoveDirectJavaDependency; import tech.jhipster.lite.module.domain.javabuild.command.SetVersion; import tech.jhipster.lite.module.domain.javabuildplugin.JavaBuildPlugin; -import tech.jhipster.lite.module.domain.javadependency.CurrentJavaDependenciesVersions; -import tech.jhipster.lite.module.domain.javadependency.DependencyId; -import tech.jhipster.lite.module.domain.javadependency.JavaDependency; +import tech.jhipster.lite.module.domain.javadependency.*; import tech.jhipster.lite.module.domain.javadependency.JavaDependency.JavaDependencyOptionalValueBuilder; -import tech.jhipster.lite.module.domain.javadependency.JavaDependencyScope; -import tech.jhipster.lite.module.domain.javadependency.JavaDependencyType; -import tech.jhipster.lite.module.domain.javadependency.JavaDependencyVersion; import tech.jhipster.lite.module.domain.javaproperties.SpringProperty; import tech.jhipster.lite.module.domain.javaproperties.SpringPropertyType; import tech.jhipster.lite.module.domain.packagejson.VersionSource; @@ -31,6 +20,13 @@ import tech.jhipster.lite.module.domain.properties.JHipsterModulePropertiesDefinition; import tech.jhipster.lite.module.domain.properties.JHipsterProjectFolder; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static tech.jhipster.lite.module.domain.JHipsterModule.*; +import static tech.jhipster.lite.module.domain.properties.JHipsterModulePropertyDefinition.*; + public final class JHipsterModulesFixture { private static final Logger log = LoggerFactory.getLogger(JHipsterModulesFixture.class); diff --git a/src/test/java/tech/jhipster/lite/module/infrastructure/primary/JHipsterModulesResourcesTest.java b/src/test/java/tech/jhipster/lite/module/infrastructure/primary/JHipsterModulesResourcesTest.java index c8d6864f746..ee7d4c33715 100644 --- a/src/test/java/tech/jhipster/lite/module/infrastructure/primary/JHipsterModulesResourcesTest.java +++ b/src/test/java/tech/jhipster/lite/module/infrastructure/primary/JHipsterModulesResourcesTest.java @@ -6,10 +6,18 @@ import java.util.List; import org.junit.jupiter.api.Test; import tech.jhipster.lite.UnitTest; +import tech.jhipster.lite.error.domain.MissingMandatoryValueException; @UnitTest class JHipsterModulesResourcesTest { + @Test + void shouldNotBuildWithoutResources() { + assertThatThrownBy(() -> new JHipsterModulesResources(List.of())) + .isExactlyInstanceOf(MissingMandatoryValueException.class) + .hasMessageContaining("modulesResources"); + } + @Test void shouldNotBuildWithDuplicatedSlug() { JHipsterModuleResource resource = defaultModuleResourceBuilder().slug("dummy").build(); diff --git a/src/test/java/tech/jhipster/lite/technical/infrastructure/primary/ForcedProjectFolderPrefixIT.java b/src/test/java/tech/jhipster/lite/technical/infrastructure/primary/ForcedProjectFolderPrefixIT.java new file mode 100644 index 00000000000..3ea0862ac2a --- /dev/null +++ b/src/test/java/tech/jhipster/lite/technical/infrastructure/primary/ForcedProjectFolderPrefixIT.java @@ -0,0 +1,50 @@ +package tech.jhipster.lite.technical.infrastructure.primary; + +import static org.hamcrest.Matchers.matchesRegex; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +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.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; +import tech.jhipster.lite.IntegrationTest; + +@IntegrationTest +@AutoConfigureMockMvc +@SpringBootTest(properties = { "application.forced-project-folder=/forced-tmp" }) +class ForcedProjectFolderPrefixIT { + + @Autowired + private MockMvc mockMvc; + + @Test + void shouldHandleProjectWithGoodProjectFolder() throws Exception { + mockMvc + .perform(post("/api/projects-test").contentType(MediaType.APPLICATION_JSON).content("{\"folder\": \"/forced-tmp/my-project\"}")) + .andExpect(status().isOk()); + } + + @Test + void shouldNotHandleProjectWithWrongProjectFolderPrefix() throws Exception { + mockMvc + .perform(post("/api/projects-test").contentType(MediaType.APPLICATION_JSON).content("{\"folder\": \"/home/my-project\"}")) + .andExpect(status().isBadRequest()); + } + + @Test + void shouldNotHandleProjectWithDotDotProjectFolderPrefix() throws Exception { + mockMvc + .perform(post("/api/projects-test").contentType(MediaType.APPLICATION_JSON).content("{\"folder\": \"/forced-tmp/../my-project\"}")) + .andExpect(status().isBadRequest()); + } + + @Test + void shouldGetProject() throws Exception { + mockMvc.perform(get("/api/project-folders")).andExpect(content().string(matchesRegex("^/forced-tmp/.{36}$"))); + } +} diff --git a/src/test/java/tech/jhipster/lite/technical/infrastructure/primary/ProjectFakeController.java b/src/test/java/tech/jhipster/lite/technical/infrastructure/primary/ProjectFakeController.java new file mode 100644 index 00000000000..1f1e2b75231 --- /dev/null +++ b/src/test/java/tech/jhipster/lite/technical/infrastructure/primary/ProjectFakeController.java @@ -0,0 +1,15 @@ +package tech.jhipster.lite.technical.infrastructure.primary; + +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.infrastructure.primary.dto.ProjectDTO; + +@RestController +@RequestMapping("/api/projects-test") +class ProjectFakeController { + + @PostMapping + public void projectDto(@RequestBody ProjectDTO project) {} +} diff --git a/src/test/javascript/cypress/integration/Generator.spec.ts b/src/test/javascript/cypress/integration/Generator.spec.ts index d62d7880ab6..78622bc99ca 100644 --- a/src/test/javascript/cypress/integration/Generator.spec.ts +++ b/src/test/javascript/cypress/integration/Generator.spec.ts @@ -22,6 +22,9 @@ describe('Generator', () => { it('should display generator page', () => { cy.get(headerSelector('title')).contains('JHipster lite'); + cy.get(generatorSelector('project-folder')) + .invoke('val') + .should('match', /^.*\/.{36}$/); cy.get(projectGeneratorSelector('add-initialization-button')).contains('Init'); cy.get(projectGeneratorSelector('add-maven-java-button')).contains('Maven'); cy.get(projectGeneratorSelector('add-jacoco-check-minimal-coverage-button')).contains('JaCoCo'); @@ -29,6 +32,7 @@ describe('Generator', () => { cy.get(projectGeneratorSelector('add-sonar-java-backend-and-frontend-button')).contains('Sonar Backend+Frontend'); cy.get(projectGeneratorSelector('add-java-base-button')).contains('Java Base'); cy.get(projectGeneratorSelector('add-frontend-maven-plugin-button')).contains('Frontend Maven Plugin'); + cy.get(dataSelector('section-download')).contains('DOWNLOAD'); }); it('should display setup', () => { @@ -128,12 +132,8 @@ describe('Generator', () => { cy.get(projectGeneratorSelector('add-gitpod-setup-button')).contains('Gitpod'); }); - it('should not disable download button when project path is filled', () => { - cy.get('#path').type('/tmp/jhlite'); - cy.get(dataSelector('section-download')).contains('DOWNLOAD'); - cy.get(dataSelector('section-download')).should('not.be.disabled'); - }); it('should disable download button when project path is not filled', () => { + cy.get('#path').clear(); cy.get(dataSelector('section-download')).should('be.disabled'); }); }); diff --git a/src/test/javascript/spec/springboot/domain/ProjectFolderService.fixture.ts b/src/test/javascript/spec/springboot/domain/ProjectFolderService.fixture.ts new file mode 100644 index 00000000000..f5b80f196f0 --- /dev/null +++ b/src/test/javascript/spec/springboot/domain/ProjectFolderService.fixture.ts @@ -0,0 +1,10 @@ +import { ProjectFolderService } from '@/springboot/domain/ProjectFolderService'; +import sinon, { SinonStub } from 'sinon'; + +export interface ProjectFolderServiceFixture extends ProjectFolderService { + get: SinonStub; +} + +export const stubProjectFolderService = (): ProjectFolderServiceFixture => ({ + get: sinon.stub(), +}); diff --git a/src/test/javascript/spec/springboot/primary/Generator.spec.ts b/src/test/javascript/spec/springboot/primary/Generator.spec.ts index c49a64e2d82..d1f791091ae 100644 --- a/src/test/javascript/spec/springboot/primary/Generator.spec.ts +++ b/src/test/javascript/spec/springboot/primary/Generator.spec.ts @@ -14,6 +14,8 @@ import { stubAlertBus } from '../../common/domain/AlertBus.fixture'; import { AlertBus } from '../../../../../main/webapp/app/common/domain/alert/AlertBus'; import { FileDownloader } from '@/common/primary/FileDownloader'; import { stubFileDownloader } from '../../common/primary/FileDownloader.fixture'; +import { stubProjectFolderService } from '../domain/ProjectFolderService.fixture'; +import { ProjectFolderService } from '@/springboot/domain/ProjectFolderService'; let wrapper: VueWrapper; let component: any; @@ -21,6 +23,7 @@ let component: any; interface WrapperOptions { projectHistoryService: ProjectHistoryService; projectService: ProjectService; + projectFolderService: ProjectFolderService; globalWindow: WindowStub; projectStore: ProjectStoreFixture; alertBus: AlertBus; @@ -38,11 +41,23 @@ const stubGlobalWindow = (): WindowStub => setTimeout: sinon.stub(), } as WindowStub); +const projectFolderServiceStub = stubProjectFolderService(); +projectFolderServiceStub.get.resolves(''); + const wrap = (wrapperOptions?: Partial) => { - const { projectHistoryService, projectService, globalWindow, projectStore, alertBus, fileDownloader }: WrapperOptions = { + const { + projectHistoryService, + projectService, + projectFolderService, + globalWindow, + projectStore, + alertBus, + fileDownloader, + }: WrapperOptions = { projectHistoryService: stubProjectHistoryService(), globalWindow: stubGlobalWindow(), projectService: stubProjectService(), + projectFolderService: projectFolderServiceStub, projectStore: stubProjectStore(), alertBus: stubAlertBus(), fileDownloader: stubFileDownloader(), @@ -53,6 +68,7 @@ const wrap = (wrapperOptions?: Partial) => { provide: { projectHistoryService, projectService, + projectFolderService, globalWindow, projectStore, alertBus, @@ -70,11 +86,24 @@ describe('Generator', () => { expect(wrapper.exists()).toBe(true); }); + it('should init project folder', async () => { + const projectFolderService = stubProjectFolderService(); + projectFolderService.get.resolves('/tmp/jhlite/12345'); + + wrap({ projectFolderService }); + + await wrapper.vm.$forceUpdate(); + + expect(component.project.folder).toBe('/tmp/jhlite/12345'); + }); + it('should get project history and details with current project folder', async () => { const projectHistoryService = stubProjectHistoryService(); const projectService = stubProjectService(); wrap({ projectHistoryService, projectService }); + await wrapper.vm.$forceUpdate(); + const projectPathInput = wrapper.find('#path'); await projectPathInput.setValue('path'); component.getCurrentProjectHistory(); diff --git a/src/test/javascript/spec/springboot/secondary/ProjectFolderRepository.spec.ts b/src/test/javascript/spec/springboot/secondary/ProjectFolderRepository.spec.ts new file mode 100644 index 00000000000..24a5bbc912f --- /dev/null +++ b/src/test/javascript/spec/springboot/secondary/ProjectFolderRepository.spec.ts @@ -0,0 +1,14 @@ +import { stubAxiosHttp } from '../../http/AxiosHttpStub'; +import ProjectFolderRepository from '@/springboot/secondary/ProjectFolderRepository'; + +describe('ProjectFolderRepository', () => { + it('should get ', async () => { + const axiosHttpStub = stubAxiosHttp(); + axiosHttpStub.get.resolves({ data: '/tmp/jhlite/1234' }); + const projectFolderRepository = new ProjectFolderRepository(axiosHttpStub); + + const folder = await projectFolderRepository.get(); + + expect(folder).toBe('/tmp/jhlite/1234'); + }); +});