Skip to content

Commit

Permalink
Merge pull request #2211 from DamnClin/jpa-reset-option
Browse files Browse the repository at this point in the history
Add JPA reset option for cucumber
  • Loading branch information
pascalgrimaud authored Jun 23, 2022
2 parents 35f9075 + fe9b99d commit ad45924
Show file tree
Hide file tree
Showing 7 changed files with 136 additions and 44 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,17 @@
import static tech.jhipster.lite.generator.module.domain.JHipsterModule.*;

import tech.jhipster.lite.error.domain.Assert;
import tech.jhipster.lite.generator.module.domain.JHipsterDestination;
import tech.jhipster.lite.generator.module.domain.JHipsterModule;
import tech.jhipster.lite.generator.module.domain.JHipsterModule.JHipsterModuleBuilder;
import tech.jhipster.lite.generator.module.domain.JHipsterSource;
import tech.jhipster.lite.generator.module.domain.javadependency.JavaDependency;
import tech.jhipster.lite.generator.module.domain.javadependency.JavaDependencyScope;
import tech.jhipster.lite.generator.module.domain.properties.JHipsterModuleProperties;

public class CucumberModuleFactory {

private static final JHipsterSource SOURCE = from("server/springboot/cucumber");
private static final String CUCUMBER_GROUP_ID = "io.cucumber";
private static final String CUCUMBER_VERSION = "cucumber.version";

Expand All @@ -19,48 +22,53 @@ public JHipsterModule buildModule(JHipsterModuleProperties properties) {

String packagePath = properties.basePackage().path();
String applicationName = properties.projectBaseName().capitalized();
JHipsterSource source = from("server/springboot/cucumber");
JHipsterDestination destination = toSrcTestJava().append(packagePath).append("cucumber");

//@formatter:off
return moduleBuilder(properties)
.context()
.packageName(properties.basePackage())
.put("applicationName", applicationName)
JHipsterModuleBuilder builder = moduleBuilder(properties)
.context()
.packageName(properties.basePackage())
.put("applicationName", applicationName)
.and()
.documentation(documentationTitle("Cucumber"), SOURCE.template("cucumber.md"))
.files()
.batch(SOURCE, destination)
.add("AsyncElementAsserter.java")
.add("AsyncHeaderAsserter.java")
.add("AsyncResponseAsserter.java")
.add("Awaiter.java")
.add("CucumberAssertions.java")
.add("CucumberConfiguration.java")
.add("CucumberJson.java")
.add("CucumberTest.java")
.add("CucumberTestContext.java")
.add("CucumberTestContextUnitTest.java")
.add("ElementAsserter.java")
.add("ElementAssertions.java")
.add("HeaderAsserter.java")
.add("HeaderAssertions.java")
.add("ResponseAsserter.java")
.add("SyncElementAsserter.java")
.add("SyncHeaderAsserter.java")
.add("SyncResponseAsserter.java")
.and()
.documentation(documentationTitle("Cucumber"), source.template("cucumber.md"))
.files()
.batch(source, toSrcTestJava().append(packagePath).append("cucumber"))
.add("AsyncElementAsserter.java")
.add("AsyncHeaderAsserter.java")
.add("AsyncResponseAsserter.java")
.add("Awaiter.java")
.add("CucumberAssertions.java")
.add("CucumberConfiguration.java")
.add("CucumberJson.java")
.add("CucumberTest.java")
.add("CucumberTestContext.java")
.add("CucumberTestContextUnitTest.java")
.add("ElementAsserter.java")
.add("ElementAssertions.java")
.add("HeaderAsserter.java")
.add("HeaderAssertions.java")
.add("ResponseAsserter.java")
.add("SyncElementAsserter.java")
.add("SyncHeaderAsserter.java")
.add("SyncResponseAsserter.java")
.and()
.add(source.file("gitkeep"), to("src/test/features/.gitkeep"))
.and()
.javaDependencies()
.add(cucumberJunitDependency())
.add(cucumberJavaDependency())
.add(cucumberSpringDependency())
.add(junitVintageDependency())
.add(testNgDependency())
.add(awaitilityDepencency())
.and()
.build();
.add(SOURCE.file("gitkeep"), to("src/test/features/.gitkeep"))
.and()
.javaDependencies()
.add(cucumberJunitDependency())
.add(cucumberJavaDependency())
.add(cucumberSpringDependency())
.add(junitVintageDependency())
.add(testNgDependency())
.add(awaitilityDepencency())
.and();
//@formatter:on

if (needJpaReset(properties)) {
builder.files().add(SOURCE.template("CucumberJpaReset.java"), destination.append("CucumberJpaReset.java"));
}

return builder.build();
}

private JavaDependency cucumberJunitDependency() {
Expand Down Expand Up @@ -106,4 +114,8 @@ private JavaDependency testNgDependency() {
private JavaDependency awaitilityDepencency() {
return javaDependency().groupId("org.awaitility").artifactId("awaitility").scope(JavaDependencyScope.TEST).build();
}

private boolean needJpaReset(JHipsterModuleProperties properties) {
return properties.getOrDefaultBoolean("jpaReset", false);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import tech.jhipster.lite.generator.module.domain.properties.JHipsterModulePropertiesDefinition;
import tech.jhipster.lite.generator.module.domain.properties.JHipsterModulePropertyDefinition;
import tech.jhipster.lite.generator.module.infrastructure.primary.JHipsterModuleApiDoc;
import tech.jhipster.lite.generator.module.infrastructure.primary.JHipsterModuleResource;
import tech.jhipster.lite.generator.server.springboot.cucumber.application.CucumberApplicationService;
Expand All @@ -16,8 +17,24 @@ JHipsterModuleResource cucumberModule(CucumberApplicationService cucumber) {
.builder()
.legacyUrl("/api/servers/spring-boot/component-tests/cucumber")
.slug("springboot-cucumber")
.propertiesDefinition(JHipsterModulePropertiesDefinition.builder().addBasePackage().addIndentation().addProjectBaseName().build())
.propertiesDefinition(
JHipsterModulePropertiesDefinition
.builder()
.addBasePackage()
.addIndentation()
.addProjectBaseName()
.add(jpaResetPropertyDefinition())
.build()
)
.apiDoc(new JHipsterModuleApiDoc("Spring Boot - Component Tests", "Add cucumber integration to project"))
.factory(cucumber::build);
}

private JHipsterModulePropertyDefinition jpaResetPropertyDefinition() {
return JHipsterModulePropertyDefinition
.optionalBooleanProperty("jpaReset")
.description("Used to reset data from all JPA repositories")
.order(500)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package {{packageName}}.cucumber;

import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.repository.JpaRepository;

import io.cucumber.java.After;
import io.cucumber.java.Before;

public class CucumberJpaReset {
@Autowired
private Map<String, JpaRepository<?, ?>> repositories;
@After
@Before
public void wipeData() {
repositories.entrySet()
.stream()
.map(Map.Entry::getValue)
.forEach(JpaRepository::deleteAllInBatch);
}
}
1 change: 1 addition & 0 deletions src/test/features/cucumber.feature
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ Feature: Cucumber module
| Key | Type | Mandatory |
| packageName | STRING | true |
| baseName | STRING | true |
| jpaReset | BOOLEAN | false |
| prettierDefaultIndent | INTEGER | false |

Scenario: Should add cucumber elements using module url
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,12 @@ public JHipsterModulePropertiesBuilder projectBaseName(String projectBaseName) {
return this;
}

public JHipsterModulePropertiesBuilder put(String key, Object value) {
properties.put(key, value);

return this;
}

public JHipsterModuleProperties build() {
return new JHipsterModuleProperties(projectFolder, properties);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,20 @@ private Consumer<Path> assertFileExist(SoftAssertions assertions) {
return path -> assertions.assertThat(Files.exists(path)).as(fileNotFoundMessage(path, projectFolder)).isTrue();
}

public ModuleAsserter doNotCreateFiles(String... files) {
assertThat(files).as("Can't check null files as not created for a module").isNotNull();

SoftAssertions assertions = new SoftAssertions();
Stream.of(files).map(file -> projectFolder.filePath(file)).forEach(assertFileNotExist(assertions));
assertions.assertAll();

return this;
}

private Consumer<Path> assertFileNotExist(SoftAssertions assertions) {
return path -> assertions.assertThat(Files.notExists(path)).as(fileFoundMessage(path, projectFolder)).isTrue();
}

public ModuleFileAsserter createFile(String file) {
return new ModuleFileAsserter(this, file);
}
Expand Down Expand Up @@ -173,6 +187,10 @@ private static Supplier<String> fileNotFoundMessage(Path path, JHipsterProjectFo
return () -> "Can't find file " + path + " in project folder, found " + projectFiles(projectFolder);
}

private static Supplier<String> fileFoundMessage(Path path, JHipsterProjectFolder projectFolder) {
return () -> "Found file " + path + " in project folder, found " + projectFiles(projectFolder);
}

private static String projectFiles(JHipsterProjectFolder projectFolder) {
try {
return Files
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,17 +46,31 @@ void shouldCreateModule() {
"SyncHeaderAsserter.java",
"SyncResponseAsserter.java"
)
.createFile("documentation/cucumber.md")
.and()
.createFile("src/test/features/.gitkeep")
.and()
.createFiles("documentation/cucumber.md")
.createFiles("src/test/features/.gitkeep")
.createFile("pom.xml")
.containing("<artifactId>cucumber-junit</artifactId>")
.containing("<artifactId>cucumber-java</artifactId>")
.containing("<artifactId>cucumber-spring</artifactId>")
.containing("<artifactId>junit-vintage-engine</artifactId>")
.containing("<artifactId>testng</artifactId>")
.containing("<artifactId>awaitility</artifactId>")
.containing("<version>${cucumber.version}</version>");
.containing("<version>${cucumber.version}</version>")
.and()
.doNotCreateFiles("src/test/java/com/jhipster/test/cucumber/CucumberJpaReset.java");
}

@Test
void shouldAddDataResetWithSelectedOption() {
JHipsterModuleProperties properties = JHipsterModulesFixture
.propertiesBuilder(FileUtils.tmpDirForTest())
.basePackage("com.jhipster.test")
.projectBaseName("myapp")
.put("jpaReset", true)
.build();

JHipsterModule module = factory.buildModule(properties);

assertThatModuleOnProjectWithDefaultPom(module).createFiles("src/test/java/com/jhipster/test/cucumber/CucumberJpaReset.java");
}
}

0 comments on commit ad45924

Please sign in to comment.