diff --git a/src/main/java/tech/jhipster/lite/generator/client/tools/cypress/domain/CypressModuleFactory.java b/src/main/java/tech/jhipster/lite/generator/client/tools/cypress/domain/CypressModuleFactory.java index ab20392233c..1e6cbc405aa 100644 --- a/src/main/java/tech/jhipster/lite/generator/client/tools/cypress/domain/CypressModuleFactory.java +++ b/src/main/java/tech/jhipster/lite/generator/client/tools/cypress/domain/CypressModuleFactory.java @@ -1,23 +1,18 @@ package tech.jhipster.lite.generator.client.tools.cypress.domain; import static tech.jhipster.lite.module.domain.JHipsterModule.JHipsterModuleBuilder; -import static tech.jhipster.lite.module.domain.JHipsterModule.LINE_BREAK; import static tech.jhipster.lite.module.domain.JHipsterModule.from; import static tech.jhipster.lite.module.domain.JHipsterModule.moduleBuilder; import static tech.jhipster.lite.module.domain.JHipsterModule.packageName; -import static tech.jhipster.lite.module.domain.JHipsterModule.path; import static tech.jhipster.lite.module.domain.JHipsterModule.scriptCommand; import static tech.jhipster.lite.module.domain.JHipsterModule.scriptKey; import static tech.jhipster.lite.module.domain.JHipsterModule.to; import static tech.jhipster.lite.module.domain.npm.JHLiteNpmVersionSource.COMMON; -import java.util.function.Function; -import java.util.regex.Pattern; import tech.jhipster.lite.module.domain.JHipsterModule; import tech.jhipster.lite.module.domain.file.JHipsterDestination; import tech.jhipster.lite.module.domain.file.JHipsterSource; import tech.jhipster.lite.module.domain.properties.JHipsterModuleProperties; -import tech.jhipster.lite.module.domain.replacement.RegexReplacer; import tech.jhipster.lite.shared.error.domain.Assert; public class CypressModuleFactory { @@ -30,31 +25,11 @@ public class CypressModuleFactory { private static final String HOME = "home"; private static final String UTILS = "utils"; - private static final String CYPRESS_COMPONENT_TESTS_EXCLUSION = "\"src/test/webapp/component/**/*.ts\""; - private static final String CYPRESS_E2E_TESTS_EXCLUSION = "\"src/test/webapp/e2e/**/*.ts\""; - private static final String EXCLUDE_KEY = "\"exclude\""; - private static final RegexReplacer NEW_EXCLUSION_REPLACER = new RegexReplacer( - (currentContent, replacement) -> !currentContent.contains(EXCLUDE_KEY), - Pattern.compile("\\n.*}\\s*$") - ); - - private static final Function EXISTING_EXCLUSION_REPLACER_PROVIDER = (String exclusion) -> - new RegexReplacer( - (currentContent, replacement) -> currentContent.contains(EXCLUDE_KEY) && !currentContent.contains(exclusion), - Pattern.compile("(" + EXCLUDE_KEY + "\\s*:\\s*\\[[^]]+)]") - ); - - private static final Function EMPTY_EXCLUSION_REPLACER_PROVIDER = (String exclusion) -> - new RegexReplacer( - (currentContent, replacement) -> currentContent.contains(EXCLUDE_KEY) && !currentContent.contains(exclusion), - Pattern.compile("(" + EXCLUDE_KEY + "\\s*:\\s*\\[\\s*)]") - ); - public JHipsterModule buildComponentTestsModule(JHipsterModuleProperties properties) { Assert.notNull("properties", properties); //@formatter:off - return commonCypressModuleBuilder(properties, CYPRESS_COMPONENT_TESTS, CYPRESS_COMPONENT_TESTS_EXCLUSION) + return commonCypressModuleBuilder(properties, CYPRESS_COMPONENT_TESTS) .packageJson() .addDevDependency(packageName("start-server-and-test"), COMMON) .addScript(scriptKey("test:component"), scriptCommand("start-server-and-test start http://localhost:9000 'cypress open --e2e --config-file src/test/webapp/component/cypress-config.ts'")) @@ -74,7 +49,7 @@ public JHipsterModule buildE2ETestsModule(JHipsterModuleProperties properties) { Assert.notNull("properties", properties); //@formatter:off - return commonCypressModuleBuilder(properties, CYPRESS_E2E_TESTS, CYPRESS_E2E_TESTS_EXCLUSION) + return commonCypressModuleBuilder(properties, CYPRESS_E2E_TESTS) .packageJson() .addScript(scriptKey("e2e"), scriptCommand("cypress open --e2e --config-file src/test/webapp/e2e/cypress-config.ts")) .addScript(scriptKey("e2e:headless"), scriptCommand("cypress run --headless --config-file src/test/webapp/e2e/cypress-config.ts")) @@ -88,8 +63,7 @@ public JHipsterModule buildE2ETestsModule(JHipsterModuleProperties properties) { private static JHipsterModuleBuilder commonCypressModuleBuilder( JHipsterModuleProperties properties, - JHipsterDestination destinationFolder, - String tsconfigExclusion + JHipsterDestination destinationFolder ) { //@formatter:off return moduleBuilder(properties) @@ -110,25 +84,7 @@ private static JHipsterModuleBuilder commonCypressModuleBuilder( .addFile("DataSelector.ts") .and() .and() - .optionalReplacements() - .in(path("tsconfig.json")) - .add(EXISTING_EXCLUSION_REPLACER_PROVIDER.apply(tsconfigExclusion), "$1, "+tsconfigExclusion+"]") - .add(EMPTY_EXCLUSION_REPLACER_PROVIDER.apply(tsconfigExclusion), "$1"+tsconfigExclusion+"]") - .add(NEW_EXCLUSION_REPLACER, newExclusionNode(properties, tsconfigExclusion)) - .and() - .and() ; //@formatter:on } - - private static String newExclusionNode(JHipsterModuleProperties properties, String exclusion) { - return new StringBuilder() - .append(",") - .append(LINE_BREAK) - .append(properties.indentation().spaces()) - .append("\"exclude\": [" + exclusion + "]") - .append(LINE_BREAK) - .append("}") - .toString(); - } } diff --git a/src/test/java/tech/jhipster/lite/generator/client/tools/cypress/domain/CypressModuleFactoryTest.java b/src/test/java/tech/jhipster/lite/generator/client/tools/cypress/domain/CypressModuleFactoryTest.java index 645f1878b92..3fc0412f8ba 100644 --- a/src/test/java/tech/jhipster/lite/generator/client/tools/cypress/domain/CypressModuleFactoryTest.java +++ b/src/test/java/tech/jhipster/lite/generator/client/tools/cypress/domain/CypressModuleFactoryTest.java @@ -1,6 +1,10 @@ package tech.jhipster.lite.generator.client.tools.cypress.domain; -import static tech.jhipster.lite.module.infrastructure.secondary.JHipsterModulesAssertions.*; +import static tech.jhipster.lite.module.infrastructure.secondary.JHipsterModulesAssertions.ModuleFile; +import static tech.jhipster.lite.module.infrastructure.secondary.JHipsterModulesAssertions.assertThatModuleWithFiles; +import static tech.jhipster.lite.module.infrastructure.secondary.JHipsterModulesAssertions.nodeDependency; +import static tech.jhipster.lite.module.infrastructure.secondary.JHipsterModulesAssertions.nodeScript; +import static tech.jhipster.lite.module.infrastructure.secondary.JHipsterModulesAssertions.packageJsonFile; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -19,64 +23,13 @@ class CypressModuleFactoryTest { class ComponentTests { @Test - void shouldBuildComponentTestsModuleOnProjectWithoutTsConfig() { - assertCypressComponentTestsModule(packageJsonFile()); - } - - @Test - void shouldBuildComponentTestsModuleOnProjectWithEmptyTsConfig() { - assertCypressComponentTestsModule( - packageJsonFile(), - file("src/test/resources/projects/empty-ts-config/tsconfig.json", "tsconfig.json") - ) - .hasFile("tsconfig.json") - .containing( - """ - }, - "exclude": ["src/test/webapp/component/**/*.ts"] - }\ - """ - ); - } - - @Test - void shouldBuildComponentTestsModuleOnProjectWithTsConfigWithEmptyExclusions() { - assertCypressComponentTestsModule( - packageJsonFile(), - file("src/test/resources/projects/ts-config-with-empty-exclusions/tsconfig.json", "tsconfig.json") - ) - .hasFile("tsconfig.json") - .containing("\"exclude\": [\"src/test/webapp/component/**/*.ts\"]"); - } - - @Test - void shouldBuildComponentTestsModuleOnProjectWithTsConfigWithExistingExclusions() { - assertCypressComponentTestsModule( - packageJsonFile(), - file("src/test/resources/projects/ts-config-with-exclusions/tsconfig.json", "tsconfig.json") - ) - .hasFile("tsconfig.json") - .containing( - " \"exclude\": [\"src/test/webapp/integration/**/*spec.ts\", \"node_modules\", \"src/test/webapp/component/**/*.ts\"]" - ); - } - - @Test - void shouldNotDuplicateCypressExclusion() { - assertCypressComponentTestsModule( - packageJsonFile(), - file("src/test/resources/projects/ts-config-with-cypress-component-exclusions/tsconfig.json", "tsconfig.json") - ) - .hasFile("tsconfig.json") - .containing(" \"exclude\": [\"src/test/webapp/component/**/*spec.ts\", \"node_modules\", \"src/test/webapp/component/**/*.ts\"]"); - } - - private static JHipsterModuleAsserter assertCypressComponentTestsModule(ModuleFile... files) { + void shouldBuildComponentTestsModule() { + ModuleFile[] files = new ModuleFile[] { packageJsonFile() }; JHipsterModuleProperties properties = JHipsterModulesFixture.propertiesBuilder(TestFileUtils.tmpDirForTest()).build(); JHipsterModule module = factory.buildComponentTestsModule(properties); - return assertThatModuleWithFiles(module, files) + assertThatModuleWithFiles(module, files) .hasFile("package.json") .containing(nodeDependency("cypress")) .containing(nodeDependency("eslint-plugin-cypress")) @@ -109,59 +62,13 @@ private static JHipsterModuleAsserter assertCypressComponentTestsModule(ModuleFi class E2ETests { @Test - void shouldBuildE2eTestsModuleOnProjectWithoutTsConfig() { - assertCypressE2ETestsModule(packageJsonFile()); - } - - @Test - void shouldBuildE2eTestsModuleOnProjectWithEmptyTsConfig() { - assertCypressE2ETestsModule(packageJsonFile(), file("src/test/resources/projects/empty-ts-config/tsconfig.json", "tsconfig.json")) - .hasFile("tsconfig.json") - .containing( - """ - }, - "exclude": ["src/test/webapp/e2e/**/*.ts"] - }\ - """ - ); - } - - @Test - void shouldBuildE2eTestsModuleOnProjectWithTsConfigWithEmptyExclusions() { - assertCypressE2ETestsModule( - packageJsonFile(), - file("src/test/resources/projects/ts-config-with-empty-exclusions/tsconfig.json", "tsconfig.json") - ) - .hasFile("tsconfig.json") - .containing("\"exclude\": [\"src/test/webapp/e2e/**/*.ts\"]"); - } - - @Test - void shouldBuildE2eTestsModuleOnProjectWithTsConfigWithExistingExclusions() { - assertCypressE2ETestsModule( - packageJsonFile(), - file("src/test/resources/projects/ts-config-with-exclusions/tsconfig.json", "tsconfig.json") - ) - .hasFile("tsconfig.json") - .containing(" \"exclude\": [\"src/test/webapp/integration/**/*spec.ts\", \"node_modules\", \"src/test/webapp/e2e/**/*.ts\"]"); - } - - @Test - void shouldNotDuplicateCypressExclusion() { - assertCypressE2ETestsModule( - packageJsonFile(), - file("src/test/resources/projects/ts-config-with-cypress-e2e-exclusions/tsconfig.json", "tsconfig.json") - ) - .hasFile("tsconfig.json") - .containing(" \"exclude\": [\"src/test/webapp/e2e/**/*spec.ts\", \"node_modules\", \"src/test/webapp/e2e/**/*.ts\"]"); - } - - private static JHipsterModuleAsserter assertCypressE2ETestsModule(ModuleFile... files) { + void shouldBuildE2eTestsModule() { + ModuleFile[] files = new ModuleFile[] { packageJsonFile() }; JHipsterModuleProperties properties = JHipsterModulesFixture.propertiesBuilder(TestFileUtils.tmpDirForTest()).build(); JHipsterModule module = factory.buildE2ETestsModule(properties); - return assertThatModuleWithFiles(module, files) + assertThatModuleWithFiles(module, files) .hasFile("package.json") .containing(nodeDependency("cypress")) .containing(nodeDependency("eslint-plugin-cypress")) diff --git a/src/test/resources/projects/ts-config-with-cypress-component-exclusions/tsconfig.json b/src/test/resources/projects/ts-config-with-cypress-component-exclusions/tsconfig.json deleted file mode 100644 index ae17e4826ac..00000000000 --- a/src/test/resources/projects/ts-config-with-cypress-component-exclusions/tsconfig.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "useDefineForClassFields": true, - "lib": ["DOM", "DOM.Iterable", "ESNext"], - "allowJs": false, - "skipLibCheck": true, - "esModuleInterop": false, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx", - "composite": false, - "module": "esnext", - "moduleResolution": "node", - "baseUrl": "src", - "paths": { - "@/*": ["main/webapp/app/*"] - } - }, - "include": ["vite.config.ts", "src"], - "exclude": ["src/test/webapp/component/**/*spec.ts", "node_modules", "src/test/webapp/component/**/*.ts"] -} diff --git a/src/test/resources/projects/ts-config-with-cypress-e2e-exclusions/tsconfig.json b/src/test/resources/projects/ts-config-with-cypress-e2e-exclusions/tsconfig.json deleted file mode 100644 index dad7641ec6c..00000000000 --- a/src/test/resources/projects/ts-config-with-cypress-e2e-exclusions/tsconfig.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "useDefineForClassFields": true, - "lib": ["DOM", "DOM.Iterable", "ESNext"], - "allowJs": false, - "skipLibCheck": true, - "esModuleInterop": false, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx", - "composite": false, - "module": "esnext", - "moduleResolution": "node", - "baseUrl": "src", - "paths": { - "@/*": ["main/webapp/app/*"] - } - }, - "include": ["vite.config.ts", "src"], - "exclude": ["src/test/webapp/e2e/**/*spec.ts", "node_modules", "src/test/webapp/e2e/**/*.ts"] -} diff --git a/src/test/resources/projects/ts-config-with-empty-exclusions/tsconfig.json b/src/test/resources/projects/ts-config-with-empty-exclusions/tsconfig.json deleted file mode 100644 index 5cfee322f7a..00000000000 --- a/src/test/resources/projects/ts-config-with-empty-exclusions/tsconfig.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "useDefineForClassFields": true, - "lib": ["DOM", "DOM.Iterable", "ESNext"], - "allowJs": false, - "skipLibCheck": true, - "esModuleInterop": false, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx", - "composite": false, - "module": "esnext", - "moduleResolution": "node", - "baseUrl": "src", - "paths": { - "@/*": ["main/webapp/app/*"] - } - }, - "include": ["vite.config.ts", "src"], - "exclude": [] -} diff --git a/src/test/resources/projects/ts-config-with-exclusions/tsconfig.json b/src/test/resources/projects/ts-config-with-exclusions/tsconfig.json deleted file mode 100644 index 6008450b043..00000000000 --- a/src/test/resources/projects/ts-config-with-exclusions/tsconfig.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "useDefineForClassFields": true, - "lib": ["DOM", "DOM.Iterable", "ESNext"], - "allowJs": false, - "skipLibCheck": true, - "esModuleInterop": false, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx", - "composite": false, - "module": "esnext", - "moduleResolution": "node", - "baseUrl": "src", - "paths": { - "@/*": ["main/webapp/app/*"] - } - }, - "include": ["vite.config.ts", "src"], - "exclude": ["src/test/webapp/integration/**/*spec.ts", "node_modules"] -}