UNPKG

swagger-express-ts

Version:
1 lines 59.2 kB
{"version":3,"sources":["../../lib/swagger-express-ts-lib/src/swagger.service.spec.ts"],"names":[],"mappings":"","file":"swagger.service.spec.d.ts","sourcesContent":["import { SwaggerService } from './swagger.service';\nimport * as chai from 'chai';\nimport {\n ISwaggerExternalDocs,\n ISwaggerInfo,\n ISwaggerDefinition,\n ISwaggerDefinitionProperty,\n ISwaggerPath,\n} from './i-swagger';\nimport { IApiPathArgs } from './api-path.decorator';\nimport { IApiOperationGetArgs } from './api-operation-get.decorator';\nimport { IApiOperationPostArgs } from './api-operation-post.decorator';\nimport { IApiOperationPutArgs } from './api-operation-put.decorator';\nimport { IApiOperationPatchArgs } from './api-operation-patch.decorator';\nimport { IApiOperationDeleteArgs } from './api-operation-delete.decorator';\nimport { SwaggerDefinitionConstant } from './swagger-definition.constant';\nimport { ISwaggerBuildDefinitionModel } from './swagger.builder';\nconst expect = chai.expect;\n\ndescribe('SwaggerService', () => {\n beforeEach(() => {\n SwaggerService.getInstance().resetData();\n console.log('reset');\n });\n\n describe('setBasePath', () => {\n it('expect basePath default \"/\"', () => {\n expect(SwaggerService.getInstance().getData().basePath).to.equal(\n '/'\n );\n });\n\n it('expect basePath exist when it setted', () => {\n const basePath = '/basepath';\n\n SwaggerService.getInstance().setBasePath(basePath);\n\n expect(SwaggerService.getInstance().getData().basePath).to.equal(\n basePath\n );\n });\n });\n\n describe('setOpenapi', () => {\n it('expect default openapi when it not setted', () => {\n expect(SwaggerService.getInstance().getData().openapi).to.not.exist;\n });\n\n it('expect openapi exist when it setted', () => {\n const openapi = 'openapi';\n\n SwaggerService.getInstance().setOpenapi(openapi);\n\n expect(SwaggerService.getInstance().getData().openapi).to.equal(\n openapi\n );\n });\n });\n\n describe('setInfo', () => {\n it('expect default info', () => {\n expect(SwaggerService.getInstance().getData().info.title).to.equal(\n ''\n );\n expect(\n SwaggerService.getInstance().getData().info.version\n ).to.equal('');\n });\n\n it('expect info when it defined', () => {\n const info: ISwaggerInfo = {\n title: 'Title',\n version: '1.0.1',\n };\n\n SwaggerService.getInstance().setInfo(info);\n\n expect(SwaggerService.getInstance().getData().info.title).to.equal(\n info.title\n );\n expect(\n SwaggerService.getInstance().getData().info.version\n ).to.equal(info.version);\n });\n });\n\n describe('setSchemes', () => {\n it('expect default schemes when it not defined', () => {\n expect(SwaggerService.getInstance().getData().schemes)\n .to.have.lengthOf(1)\n .to.have.members([SwaggerDefinitionConstant.Scheme.HTTP]);\n });\n\n it('expect schemes when it defined', () => {\n const schemes: string[] = [\n SwaggerDefinitionConstant.Scheme.HTTP,\n SwaggerDefinitionConstant.Scheme.HTTPS,\n ];\n\n SwaggerService.getInstance().setSchemes(schemes);\n\n expect(\n SwaggerService.getInstance().getData().schemes\n ).to.deep.equal(schemes);\n });\n });\n\n describe('setExternalDocs', () => {\n it('expect default externalDocs when it not defined', () => {\n expect(SwaggerService.getInstance().getData().externalDocs).to.not\n .exist;\n });\n\n it('expect externalDocs when it defined', () => {\n const externalDocs: ISwaggerExternalDocs = {\n url: 'Mon url',\n };\n\n SwaggerService.getInstance().setExternalDocs(externalDocs);\n\n expect(\n SwaggerService.getInstance().getData().externalDocs.url\n ).to.equal(externalDocs.url);\n });\n });\n\n describe('setProduces', () => {\n it('expect default produces when it not defined', () => {\n expect(SwaggerService.getInstance().getData().produces)\n .to.have.lengthOf(1)\n .to.have.members([SwaggerDefinitionConstant.Produce.JSON]);\n });\n\n it('expect produces when it defined', () => {\n const produces: string[] = [\n SwaggerDefinitionConstant.Produce.JSON,\n SwaggerDefinitionConstant.Produce.XML,\n ];\n\n SwaggerService.getInstance().setProduces(produces);\n\n expect(\n SwaggerService.getInstance().getData().produces\n ).to.deep.equal(produces);\n });\n });\n\n describe('setConsumes', () => {\n it('expect default consumes when it not defined', () => {\n expect(SwaggerService.getInstance().getData().consumes)\n .to.have.lengthOf(1)\n .to.have.members([SwaggerDefinitionConstant.Consume.JSON]);\n });\n\n it('expect consumes when it defined', () => {\n const consumes: string[] = [\n SwaggerDefinitionConstant.Consume.JSON,\n SwaggerDefinitionConstant.Consume.XML,\n ];\n\n SwaggerService.getInstance().setConsumes(consumes);\n\n expect(\n SwaggerService.getInstance().getData().consumes\n ).to.deep.equal(consumes);\n });\n });\n\n describe('setHost', () => {\n it('expect host not exist when it not defined', () => {\n expect(SwaggerService.getInstance().getData().host).to.be.not.exist;\n });\n\n it('expect host when it defined', () => {\n const host: string = 'host';\n\n SwaggerService.getInstance().setHost(host);\n\n expect(SwaggerService.getInstance().getData().host).to.equal(host);\n });\n });\n\n describe('setDefinitions', () => {\n it('expect default definitions when they not defined', () => {\n expect(\n SwaggerService.getInstance().getData().definitions\n ).to.deep.equal({});\n });\n\n it('expect definitions when they defined', () => {\n const models: {\n [key: string]: ISwaggerBuildDefinitionModel;\n } = {\n Version: {\n properties: {\n id: {\n description: 'Id of Version',\n type:\n SwaggerDefinitionConstant.Model.Property.Type\n .STRING,\n example: ['123456789'],\n },\n },\n },\n };\n SwaggerService.getInstance().setDefinitions(models);\n\n expect(\n SwaggerService.getInstance().getData().definitions\n ).to.deep.equal({\n Version: {\n properties: {\n id: {\n description: 'Id of Version',\n example: ['123456789'],\n type: 'string',\n enum: undefined,\n format: undefined,\n },\n },\n required: [],\n type: 'object',\n },\n });\n });\n });\n\n describe('addPath', () => {\n it('expect new path', () => {\n const args: IApiPathArgs = {\n path: '/versions',\n name: 'version',\n };\n const target: any = {\n name: 'MyName',\n };\n\n SwaggerService.getInstance().addPath(args, target);\n\n SwaggerService.getInstance().buildSwagger();\n expect(SwaggerService.getInstance().getData().paths).to.deep.equal({\n '/versions': {},\n });\n });\n });\n\n describe('addOperationGet', () => {\n const pathArgs: IApiPathArgs = {\n path: '/versions',\n name: 'Version',\n };\n const pathTarget: any = {\n name: 'VersionsController',\n };\n const operationGetTarget: any = {\n constructor: {\n name: 'VersionsController',\n },\n };\n let propertyKey: string | symbol;\n let expectedPaths: { [key: string]: ISwaggerPath };\n\n beforeEach(() => {\n SwaggerService.getInstance().addPath(pathArgs, pathTarget);\n });\n\n describe('expect array', () => {\n beforeEach(() => {\n propertyKey = 'getVersions';\n expectedPaths = {\n '/versions': {\n get: {\n consumes: [SwaggerDefinitionConstant.Consume.JSON],\n operationId: 'getVersions',\n produces: [SwaggerDefinitionConstant.Produce.JSON],\n responses: {\n 200: {\n description: 'Success',\n schema: {\n items: {\n $ref: '#/definitions/Version',\n },\n type:\n SwaggerDefinitionConstant.Response\n .Type.ARRAY,\n },\n },\n },\n tags: ['Version'],\n },\n },\n };\n });\n\n it('expect default', () => {\n const operationGetArgs: IApiOperationGetArgs = {\n responses: {\n 200: {\n model: 'Version',\n type: SwaggerDefinitionConstant.Response.Type.ARRAY,\n },\n },\n };\n\n SwaggerService.getInstance().addOperationGet(\n operationGetArgs,\n operationGetTarget,\n propertyKey\n );\n\n SwaggerService.getInstance().buildSwagger();\n expect(\n SwaggerService.getInstance().getData().paths\n ).to.deep.equal(expectedPaths);\n });\n\n it('expect description', () => {\n const operationGetArgs: IApiOperationGetArgs = {\n description: 'get versions',\n responses: {\n 200: {\n model: 'Version',\n type: SwaggerDefinitionConstant.Response.Type.ARRAY,\n },\n },\n };\n\n SwaggerService.getInstance().addOperationGet(\n operationGetArgs,\n operationGetTarget,\n propertyKey\n );\n\n SwaggerService.getInstance().buildSwagger();\n expectedPaths['/versions'].get.description =\n operationGetArgs.description;\n expect(\n SwaggerService.getInstance().getData().paths\n ).to.deep.equal(expectedPaths);\n });\n\n it('expect summary', () => {\n const operationGetArgs: IApiOperationGetArgs = {\n summary: 'get versions',\n responses: {\n 200: {\n model: 'Version',\n type: SwaggerDefinitionConstant.Response.Type.ARRAY,\n },\n },\n };\n\n SwaggerService.getInstance().addOperationGet(\n operationGetArgs,\n operationGetTarget,\n propertyKey\n );\n\n SwaggerService.getInstance().buildSwagger();\n expectedPaths['/versions'].get.summary =\n operationGetArgs.summary;\n expect(\n SwaggerService.getInstance().getData().paths\n ).to.deep.equal(expectedPaths);\n });\n\n it('expect consumes', () => {\n const operationGetArgs: IApiOperationGetArgs = {\n consumes: [\n SwaggerDefinitionConstant.Consume.JSON,\n SwaggerDefinitionConstant.Consume.XML,\n ],\n responses: {\n 200: {\n model: 'Version',\n type: SwaggerDefinitionConstant.Response.Type.ARRAY,\n },\n },\n };\n\n SwaggerService.getInstance().addOperationGet(\n operationGetArgs,\n operationGetTarget,\n propertyKey\n );\n\n SwaggerService.getInstance().buildSwagger();\n expectedPaths['/versions'].get.consumes =\n operationGetArgs.consumes;\n expect(\n SwaggerService.getInstance().getData().paths\n ).to.deep.equal(expectedPaths);\n });\n\n it('expect produces', () => {\n const operationGetArgs: IApiOperationGetArgs = {\n produces: [\n SwaggerDefinitionConstant.Produce.JSON,\n SwaggerDefinitionConstant.Produce.XML,\n ],\n responses: {\n 200: {\n model: 'Version',\n type: SwaggerDefinitionConstant.Response.Type.ARRAY,\n },\n },\n };\n\n SwaggerService.getInstance().addOperationGet(\n operationGetArgs,\n operationGetTarget,\n propertyKey\n );\n\n SwaggerService.getInstance().buildSwagger();\n expectedPaths['/versions'].get.produces =\n operationGetArgs.produces;\n expect(\n SwaggerService.getInstance().getData().paths\n ).to.deep.equal(expectedPaths);\n });\n\n it('expect responses', () => {\n const operationGetArgs: IApiOperationGetArgs = {\n responses: {\n 200: {\n description: 'return version object',\n type: SwaggerDefinitionConstant.Response.Type.ARRAY,\n model: 'Version',\n },\n },\n };\n\n SwaggerService.getInstance().addOperationGet(\n operationGetArgs,\n operationGetTarget,\n propertyKey\n );\n\n SwaggerService.getInstance().buildSwagger();\n expectedPaths['/versions'].get.responses[200].description =\n operationGetArgs.responses[200].description;\n expect(\n SwaggerService.getInstance().getData().paths\n ).to.deep.equal(expectedPaths);\n });\n });\n\n describe('expect object', () => {\n beforeEach(() => {\n propertyKey = 'getVersion';\n expectedPaths = {\n '/versions/{id}': {\n get: {\n consumes: [SwaggerDefinitionConstant.Consume.JSON],\n operationId: 'getVersion',\n produces: [SwaggerDefinitionConstant.Produce.JSON],\n responses: {\n 200: {\n description: 'Success',\n schema: {\n $ref: '#/definitions/Version',\n },\n },\n },\n tags: ['Version'],\n },\n },\n };\n });\n\n it('expect default', () => {\n const operationGetArgs: IApiOperationGetArgs = {\n path: '/{id}',\n responses: {\n 200: { model: 'Version' },\n },\n };\n\n SwaggerService.getInstance().addOperationGet(\n operationGetArgs,\n operationGetTarget,\n propertyKey\n );\n\n SwaggerService.getInstance().buildSwagger();\n expect(\n SwaggerService.getInstance().getData().paths\n ).to.deep.equal(expectedPaths);\n });\n\n it('expect description', () => {\n const operationGetArgs: IApiOperationGetArgs = {\n path: '/{id}',\n description: 'get version',\n responses: {\n 200: { model: 'Version' },\n },\n };\n\n SwaggerService.getInstance().addOperationGet(\n operationGetArgs,\n operationGetTarget,\n propertyKey\n );\n\n SwaggerService.getInstance().buildSwagger();\n expectedPaths['/versions/{id}'].get.description =\n operationGetArgs.description;\n expect(\n SwaggerService.getInstance().getData().paths\n ).to.deep.equal(expectedPaths);\n });\n\n it('expect summary', () => {\n const operationGetArgs: IApiOperationGetArgs = {\n path: '/{id}',\n summary: 'get version',\n responses: {\n 200: { model: 'Version' },\n },\n };\n\n SwaggerService.getInstance().addOperationGet(\n operationGetArgs,\n operationGetTarget,\n propertyKey\n );\n\n SwaggerService.getInstance().buildSwagger();\n expectedPaths['/versions/{id}'].get.summary =\n operationGetArgs.summary;\n expect(\n SwaggerService.getInstance().getData().paths\n ).to.deep.equal(expectedPaths);\n });\n\n it('expect consumes', () => {\n const operationGetArgs: IApiOperationGetArgs = {\n path: '/{id}',\n consumes: [\n SwaggerDefinitionConstant.Consume.JSON,\n SwaggerDefinitionConstant.Consume.XML,\n ],\n responses: {\n 200: { model: 'Version' },\n },\n };\n\n SwaggerService.getInstance().addOperationGet(\n operationGetArgs,\n operationGetTarget,\n propertyKey\n );\n\n SwaggerService.getInstance().buildSwagger();\n expectedPaths['/versions/{id}'].get.consumes =\n operationGetArgs.consumes;\n expect(\n SwaggerService.getInstance().getData().paths\n ).to.deep.equal(expectedPaths);\n });\n\n it('expect produces', () => {\n const operationGetArgs: IApiOperationGetArgs = {\n path: '/{id}',\n produces: [\n SwaggerDefinitionConstant.Produce.JSON,\n SwaggerDefinitionConstant.Produce.XML,\n ],\n responses: {\n 200: { model: 'Version' },\n },\n };\n\n SwaggerService.getInstance().addOperationGet(\n operationGetArgs,\n operationGetTarget,\n propertyKey\n );\n\n SwaggerService.getInstance().buildSwagger();\n expectedPaths['/versions/{id}'].get.produces =\n operationGetArgs.produces;\n expect(\n SwaggerService.getInstance().getData().paths\n ).to.deep.equal(expectedPaths);\n });\n\n it('expect responses', () => {\n const operationGetArgs: IApiOperationGetArgs = {\n path: '/{id}',\n responses: {\n 200: {\n description: 'return version object',\n model: 'Version',\n },\n },\n };\n\n SwaggerService.getInstance().addOperationGet(\n operationGetArgs,\n operationGetTarget,\n propertyKey\n );\n\n SwaggerService.getInstance().buildSwagger();\n expectedPaths['/versions/{id}'].get.responses[200].description =\n operationGetArgs.responses[200].description;\n expect(\n SwaggerService.getInstance().getData().paths\n ).to.deep.equal(expectedPaths);\n });\n });\n });\n\n describe('addOperationPost', () => {\n const argsPath: IApiPathArgs = {\n path: '/versions',\n name: 'Version',\n };\n const targetPath: any = {\n name: 'VersionController',\n };\n const targetOperationPost: any = {\n constructor: {\n name: 'VersionController',\n },\n };\n const propertyKey: string | symbol = 'postVersion';\n let expectedPaths: { [key: string]: ISwaggerPath };\n\n beforeEach(() => {\n SwaggerService.getInstance().addPath(argsPath, targetPath);\n expectedPaths = {\n '/versions': {\n post: {\n parameters: [\n {\n allowEmptyValue: undefined,\n default: undefined,\n deprecated: undefined,\n description: 'New versions',\n format: undefined,\n maximum: undefined,\n minimum: undefined,\n in: SwaggerDefinitionConstant.Parameter.In.BODY,\n name:\n SwaggerDefinitionConstant.Parameter.In.BODY,\n required: true,\n schema: {\n $ref: '#/definitions/Version',\n },\n type: undefined,\n },\n ],\n consumes: [SwaggerDefinitionConstant.Consume.JSON],\n operationId: propertyKey,\n produces: [SwaggerDefinitionConstant.Produce.JSON],\n responses: {\n 200: {\n description: 'Success',\n schema: {\n items: {\n $ref: '#/definitions/Version',\n },\n type:\n SwaggerDefinitionConstant.Response.Type\n .ARRAY,\n },\n },\n },\n tags: ['Version'],\n },\n },\n };\n });\n\n it('expect default', () => {\n const argsOperationPost: IApiOperationPostArgs = {\n parameters: {\n body: {\n description: 'New versions',\n required: true,\n model: 'Version',\n },\n },\n responses: {\n 200: {\n model: 'Version',\n type: SwaggerDefinitionConstant.Response.Type.ARRAY,\n },\n },\n };\n\n SwaggerService.getInstance().addOperationPost(\n argsOperationPost,\n targetOperationPost,\n propertyKey\n );\n\n SwaggerService.getInstance().buildSwagger();\n\n expect(SwaggerService.getInstance().getData().paths).to.deep.equal(\n expectedPaths\n );\n });\n\n it('expect description', () => {\n const argsOperationPost: IApiOperationPostArgs = {\n description: 'post version',\n parameters: {\n body: {\n description: 'New versions',\n required: true,\n model: 'Version',\n },\n },\n responses: {\n 200: {\n model: 'Version',\n type: SwaggerDefinitionConstant.Response.Type.ARRAY,\n },\n },\n };\n\n SwaggerService.getInstance().addOperationPost(\n argsOperationPost,\n targetOperationPost,\n propertyKey\n );\n\n SwaggerService.getInstance().buildSwagger();\n expectedPaths['/versions'].post.description =\n argsOperationPost.description;\n expect(SwaggerService.getInstance().getData().paths).to.deep.equal(\n expectedPaths\n );\n });\n\n it('expect summary', () => {\n const argsOperationPost: IApiOperationPostArgs = {\n summary: 'post version',\n parameters: {\n body: {\n description: 'New versions',\n required: true,\n model: 'Version',\n },\n },\n responses: {\n 200: {\n model: 'Version',\n type: SwaggerDefinitionConstant.Response.Type.ARRAY,\n },\n },\n };\n\n SwaggerService.getInstance().addOperationPost(\n argsOperationPost,\n targetOperationPost,\n propertyKey\n );\n\n SwaggerService.getInstance().buildSwagger();\n expectedPaths['/versions'].post.summary = argsOperationPost.summary;\n expect(SwaggerService.getInstance().getData().paths).to.deep.equal(\n expectedPaths\n );\n });\n\n it('expect consumes', () => {\n const argsOperationPost: IApiOperationPostArgs = {\n consumes: [\n SwaggerDefinitionConstant.Consume.JSON,\n SwaggerDefinitionConstant.Consume.XML,\n ],\n parameters: {\n body: {\n description: 'New versions',\n required: true,\n model: 'Version',\n },\n },\n responses: {\n 200: {\n type: SwaggerDefinitionConstant.Response.Type.ARRAY,\n model: 'Version',\n },\n },\n };\n\n SwaggerService.getInstance().addOperationPost(\n argsOperationPost,\n targetOperationPost,\n propertyKey\n );\n\n SwaggerService.getInstance().buildSwagger();\n expectedPaths['/versions'].post.consumes =\n argsOperationPost.consumes;\n expect(SwaggerService.getInstance().getData().paths).to.deep.equal(\n expectedPaths\n );\n });\n\n it('expect produces', () => {\n const argsOperationPost: IApiOperationPostArgs = {\n produces: [\n SwaggerDefinitionConstant.Consume.JSON,\n SwaggerDefinitionConstant.Consume.XML,\n ],\n parameters: {\n body: {\n description: 'New versions',\n required: true,\n model: 'Version',\n },\n },\n responses: {\n 200: {\n type: SwaggerDefinitionConstant.Response.Type.ARRAY,\n model: 'Version',\n },\n },\n };\n\n SwaggerService.getInstance().addOperationPost(\n argsOperationPost,\n targetOperationPost,\n propertyKey\n );\n\n SwaggerService.getInstance().buildSwagger();\n expectedPaths['/versions'].post.produces =\n argsOperationPost.produces;\n expect(SwaggerService.getInstance().getData().paths).to.deep.equal(\n expectedPaths\n );\n });\n });\n\n describe('addOperationPut', () => {\n const argsPath: IApiPathArgs = {\n path: '/versions',\n name: 'Version',\n };\n const targetPath: any = {\n name: 'VersionController',\n };\n const targetOperationPut: any = {\n constructor: {\n name: 'VersionController',\n },\n };\n const propertyKey: string | symbol = 'putVersion';\n let expectedPaths: { [key: string]: ISwaggerPath };\n\n beforeEach(() => {\n SwaggerService.getInstance().addPath(argsPath, targetPath);\n expectedPaths = {\n '/versions/{id}': {\n put: {\n parameters: [\n {\n allowEmptyValue: undefined,\n default: undefined,\n deprecated: undefined,\n in: 'path',\n format: undefined,\n description: 'Id of version',\n maximum: undefined,\n minimum: undefined,\n name: 'id',\n required: true,\n type:\n SwaggerDefinitionConstant.Parameter.Type\n .STRING,\n },\n {\n allowEmptyValue: undefined,\n default: undefined,\n deprecated: undefined,\n description: 'New versions',\n format: undefined,\n in: SwaggerDefinitionConstant.Parameter.In.BODY,\n maximum: undefined,\n minimum: undefined,\n name:\n SwaggerDefinitionConstant.Parameter.In.BODY,\n required: true,\n schema: {\n $ref: '#/definitions/Version',\n },\n type: undefined,\n },\n ],\n consumes: [SwaggerDefinitionConstant.Consume.JSON],\n operationId: propertyKey,\n produces: [SwaggerDefinitionConstant.Produce.JSON],\n responses: {\n 200: {\n description: 'Success',\n schema: {\n $ref: '#/definitions/Version',\n },\n },\n },\n tags: ['Version'],\n },\n },\n };\n });\n\n it('expect default', () => {\n const argsOperationPut: IApiOperationPutArgs = {\n path: '/{id}',\n parameters: {\n path: {\n id: {\n description: 'Id of version',\n type:\n SwaggerDefinitionConstant.Parameter.Type.STRING,\n required: true,\n },\n },\n body: {\n description: 'New versions',\n required: true,\n model: 'Version',\n },\n },\n responses: {\n 200: { model: 'Version' },\n },\n };\n\n SwaggerService.getInstance().addOperationPut(\n argsOperationPut,\n targetOperationPut,\n propertyKey\n );\n\n SwaggerService.getInstance().buildSwagger();\n expect(SwaggerService.getInstance().getData().paths).to.deep.equal(\n expectedPaths\n );\n });\n\n it('expect description', () => {\n const argsOperationPut: IApiOperationPutArgs = {\n path: '/{id}',\n description: 'post version',\n parameters: {\n path: {\n id: {\n description: 'Id of version',\n type:\n SwaggerDefinitionConstant.Parameter.Type.STRING,\n required: true,\n },\n },\n body: {\n description: 'New versions',\n required: true,\n model: 'Version',\n },\n },\n responses: {\n 200: { model: 'Version' },\n },\n };\n\n SwaggerService.getInstance().addOperationPut(\n argsOperationPut,\n targetOperationPut,\n propertyKey\n );\n\n SwaggerService.getInstance().buildSwagger();\n expectedPaths['/versions/{id}'].put.description =\n argsOperationPut.description;\n expect(SwaggerService.getInstance().getData().paths).to.deep.equal(\n expectedPaths\n );\n });\n\n it('expect summary', () => {\n const argsOperationPut: IApiOperationPutArgs = {\n path: '/{id}',\n summary: 'post version',\n parameters: {\n path: {\n id: {\n description: 'Id of version',\n type:\n SwaggerDefinitionConstant.Parameter.Type.STRING,\n required: true,\n },\n },\n body: {\n description: 'New versions',\n required: true,\n model: 'Version',\n },\n },\n responses: {\n 200: { model: 'Version' },\n },\n };\n\n SwaggerService.getInstance().addOperationPut(\n argsOperationPut,\n targetOperationPut,\n propertyKey\n );\n\n SwaggerService.getInstance().buildSwagger();\n expectedPaths['/versions/{id}'].put.summary =\n argsOperationPut.summary;\n expect(SwaggerService.getInstance().getData().paths).to.deep.equal(\n expectedPaths\n );\n });\n\n it('expect consumes', () => {\n const argsOperationPut: IApiOperationPutArgs = {\n path: '/{id}',\n consumes: [\n SwaggerDefinitionConstant.Consume.JSON,\n SwaggerDefinitionConstant.Consume.XML,\n ],\n parameters: {\n path: {\n id: {\n description: 'Id of version',\n type:\n SwaggerDefinitionConstant.Parameter.Type.STRING,\n required: true,\n },\n },\n body: {\n description: 'New versions',\n required: true,\n model: 'Version',\n },\n },\n responses: {\n 200: { model: 'Version' },\n },\n };\n\n SwaggerService.getInstance().addOperationPut(\n argsOperationPut,\n targetOperationPut,\n propertyKey\n );\n\n SwaggerService.getInstance().buildSwagger();\n expectedPaths['/versions/{id}'].put.consumes =\n argsOperationPut.consumes;\n expect(SwaggerService.getInstance().getData().paths).to.deep.equal(\n expectedPaths\n );\n });\n\n it('expect produces', () => {\n const argsOperationPut: IApiOperationPutArgs = {\n path: '/{id}',\n produces: [\n SwaggerDefinitionConstant.Consume.JSON,\n SwaggerDefinitionConstant.Consume.XML,\n ],\n parameters: {\n path: {\n id: {\n description: 'Id of version',\n type:\n SwaggerDefinitionConstant.Parameter.Type.STRING,\n required: true,\n },\n },\n body: {\n description: 'New versions',\n required: true,\n model: 'Version',\n },\n },\n responses: {\n 200: { model: 'Version' },\n },\n };\n\n SwaggerService.getInstance().addOperationPut(\n argsOperationPut,\n targetOperationPut,\n propertyKey\n );\n\n SwaggerService.getInstance().buildSwagger();\n expectedPaths['/versions/{id}'].put.produces =\n argsOperationPut.produces;\n expect(SwaggerService.getInstance().getData().paths).to.deep.equal(\n expectedPaths\n );\n });\n });\n\n describe('addOperationPatch', () => {\n const argsPath: IApiPathArgs = {\n path: '/versions',\n name: 'Version',\n };\n const targetPath: any = {\n name: 'VersionController',\n };\n const targetOperationPatch: any = {\n constructor: {\n name: 'VersionController',\n },\n };\n const propertyKey: string | symbol = 'patchVersionDescription';\n let expectedPaths: { [key: string]: ISwaggerPath };\n\n beforeEach(() => {\n SwaggerService.getInstance().addPath(argsPath, targetPath);\n expectedPaths = {\n '/versions/{id}/description': {\n patch: {\n parameters: [\n {\n allowEmptyValue: undefined,\n default: undefined,\n deprecated: undefined,\n in: 'path',\n maximum: undefined,\n minimum: undefined,\n description: 'Id of version',\n format: undefined,\n name: 'id',\n required: true,\n type:\n SwaggerDefinitionConstant.Parameter.Type\n .STRING,\n },\n {\n allowEmptyValue: undefined,\n default: undefined,\n deprecated: undefined,\n description: 'New versions',\n format: undefined,\n in: SwaggerDefinitionConstant.Parameter.In.BODY,\n maximum: undefined,\n minimum: undefined,\n\n name:\n SwaggerDefinitionConstant.Parameter.In.BODY,\n required: true,\n schema: {\n $ref: '#/definitions/Version',\n },\n type: undefined,\n },\n ],\n consumes: [SwaggerDefinitionConstant.Consume.JSON],\n operationId: propertyKey,\n produces: [SwaggerDefinitionConstant.Produce.JSON],\n responses: {\n 200: {\n description: 'Success',\n schema: {\n $ref: '#/definitions/Version',\n },\n },\n },\n tags: ['Version'],\n },\n },\n };\n });\n\n it('expect default', () => {\n const argsOperationPatch: IApiOperationPatchArgs = {\n path: '/{id}/description',\n parameters: {\n path: {\n id: {\n description: 'Id of version',\n type:\n SwaggerDefinitionConstant.Parameter.Type.STRING,\n required: true,\n },\n },\n body: {\n description: 'New versions',\n required: true,\n model: 'Version',\n },\n },\n responses: {\n 200: { model: 'Version' },\n },\n };\n\n SwaggerService.getInstance().addOperationPatch(\n argsOperationPatch,\n targetOperationPatch,\n propertyKey\n );\n\n SwaggerService.getInstance().buildSwagger();\n expect(SwaggerService.getInstance().getData().paths).to.deep.equal(\n expectedPaths\n );\n });\n\n it('expect description', () => {\n const argsOperationPatch: IApiOperationPutArgs = {\n path: '/{id}/description',\n description: 'patch version description',\n parameters: {\n path: {\n id: {\n description: 'Id of version',\n type:\n SwaggerDefinitionConstant.Parameter.Type.STRING,\n required: true,\n },\n },\n body: {\n description: 'New versions',\n required: true,\n model: 'Version',\n },\n },\n responses: {\n 200: { model: 'Version' },\n },\n };\n\n SwaggerService.getInstance().addOperationPatch(\n argsOperationPatch,\n targetOperationPatch,\n propertyKey\n );\n\n SwaggerService.getInstance().buildSwagger();\n expectedPaths['/versions/{id}/description'].patch.description =\n argsOperationPatch.description;\n expect(SwaggerService.getInstance().getData().paths).to.deep.equal(\n expectedPaths\n );\n });\n\n it('expect summary', () => {\n const argsOperationPatch: IApiOperationPatchArgs = {\n path: '/{id}/description',\n summary: 'patch version description',\n parameters: {\n path: {\n id: {\n description: 'Id of version',\n type:\n SwaggerDefinitionConstant.Parameter.Type.STRING,\n required: true,\n },\n },\n body: {\n description: 'New versions',\n required: true,\n model: 'Version',\n },\n },\n responses: {\n 200: { model: 'Version' },\n },\n };\n\n SwaggerService.getInstance().addOperationPatch(\n argsOperationPatch,\n targetOperationPatch,\n propertyKey\n );\n\n SwaggerService.getInstance().buildSwagger();\n expectedPaths['/versions/{id}/description'].patch.summary =\n argsOperationPatch.summary;\n expect(SwaggerService.getInstance().getData().paths).to.deep.equal(\n expectedPaths\n );\n });\n\n it('expect consumes', () => {\n const argsOperationPatch: IApiOperationPatchArgs = {\n path: '/{id}/description',\n consumes: [\n SwaggerDefinitionConstant.Consume.JSON,\n SwaggerDefinitionConstant.Consume.XML,\n ],\n parameters: {\n path: {\n id: {\n description: 'Id of version',\n type:\n SwaggerDefinitionConstant.Parameter.Type.STRING,\n required: true,\n },\n },\n body: {\n description: 'New versions',\n required: true,\n model: 'Version',\n },\n },\n responses: {\n 200: { model: 'Version' },\n },\n };\n\n SwaggerService.getInstance().addOperationPatch(\n argsOperationPatch,\n targetOperationPatch,\n propertyKey\n );\n\n SwaggerService.getInstance().buildSwagger();\n expectedPaths['/versions/{id}/description'].patch.consumes =\n argsOperationPatch.consumes;\n expect(SwaggerService.getInstance().getData().paths).to.deep.equal(\n expectedPaths\n );\n });\n\n it('expect produces', () => {\n const argsOperationPut: IApiOperationPutArgs = {\n path: '/{id}/description',\n produces: [\n SwaggerDefinitionConstant.Consume.JSON,\n SwaggerDefinitionConstant.Consume.XML,\n ],\n parameters: {\n path: {\n id: {\n description: 'Id