{"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 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                argsOperationPut,\n                targetOperationPatch,\n                propertyKey\n            );\n\n            SwaggerService.getInstance().buildSwagger();\n            expectedPaths['/versions/{id}/description'].patch.produces =\n                argsOperationPut.produces;\n            expect(SwaggerService.getInstance().getData().paths).to.deep.equal(\n                expectedPaths\n            );\n        });\n    });\n\n    describe('addOperationDelete', () => {\n        const argsPath: IApiPathArgs = {\n            path: '/versions',\n            name: 'Version',\n        };\n        const targetPath: any = {\n            name: 'VersionController',\n        };\n        const targetOperationDelete: any = {\n            constructor: {\n                name: 'VersionController',\n            },\n        };\n        const propertyKey: string | symbol = 'deleteVersion';\n        let expectedPaths: { [key: string]: ISwaggerPath };\n\n        beforeEach(() => {\n            SwaggerService.getInstance().addPath(argsPath, targetPath);\n            expectedPaths = {\n                '/versions/{id}': {\n                    delete: {\n                        consumes: [SwaggerDefinitionConstant.Consume.JSON],\n                        operationId: propertyKey,\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                        produces: [SwaggerDefinitionConstant.Produce.JSON],\n                        responses: {\n                            200: {\n                                description: 'Success',\n                            },\n                        },\n                        tags: ['Version'],\n                    },\n                },\n            };\n        });\n\n        it('expect default', () => {\n            const argsOperationDelete: IApiOperationDeleteArgs = {\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                },\n                responses: {\n                    200: { description: 'Success' },\n                },\n            };\n\n            SwaggerService.getInstance().addOperationDelete(\n                argsOperationDelete,\n                targetOperationDelete,\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 argsOperationDelete: IApiOperationDeleteArgs = {\n                path: '/{id}',\n                description: 'delete 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                },\n                responses: {\n                    200: { description: 'Success' },\n                },\n            };\n\n            SwaggerService.getInstance().addOperationDelete(\n                argsOperationDelete,\n                targetOperationDelete,\n                propertyKey\n            );\n\n            SwaggerService.getInstance().buildSwagger();\n            expectedPaths['/versions/{id}'].delete.description =\n                argsOperationDelete.description;\n            expect(SwaggerService.getInstance().getData().paths).to.deep.equal(\n                expectedPaths\n            );\n        });\n\n        it('expect summary', () => {\n            const argsOperationDelete: IApiOperationDeleteArgs = {\n                path: '/{id}',\n                summary: 'delete 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                },\n                responses: {\n                    200: { description: 'Success' },\n                },\n            };\n\n            SwaggerService.getInstance().addOperationDelete(\n                argsOperationDelete,\n                targetOperationDelete,\n                propertyKey\n            );\n\n            SwaggerService.getInstance().buildSwagger();\n            expectedPaths['/versions/{id}'].delete.summary =\n                argsOperationDelete.summary;\n            expect(SwaggerService.getInstance().getData().paths).to.deep.equal(\n                expectedPaths\n            );\n        });\n\n        it('expect consumes', () => {\n            const argsOperationDelete: IApiOperationDeleteArgs = {\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                },\n                responses: {\n                    200: { description: 'Success' },\n                },\n            };\n\n            SwaggerService.getInstance().addOperationDelete(\n                argsOperationDelete,\n                targetOperationDelete,\n                propertyKey\n            );\n\n            SwaggerService.getInstance().buildSwagger();\n            expectedPaths['/versions/{id}'].delete.consumes =\n                argsOperationDelete.consumes;\n            expect(SwaggerService.getInstance().getData().paths).to.deep.equal(\n                expectedPaths\n            );\n        });\n\n        it('expect produces', () => {\n            const argsOperationDelete: IApiOperationDeleteArgs = {\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                },\n                responses: {\n                    200: { description: 'Success' },\n                },\n            };\n\n            SwaggerService.getInstance().addOperationDelete(\n                argsOperationDelete,\n                targetOperationDelete,\n                propertyKey\n            );\n\n            SwaggerService.getInstance().buildSwagger();\n            expectedPaths['/versions/{id}'].delete.produces =\n                argsOperationDelete.produces;\n            expect(SwaggerService.getInstance().getData().paths).to.deep.equal(\n                expectedPaths\n            );\n        });\n    });\n});\n"]}