Skip to content

Commit da105ba

Browse files
committed
Added tests to verify enum generation
Signed-off-by: Ricardo Zanini <[email protected]>
1 parent d9ab543 commit da105ba

File tree

5 files changed

+78
-22
lines changed

5 files changed

+78
-22
lines changed

deployment/pom.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,16 @@
102102
<artifactId>quarkus-junit5-internal</artifactId>
103103
<scope>test</scope>
104104
</dependency>
105+
<dependency>
106+
<groupId>com.github.javaparser</groupId>
107+
<artifactId>javaparser-core</artifactId>
108+
<scope>test</scope>
109+
</dependency>
110+
<dependency>
111+
<groupId>org.assertj</groupId>
112+
<artifactId>assertj-core</artifactId>
113+
<scope>test</scope>
114+
</dependency>
105115
</dependencies>
106116
<build>
107117
<plugins>

deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package io.quarkiverse.openapi.generator.deployment.codegen;
22

3-
import static io.quarkiverse.openapi.generator.deployment.SpecConfig.API_PKG_SUFFIX;
4-
import static io.quarkiverse.openapi.generator.deployment.SpecConfig.MODEL_PKG_SUFFIX;
53
import static io.quarkiverse.openapi.generator.deployment.SpecConfig.getResolvedBasePackageProperty;
64

75
import java.io.IOException;
@@ -26,8 +24,6 @@ public abstract class OpenApiGeneratorCodeGenBase implements CodeGenProvider {
2624
static final String YML = ".yml";
2725
static final String JSON = ".json";
2826

29-
private static final String DEFAULT_PACKAGE = "org.openapi.quarkus";
30-
3127
@Override
3228
public String inputDirectory() {
3329
return "openapi";
@@ -47,12 +43,9 @@ public boolean trigger(CodeGenContext context) throws CodeGenException {
4743
.map(Path::of).forEach(openApiFilePath -> {
4844
final String basePackage = context.config()
4945
.getOptionalValue(getResolvedBasePackageProperty(openApiFilePath), String.class)
50-
.orElse(DEFAULT_PACKAGE);
46+
.orElse("");
5147
final OpenApiClientGeneratorWrapper generator = new OpenApiClientGeneratorWrapper(
52-
openApiFilePath.normalize(), outDir)
53-
.withApiPackage(basePackage + API_PKG_SUFFIX)
54-
.withModelPackage(basePackage + MODEL_PKG_SUFFIX)
55-
.withBasePackage(basePackage);
48+
openApiFilePath.normalize(), outDir).withBasePackage(basePackage);
5649
generator.generate();
5750
});
5851
} catch (IOException e) {

deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package io.quarkiverse.openapi.generator.deployment.wrapper;
22

3+
import static java.lang.Boolean.FALSE;
4+
import static java.lang.Boolean.TRUE;
5+
36
import java.io.File;
47
import java.nio.file.Path;
58
import java.util.List;
@@ -8,8 +11,7 @@
811
import org.openapitools.codegen.DefaultGenerator;
912
import org.openapitools.codegen.config.GlobalSettings;
1013

11-
import static java.lang.Boolean.FALSE;
12-
import static java.lang.Boolean.TRUE;
14+
import io.quarkiverse.openapi.generator.deployment.SpecConfig;
1315

1416
/**
1517
* Wrapper for the OpenAPIGen tool.
@@ -22,10 +24,15 @@ public class OpenApiClientGeneratorWrapper {
2224

2325
private static final String VERBOSE = "verbose";
2426
private static final String ONCE_LOGGER = "org.openapitools.codegen.utils.oncelogger.enabled";
27+
private static final String DEFAULT_PACKAGE = "org.openapi.quarkus";
2528

2629
private final QuarkusCodegenConfigurator configurator;
2730
private final DefaultGenerator generator;
2831

32+
private String basePackage = DEFAULT_PACKAGE;
33+
private String apiPackage = "";
34+
private String modelPackage = "";
35+
2936
public OpenApiClientGeneratorWrapper(final Path specFilePath, final Path outputDir) {
3037
// do not generate docs nor tests
3138
GlobalSettings.setProperty(CodegenConstants.API_DOCS, FALSE.toString());
@@ -47,23 +54,39 @@ public OpenApiClientGeneratorWrapper(final Path specFilePath, final Path outputD
4754
}
4855

4956
public OpenApiClientGeneratorWrapper withApiPackage(final String pkg) {
50-
this.configurator.setApiPackage(pkg);
51-
this.configurator.setInvokerPackage(pkg);
57+
this.apiPackage = pkg;
5258
return this;
5359
}
5460

5561
public OpenApiClientGeneratorWrapper withModelPackage(final String pkg) {
56-
this.configurator.setModelPackage(pkg);
62+
this.modelPackage = pkg;
5763
return this;
5864
}
5965

6066
public OpenApiClientGeneratorWrapper withBasePackage(final String pkg) {
61-
this.configurator.setPackageName(pkg);
67+
this.basePackage = pkg;
6268
return this;
6369
}
6470

6571
public List<File> generate() {
72+
this.consolidatePackageNames();
6673
return generator.opts(configurator.toClientOptInput()).generate();
6774
}
6875

76+
private void consolidatePackageNames() {
77+
if (basePackage.isEmpty()) {
78+
basePackage = DEFAULT_PACKAGE;
79+
}
80+
if (apiPackage.isEmpty()) {
81+
this.apiPackage = basePackage.concat(SpecConfig.API_PKG_SUFFIX);
82+
}
83+
if (modelPackage.isEmpty()) {
84+
this.modelPackage = basePackage.concat(SpecConfig.MODEL_PKG_SUFFIX);
85+
}
86+
this.configurator.setPackageName(basePackage);
87+
this.configurator.setApiPackage(apiPackage);
88+
this.configurator.setModelPackage(modelPackage);
89+
this.configurator.setInvokerPackage(apiPackage);
90+
}
91+
6992
}

deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapperTest.java

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,25 @@
11
package io.quarkiverse.openapi.generator.deployment.wrapper;
22

33
import static java.util.Objects.requireNonNull;
4+
import static org.assertj.core.api.Assertions.assertThat;
45
import static org.junit.jupiter.api.Assertions.assertFalse;
56
import static org.junit.jupiter.api.Assertions.assertNotNull;
67
import static org.junit.jupiter.api.Assertions.assertTrue;
78

89
import java.io.File;
10+
import java.io.FileNotFoundException;
911
import java.net.URISyntaxException;
1012
import java.nio.file.Path;
1113
import java.nio.file.Paths;
1214
import java.util.List;
15+
import java.util.Optional;
1316

1417
import org.junit.jupiter.api.Test;
1518

19+
import com.github.javaparser.StaticJavaParser;
20+
import com.github.javaparser.ast.CompilationUnit;
21+
import com.github.javaparser.ast.body.EnumConstantDeclaration;
22+
1623
public class OpenApiClientGeneratorWrapperTest {
1724

1825
@Test
@@ -47,17 +54,24 @@ void verifyAuthBearerGenerated() throws URISyntaxException {
4754
}
4855

4956
@Test
50-
void verifyEnumGeneration() throws URISyntaxException {
51-
final Path petstoreOpenApi = Path
57+
void verifyEnumGeneration() throws URISyntaxException, FileNotFoundException {
58+
final Path issue28Path = Path
5259
.of(requireNonNull(this.getClass().getResource("/openapi/issue-28.yaml")).toURI());
5360
final Path targetPath = Paths.get(getTargetDir(), "openapi-gen");
54-
final OpenApiClientGeneratorWrapper generatorWrapper = new OpenApiClientGeneratorWrapper(petstoreOpenApi, targetPath)
55-
.withBasePackage("org.issue28")
56-
.withApiPackage("org.issue28.api")
57-
.withModelPackage("org.issue28.package");
61+
final OpenApiClientGeneratorWrapper generatorWrapper = new OpenApiClientGeneratorWrapper(issue28Path, targetPath)
62+
.withBasePackage("org.issue28");
63+
5864
final List<File> generatedFiles = generatorWrapper.generate();
65+
final Optional<File> enumFile = generatedFiles.stream()
66+
.filter(f -> f.getName().endsWith("ConnectorNamespaceState.java")).findFirst();
67+
assertThat(enumFile).isPresent();
5968

60-
// TODO: add verification via java parser
69+
final CompilationUnit cu = StaticJavaParser.parse(enumFile.orElseThrow());
70+
final List<EnumConstantDeclaration> constants = cu.findAll(EnumConstantDeclaration.class);
71+
assertThat(constants)
72+
.hasSize(3)
73+
.extracting(EnumConstantDeclaration::getNameAsString)
74+
.containsExactlyInAnyOrder("DISCONNECTED", "READY", "DELETING");
6175
}
6276

6377
private String getTargetDir() throws URISyntaxException {

pom.xml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
2222
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
2323
<quarkus.version>2.7.5.Final</quarkus.version>
24+
25+
<version.com.github.javaparser>3.24.0</version.com.github.javaparser>
26+
<version.org.assertj>3.22.0</version.org.assertj>
2427
</properties>
2528
<dependencyManagement>
2629
<dependencies>
@@ -31,6 +34,19 @@
3134
<type>pom</type>
3235
<scope>import</scope>
3336
</dependency>
37+
<!-- Test -->
38+
<dependency>
39+
<groupId>com.github.javaparser</groupId>
40+
<artifactId>javaparser-core</artifactId>
41+
<version>${version.com.github.javaparser}</version>
42+
<scope>test</scope>
43+
</dependency>
44+
<dependency>
45+
<groupId>org.assertj</groupId>
46+
<artifactId>assertj-core</artifactId>
47+
<version>${version.org.assertj}</version>
48+
<scope>test</scope>
49+
</dependency>
3450
</dependencies>
3551
</dependencyManagement>
3652
<build>

0 commit comments

Comments
 (0)