diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptClientCodegen.java index db1e781f2c39..736245f38945 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptClientCodegen.java @@ -130,6 +130,7 @@ public class TypeScriptClientCodegen extends DefaultCodegen implements CodegenCo supportingFiles.add(new SupportingFile("auth" + File.separator + "auth.mustache", "auth", "auth.ts")); supportingFiles.add(new SupportingFile("model/models_all.mustache", "models", "all.ts")); + // TODO: add supporting files depending on cli parameter e.g. fetch vs angular supportingFiles.add(new SupportingFile("generators/PromiseAPI.mustache", "PromiseAPI.ts")); supportingFiles.add(new SupportingFile("generators/fetch/index.mustache", "index.ts")); @@ -137,7 +138,7 @@ public class TypeScriptClientCodegen extends DefaultCodegen implements CodegenCo // models // TODO: properly set model and api packages this.setModelPackage(""); - supportingFiles.add(new SupportingFile("api/ObjectSerializer.mustache", "models", "ObjectSerializer.ts")); + supportingFiles.add(new SupportingFile("model/ObjectSerializer.mustache", "models", "ObjectSerializer.ts")); modelTemplateFiles.put("model/model.mustache", ".ts"); // api diff --git a/modules/openapi-generator/src/main/resources/typescript/generators/PromiseAPI.mustache b/modules/openapi-generator/src/main/resources/typescript/generators/PromiseAPI.mustache index 5198b5d89c6f..4922915ba5c9 100644 --- a/modules/openapi-generator/src/main/resources/typescript/generators/PromiseAPI.mustache +++ b/modules/openapi-generator/src/main/resources/typescript/generators/PromiseAPI.mustache @@ -26,7 +26,7 @@ export class {{classname}} { const requestContext = this.requestFactory.{{nickname}}({{#allParams}}{{paramName}}, {{/allParams}}options); // build promise chain - let middlewarePrePromise =Promise.resolve(requestContext); + let middlewarePrePromise = Promise.resolve(requestContext); for (let middleware of this.configuration.middleware) { middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); } diff --git a/modules/openapi-generator/src/main/resources/typescript/api/ObjectSerializer.mustache b/modules/openapi-generator/src/main/resources/typescript/model/ObjectSerializer.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/typescript/api/ObjectSerializer.mustache rename to modules/openapi-generator/src/main/resources/typescript/model/ObjectSerializer.mustache diff --git a/samples/client/petstore/typescript/builds/default/PromiseAPI.ts b/samples/client/petstore/typescript/builds/default/PromiseAPI.ts index ffce3d9bf4ed..d6888f214b54 100644 --- a/samples/client/petstore/typescript/builds/default/PromiseAPI.ts +++ b/samples/client/petstore/typescript/builds/default/PromiseAPI.ts @@ -23,7 +23,7 @@ export class PetApi { const requestContext = this.requestFactory.addPet(pet, options); // build promise chain - let middlewarePrePromise =Promise.resolve(requestContext); + let middlewarePrePromise = Promise.resolve(requestContext); for (let middleware of this.configuration.middleware) { middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); } @@ -42,7 +42,7 @@ export class PetApi { const requestContext = this.requestFactory.deletePet(petId, apiKey, options); // build promise chain - let middlewarePrePromise =Promise.resolve(requestContext); + let middlewarePrePromise = Promise.resolve(requestContext); for (let middleware of this.configuration.middleware) { middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); } @@ -61,7 +61,7 @@ export class PetApi { const requestContext = this.requestFactory.findPetsByStatus(status, options); // build promise chain - let middlewarePrePromise =Promise.resolve(requestContext); + let middlewarePrePromise = Promise.resolve(requestContext); for (let middleware of this.configuration.middleware) { middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); } @@ -80,7 +80,7 @@ export class PetApi { const requestContext = this.requestFactory.findPetsByTags(tags, options); // build promise chain - let middlewarePrePromise =Promise.resolve(requestContext); + let middlewarePrePromise = Promise.resolve(requestContext); for (let middleware of this.configuration.middleware) { middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); } @@ -99,7 +99,7 @@ export class PetApi { const requestContext = this.requestFactory.getPetById(petId, options); // build promise chain - let middlewarePrePromise =Promise.resolve(requestContext); + let middlewarePrePromise = Promise.resolve(requestContext); for (let middleware of this.configuration.middleware) { middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); } @@ -118,7 +118,7 @@ export class PetApi { const requestContext = this.requestFactory.updatePet(pet, options); // build promise chain - let middlewarePrePromise =Promise.resolve(requestContext); + let middlewarePrePromise = Promise.resolve(requestContext); for (let middleware of this.configuration.middleware) { middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); } @@ -137,7 +137,7 @@ export class PetApi { const requestContext = this.requestFactory.updatePetWithForm(petId, name, status, options); // build promise chain - let middlewarePrePromise =Promise.resolve(requestContext); + let middlewarePrePromise = Promise.resolve(requestContext); for (let middleware of this.configuration.middleware) { middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); } @@ -156,7 +156,7 @@ export class PetApi { const requestContext = this.requestFactory.uploadFile(petId, additionalMetadata, file, options); // build promise chain - let middlewarePrePromise =Promise.resolve(requestContext); + let middlewarePrePromise = Promise.resolve(requestContext); for (let middleware of this.configuration.middleware) { middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); } @@ -191,7 +191,7 @@ export class StoreApi { const requestContext = this.requestFactory.deleteOrder(orderId, options); // build promise chain - let middlewarePrePromise =Promise.resolve(requestContext); + let middlewarePrePromise = Promise.resolve(requestContext); for (let middleware of this.configuration.middleware) { middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); } @@ -210,7 +210,7 @@ export class StoreApi { const requestContext = this.requestFactory.getInventory(options); // build promise chain - let middlewarePrePromise =Promise.resolve(requestContext); + let middlewarePrePromise = Promise.resolve(requestContext); for (let middleware of this.configuration.middleware) { middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); } @@ -229,7 +229,7 @@ export class StoreApi { const requestContext = this.requestFactory.getOrderById(orderId, options); // build promise chain - let middlewarePrePromise =Promise.resolve(requestContext); + let middlewarePrePromise = Promise.resolve(requestContext); for (let middleware of this.configuration.middleware) { middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); } @@ -248,7 +248,7 @@ export class StoreApi { const requestContext = this.requestFactory.placeOrder(order, options); // build promise chain - let middlewarePrePromise =Promise.resolve(requestContext); + let middlewarePrePromise = Promise.resolve(requestContext); for (let middleware of this.configuration.middleware) { middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); } @@ -283,7 +283,7 @@ export class UserApi { const requestContext = this.requestFactory.createUser(user, options); // build promise chain - let middlewarePrePromise =Promise.resolve(requestContext); + let middlewarePrePromise = Promise.resolve(requestContext); for (let middleware of this.configuration.middleware) { middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); } @@ -302,7 +302,7 @@ export class UserApi { const requestContext = this.requestFactory.createUsersWithArrayInput(user, options); // build promise chain - let middlewarePrePromise =Promise.resolve(requestContext); + let middlewarePrePromise = Promise.resolve(requestContext); for (let middleware of this.configuration.middleware) { middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); } @@ -321,7 +321,7 @@ export class UserApi { const requestContext = this.requestFactory.createUsersWithListInput(user, options); // build promise chain - let middlewarePrePromise =Promise.resolve(requestContext); + let middlewarePrePromise = Promise.resolve(requestContext); for (let middleware of this.configuration.middleware) { middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); } @@ -340,7 +340,7 @@ export class UserApi { const requestContext = this.requestFactory.deleteUser(username, options); // build promise chain - let middlewarePrePromise =Promise.resolve(requestContext); + let middlewarePrePromise = Promise.resolve(requestContext); for (let middleware of this.configuration.middleware) { middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); } @@ -359,7 +359,7 @@ export class UserApi { const requestContext = this.requestFactory.getUserByName(username, options); // build promise chain - let middlewarePrePromise =Promise.resolve(requestContext); + let middlewarePrePromise = Promise.resolve(requestContext); for (let middleware of this.configuration.middleware) { middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); } @@ -378,7 +378,7 @@ export class UserApi { const requestContext = this.requestFactory.loginUser(username, password, options); // build promise chain - let middlewarePrePromise =Promise.resolve(requestContext); + let middlewarePrePromise = Promise.resolve(requestContext); for (let middleware of this.configuration.middleware) { middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); } @@ -397,7 +397,7 @@ export class UserApi { const requestContext = this.requestFactory.logoutUser(options); // build promise chain - let middlewarePrePromise =Promise.resolve(requestContext); + let middlewarePrePromise = Promise.resolve(requestContext); for (let middleware of this.configuration.middleware) { middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); } @@ -416,7 +416,7 @@ export class UserApi { const requestContext = this.requestFactory.updateUser(username, user, options); // build promise chain - let middlewarePrePromise =Promise.resolve(requestContext); + let middlewarePrePromise = Promise.resolve(requestContext); for (let middleware of this.configuration.middleware) { middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); } diff --git a/samples/client/petstore/typescript/tests/default/dist/test/api/PetApi.test.js b/samples/client/petstore/typescript/tests/default/dist/test/api/PetApi.test.js new file mode 100644 index 000000000000..41e07205f980 --- /dev/null +++ b/samples/client/petstore/typescript/tests/default/dist/test/api/PetApi.test.js @@ -0,0 +1,25 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var ts_petstore_client_1 = require("ts-petstore-client"); +var chai_1 = require("chai"); +var configuration = new ts_petstore_client_1.Configuration(); +var petApi = new ts_petstore_client_1.PetApi(configuration); +describe("PetApi", function () { + it("addPet", function (done) { + var pet = new ts_petstore_client_1.Pet(); + pet.id = Math.floor(Math.random() * 100000); + pet.name = "PetName"; + pet.photoUrls = []; + pet.status = ts_petstore_client_1.Pet.StatusEnum.Available; + pet.tags = []; + pet.category = undefined; + petApi.addPet(pet).then(function () { + return petApi.getPetById(pet.id); + }).then(function (createdPet) { + chai_1.expect(createdPet).to.deep.equal(pet); + done(); + }).catch(function (err) { + done(err); + }); + }); +}); diff --git a/samples/client/petstore/typescript/tests/default/dist/test/models/ObjectSerializer.test.js b/samples/client/petstore/typescript/tests/default/dist/test/models/ObjectSerializer.test.js new file mode 100644 index 000000000000..94eeb6bb207c --- /dev/null +++ b/samples/client/petstore/typescript/tests/default/dist/test/models/ObjectSerializer.test.js @@ -0,0 +1,193 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var rewire = require("rewire"); +var chai_1 = require("chai"); +var ts_petstore_client_1 = require("ts-petstore-client"); +var objectSerializerFile = rewire("../../node_modules/ts-petstore-client/dist/models/ObjectSerializer.js"); +var ObjectSerializer = objectSerializerFile.__get__("ObjectSerializer"); +describe("ObjectSerializer", function () { + describe("Serialize", function () { + it("String", function () { + var input = "test string"; + chai_1.expect(ObjectSerializer.serialize(input, "string")).to.equal("test string"); + }); + it("Number", function () { + var input = 1337; + chai_1.expect(ObjectSerializer.serialize(input, "number")).to.equal(1337); + }); + it("String Array", function () { + var input = ["a", "b", "c"]; + chai_1.expect(ObjectSerializer.serialize(input, "Array")).to.deep.equal(["a", "b", "c"]); + }); + it("Number Array", function () { + var input = [1337, 42, 0]; + chai_1.expect(ObjectSerializer.serialize(input, "Array")).to.deep.equal([1337, 42, 0]); + }); + it("Date", function () { + var input = new Date(1543777609696); + chai_1.expect(ObjectSerializer.serialize(input, "Date")).to.equal(input.toISOString()); + }); + it("Object", function () { + var input = { "a": "test", "b": { "test": 5 } }; + chai_1.expect(ObjectSerializer.serialize(input, "Object")).to.deep.equal({ a: "test", "b": { "test": 5 } }); + }); + it("Class", function () { + var input = new ts_petstore_client_1.Category(); + input.id = 4; + input.name = "Test"; + chai_1.expect(ObjectSerializer.serialize(input, "Category")).to.deep.equal({ "id": input.id, "name": input.name }); + }); + it("Enum", function () { + var input = ts_petstore_client_1.Pet.StatusEnum.Available; + chai_1.expect(ObjectSerializer.serialize(input, "Pet.StatusEnum")).to.equal("available"); + }); + it("Complex Class", function () { + var tags = []; + var tagResult = []; + for (var i = 0; i < 2; i++) { + var tag = new ts_petstore_client_1.Tag(); + tag.id = i; + tag.name = "Tag" + i; + tags.push(tag); + tagResult.push({ + "id": tag.id, + "name": tag.name + }); + } + var category = new ts_petstore_client_1.Category(); + category.id = 4; + category.name = "TestCat"; + var pet = new ts_petstore_client_1.Pet(); + pet.id = 145; + pet.category = category; + pet.name = "PetName"; + pet.photoUrls = ["url", "other url"]; + pet.status = ts_petstore_client_1.Pet.StatusEnum.Available; + pet.tags = tags; + chai_1.expect(ObjectSerializer.serialize(pet, "Pet")).to.deep.equal({ + "id": pet.id, + "name": pet.name, + "category": { + "id": category.id, + "name": category.name + }, + "photoUrls": ["url", "other url"], + "status": "available", + "tags": tagResult + }); + }); + it("Array of Class", function () { + var categories = []; + var result = []; + for (var i = 0; i < 2; i++) { + var category = new ts_petstore_client_1.Category(); + category.id = i; + category.name = "Cat" + i; + categories.push(category); + result.push({ + "id": category.id, + "name": category.name + }); + } + chai_1.expect(ObjectSerializer.serialize(categories, "Array")).to.deep.equal(result); + }); + }); + describe("Deserialize", function () { + it("String", function () { + var input = "test string"; + chai_1.expect(ObjectSerializer.deserialize(input, "string")).to.equal("test string"); + }); + it("Number", function () { + var input = 1337; + chai_1.expect(ObjectSerializer.deserialize(input, "number")).to.equal(1337); + }); + it("String Array", function () { + var input = ["a", "b", "c"]; + chai_1.expect(ObjectSerializer.deserialize(input, "Array")).to.deep.equal(["a", "b", "c"]); + }); + it("Number Array", function () { + var input = [1337, 42, 0]; + chai_1.expect(ObjectSerializer.deserialize(input, "Array")).to.deep.equal([1337, 42, 0]); + }); + it("Date", function () { + var input = new Date(1543777609696); + chai_1.expect(ObjectSerializer.deserialize(input.toISOString(), "Date").getTime()).to.equal(input.getTime()); + }); + it("Object", function () { + var input = { "a": "test", "b": { "test": 5 } }; + chai_1.expect(ObjectSerializer.deserialize(input, "Object")).to.deep.equal({ a: "test", "b": { "test": 5 } }); + }); + it("Class", function () { + var input = new ts_petstore_client_1.Category(); + input.id = 4; + input.name = "Test"; + var deserialized = ObjectSerializer.deserialize({ "id": 4, "name": "Test" }, "Category"); + chai_1.expect(deserialized.constructor.name).to.equal("Category"); + chai_1.expect(deserialized).to.deep.equal(input); + }); + it("Enum", function () { + var input = ts_petstore_client_1.Pet.StatusEnum.Available; + chai_1.expect(ObjectSerializer.deserialize("available", "Pet.StatusEnum")).to.equal(input); + }); + it("Complex Class", function () { + var tags = []; + var tagResult = []; + for (var i = 0; i < 2; i++) { + var tag = new ts_petstore_client_1.Tag(); + tag.id = i; + tag.name = "Tag" + i; + tags.push(tag); + tagResult.push({ + "id": tag.id, + "name": tag.name + }); + } + var category = new ts_petstore_client_1.Category(); + category.id = 4; + category.name = "TestCat"; + var pet = new ts_petstore_client_1.Pet(); + pet.id = 145; + pet.category = category; + pet.name = "PetName"; + pet.photoUrls = ["url", "other url"]; + pet.status = ts_petstore_client_1.Pet.StatusEnum.Available; + pet.tags = tags; + var deserialized = ObjectSerializer.deserialize({ + "id": pet.id, + "name": pet.name, + "category": { + "id": category.id, + "name": category.name + }, + "photoUrls": ["url", "other url"], + "status": "available", + "tags": tagResult + }, "Pet"); + chai_1.expect(deserialized.constructor.name).to.equal("Pet"); + chai_1.expect(deserialized.category.constructor.name).to.equal("Category"); + for (var i = 0; i < deserialized.tags.length; i++) { + chai_1.expect(deserialized.tags[i].constructor.name).to.equal("Tag"); + } + chai_1.expect(deserialized).to.deep.equal(pet); + }); + it("Array of Class", function () { + var categories = []; + var result = []; + for (var i = 0; i < 2; i++) { + var category = new ts_petstore_client_1.Category(); + category.id = i; + category.name = "Cat" + i; + categories.push(category); + result.push({ + "id": category.id, + "name": category.name + }); + } + var deserialized = ObjectSerializer.deserialize(result, "Array"); + for (var i = 0; i < categories.length; i++) { + chai_1.expect(deserialized[i].constructor.name).to.equal("Category"); + } + chai_1.expect(deserialized).to.deep.equal(categories); + }); + }); +}); diff --git a/samples/client/petstore/typescript/tests/default/test/api/PetApi.test.ts b/samples/client/petstore/typescript/tests/default/test/api/PetApi.test.ts new file mode 100644 index 000000000000..d243f18abf15 --- /dev/null +++ b/samples/client/petstore/typescript/tests/default/test/api/PetApi.test.ts @@ -0,0 +1,26 @@ +import {PetApi, Configuration, Pet} from 'ts-petstore-client' +import { expect, assert } from "chai"; + +const configuration = new Configuration() +const petApi = new PetApi(configuration) + +describe("PetApi", () =>{ + it("addPet", (done) => { + const pet = new Pet() + pet.id = Math.floor(Math.random() * 100000) + pet.name = "PetName" + pet.photoUrls = [] + pet.status = Pet.StatusEnum.Available + pet.tags = [] + pet.category = undefined + + petApi.addPet(pet).then(() => { + return petApi.getPetById(pet.id) + }).then((createdPet) => { + expect(createdPet).to.deep.equal(pet); + done() + }).catch((err) => { + done(err) + }) + }) +}) \ No newline at end of file diff --git a/samples/client/petstore/typescript/tests/default/test/models/ObjectSerializer.test.ts b/samples/client/petstore/typescript/tests/default/test/models/ObjectSerializer.test.ts index 5ba6e3f94422..914f6fdea287 100644 --- a/samples/client/petstore/typescript/tests/default/test/models/ObjectSerializer.test.ts +++ b/samples/client/petstore/typescript/tests/default/test/models/ObjectSerializer.test.ts @@ -6,7 +6,6 @@ import {Pet, Category, Tag} from "ts-petstore-client" const objectSerializerFile = rewire("../../node_modules/ts-petstore-client/dist/models/ObjectSerializer.js") const ObjectSerializer = objectSerializerFile.__get__("ObjectSerializer") -//console.log(ObjectSerializer) describe("ObjectSerializer", () => {