Skip to content

Commit 4ac33d8

Browse files
MichalFoksajmini
authored andcommitted
[openapi-yaml] Config option outputFile was ignored by the generator. (#3199)
1 parent 06cfdbb commit 4ac33d8

File tree

4 files changed

+174
-59
lines changed

4 files changed

+174
-59
lines changed

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/OpenAPIYamlGenerator.java

+4-7
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,14 @@ public class OpenAPIYamlGenerator extends DefaultCodegen implements CodegenConfi
2828

2929
private static final Logger LOGGER = LoggerFactory.getLogger(OpenAPIYamlGenerator.class);
3030

31-
protected String outputFile = "openapi.yaml";
31+
protected String outputFile = "openapi/openapi.yaml";
3232

3333
public OpenAPIYamlGenerator() {
3434
super();
3535
embeddedTemplateDir = templateDir = "openapi-yaml";
3636
outputFolder = "generated-code/openapi-yaml";
3737
cliOptions.add(new CliOption(OUTPUT_NAME, "output filename"));
3838
supportingFiles.add(new SupportingFile("README.md", "", "README.md"));
39-
supportingFiles.add(new SupportingFile("openapi.mustache",
40-
"openapi",
41-
"openapi.yaml"));
4239
}
4340

4441
@Override
@@ -56,13 +53,14 @@ public String getHelp() {
5653
return "Creates a static openapi.yaml file (OpenAPI spec v3).";
5754
}
5855

59-
6056
@Override
6157
public void processOpts() {
6258
super.processOpts();
6359
if (additionalProperties.containsKey(OUTPUT_NAME)) {
64-
this.outputFile = additionalProperties.get(OUTPUT_NAME).toString();
60+
outputFile = additionalProperties.get(OUTPUT_NAME).toString();
6561
}
62+
LOGGER.info("Output file [outputFile={}]", outputFile);
63+
supportingFiles.add(new SupportingFile("openapi.mustache", outputFile));
6664
}
6765

6866
@Override
@@ -71,7 +69,6 @@ public Map<String, Object> postProcessSupportingFileData(Map<String, Object> obj
7169
return super.postProcessSupportingFileData(objs);
7270
}
7371

74-
7572
@Override
7673
public String escapeQuotationMark(String input) {
7774
// just return the original string

modules/openapi-generator/src/test/java/org/openapitools/codegen/TestUtils.java

+15
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.openapitools.codegen;
22

3+
import static org.testng.Assert.assertTrue;
4+
35
import io.swagger.parser.OpenAPIParser;
46
import io.swagger.v3.oas.models.Components;
57
import io.swagger.v3.oas.models.OpenAPI;
@@ -8,12 +10,15 @@
810
import io.swagger.v3.oas.models.media.Schema;
911
import io.swagger.v3.oas.models.servers.Server;
1012
import io.swagger.v3.parser.core.models.ParseOptions;
13+
1114
import org.openapitools.codegen.MockDefaultGenerator.WrittenTemplateBasedFile;
1215
import org.testng.Assert;
1316

1417
import java.io.File;
1518
import java.util.Collections;
19+
import java.util.Map;
1620
import java.util.Optional;
21+
import java.util.stream.Collectors;
1722

1823
public class TestUtils {
1924

@@ -55,4 +60,14 @@ public static WrittenTemplateBasedFile getTemplateBasedFile(MockDefaultGenerator
5560
Assert.assertTrue(optional.isPresent());
5661
return optional.get();
5762
}
63+
64+
public static void ensureContainsFile(Map<String, String> generatedFiles, File root, String filename) {
65+
File file = new File(root, filename);
66+
String absoluteFilename = file.getAbsolutePath().replace("\\", "/");
67+
if (!generatedFiles.containsKey(absoluteFilename)) {
68+
Assert.fail("Could not find '" + absoluteFilename + "' file in list:\n" +
69+
generatedFiles.keySet().stream().sorted().collect(Collectors.joining(",\n")));
70+
}
71+
assertTrue(generatedFiles.containsKey(absoluteFilename), "File '" + absoluteFilename + "' was not fould in the list of generated files");
72+
}
5873
}

modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java

+67-52
Original file line numberDiff line numberDiff line change
@@ -17,28 +17,53 @@
1717

1818
package org.openapitools.codegen.java;
1919

20+
import static org.testng.Assert.assertEquals;
21+
import static org.testng.Assert.assertTrue;
22+
2023
import com.google.common.collect.ImmutableMap;
24+
2125
import io.swagger.v3.oas.models.OpenAPI;
2226
import io.swagger.v3.oas.models.Operation;
23-
import io.swagger.v3.oas.models.media.*;
27+
import io.swagger.v3.oas.models.media.ArraySchema;
28+
import io.swagger.v3.oas.models.media.ComposedSchema;
29+
import io.swagger.v3.oas.models.media.Content;
30+
import io.swagger.v3.oas.models.media.IntegerSchema;
31+
import io.swagger.v3.oas.models.media.MediaType;
32+
import io.swagger.v3.oas.models.media.ObjectSchema;
33+
import io.swagger.v3.oas.models.media.Schema;
34+
import io.swagger.v3.oas.models.media.StringSchema;
2435
import io.swagger.v3.oas.models.parameters.RequestBody;
2536
import io.swagger.v3.oas.models.responses.ApiResponse;
2637
import io.swagger.v3.parser.util.SchemaTypeUtil;
27-
import org.openapitools.codegen.*;
38+
39+
import org.openapitools.codegen.ClientOptInput;
40+
import org.openapitools.codegen.ClientOpts;
41+
import org.openapitools.codegen.CodegenConstants;
42+
import org.openapitools.codegen.CodegenModel;
43+
import org.openapitools.codegen.CodegenOperation;
44+
import org.openapitools.codegen.CodegenParameter;
45+
import org.openapitools.codegen.CodegenProperty;
46+
import org.openapitools.codegen.CodegenResponse;
47+
import org.openapitools.codegen.DefaultGenerator;
48+
import org.openapitools.codegen.MockDefaultGenerator;
2849
import org.openapitools.codegen.MockDefaultGenerator.WrittenTemplateBasedFile;
50+
import org.openapitools.codegen.TestUtils;
2951
import org.openapitools.codegen.config.CodegenConfigurator;
3052
import org.openapitools.codegen.languages.JavaClientCodegen;
3153
import org.testng.Assert;
3254
import org.testng.annotations.Test;
3355

3456
import java.io.File;
3557
import java.nio.file.Files;
36-
import java.util.*;
58+
import java.util.ArrayList;
59+
import java.util.Arrays;
60+
import java.util.Collections;
61+
import java.util.HashMap;
62+
import java.util.HashSet;
63+
import java.util.List;
64+
import java.util.Map;
3765
import java.util.stream.Collectors;
3866

39-
import static org.testng.Assert.assertEquals;
40-
import static org.testng.Assert.assertTrue;
41-
4267
public class JavaClientCodegenTest {
4368

4469
@Test
@@ -257,42 +282,42 @@ public void testGeneratePing() throws Exception {
257282

258283
Map<String, String> generatedFiles = generator.getFiles();
259284
Assert.assertEquals(generatedFiles.size(), 34);
260-
ensureContainsFile(generatedFiles, output, ".gitignore");
261-
ensureContainsFile(generatedFiles, output, ".openapi-generator-ignore");
262-
ensureContainsFile(generatedFiles, output, ".openapi-generator/VERSION");
263-
ensureContainsFile(generatedFiles, output, ".travis.yml");
264-
ensureContainsFile(generatedFiles, output, "build.gradle");
265-
ensureContainsFile(generatedFiles, output, "build.sbt");
266-
ensureContainsFile(generatedFiles, output, "docs/DefaultApi.md");
267-
ensureContainsFile(generatedFiles, output, "git_push.sh");
268-
ensureContainsFile(generatedFiles, output, "gradle.properties");
269-
ensureContainsFile(generatedFiles, output, "gradle/wrapper/gradle-wrapper.jar");
270-
ensureContainsFile(generatedFiles, output, "gradle/wrapper/gradle-wrapper.properties");
271-
ensureContainsFile(generatedFiles, output, "gradlew.bat");
272-
ensureContainsFile(generatedFiles, output, "gradlew");
273-
ensureContainsFile(generatedFiles, output, "pom.xml");
274-
ensureContainsFile(generatedFiles, output, "README.md");
275-
ensureContainsFile(generatedFiles, output, "settings.gradle");
276-
ensureContainsFile(generatedFiles, output, "src/main/AndroidManifest.xml");
277-
ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/api/DefaultApi.java");
278-
ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/ApiCallback.java");
279-
ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/ApiClient.java");
280-
ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/ApiException.java");
281-
ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/ApiResponse.java");
282-
ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/auth/ApiKeyAuth.java");
283-
ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/auth/Authentication.java");
284-
ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/auth/HttpBasicAuth.java");
285-
ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/auth/HttpBearerAuth.java");
286-
//ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/auth/OAuth.java");
287-
//ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/auth/OAuthFlow.java");
288-
ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/Configuration.java");
289-
ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/GzipRequestInterceptor.java");
290-
ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/JSON.java");
291-
ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/Pair.java");
292-
ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/ProgressRequestBody.java");
293-
ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/ProgressResponseBody.java");
294-
ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/StringUtil.java");
295-
ensureContainsFile(generatedFiles, output, "src/test/java/xyz/abcdef/api/DefaultApiTest.java");
285+
TestUtils.ensureContainsFile(generatedFiles, output, ".gitignore");
286+
TestUtils.ensureContainsFile(generatedFiles, output, ".openapi-generator-ignore");
287+
TestUtils.ensureContainsFile(generatedFiles, output, ".openapi-generator/VERSION");
288+
TestUtils.ensureContainsFile(generatedFiles, output, ".travis.yml");
289+
TestUtils.ensureContainsFile(generatedFiles, output, "build.gradle");
290+
TestUtils.ensureContainsFile(generatedFiles, output, "build.sbt");
291+
TestUtils.ensureContainsFile(generatedFiles, output, "docs/DefaultApi.md");
292+
TestUtils.ensureContainsFile(generatedFiles, output, "git_push.sh");
293+
TestUtils.ensureContainsFile(generatedFiles, output, "gradle.properties");
294+
TestUtils.ensureContainsFile(generatedFiles, output, "gradle/wrapper/gradle-wrapper.jar");
295+
TestUtils.ensureContainsFile(generatedFiles, output, "gradle/wrapper/gradle-wrapper.properties");
296+
TestUtils.ensureContainsFile(generatedFiles, output, "gradlew.bat");
297+
TestUtils.ensureContainsFile(generatedFiles, output, "gradlew");
298+
TestUtils.ensureContainsFile(generatedFiles, output, "pom.xml");
299+
TestUtils.ensureContainsFile(generatedFiles, output, "README.md");
300+
TestUtils.ensureContainsFile(generatedFiles, output, "settings.gradle");
301+
TestUtils.ensureContainsFile(generatedFiles, output, "src/main/AndroidManifest.xml");
302+
TestUtils.ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/api/DefaultApi.java");
303+
TestUtils.ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/ApiCallback.java");
304+
TestUtils.ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/ApiClient.java");
305+
TestUtils.ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/ApiException.java");
306+
TestUtils.ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/ApiResponse.java");
307+
TestUtils.ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/auth/ApiKeyAuth.java");
308+
TestUtils.ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/auth/Authentication.java");
309+
TestUtils.ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/auth/HttpBasicAuth.java");
310+
TestUtils.ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/auth/HttpBearerAuth.java");
311+
//TestUtils.ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/auth/OAuth.java");
312+
//TestUtils.ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/auth/OAuthFlow.java");
313+
TestUtils.ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/Configuration.java");
314+
TestUtils.ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/GzipRequestInterceptor.java");
315+
TestUtils.ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/JSON.java");
316+
TestUtils.ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/Pair.java");
317+
TestUtils.ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/ProgressRequestBody.java");
318+
TestUtils.ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/ProgressResponseBody.java");
319+
TestUtils.ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/StringUtil.java");
320+
TestUtils.ensureContainsFile(generatedFiles, output, "src/test/java/xyz/abcdef/api/DefaultApiTest.java");
296321

297322
String defaultApiFilename = new File(output, "src/main/java/xyz/abcdef/api/DefaultApi.java").getAbsolutePath().replace("\\", "/");
298323
String defaultApiConent = generatedFiles.get(defaultApiFilename);
@@ -384,16 +409,6 @@ public void testFreeFormObjects() {
384409
Assert.assertEquals(cm.getClassname(), "OtherObj");
385410
}
386411

387-
private void ensureContainsFile(Map<String, String> generatedFiles, File root, String filename) {
388-
File file = new File(root, filename);
389-
String absoluteFilename = file.getAbsolutePath().replace("\\", "/");
390-
if (!generatedFiles.containsKey(absoluteFilename)) {
391-
Assert.fail("Could not find '" + absoluteFilename + "' file in list:\n" +
392-
generatedFiles.keySet().stream().sorted().collect(Collectors.joining(",\n")));
393-
}
394-
assertTrue(generatedFiles.containsKey(absoluteFilename), "File '" + absoluteFilename + "' was not fould in the list of generated files");
395-
}
396-
397412
private CodegenProperty codegenPropertyWithArrayOfIntegerValues() {
398413
CodegenProperty array = new CodegenProperty();
399414
final CodegenProperty items = new CodegenProperty();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
/*
2+
* Copyright 2018 OpenAPI-Generator Contributors (https://openapi-generator.tech)
3+
* Copyright 2018 SmartBear Software
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
package org.openapitools.codegen.yaml;
19+
20+
import org.openapitools.codegen.ClientOptInput;
21+
import org.openapitools.codegen.MockDefaultGenerator;
22+
import org.openapitools.codegen.TestUtils;
23+
import org.openapitools.codegen.config.CodegenConfigurator;
24+
import org.openapitools.codegen.languages.OpenAPIYamlGenerator;
25+
import org.testng.Assert;
26+
import org.testng.annotations.Test;
27+
28+
import java.io.File;
29+
import java.nio.file.Files;
30+
import java.util.HashMap;
31+
import java.util.Map;
32+
33+
public class YamlGeneratorTest {
34+
35+
@Test
36+
public void testGeneratePing() throws Exception {
37+
Map<String, Object> properties = new HashMap<>();
38+
39+
File output = Files.createTempDirectory("test").toFile();
40+
41+
final CodegenConfigurator configurator = new CodegenConfigurator()
42+
.setGeneratorName("openapi-yaml")
43+
.setAdditionalProperties(properties)
44+
.setInputSpec("src/test/resources/3_0/ping.yaml")
45+
.setOutputDir(output.getAbsolutePath().replace("\\", "/"));
46+
47+
final ClientOptInput clientOptInput = configurator.toClientOptInput();
48+
MockDefaultGenerator generator = new MockDefaultGenerator();
49+
generator.opts(clientOptInput).generate();
50+
51+
Map<String, String> generatedFiles = generator.getFiles();
52+
Assert.assertEquals(generatedFiles.size(), 4);
53+
TestUtils.ensureContainsFile(generatedFiles, output, "openapi/openapi.yaml");
54+
TestUtils.ensureContainsFile(generatedFiles, output, "README.md");
55+
TestUtils.ensureContainsFile(generatedFiles, output, ".openapi-generator-ignore");
56+
TestUtils.ensureContainsFile(generatedFiles, output, ".openapi-generator/VERSION");
57+
58+
output.deleteOnExit();
59+
}
60+
61+
62+
@Test
63+
public void testGeneratePingOtherOutputFile() throws Exception {
64+
Map<String, Object> properties = new HashMap<>();
65+
properties.put(OpenAPIYamlGenerator.OUTPUT_NAME, "ping.yaml");
66+
67+
File output = Files.createTempDirectory("test").toFile();
68+
69+
final CodegenConfigurator configurator = new CodegenConfigurator()
70+
.setGeneratorName("openapi-yaml")
71+
.setAdditionalProperties(properties)
72+
.setInputSpec("src/test/resources/3_0/ping.yaml")
73+
.setOutputDir(output.getAbsolutePath().replace("\\", "/"));
74+
75+
final ClientOptInput clientOptInput = configurator.toClientOptInput();
76+
MockDefaultGenerator generator = new MockDefaultGenerator();
77+
generator.opts(clientOptInput).generate();
78+
79+
Map<String, String> generatedFiles = generator.getFiles();
80+
Assert.assertEquals(generatedFiles.size(), 4);
81+
TestUtils.ensureContainsFile(generatedFiles, output, "ping.yaml");
82+
TestUtils.ensureContainsFile(generatedFiles, output, "README.md");
83+
TestUtils.ensureContainsFile(generatedFiles, output, ".openapi-generator-ignore");
84+
TestUtils.ensureContainsFile(generatedFiles, output, ".openapi-generator/VERSION");
85+
86+
output.deleteOnExit();
87+
}
88+
}

0 commit comments

Comments
 (0)