jswagger-common
Version:
This is jswagger's common package.
558 lines (554 loc) • 21.4 kB
text/typescript
const chai = require('chai');
const expect = chai.expect;
const assert = chai.assert;
const should = chai.should();
import {OpenAPI2, OpenAPI2Reference, OpenAPI2SchemaObject} from '../src';
function dummy(o: any) {
// Empty
}
describe('OpenAPI2 Test', function () {
const spec: OpenAPI2 = {
"swagger": "2.0",
"info": {
"description": "This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters.",
"version": "1.0.5",
"title": "Swagger Petstore",
"termsOfService": "http://swagger.io/terms/",
"contact": {"email": "apiteam@swagger.io"},
"license": {"name": "Apache 2.0", "url": "http://www.apache.org/licenses/LICENSE-2.0.html"}
},
"host": "petstore.swagger.io",
"basePath": "/v2",
"tags": [{
"name": "pet",
"description": "Everything about your Pets",
"externalDocs": {"description": "Find out more", "url": "http://swagger.io"}
}, {"name": "store", "description": "Access to Petstore orders"}, {
"name": "user",
"description": "Operations about user",
"externalDocs": {"description": "Find out more about our store", "url": "http://swagger.io"}
}],
"schemes": ["https", "http"],
"paths": {
"/pet/{petId}/uploadImage": {
"post": {
"tags": ["pet"],
"summary": "uploads an image",
"description": "",
"operationId": "uploadFile",
"consumes": ["multipart/form-data"],
"produces": ["application/json"],
"parameters": [{
"name": "petId",
"in": "path",
"description": "ID of pet to update",
"required": true,
"type": "integer",
"format": "int64"
}, {
"name": "additionalMetadata",
"in": "formData",
"description": "Additional data to pass to server",
"required": false,
"type": "string"
}, {"name": "file", "in": "formData", "description": "file to upload", "required": false, "type": "file"}],
"responses": {
"200": {
"description": "successful operation",
"schema": {"$ref": "#/definitions/ApiResponse"}
}
},
"security": [{"petstore_auth": ["write:pets", "read:pets"]}]
}
},
"/pet": {
"post": {
"tags": ["pet"],
"summary": "Add a new pet to the store",
"description": "",
"operationId": "addPet",
"consumes": ["application/json", "application/xml"],
"produces": ["application/json", "application/xml"],
"parameters": [{
"in": "body",
"name": "body",
"description": "Pet object that needs to be added to the store",
"required": true,
"schema": {"$ref": "#/definitions/Pet"}
}],
"responses": {"405": {"description": "Invalid input"}},
"security": [{"petstore_auth": ["write:pets", "read:pets"]}]
},
"put": {
"tags": ["pet"],
"summary": "Update an existing pet",
"description": "",
"operationId": "updatePet",
"consumes": ["application/json", "application/xml"],
"produces": ["application/json", "application/xml"],
"parameters": [{
"in": "body",
"name": "body",
"description": "Pet object that needs to be added to the store",
"required": true,
"schema": {"$ref": "#/definitions/Pet"}
}],
"responses": {
"400": {"description": "Invalid ID supplied"},
"404": {"description": "Pet not found"},
"405": {"description": "Validation exception"}
},
"security": [{"petstore_auth": ["write:pets", "read:pets"]}]
}
},
"/pet/findByStatus": {
"get": {
"tags": ["pet"],
"summary": "Finds Pets by status",
"description": "Multiple status values can be provided with comma separated strings",
"operationId": "findPetsByStatus",
"produces": ["application/json", "application/xml"],
"parameters": [{
"name": "status",
"in": "query",
"description": "Status values that need to be considered for filter",
"required": true,
"type": "array",
"items": {"type": "string", "enum": ["available", "pending", "sold"], "default": "available"},
"collectionFormat": "multi"
}],
"responses": {
"200": {
"description": "successful operation",
"schema": {"type": "array", "items": {"$ref": "#/definitions/Pet"}}
}, "400": {"description": "Invalid status value"}
},
"security": [{"petstore_auth": ["write:pets", "read:pets"]}]
}
},
"/pet/findByTags": {
"get": {
"tags": ["pet"],
"summary": "Finds Pets by tags",
"description": "Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.",
"operationId": "findPetsByTags",
"produces": ["application/json", "application/xml"],
"parameters": [{
"name": "tags",
"in": "query",
"description": "Tags to filter by",
"required": true,
"type": "array",
"items": {"type": "string"},
"collectionFormat": "multi"
}],
"responses": {
"200": {
"description": "successful operation",
"schema": {"type": "array", "items": {"$ref": "#/definitions/Pet"}}
}, "400": {"description": "Invalid tag value"}
},
"security": [{"petstore_auth": ["write:pets", "read:pets"]}],
"deprecated": true
}
},
"/pet/{petId}": {
"get": {
"tags": ["pet"],
"summary": "Find pet by ID",
"description": "Returns a single pet",
"operationId": "getPetById",
"produces": ["application/json", "application/xml"],
"parameters": [{
"name": "petId",
"in": "path",
"description": "ID of pet to return",
"required": true,
"type": "integer",
"format": "int64"
}],
"responses": {
"200": {"description": "successful operation", "schema": {"$ref": "#/definitions/Pet"}},
"400": {"description": "Invalid ID supplied"},
"404": {"description": "Pet not found"}
},
"security": [{"api_key": []}]
},
"post": {
"tags": ["pet"],
"summary": "Updates a pet in the store with form data",
"description": "",
"operationId": "updatePetWithForm",
"consumes": ["application/x-www-form-urlencoded"],
"produces": ["application/json", "application/xml"],
"parameters": [{
"name": "petId",
"in": "path",
"description": "ID of pet that needs to be updated",
"required": true,
"type": "integer",
"format": "int64"
}, {
"name": "name",
"in": "formData",
"description": "Updated name of the pet",
"required": false,
"type": "string"
}, {
"name": "status",
"in": "formData",
"description": "Updated status of the pet",
"required": false,
"type": "string"
}],
"responses": {"405": {"description": "Invalid input"}},
"security": [{"petstore_auth": ["write:pets", "read:pets"]}]
},
"delete": {
"tags": ["pet"],
"summary": "Deletes a pet",
"description": "",
"operationId": "deletePet",
"produces": ["application/json", "application/xml"],
"parameters": [{"name": "api_key", "in": "header", "required": false, "type": "string"}, {
"name": "petId",
"in": "path",
"description": "Pet id to delete",
"required": true,
"type": "integer",
"format": "int64"
}],
"responses": {"400": {"description": "Invalid ID supplied"}, "404": {"description": "Pet not found"}},
"security": [{"petstore_auth": ["write:pets", "read:pets"]}]
}
},
"/store/order": {
"post": {
"tags": ["store"],
"summary": "Place an order for a pet",
"description": "",
"operationId": "placeOrder",
"consumes": ["application/json"],
"produces": ["application/json", "application/xml"],
"parameters": [{
"in": "body",
"name": "body",
"description": "order placed for purchasing the pet",
"required": true,
"schema": {"$ref": "#/definitions/Order"}
}],
"responses": {
"200": {"description": "successful operation", "schema": {"$ref": "#/definitions/Order"}},
"400": {"description": "Invalid Order"}
}
}
},
"/store/order/{orderId}": {
"get": {
"tags": ["store"],
"summary": "Find purchase order by ID",
"description": "For valid response try integer IDs with value >= 1 and <= 10. Other values will generated exceptions",
"operationId": "getOrderById",
"produces": ["application/json", "application/xml"],
"parameters": [{
"name": "orderId",
"in": "path",
"description": "ID of pet that needs to be fetched",
"required": true,
"type": "integer",
"maximum": 10,
"minimum": 1,
"format": "int64"
}],
"responses": {
"200": {"description": "successful operation", "schema": {"$ref": "#/definitions/Order"}},
"400": {"description": "Invalid ID supplied"},
"404": {"description": "Order not found"}
}
},
"delete": {
"tags": ["store"],
"summary": "Delete purchase order by ID",
"description": "For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors",
"operationId": "deleteOrder",
"produces": ["application/json", "application/xml"],
"parameters": [{
"name": "orderId",
"in": "path",
"description": "ID of the order that needs to be deleted",
"required": true,
"type": "integer",
"minimum": 1,
"format": "int64"
}],
"responses": {"400": {"description": "Invalid ID supplied"}, "404": {"description": "Order not found"}}
}
},
"/store/inventory": {
"get": {
"tags": ["store"],
"summary": "Returns pet inventories by status",
"description": "Returns a map of status codes to quantities",
"operationId": "getInventory",
"produces": ["application/json"],
"parameters": [],
"responses": {
"200": {
"description": "successful operation",
"schema": {"type": "object", "additionalProperties": {"type": "integer", "format": "int32"}}
}
},
"security": [{"api_key": []}]
}
},
"/user/createWithArray": {
"post": {
"tags": ["user"],
"summary": "Creates list of users with given input array",
"description": "",
"operationId": "createUsersWithArrayInput",
"consumes": ["application/json"],
"produces": ["application/json", "application/xml"],
"parameters": [{
"in": "body",
"name": "body",
"description": "List of user object",
"required": true,
"schema": {"type": "array", "items": {"$ref": "#/definitions/User"}}
}],
"responses": {"default": {"description": "successful operation"}}
}
},
"/user/createWithList": {
"post": {
"tags": ["user"],
"summary": "Creates list of users with given input array",
"description": "",
"operationId": "createUsersWithListInput",
"consumes": ["application/json"],
"produces": ["application/json", "application/xml"],
"parameters": [{
"in": "body",
"name": "body",
"description": "List of user object",
"required": true,
"schema": {"type": "array", "items": {"$ref": "#/definitions/User"}}
}],
"responses": {"default": {"description": "successful operation"}}
}
},
"/user/{username}": {
"get": {
"tags": ["user"],
"summary": "Get user by user name",
"description": "",
"operationId": "getUserByName",
"produces": ["application/json", "application/xml"],
"parameters": [{
"name": "username",
"in": "path",
"description": "The name that needs to be fetched. Use user1 for testing. ",
"required": true,
"type": "string"
}],
"responses": {
"200": {"description": "successful operation", "schema": {"$ref": "#/definitions/User"}},
"400": {"description": "Invalid username supplied"},
"404": {"description": "User not found"}
}
},
"put": {
"tags": ["user"],
"summary": "Updated user",
"description": "This can only be done by the logged in user.",
"operationId": "updateUser",
"consumes": ["application/json"],
"produces": ["application/json", "application/xml"],
"parameters": [{
"name": "username",
"in": "path",
"description": "name that need to be updated",
"required": true,
"type": "string"
}, {
"in": "body",
"name": "body",
"description": "Updated user object",
"required": true,
"schema": {"$ref": "#/definitions/User"}
}],
"responses": {"400": {"description": "Invalid user supplied"}, "404": {"description": "User not found"}}
},
"delete": {
"tags": ["user"],
"summary": "Delete user",
"description": "This can only be done by the logged in user.",
"operationId": "deleteUser",
"produces": ["application/json", "application/xml"],
"parameters": [{
"name": "username",
"in": "path",
"description": "The name that needs to be deleted",
"required": true,
"type": "string"
}],
"responses": {"400": {"description": "Invalid username supplied"}, "404": {"description": "User not found"}}
}
},
"/user/login": {
"get": {
"tags": ["user"],
"summary": "Logs user into the system",
"description": "",
"operationId": "loginUser",
"produces": ["application/json", "application/xml"],
"parameters": [{
"name": "username",
"in": "query",
"description": "The user name for login",
"required": true,
"type": "string"
}, {
"name": "password",
"in": "query",
"description": "The password for login in clear text",
"required": true,
"type": "string"
}],
"responses": {
"200": {
"description": "successful operation",
"headers": {
"X-Expires-After": {
"type": "string",
"format": "date-time",
"description": "date in UTC when token expires"
},
"X-Rate-Limit": {
"type": "integer",
"format": "int32",
"description": "calls per hour allowed by the user"
}
},
"schema": {"type": "string"}
}, "400": {"description": "Invalid username/password supplied"}
}
}
},
"/user/logout": {
"get": {
"tags": ["user"],
"summary": "Logs out current logged in user session",
"description": "",
"operationId": "logoutUser",
"produces": ["application/json", "application/xml"],
"parameters": [],
"responses": {"default": {"description": "successful operation"}}
}
},
"/user": {
"post": {
"tags": ["user"],
"summary": "Create user",
"description": "This can only be done by the logged in user.",
"operationId": "createUser",
"consumes": ["application/json"],
"produces": ["application/json", "application/xml"],
"parameters": [{
"in": "body",
"name": "body",
"description": "Created user object",
"required": true,
"schema": {"$ref": "#/definitions/User"}
}],
"responses": {"default": {"description": "successful operation"}}
}
}
},
"securityDefinitions": {
"api_key": {"type": "apiKey", "name": "api_key", "in": "header"},
"petstore_auth": {
"type": "oauth2",
"authorizationUrl": "https://petstore.swagger.io/oauth/authorize",
"flow": "implicit",
"scopes": {"read:pets": "read your pets", "write:pets": "modify pets in your account"}
}
},
"definitions": {
"ApiResponse": {
"type": "object",
"properties": {
"code": {"type": "integer", "format": "int32"},
"type": {"type": "string"},
"message": {"type": "string"}
}
},
"Category": {
"type": "object",
"properties": {"id": {"type": "integer", "format": "int64"}, "name": {"type": "string"}},
"xml": {"name": "Category"}
},
"Pet": {
"type": "object",
"required": ["name", "photoUrls"],
"properties": {
"id": {"type": "integer", "format": "int64"},
"category": {"$ref": "#/definitions/Category"},
"name": {"type": "string", "example": "doggie"},
"photoUrls": {
"type": "array",
"xml": {"wrapped": true},
"items": {"type": "string", "xml": {"name": "photoUrl"}}
},
"tags": {
"type": "array",
"xml": {"wrapped": true},
"items": {"xml": {"name": "tag"}, "$ref": "#/definitions/Tag"}
},
"status": {
"type": "string",
"description": "pet status in the store",
"enum": ["available", "pending", "sold"]
}
},
"xml": {"name": "Pet"}
},
"Tag": {
"type": "object",
"properties": {"id": {"type": "integer", "format": "int64"}, "name": {"type": "string"}},
"xml": {"name": "Tag"}
},
"Order": {
"type": "object",
"properties": {
"id": {"type": "integer", "format": "int64"},
"petId": {"type": "integer", "format": "int64"},
"quantity": {"type": "integer", "format": "int32"},
"shipDate": {"type": "string", "format": "date-time"},
"status": {"type": "string", "description": "Order Status", "enum": ["placed", "approved", "delivered"]},
"complete": {"type": "boolean"}
},
"xml": {"name": "Order"}
},
"User": {
"type": "object",
"properties": {
"id": {"type": "integer", "format": "int64"},
"username": {"type": "string"},
"firstName": {"type": "string"},
"lastName": {"type": "string"},
"email": {"type": "string"},
"password": {"type": "string"},
"phone": {"type": "string"},
"userStatus": {"type": "integer", "format": "int32", "description": "User Status"}
},
"xml": {"name": "User"}
}
},
"externalDocs": {"description": "Find out more about Swagger", "url": "http://swagger.io"}
};
// Typed ok because build success
it('OpenAPI2 Type', async function () {
// OK
});
});