swagger: '2.0'
info:
  description: "This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\"
  version: 1.0.0
  title: OpenAPI Petstore
  license:
    name: Apache-2.0
    url: 'https://www.apache.org/licenses/LICENSE-2.0.html'
host: petstore.swagger.io:80
basePath: /v2
tags:
  - name: pet
    description: Everything about your Pets
  - name: store
    description: Access to Petstore orders
  - name: user
    description: Operations about user
schemes:
  - http
paths:
  /pet:
    post:
      tags:
        - pet
      summary: Add a new pet to the store
      description: ''
      operationId: addPet
      consumes:
        - application/json
        - application/xml
      produces:
        - application/xml
        - application/json
      parameters:
        - in: body
          name: body
          description: Pet object that needs to be added to the store
          required: true
          schema:
            $ref: '#/definitions/Pet'
      responses:
        '200':
          description: successful operation
        '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/xml
        - application/json
      parameters:
        - in: body
          name: body
          description: Pet object that needs to be added to the store
          required: true
          schema:
            $ref: '#/definitions/Pet'
      responses:
        '200':
          description: successful operation
        '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/xml
        - application/json
      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: csv
      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/xml
        - application/json
      parameters:
        - name: tags
          in: query
          description: Tags to filter by
          required: true
          type: array
          items:
            type: string
          collectionFormat: csv
      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/xml
        - application/json
      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/xml
        - application/json
      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/xml
        - application/json
      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:
        '200':
          description: successful operation
        '400':
          description: Invalid pet value
      security:
        - petstore_auth:
            - 'write:pets'
            - 'read:pets'
  '/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
        - name: files
          in: formData
          description: files to upload
          required: false
          type: array
          items:
            type: file
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/ApiResponse'
      security:
        - petstore_auth:
            - 'write:pets'
            - 'read:pets'
  /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: []
  /store/order:
    post:
      tags:
        - store
      summary: Place an order for a pet
      description: ''
      operationId: placeOrder
      produces:
        - application/xml
        - application/json
      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/{order_id}':
    get:
      tags:
        - store
      summary: Find purchase order by ID
      description: 'For valid response try integer IDs with value <= 5 or > 10. Other values will generate exceptions'
      operationId: getOrderById
      produces:
        - application/xml
        - application/json
      parameters:
        - name: order_id
          in: path
          description: ID of pet that needs to be fetched
          required: true
          type: integer
          maximum: 5
          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 value < 1000. Anything above 1000 or nonintegers will generate API errors
      operationId: deleteOrder
      produces:
        - application/xml
        - application/json
      parameters:
        - name: order_id
          in: path
          description: ID of the order that needs to be deleted
          required: true
          type: string
      responses:
        '400':
          description: Invalid ID supplied
        '404':
          description: Order not found
  /user:
    post:
      tags:
        - user
      summary: Create user
      description: This can only be done by the logged in user.
      operationId: createUser
      produces:
        - application/xml
        - application/json
      parameters:
        - in: body
          name: body
          description: Created user object
          required: true
          schema:
            $ref: '#/definitions/User'
      responses:
        default:
          description: successful operation
  /user/createWithArray:
    post:
      tags:
        - user
      summary: Creates list of users with given input array
      description: ''
      operationId: createUsersWithArrayInput
      produces:
        - application/xml
        - application/json
      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
      produces:
        - application/xml
        - application/json
      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/login:
    get:
      tags:
        - user
      summary: Logs user into the system
      description: ''
      operationId: loginUser
      produces:
        - application/xml
        - application/json
      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
          schema:
            type: string
          headers:
            X-Rate-Limit:
              type: integer
              format: int32
              description: calls per hour allowed by the user
            X-Expires-After:
              type: string
              format: date-time
              description: date in UTC when token expires
        '400':
          description: Invalid username/password supplied
  /user/logout:
    get:
      tags:
        - user
      summary: Logs out current logged in user session
      description: ''
      operationId: logoutUser
      produces:
        - application/xml
        - application/json
      parameters: []
      responses:
        default:
          description: successful operation
  '/user/{username}':
    get:
      tags:
        - user
      summary: Get user by user name
      description: ''
      operationId: getUserByName
      produces:
        - application/xml
        - application/json
      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
      produces:
        - application/xml
        - application/json
      parameters:
        - name: username
          in: path
          description: name that need to be deleted
          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/xml
        - application/json
      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

  /fake_classname_test:
    patch:
      tags:
        - "fake_classname_tags 123#$%^"
      summary: To test class name in snake case
      description: To test class name in snake case
      operationId: testClassname
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - in: body
          name: body
          description: client model
          required: true
          schema:
            $ref: '#/definitions/Client'
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/Client'
      security:
        - api_key_query: []
  /fake:
    patch:
      tags:
        - fake
      summary: To test "client" model
      description: To test "client" model
      operationId: testClientModel
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - in: body
          name: body
          description: client model
          required: true
          schema:
            $ref: '#/definitions/Client'
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/Client'
    get:
      tags:
        - fake
      summary: To test enum parameters
      description: To test enum parameters
      operationId: testEnumParameters
      consumes:
        - "application/x-www-form-urlencoded"
      parameters:
        - name: enum_form_string_array
          type: array
          items:
            type: string
            default: '$'
            enum:
              - '>'
              - '$'
          in: formData
          description: Form parameter enum test (string array)
        - name: enum_form_string
          type: string
          default: '-efg'
          enum:
            - _abc
            - '-efg'
            - (xyz)
          in: formData
          description: Form parameter enum test (string)
        - name: enum_header_string_array
          type: array
          items:
            type: string
            default: '$'
            enum:
              - '>'
              - '$'
          in: header
          description: Header parameter enum test (string array)
        - name: enum_header_string
          type: string
          default: '-efg'
          enum:
            - _abc
            - '-efg'
            - (xyz)
          in: header
          description: Header parameter enum test (string)
        - name: enum_query_string_array
          type: array
          items:
            type: string
            default: '$'
            enum:
              - '>'
              - '$'
          in: query
          description: Query parameter enum test (string array)
        - name: enum_query_string
          type: string
          default: '-efg'
          enum:
            - _abc
            - '-efg'
            - (xyz)
          in: query
          description: Query parameter enum test (string)
        - name: enum_query_integer
          type: integer
          format: int32
          enum:
            - 1
            - -2
          in: query
          description: Query parameter enum test (double)
        - name: enum_query_double
          type: number
          format: double
          enum:
            - 1.1
            - -1.2
          in: query
          description: Query parameter enum test (double)
      responses:
        '400':
          description: Invalid request
        '404':
          description: Not found
    post:
      tags:
        - fake
      summary: "Fake endpoint for testing various parameters\n
        假端點\n
        偽のエンドポイント\n
        가짜 엔드 포인트"
      description: "Fake endpoint for testing various parameters\n
        假端點\n
        偽のエンドポイント\n
        가짜 엔드 포인트"
      operationId: testEndpointParameters
      consumes:
        - application/x-www-form-urlencoded
      parameters:
        - name: integer
          type: integer
          maximum: 100
          minimum: 10
          in: formData
          description: None
        - name: int32
          type: integer
          format: int32
          maximum: 200
          minimum: 20
          in: formData
          description: None
        - name: int64
          type: integer
          format: int64
          in: formData
          description: None
        - name: number
          type: number
          maximum: 543.2
          minimum: 32.1
          in: formData
          description: None
          required: true
        - name: float
          type: number
          format: float
          maximum: 987.6
          in: formData
          description: None
        - name: double
          type: number
          in: formData
          format: double
          maximum: 123.4
          minimum: 67.8
          required: true
          description: None
        - name: string
          type: string
          pattern: /[a-z]/i
          in: formData
          description: None
        - name: pattern_without_delimiter
          type: string
          pattern: "^[A-Z].*"
          in: formData
          description: None
          required: true
        - name: byte
          type: string
          format: byte
          in: formData
          description: None
          required: true
        - name: binary
          type: string
          format: binary
          in: formData
          description: None
        - name: date
          type: string
          format: date
          in: formData
          description: None
        - name: dateTime
          type: string
          format: date-time
          in: formData
          description: None
        - name: password
          type: string
          format: password
          maxLength: 64
          minLength: 10
          in: formData
          description: None
        - name: callback
          type: string
          in: formData
          description: None
      responses:
        '400':
          description: Invalid username supplied
        '404':
          description: User not found
      security:
        - http_basic_test: []
    delete:
      tags:
        - fake
      summary: Fake endpoint to test group parameters (optional)
      description: Fake endpoint to test group parameters (optional)
      operationId: testGroupParameters
      x-group-parameters: true
      parameters:
        - name: required_string_group
          type: integer
          in: query
          description: Required String in group parameters
          required: true
        - name: required_boolean_group
          type: boolean
          in: header
          description: Required Boolean in group parameters
          required: true
        - name: required_int64_group
          type: integer
          format: int64
          in: query
          description: Required Integer in group parameters
          required: true
        - name: string_group
          type: integer
          in: query
          description: String in group parameters
        - name: boolean_group
          type: boolean
          in: header
          description: Boolean in group parameters
        - name: int64_group
          type: integer
          format: int64
          in: query
          description: Integer in group parameters
      responses:
        '400':
          description: Something wrong
  /fake/refs/number:
    post:
      tags:
        - fake
      description: Test serialization of outer number types
      operationId: NumberWithValidations
      parameters:
        - name: body
          in: body
          description: Input number as post body
          schema:
            $ref: '#/definitions/NumberWithValidations'
      responses:
        '200':
          description: Output number
          schema:
            $ref: '#/definitions/NumberWithValidations'
  /fake/refs/string:
    post:
      tags:
        - fake
      description: Test serialization of outer string types
      operationId: String
      parameters:
        - name: body
          in: body
          description: Input string as post body
          schema:
            $ref: '#/definitions/String'
      responses:
        '200':
          description: Output string
          schema:
            $ref: '#/definitions/String'
  /fake/refs/boolean:
    post:
      tags:
        - fake
      description: Test serialization of outer boolean types
      operationId: Boolean
      parameters:
        - name: body
          in: body
          description: Input boolean as post body
          schema:
            $ref: '#/definitions/Boolean'
      responses:
        '200':
          description: Output boolean
          schema:
            $ref: '#/definitions/Boolean'
  /fake/refs/arraymodel:
    post:
      tags:
        - fake
      description: Test serialization of ArrayModel
      operationId: ArrayModel
      parameters:
        - name: body
          in: body
          description: Input model
          schema:
            $ref: '#/definitions/AnimalFarm'
      responses:
        '200':
          description: Output model
          schema:
            $ref: '#/definitions/AnimalFarm'
  /fake/refs/object_model_with_ref_props:
    post:
      tags:
        - fake
      description: Test serialization of object with $refed properties
      operationId: ObjectModelWithRefProps
      parameters:
        - name: body
          in: body
          description: Input model
          schema:
            $ref: '#/definitions/ObjectModelWithRefProps'
      responses:
        '200':
          description: Output model
          schema:
            $ref: '#/definitions/ObjectModelWithRefProps'
  /fake/refs/enum:
    post:
      tags:
        - fake
      description: Test serialization of outer enum
      operationId: StringEnum
      parameters:
        - name: body
          in: body
          description: Input enum
          schema:
            $ref: '#/definitions/StringEnum'
      responses:
        '200':
          description: Output enum
          schema:
            $ref: '#/definitions/StringEnum'
  /fake/jsonFormData:
    get:
      tags:
        - fake
      summary: test json serialization of form data
      description: ''
      operationId: testJsonFormData
      consumes:
        - application/x-www-form-urlencoded
      parameters:
        - name: param
          in: formData
          description: field1
          required: true
          type: string
        - name: param2
          in: formData
          description: field2
          required: true
          type: string
      responses:
        '200':
          description: successful operation
  /fake/inline-additionalProperties:
    post:
      tags:
        - fake
      summary: test inline additionalProperties
      description: ''
      operationId: testInlineAdditionalProperties
      consumes:
        - application/json
      parameters:
        - name: param
          in: body
          description: request body
          required: true
          schema:
            type: object
            additionalProperties:
              type: string
      responses:
        '200':
          description: successful operation
  /fake/body-with-query-params:
    put:
      tags:
        - fake
      operationId: testBodyWithQueryParams
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/User'
        - name: query
          in: query
          required: true
          type: string
      consumes:
        - application/json
      responses:
        '200':
          description: Success
  /fake/create_xml_item:
    post:
      tags:
        - fake
      operationId: createXmlItem
      summary: creates an XmlItem
      description: this route creates an XmlItem
      consumes:
      - 'application/xml'
      - 'application/xml; charset=utf-8'
      - 'application/xml; charset=utf-16'
      - 'text/xml'
      - 'text/xml; charset=utf-8'
      - 'text/xml; charset=utf-16'
      produces:
      - 'application/xml'
      - 'application/xml; charset=utf-8'
      - 'application/xml; charset=utf-16'
      - 'text/xml'
      - 'text/xml; charset=utf-8'
      - 'text/xml; charset=utf-16'
      parameters:
        - in: body
          name: XmlItem
          description: XmlItem Body
          required: true
          schema:
            $ref: '#/definitions/XmlItem'
      responses:
        200:
          description: successful operation
  /another-fake/dummy:
    patch:
      tags:
        - "$another-fake?"
      summary: To test special tags
      description: To test special tags and operation ID starting with number
      operationId: 123_test_@#$%_special_tags
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - in: body
          name: body
          description: client model
          required: true
          schema:
            $ref: '#/definitions/Client'
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/Client'
  /fake/body-with-file-schema:
    put:
      tags:
        - fake
      description: 'For this test, the body for this request much reference a schema named `File`.'
      operationId: testBodyWithFileSchema
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/FileSchemaTestClass'
      consumes:
        - application/json
      responses:
        '200':
          description: Success
  /fake/enums-of-length-one/{path_string}/{path_integer}:
    put:
      tags:
        - fake
      description: 'This route has required values with enums of 1'
      operationId: testEndpointEnumsLengthOne
      parameters:
        - in: query
          name: query_integer
          required: true
          type: integer
          format: int32
          enum:
            -  3
        - in: query
          name: query_string
          required: true
          type: string
          enum:
            -  brillig
        - in: path
          name: path_string
          required: true
          type: string
          enum:
            -  hello
        - in: path
          name: path_integer
          required: true
          type: integer
          enum:
            -  34
        - in: header
          name: header_number
          required: true
          type: number
          format: double
          enum:
            -  1.234
      consumes:
        - application/json
      responses:
        '200':
          description: Success
  '/fake/{petId}/uploadImageWithRequiredFile':
    post:
      tags:
        - pet
      summary: uploads an image (required)
      description: ''
      operationId: uploadFileWithRequiredFile
      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: requiredFile
          in: formData
          description: file to upload
          required: true
          type: file
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/ApiResponse'
      security:
        - petstore_auth:
            - 'write:pets'
            - 'read:pets'
securityDefinitions:
  petstore_auth:
    type: oauth2
    authorizationUrl: 'http://petstore.swagger.io/api/oauth/dialog'
    flow: implicit
    scopes:
      'write:pets': modify pets in your account
      'read:pets': read your pets
  api_key:
    type: apiKey
    name: api_key
    in: header
  api_key_query:
    type: apiKey
    name: api_key_query
    in: query
  http_basic_test:
    type: basic
definitions:
  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
        default: false
    xml:
      name: Order
  Category:
    type: object
    required:
      - name
    properties:
      id:
        type: integer
        format: int64
      name:
        type: string
        default: default-name
    xml:
      name: Category
  User:
    type: object
    properties:
      id:
        type: integer
        format: int64
        x-is-unique: true
      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
  Tag:
    type: object
    properties:
      id:
        type: integer
        format: int64
      name:
        type: string
      # we added fullName to make sure that serialization/deserialization
      # works for a submodel of Pet that also uses js variable names
      fullName:
        type: string
    xml:
      name: Tag
  Pet:
    type: object
    required:
      - name
      - photoUrls
    properties:
      id:
        type: integer
        format: int64
        x-is-unique: true
      category:
        $ref: '#/definitions/Category'
      name:
        type: string
        example: doggie
      photoUrls:
        type: array
        xml:
          name: photoUrl
          wrapped: true
        items:
          type: string
      tags:
        type: array
        xml:
          name: tag
          wrapped: true
        items:
          $ref: '#/definitions/Tag'
      status:
        type: string
        description: pet status in the store
        enum:
          - available
          - pending
          - sold
    xml:
      name: Pet
  ApiResponse:
    type: object
    properties:
      code:
        type: integer
        format: int32
      type:
        type: string
      message:
        type: string
  '$special[model.name]':
    properties:
      '$special[property.name]':
        type: integer
        format: int64
    xml:
      name: '$special[model.name]'
  Return:
    description: Model for testing reserved words
    properties:
      return:
        type: integer
        format: int32
    xml:
      name: Return
  Name:
    description: Model for testing model name same as property name
    required:
      - name
    properties:
      name:
        type: integer
        format: int32
      snake_case:
        readOnly: true
        type: integer
        format: int32
      property:
        type: string
      123Number:
        type: integer
        readOnly: true
    xml:
      name: Name
  200_response:
    description: Model for testing model name starting with number
    properties:
      name:
        type: integer
        format: int32
      class:
        type: string
    xml:
      name: Name
  ClassModel:
    description: Model for testing model with "_class" property
    properties:
      _class:
        type: string
  Player:
    type: object
    required:
      - name
    properties:
      name:
        type: string
      enemyPlayer:
        type: object
        $ref: '#/components/schemas/Player'
  Dog:
    allOf:
      - $ref: '#/definitions/Animal'
      - type: object
        properties:
          breed:
            type: string
  Cat:
    allOf:
      - $ref: '#/definitions/Animal'
      - type: object
        properties:
          declawed:
            type: boolean
  Animal:
    type: object
    discriminator: className
    required:
      - className
    properties:
      className:
        type: string
      color:
        type: string
        default: 'red'
    additionalProperties: false
  AnimalFarm:
    type: array
    items:
      $ref: '#/definitions/Animal'
  format_test:
    type: object
    required:
      - number
      - byte
      - date
      - password
    properties:
      integer:
        type: integer
        maximum: 100
        minimum: 10
      int32:
        type: integer
        format: int32
        maximum: 200
        minimum: 20
      int64:
        type: integer
        format: int64
      number:
        maximum: 543.2
        minimum: 32.1
        type: number
      float:
        type: number
        format: float
        maximum: 987.6
        minimum: 54.3
      double:
        type: number
        format: double
        maximum: 123.4
        minimum: 67.8
      string:
        type: string
        pattern: /^[a-z]+$/i
      byte:
        type: string
        format: byte
      binary:
        type: string
        format: binary
      date:
        type: string
        format: date
      dateTime:
        type: string
        format: date-time
      uuid:
        type: string
        format: uuid
        example: 72f98069-206d-4f12-9f12-3d1e525a8e84
      password:
        type: string
        format: password
        maxLength: 64
        minLength: 10
  EnumClass:
    type: string
    default: '-efg'
    enum:
      - _abc
      - '-efg'
      - (xyz)
  Enum_Test:
    type: object
    required:
      - enum_string_required
    properties:
      enum_string:
        type: string
        enum:
          - UPPER
          - lower
          - ''
      enum_string_required:
        type: string
        enum:
          - UPPER
          - lower
          - ''
      enum_integer:
        type: integer
        format: int32
        enum:
          - 1
          - -1
      enum_number:
        type: number
        format: double
        enum:
          - 1.1
          - -1.2
      stringEnum:
        $ref: '#/definitions/StringEnum'
  AdditionalPropertiesClass:
    type: object
    properties:
      map_string:
        type: object
        additionalProperties:
          type: string
      map_number:
        type: object
        additionalProperties:
          type: number
      map_integer:
        type: object
        additionalProperties:
          type: integer
      map_boolean:
        type: object
        additionalProperties:
          type: boolean
      map_array_integer:
        type: object
        additionalProperties:
          type: array
          items:
            type: integer
      map_array_anytype:
        type: object
        additionalProperties:
          type: array
          items: {}
      map_map_string:
        type: object
        additionalProperties:
          type: object
          additionalProperties:
            type: string
      map_map_anytype:
        type: object
        additionalProperties:
          type: object
          additionalProperties: {}
      anytype_1: {}
      anytype_2:
        description: no type is set for this
      anytype_3:
        type: object
        properties: {}
        description: 'because of a bug in swagger-parser, this should have values {str: (str, int, float...)}
          but instead we get any type. See https://github.com/swagger-api/swagger-parser/issues/1378'
  AdditionalPropertiesString:
    type: object
    properties:
      name:
        type: string
    additionalProperties:
      type: string
  AdditionalPropertiesInteger:
    type: object
    properties:
      name:
        type: string
    additionalProperties:
      type: integer
  AdditionalPropertiesNumber:
    type: object
    properties:
      name:
        type: string
    additionalProperties:
      type: number
  AdditionalPropertiesBoolean:
    type: object
    properties:
      name:
        type: string
    additionalProperties:
      type: boolean
  AdditionalPropertiesArray:
    type: object
    properties:
      name:
        type: string
    additionalProperties:
      type: array
      items:
        type: object
  AdditionalPropertiesObject:
    type: object
    properties:
      name:
        type: string
    additionalProperties:
      type: object
      additionalProperties:
        type: object
  AdditionalPropertiesAnyType:
    type: object
    properties:
      name:
        type: string
    additionalProperties:
      type: object
  MixedPropertiesAndAdditionalPropertiesClass:
    type: object
    properties:
      uuid:
        type: string
        format: uuid
      dateTime:
        type: string
        format: date-time
      map:
        type: object
        additionalProperties:
          $ref: '#/definitions/Animal'
  List:
    type: object
    properties:
      123-list:
        type: string
  Client:
    type: object
    properties:
      client:
        type: string
  ReadOnlyFirst:
    type: object
    properties:
      bar:
        type: string
        readOnly: true
      baz:
        type: string
  hasOnlyReadOnly:
    type: object
    properties:
      bar:
        type: string
        readOnly: true
      foo:
        type: string
        readOnly: true
  Capitalization:
      type: object
      properties:
        smallCamel:
          type: string
        CapitalCamel:
          type: string
        small_Snake:
          type: string
        Capital_Snake:
          type: string
        SCA_ETH_Flow_Points:
          type: string
        ATT_NAME:
          description: >
            Name of the pet
          type: string
  MapTest:
    type: object
    properties:
      map_map_of_string:
        type: object
        additionalProperties:
          type: object
          additionalProperties:
            type: string
      # comment out the following (map of map of enum) as many language not yet support this
      #map_map_of_enum:
      #  type: object
      #  additionalProperties:
      #    type: object
      #    additionalProperties:
      #      type: string
      #      enum:
      #        - UPPER
      #        - lower
      map_of_enum_string:
        type: object
        additionalProperties:
          type: string
          enum:
            - UPPER
            - lower
      direct_map:
        type: object
        additionalProperties:
          type: boolean
      indirect_map:
        $ref: "#/definitions/StringBooleanMap"
  ArrayTest:
    type: object
    properties:
      array_of_string:
        type: array
        items:
          type: string
      array_array_of_integer:
        type: array
        items:
          type: array
          items:
            type: integer
            format: int64
      array_array_of_model:
        type: array
        items:
          type: array
          items:
            $ref: '#/definitions/ReadOnlyFirst'
      # commented out the below test case for array of enum for the time being
      # as not all language can handle it
      #array_of_enum:
      #  type: array
      #  items:
      #    type: string
      #    enum:
      #      - UPPER
      #      - lower
  NumberOnly:
    type: object
    properties:
      JustNumber:
        type: number
  ArrayOfNumberOnly:
    type: object
    properties:
      ArrayNumber:
        type: array
        items:
          type: number
  ArrayOfArrayOfNumberOnly:
    type: object
    properties:
      ArrayArrayNumber:
        type: array
        items:
          type: array
          items:
            type: number
  EnumArrays:
    type: object
    properties:
      just_symbol:
        type: string
        enum:
          - ">="
          - "$"
      array_enum:
        type: array
        items:
          type: string
          enum:
            - fish
            - crab
      # comment out the following as 2d array of enum is not supported at the moment
      #array_array_enum:
      #  type: array
      #  items:
      #    type: array
      #    items:
      #      type: string
      #      enum:
      #        - Cat
      #        - Dog
  StringEnum:
    type: string
    enum:
    - "placed"
    - "approved"
    - "delivered"
  ObjectModelWithRefProps:
    description: a model that includes properties which should stay primitive (String + Boolean) and one which is defined as a class, NumberWithValidations
    type: object
    properties:
      my_number:
        $ref: '#/definitions/NumberWithValidations'
      my_string:
        $ref: '#/definitions/String'
      my_boolean:
        $ref: '#/definitions/Boolean'
  NumberWithValidations:
    type: number
    minimum: 10
    maximum: 20
  String:
    type: string
  Boolean:
    type: boolean
    x-codegen-body-parameter-name: boolean_post_body
  StringBooleanMap:
    additionalProperties:
      type: boolean
  FileSchemaTestClass:
    type: object
    properties:
      file:
        $ref: "#/definitions/File"
      files:
        type: array
        items:
          $ref: "#/definitions/File"
  File:
    type: object
    description: 'Must be named `File` for test.'
    properties:
      sourceURI:
        description: 'Test capitalization'
        type: string
  TypeHolderDefault:
    type: object
    description: a model to test optional properties with server defaults
    required:
      - string_item
      - number_item
      - integer_item
      - bool_item
      - array_item
    properties:
      string_item:
        type: string
        default: what
      number_item:
        type: number
        default: 1.234
        format: double
      integer_item:
        type: integer
        format: int32
        default: -2
      bool_item:
        type: boolean
        default: true
      # swagger-parser does not see date defaults yet: https://github.com/swagger-api/swagger-parser/issues/971
      date_item:
        type: string
        format: date
        default: 2017-07-21
      # swagger-parser does not see date-time defaults yet: https://github.com/swagger-api/swagger-parser/issues/971
      datetime_item:
        type: string
        format: date-time
        default: 2017-07-21T17:32:28Z
      # swagger-parser does not see array defaults yet: https://github.com/swagger-api/swagger-parser/issues/971
      array_item:
          type: array
          items:
            type: integer
          default:
            - 0
            - 1
            - 2
            - 3
  TypeHolderExample:
    type: object
    description: a model to test required properties with an example and length one enum
    required:
      - string_item
      - number_item
      - integer_item
      - bool_item
      - array_item
      # - date_item/datetime_item  adding date and datetime enums will be a future task, this does not yet work in many languages
    properties:
      string_item:
        type: string
        example: what
        enum: [what]
      number_item:
        type: number
        format: double
        example: 1.234
        enum: [1.234]
      integer_item:
        type: integer
        format: int32
        enum: [-2]
        example: -2
      # swagger-parser does not see bool enums yet https://github.com/swagger-api/swagger-parser/issues/985
      bool_item:
        type: boolean
        example: true
      array_item:
          type: array
          items:
            type: integer
          example:
            -
              - 0
              - 1
              - 2
              - 3
          enum:
            -
              - 0
              - 1
              - 2
              - 3
  XmlItem:
    type: object
    xml:
      namespace: http://a.com/schema
      prefix: pre
    properties:
      attribute_string:
        type: string
        example: string
        xml:
          attribute: true
      attribute_number:
        type: number
        example: 1.234
        xml:
          attribute: true
      attribute_integer:
        type: integer
        example: -2
        xml:
          attribute: true
      attribute_boolean:
        type: boolean
        example: true
        xml:
          attribute: true
      wrapped_array:
        type: array
        xml:
          wrapped: true
        items:
          type: integer
      name_string:
        type: string
        example: string
        xml:
          name: xml_name_string
      name_number:
        type: number
        example: 1.234
        xml:
          name: xml_name_number
      name_integer:
        type: integer
        example: -2
        xml:
          name: xml_name_integer
      name_boolean:
        type: boolean
        example: true
        xml:
          name: xml_name_boolean
      name_array:
        type: array
        items:
          type: integer
          xml:
            name: xml_name_array_item
      name_wrapped_array:
        type: array
        xml:
          wrapped: true
          name: xml_name_wrapped_array
        items:
          type: integer
          xml:
            name: xml_name_wrapped_array_item
      prefix_string:
        type: string
        example: string
        xml:
          prefix: ab
      prefix_number:
        type: number
        example: 1.234
        xml:
          prefix: cd
      prefix_integer:
        type: integer
        example: -2
        xml:
          prefix: ef
      prefix_boolean:
        type: boolean
        example: true
        xml:
          prefix: gh
      prefix_array:
        type: array
        items:
          type: integer
          xml:
            prefix: ij
      prefix_wrapped_array:
        type: array
        xml:
          wrapped: true
          prefix: kl
        items:
          type: integer
          xml:
            prefix: mn
      namespace_string:
        type: string
        example: string
        xml:
          namespace: http://a.com/schema
      namespace_number:
        type: number
        example: 1.234
        xml:
          namespace: http://b.com/schema
      namespace_integer:
        type: integer
        example: -2
        xml:
          namespace: http://c.com/schema
      namespace_boolean:
        type: boolean
        example: true
        xml:
          namespace: http://d.com/schema
      namespace_array:
        type: array
        items:
          type: integer
          xml:
            namespace: http://e.com/schema
      namespace_wrapped_array:
        type: array
        xml:
          wrapped: true
          namespace: http://f.com/schema
        items:
          type: integer
          xml:
            namespace: http://g.com/schema
      prefix_ns_string:
        type: string
        example: string
        xml:
          namespace: http://a.com/schema
          prefix: a
      prefix_ns_number:
        type: number
        example: 1.234
        xml:
          namespace: http://b.com/schema
          prefix: b
      prefix_ns_integer:
        type: integer
        example: -2
        xml:
          namespace: http://c.com/schema
          prefix: c
      prefix_ns_boolean:
        type: boolean
        example: true
        xml:
          namespace: http://d.com/schema
          prefix: d
      prefix_ns_array:
        type: array
        items:
          type: integer
          xml:
            namespace: http://e.com/schema
            prefix: e
      prefix_ns_wrapped_array:
        type: array
        xml:
          wrapped: true
          namespace: http://f.com/schema
          prefix: f
        items:
          type: integer
          xml:
            namespace: http://g.com/schema
            prefix: g
  Grandparent:
    type: object
    properties:
      radioWaves:
        type: boolean
  Parent:
    allOf:
      - $ref: '#/definitions/Grandparent'
      - type: object
        properties:
          teleVision:
            type: boolean
  Child:
    allOf:
      - $ref: '#/definitions/Parent'
      - type: object
        properties:
          interNet:
            type: boolean
  GrandparentAnimal:
    type: object
    required:
    - pet_type
    properties:
      pet_type:
        type: string
    discriminator: pet_type
  ParentPet:
    type: object
    allOf:
    - $ref: '#/definitions/GrandparentAnimal'
  ChildCat:
    allOf:
    - $ref: '#/definitions/ParentPet'
    - type: object
      properties:
        name:
          type: string
  ChildDog:
    allOf:
    - $ref: '#/definitions/ParentPet'
    - type: object
      properties:
        bark:
          type: string
  ChildLizard:
    allOf:
    - $ref: '#/definitions/ParentPet'
    - type: object
      properties:
        lovesRocks:
          type: boolean
  Triangle:
    allOf:
    - $ref: '#/definitions/Polygon'
    - type: object
      properties:
        type:
          enum:
            - 'Triangle'
          x-enum-as-string: true
          default: 'Triangle'
          type: string
        sides:
          type: integer
        area:
          type: string
  Square:
    allOf:
    - $ref: '#/definitions/Polygon'
    - type: object
      properties:
        type:
          enum:
            - 'Square'
          x-enum-as-string: true
          default: 'Square'
          type: string
        sides:
          type: integer
        area:
          type: string
  Polygon:
    allOf:
    - $ref: '#/definitions/Shape'
    - type: object
      required:
        - type
      properties:
        type:
          enum:
            - 'Triangle'
            - 'Square'
          x-enum-as-string: true
          type: string
        sides:
          type: integer
        area:
          type: string
  Shape:
    type: object
    required:
      - type
    properties:
      type:
        enum:
          - 'Triangle'
          - 'Square'
        x-enum-as-string: true
        type: string
      area:
        type: string