Skip to content

Commit

Permalink
Cucumber module
Browse files Browse the repository at this point in the history
Module to add cucumber to a project
  • Loading branch information
DamnClin committed May 28, 2022
1 parent 2f44c56 commit bd869c6
Show file tree
Hide file tree
Showing 35 changed files with 1,698 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ private GeneratorAction() {}
public static final String SPRINGDOC_OPENAPI = "springdoc-openapi";
public static final String SPRINGDOC_OPENAPI_WITH_SECURIITY_JWT = "springdoc-openapi-with-security-jwt";

public static final String SPRINGBOOT_CUCUMBER = "springboot-cucumber";

public static final String REACT = "react";
public static final String REACT_STYLED = "react-styled";

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package tech.jhipster.lite.generator.server.springboot.cucumber.application;

import org.springframework.stereotype.Service;
import tech.jhipster.lite.generator.module.JHipsterModules;
import tech.jhipster.lite.generator.module.domain.JHipsterModule;
import tech.jhipster.lite.generator.server.springboot.cucumber.domain.CucumberModuleFactory;
import tech.jhipster.lite.generator.server.springboot.cucumber.domain.CucumberModuleProperties;

@Service
public class CucumberApplicationService {

private final JHipsterModules modules;
private final CucumberModuleFactory factory;

public CucumberApplicationService(JHipsterModules modules) {
this.modules = modules;

factory = new CucumberModuleFactory();
}

public void add(CucumberModuleProperties properties) {
JHipsterModule module = factory.buildModule(properties);

modules.apply(properties.indentation(), module);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
package tech.jhipster.lite.generator.server.springboot.cucumber.domain;

import static tech.jhipster.lite.generator.module.domain.JHipsterModule.*;

import tech.jhipster.lite.error.domain.Assert;
import tech.jhipster.lite.generator.module.domain.JHipsterModule;
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;

public class CucumberModuleFactory {

private static final String CUCUMBER_GROUP_ID = "io.cucumber";
private static final String CUCUMBER_VERSION = "cucumber.version";

public JHipsterModule buildModule(CucumberModuleProperties properties) {
Assert.notNull("properties", properties);

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

//@formatter:off
return moduleForProject(properties.project())
.context()
.packageName(properties.basePackage())
.put("applicationName", applicationName)
.and()
.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.template("cucumber.md"), to("documentation/cucumber.md"))
.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();
//@formatter:on
}

private JavaDependency cucumberJunitDependency() {
return javaDependency()
.groupId(CUCUMBER_GROUP_ID)
.artifactId("cucumber-junit")
.versionSlug(CUCUMBER_VERSION)
.scope(JavaDependencyScope.TEST)
.build();
}

private JavaDependency cucumberJavaDependency() {
return javaDependency()
.groupId(CUCUMBER_GROUP_ID)
.artifactId("cucumber-java")
.versionSlug(CUCUMBER_VERSION)
.scope(JavaDependencyScope.TEST)
.build();
}

private JavaDependency cucumberSpringDependency() {
return javaDependency()
.groupId(CUCUMBER_GROUP_ID)
.artifactId("cucumber-spring")
.versionSlug(CUCUMBER_VERSION)
.scope(JavaDependencyScope.TEST)
.build();
}

private JavaDependency junitVintageDependency() {
return javaDependency().groupId("org.junit.vintage").artifactId("junit-vintage-engine").scope(JavaDependencyScope.TEST).build();
}

private JavaDependency testNgDependency() {
return javaDependency()
.groupId("org.testng")
.artifactId("testng")
.versionSlug("testng.version")
.scope(JavaDependencyScope.TEST)
.build();
}

private JavaDependency awaitilityDepencency() {
return javaDependency().groupId("org.awaitility").artifactId("awaitility").scope(JavaDependencyScope.TEST).build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
package tech.jhipster.lite.generator.server.springboot.cucumber.domain;

import tech.jhipster.lite.error.domain.Assert;
import tech.jhipster.lite.generator.module.domain.Indentation;
import tech.jhipster.lite.generator.module.domain.JHipsterBasePackage;
import tech.jhipster.lite.generator.module.domain.JHipsterProjectBaseName;
import tech.jhipster.lite.generator.module.domain.JHipsterProjectFolder;
import tech.jhipster.lite.generator.project.domain.Project;

public class CucumberModuleProperties {

private final JHipsterProjectFolder project;
private final Indentation indentation;
private final JHipsterBasePackage basePackage;
private final JHipsterProjectBaseName projectBaseName;

private CucumberModuleProperties(CucumberModulePropertiesBuilder builder) {
project = new JHipsterProjectFolder(builder.project);
indentation = Indentation.from(builder.indentation);
basePackage = new JHipsterBasePackage(builder.basePackage);
projectBaseName = new JHipsterProjectBaseName(builder.projectBaseName);
}

public static CucumberModuleProperties from(Project project) {
Assert.notNull("project", project);

return builder()
.project(project.getFolder())
.indentation(project.getIntegerConfig("prettierDefaultIndent").orElse(null))
.basePackage(project.getPackageNamePath().orElse(null))
.projectBaseName(project.getBaseName().orElse(null))
.build();
}

public static CucumberModulePropertiesBuilder builder() {
return new CucumberModulePropertiesBuilder();
}

public JHipsterProjectFolder project() {
return project;
}

public Indentation indentation() {
return indentation;
}

public JHipsterBasePackage basePackage() {
return basePackage;
}

public JHipsterProjectBaseName projectBaseName() {
return projectBaseName;
}

public static class CucumberModulePropertiesBuilder {

private String project;
private Integer indentation;
private String basePackage;
private String projectBaseName;

public CucumberModulePropertiesBuilder project(String project) {
this.project = project;

return this;
}

public CucumberModulePropertiesBuilder indentation(Integer indentation) {
this.indentation = indentation;

return this;
}

public CucumberModulePropertiesBuilder basePackage(String basePackage) {
this.basePackage = basePackage;

return this;
}

public CucumberModulePropertiesBuilder projectBaseName(String projectBaseName) {
this.projectBaseName = projectBaseName;

return this;
}

public CucumberModuleProperties build() {
return new CucumberModuleProperties(this);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package tech.jhipster.lite.generator.server.springboot.cucumber.infrastructure.primary;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import tech.jhipster.lite.generator.project.domain.GeneratorAction;
import tech.jhipster.lite.generator.project.domain.Project;
import tech.jhipster.lite.generator.project.infrastructure.primary.dto.ProjectDTO;
import tech.jhipster.lite.generator.server.springboot.cucumber.application.CucumberApplicationService;
import tech.jhipster.lite.generator.server.springboot.cucumber.domain.CucumberModuleProperties;
import tech.jhipster.lite.technical.infrastructure.primary.annotation.GeneratorStep;

@RestController
@Tag(name = "Spring Boot")
@RequestMapping("/api/servers/spring-boot/cucumber")
class CucumberResource {

private final CucumberApplicationService cucumber;

public CucumberResource(CucumberApplicationService cucumber) {
this.cucumber = cucumber;
}

@PostMapping
@GeneratorStep(id = GeneratorAction.SPRINGBOOT_CUCUMBER)
@Operation(summary = "Add cucumber integration to project")
@ApiResponse(responseCode = "500", description = "An error occurred while adding cucumber elements")
public void addJavaBase(@RequestBody ProjectDTO projectDTO) {
Project project = ProjectDTO.toProject(projectDTO);

cucumber.add(CucumberModuleProperties.from(project));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
@tech.jhipster.lite.BusinessContext
package tech.jhipster.lite.generator.server.springboot.cucumber;
36 changes: 36 additions & 0 deletions src/main/resources/generator/dependencies/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@
<flyway.version>8.5.11</flyway.version>
<mongock.version>5.0.41</mongock.version>
<archunit-junit5.version>0.23.1</archunit-junit5.version>
<cucumber.version>7.3.4</cucumber.version>
<testng.version>7.6.0</testng.version>
</properties>

<dependencyManagement>
Expand Down Expand Up @@ -117,6 +119,40 @@
<version>${archunit-junit5.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-spring</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>${testng.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.awaitility</groupId>
<artifactId>awaitility</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
Loading

0 comments on commit bd869c6

Please sign in to comment.