forked from loafle/openapi-generator-original
Support importMapping definitions for TypeScriptNodeClientCodegen (#3469)
* Support importMapping definitions for TypeScriptNodeClientCodegen * Use import mappings for all file references
This commit is contained in:
committed by
Esteban Gehring
parent
981b3a53ef
commit
74eeb07b22
@@ -18,7 +18,6 @@
|
||||
package org.openapitools.codegen.languages;
|
||||
|
||||
import io.swagger.v3.oas.models.media.Schema;
|
||||
import io.swagger.v3.parser.util.SchemaTypeUtil;
|
||||
import org.openapitools.codegen.*;
|
||||
import org.openapitools.codegen.utils.ModelUtils;
|
||||
import org.slf4j.Logger;
|
||||
@@ -33,6 +32,7 @@ public class TypeScriptNodeClientCodegen extends AbstractTypeScriptClientCodegen
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(TypeScriptNodeClientCodegen.class);
|
||||
|
||||
public static final String NPM_REPOSITORY = "npmRepository";
|
||||
private static final String DEFAULT_IMPORT_PREFIX = "./";
|
||||
|
||||
protected String npmRepository = null;
|
||||
protected String apiSuffix = "Api";
|
||||
@@ -96,22 +96,37 @@ public class TypeScriptNodeClientCodegen extends AbstractTypeScriptClientCodegen
|
||||
if (name.length() == 0) {
|
||||
return "default" + apiSuffix;
|
||||
}
|
||||
if (importMapping.containsKey(name)) {
|
||||
return importMapping.get(name);
|
||||
}
|
||||
return camelize(name, true) + apiSuffix;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toApiImport(String name) {
|
||||
if (importMapping.containsKey(name)) {
|
||||
return importMapping.get(name);
|
||||
}
|
||||
|
||||
return apiPackage() + "/" + toApiFilename(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toModelFilename(String name) {
|
||||
return camelize(toModelName(name), true);
|
||||
if (importMapping.containsKey(name)) {
|
||||
return importMapping.get(name);
|
||||
}
|
||||
|
||||
return DEFAULT_IMPORT_PREFIX + camelize(toModelName(name), true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toModelImport(String name) {
|
||||
return modelPackage() + "/" + toModelFilename(name);
|
||||
if (importMapping.containsKey(name)) {
|
||||
return importMapping.get(name);
|
||||
}
|
||||
|
||||
return modelPackage() + "/" + camelize(toModelName(name), true);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
{{#models}}
|
||||
{{#model}}
|
||||
{{#tsImports}}
|
||||
import { {{classname}} } from './{{filename}}';
|
||||
import { {{classname}} } from '{{filename}}';
|
||||
{{/tsImports}}
|
||||
|
||||
{{#description}}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{{#models}}
|
||||
{{#model}}
|
||||
export * from './{{{ classFilename }}}';
|
||||
export * from '{{{ classFilename }}}';
|
||||
{{/model}}
|
||||
{{/models}}
|
||||
|
||||
@@ -8,7 +8,7 @@ import localVarRequest = require('request');
|
||||
|
||||
{{#models}}
|
||||
{{#model}}
|
||||
import { {{classname}} } from './{{{ classFilename }}}';
|
||||
import { {{classname}} } from '{{{ classFilename }}}';
|
||||
{{/model}}
|
||||
{{/models}}
|
||||
|
||||
|
||||
@@ -4,68 +4,131 @@ import io.swagger.v3.oas.models.OpenAPI;
|
||||
import org.openapitools.codegen.TestUtils;
|
||||
import org.openapitools.codegen.languages.TypeScriptNodeClientCodegen;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.BeforeMethod;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
public class TypeScriptNodeClientCodegenTest {
|
||||
|
||||
private TypeScriptNodeClientCodegen codegen;
|
||||
|
||||
@BeforeMethod
|
||||
public void setUp() {
|
||||
codegen = new TypeScriptNodeClientCodegen();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void convertVarName() throws Exception {
|
||||
TypeScriptNodeClientCodegen codegen = new TypeScriptNodeClientCodegen();
|
||||
Assert.assertEquals(codegen.toVarName("name"), "name");
|
||||
Assert.assertEquals(codegen.toVarName("$name"), "$name");
|
||||
Assert.assertEquals(codegen.toVarName("nam$$e"), "nam$$e");
|
||||
Assert.assertEquals(codegen.toVarName("user-name"), "userName");
|
||||
Assert.assertEquals(codegen.toVarName("user_name"), "userName");
|
||||
Assert.assertEquals(codegen.toVarName("user|name"), "userName");
|
||||
Assert.assertEquals(codegen.toVarName("user !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~name"), "user$Name");
|
||||
}
|
||||
Assert.assertEquals(codegen.toVarName("name"), "name");
|
||||
Assert.assertEquals(codegen.toVarName("$name"), "$name");
|
||||
Assert.assertEquals(codegen.toVarName("nam$$e"), "nam$$e");
|
||||
Assert.assertEquals(codegen.toVarName("user-name"), "userName");
|
||||
Assert.assertEquals(codegen.toVarName("user_name"), "userName");
|
||||
Assert.assertEquals(codegen.toVarName("user|name"), "userName");
|
||||
Assert.assertEquals(codegen.toVarName("user !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~name"), "user$Name");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSnapshotVersion() {
|
||||
OpenAPI api = TestUtils.createOpenAPI();
|
||||
TypeScriptNodeClientCodegen codegen = new TypeScriptNodeClientCodegen();
|
||||
@Test
|
||||
public void testSnapshotVersion() {
|
||||
OpenAPI api = TestUtils.createOpenAPI();
|
||||
|
||||
codegen.additionalProperties().put("npmName", "@openapi/typescript-angular-petstore");
|
||||
codegen.additionalProperties().put("snapshot", true);
|
||||
codegen.additionalProperties().put("npmVersion", "1.0.0-SNAPSHOT");
|
||||
codegen.processOpts();
|
||||
codegen.preprocessOpenAPI(api);
|
||||
codegen.additionalProperties().put("npmName", "@openapi/typescript-angular-petstore");
|
||||
codegen.additionalProperties().put("snapshot", true);
|
||||
codegen.additionalProperties().put("npmVersion", "1.0.0-SNAPSHOT");
|
||||
codegen.processOpts();
|
||||
codegen.preprocessOpenAPI(api);
|
||||
|
||||
Assert.assertTrue(codegen.getNpmVersion().matches("^1.0.0-SNAPSHOT.[0-9]{12}$"));
|
||||
Assert.assertTrue(codegen.getNpmVersion().matches("^1.0.0-SNAPSHOT.[0-9]{12}$"));
|
||||
|
||||
codegen = new TypeScriptNodeClientCodegen();
|
||||
codegen.additionalProperties().put("npmName", "@openapi/typescript-angular-petstore");
|
||||
codegen.additionalProperties().put("snapshot", true);
|
||||
codegen.additionalProperties().put("npmVersion", "3.0.0-M1");
|
||||
codegen.processOpts();
|
||||
codegen.preprocessOpenAPI(api);
|
||||
codegen = new TypeScriptNodeClientCodegen();
|
||||
codegen.additionalProperties().put("npmName", "@openapi/typescript-angular-petstore");
|
||||
codegen.additionalProperties().put("snapshot", true);
|
||||
codegen.additionalProperties().put("npmVersion", "3.0.0-M1");
|
||||
codegen.processOpts();
|
||||
codegen.preprocessOpenAPI(api);
|
||||
|
||||
Assert.assertTrue(codegen.getNpmVersion().matches("^3.0.0-M1-SNAPSHOT.[0-9]{12}$"));
|
||||
Assert.assertTrue(codegen.getNpmVersion().matches("^3.0.0-M1-SNAPSHOT.[0-9]{12}$"));
|
||||
}
|
||||
|
||||
}
|
||||
@Test
|
||||
public void testWithoutSnapshotVersion() {
|
||||
OpenAPI api = TestUtils.createOpenAPI();
|
||||
|
||||
@Test
|
||||
public void testWithoutSnapshotVersion() {
|
||||
OpenAPI api = TestUtils.createOpenAPI();
|
||||
TypeScriptNodeClientCodegen codegen = new TypeScriptNodeClientCodegen();
|
||||
codegen.additionalProperties().put("npmName", "@openapi/typescript-angular-petstore");
|
||||
codegen.additionalProperties().put("snapshot", false);
|
||||
codegen.additionalProperties().put("npmVersion", "1.0.0-SNAPSHOT");
|
||||
codegen.processOpts();
|
||||
codegen.preprocessOpenAPI(api);
|
||||
|
||||
codegen.additionalProperties().put("npmName", "@openapi/typescript-angular-petstore");
|
||||
codegen.additionalProperties().put("snapshot", false);
|
||||
codegen.additionalProperties().put("npmVersion", "1.0.0-SNAPSHOT");
|
||||
codegen.processOpts();
|
||||
codegen.preprocessOpenAPI(api);
|
||||
Assert.assertTrue(codegen.getNpmVersion().matches("^1.0.0-SNAPSHOT$"));
|
||||
|
||||
Assert.assertTrue(codegen.getNpmVersion().matches("^1.0.0-SNAPSHOT$"));
|
||||
codegen = new TypeScriptNodeClientCodegen();
|
||||
codegen.additionalProperties().put("npmName", "@openapi/typescript-angular-petstore");
|
||||
codegen.additionalProperties().put("snapshot", false);
|
||||
codegen.additionalProperties().put("npmVersion", "3.0.0-M1");
|
||||
codegen.processOpts();
|
||||
codegen.preprocessOpenAPI(api);
|
||||
|
||||
codegen = new TypeScriptNodeClientCodegen();
|
||||
codegen.additionalProperties().put("npmName", "@openapi/typescript-angular-petstore");
|
||||
codegen.additionalProperties().put("snapshot", false);
|
||||
codegen.additionalProperties().put("npmVersion", "3.0.0-M1");
|
||||
codegen.processOpts();
|
||||
codegen.preprocessOpenAPI(api);
|
||||
Assert.assertTrue(codegen.getNpmVersion().matches("^3.0.0-M1$"));
|
||||
}
|
||||
|
||||
Assert.assertTrue(codegen.getNpmVersion().matches("^3.0.0-M1$"));
|
||||
@Test(description = "prepend model filename with ./ by default")
|
||||
public void defaultModelFilenameTest() {
|
||||
Assert.assertEquals(codegen.toModelFilename("ApiResponse"), "./apiResponse");
|
||||
}
|
||||
|
||||
}
|
||||
@Test(description = "use mapped name for model filename when provided")
|
||||
public void modelFilenameWithMappingTest() {
|
||||
final String mappedName = "@namespace/dir/response";
|
||||
codegen.importMapping().put("ApiResponse", mappedName);
|
||||
|
||||
Assert.assertEquals(codegen.toModelFilename("ApiResponse"), mappedName);
|
||||
}
|
||||
|
||||
@Test(description = "prepend model import with ./ by default")
|
||||
public void defaultModelImportTest() {
|
||||
Assert.assertEquals(codegen.toModelImport("ApiResponse"), "model/apiResponse");
|
||||
}
|
||||
|
||||
@Test(description = "use mapped name for model import when provided")
|
||||
public void modelImportWithMappingTest() {
|
||||
final String mappedName = "@namespace/dir/response";
|
||||
codegen.importMapping().put("ApiResponse", mappedName);
|
||||
|
||||
Assert.assertEquals(codegen.toModelImport("ApiResponse"), mappedName);
|
||||
}
|
||||
|
||||
@Test(description = "append api suffix to default api filename")
|
||||
public void emptyApiFilenameTest() {
|
||||
Assert.assertEquals(codegen.toApiFilename(""), "defaultApi");
|
||||
}
|
||||
|
||||
@Test(description = "appends api suffix to api filename")
|
||||
public void defaultApiFilenameTest() {
|
||||
Assert.assertEquals(codegen.toApiFilename("Category"), "categoryApi");
|
||||
}
|
||||
|
||||
@Test(description = "appends api suffix to mapped api filename")
|
||||
public void mappedApiFilenameTest() {
|
||||
final String mappedName = "@namespace/dir/category";
|
||||
codegen.importMapping().put("Category", mappedName);
|
||||
Assert.assertEquals(codegen.toApiFilename("Category"), mappedName);
|
||||
}
|
||||
|
||||
@Test(description = "append api suffix to default api import")
|
||||
public void emptyApiImportTest() {
|
||||
Assert.assertEquals(codegen.toApiImport(""), "api/defaultApi");
|
||||
}
|
||||
|
||||
@Test(description = "appends api suffix to api import")
|
||||
public void defaultApiImportTest() {
|
||||
Assert.assertEquals(codegen.toApiImport("Category"), "api/categoryApi");
|
||||
}
|
||||
|
||||
@Test(description = "appends api suffix to mapped api filename")
|
||||
public void mappedApiImportTest() {
|
||||
final String mappedName = "@namespace/dir/category";
|
||||
codegen.importMapping().put("Category", mappedName);
|
||||
Assert.assertEquals(codegen.toApiImport("Category"), mappedName);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -205,4 +205,30 @@ public class TypeScriptNodeModelTest {
|
||||
Assert.assertEquals(cm.imports.size(), 1);
|
||||
Assert.assertEquals(Sets.intersection(cm.imports, Sets.newHashSet("Children")).size(), 1);
|
||||
}
|
||||
|
||||
@Test(description = "prepend imports with ./ by default")
|
||||
public void defaultFromModelTest() {
|
||||
final OpenAPI openAPI = TestUtils.parseSpec("src/test/resources/3_0/petstore.yaml");
|
||||
final DefaultCodegen codegen = new TypeScriptNodeClientCodegen();
|
||||
codegen.setOpenAPI(openAPI);
|
||||
final Schema categorySchema = openAPI.getComponents().getSchemas().get("ApiResponse");
|
||||
final CodegenModel cm = codegen.fromModel("ApiResponse", categorySchema);
|
||||
|
||||
Assert.assertEquals(cm.name, "ApiResponse");
|
||||
Assert.assertEquals(cm.classFilename, "./apiResponse");
|
||||
}
|
||||
|
||||
@Test(description = "use mapped imports for type")
|
||||
public void mappedFromModelTest() {
|
||||
final OpenAPI openAPI = TestUtils.parseSpec("src/test/resources/3_0/petstore.yaml");
|
||||
final DefaultCodegen codegen = new TypeScriptNodeClientCodegen();
|
||||
final String mappedName = "@namespace/dir/response";
|
||||
codegen.importMapping().put("ApiResponse", mappedName);
|
||||
codegen.setOpenAPI(openAPI);
|
||||
final Schema categorySchema = openAPI.getComponents().getSchemas().get("ApiResponse");
|
||||
final CodegenModel cm = codegen.fromModel("ApiResponse", categorySchema);
|
||||
|
||||
Assert.assertEquals(cm.name, "ApiResponse");
|
||||
Assert.assertEquals(cm.classFilename, mappedName);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user