openapi: 3.0.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'
tags:
  - name: pet
    description: Everything about your Pets
  - name: store
    description: Access to Petstore orders
  - name: user
    description: Operations about user
paths:
  /foo:
    get:
      responses:
        default:
          description: response
          content:
            application/json:
              schema:
                type: object
                properties:
                  string:
                    $ref: '#/components/schemas/Foo'
  /pet:
    servers:
    - url: 'http://petstore.swagger.io/v2'
    - url: 'http://path-server-test.petstore.local/v2'
    post:
      tags:
        - pet
      summary: Add a new pet to the store
      description: ''
      operationId: addPet
      responses:
        '405':
          description: Invalid input
      security:
        - petstore_auth:
            - 'write:pets'
            - 'read:pets'
      requestBody:
        $ref: '#/components/requestBodies/Pet'
    put:
      tags:
        - pet
      summary: Update an existing pet
      description: ''
      operationId: updatePet
      responses:
        '400':
          description: Invalid ID supplied
        '404':
          description: Pet not found
        '405':
          description: Validation exception
      security:
        - petstore_auth:
            - 'write:pets'
            - 'read:pets'
      requestBody:
        $ref: '#/components/requestBodies/Pet'
  /pet/findByStatus:
    get:
      tags:
        - pet
      summary: Finds Pets by status
      description: Multiple status values can be provided with comma separated strings
      operationId: findPetsByStatus
      parameters:
        - name: status
          in: query
          description: Status values that need to be considered for filter
          required: true
          style: form
          explode: false
          deprecated: true
          schema:
            type: array
            items:
              type: string
              enum:
                - available
                - pending
                - sold
              default: available
      responses:
        '200':
          description: successful operation
          content:
            application/xml:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Pet'
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/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
      parameters:
        - name: tags
          in: query
          description: Tags to filter by
          required: true
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
      responses:
        '200':
          description: successful operation
          content:
            application/xml:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Pet'
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/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
      parameters:
        - name: petId
          in: path
          description: ID of pet to return
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: successful operation
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Pet'
            application/json:
              schema:
                $ref: '#/components/schemas/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
      parameters:
        - name: petId
          in: path
          description: ID of pet that needs to be updated
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '405':
          description: Invalid input
      security:
        - petstore_auth:
            - 'write:pets'
            - 'read:pets'
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                name:
                  description: Updated name of the pet
                  type: string
                status:
                  description: Updated status of the pet
                  type: string
    delete:
      tags:
        - pet
      summary: Deletes a pet
      description: ''
      operationId: deletePet
      parameters:
        - name: api_key
          in: header
          required: false
          schema:
            type: string
        - name: petId
          in: path
          description: Pet id to delete
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '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
      parameters:
        - name: petId
          in: path
          description: ID of pet to update
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
      security:
        - petstore_auth:
            - 'write:pets'
            - 'read:pets'
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                additionalMetadata:
                  description: Additional data to pass to server
                  type: string
                file:
                  description: file to upload
                  type: string
                  format: binary
  /store/inventory:
    get:
      tags:
        - store
      summary: Returns pet inventories by status
      description: Returns a map of status codes to quantities
      operationId: getInventory
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              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
      responses:
        '200':
          description: successful operation
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Order'
            application/json:
              schema:
                $ref: '#/components/schemas/Order'
        '400':
          description: Invalid Order
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Order'
        description: order placed for purchasing the pet
        required: true
  '/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
      parameters:
        - name: order_id
          in: path
          description: ID of pet that needs to be fetched
          required: true
          schema:
            type: integer
            format: int64
            minimum: 1
            maximum: 5
      responses:
        '200':
          description: successful operation
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Order'
            application/json:
              schema:
                $ref: '#/components/schemas/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
      parameters:
        - name: order_id
          in: path
          description: ID of the order that needs to be deleted
          required: true
          schema:
            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
      responses:
        default:
          description: successful operation
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/User'
        description: Created user object
        required: true
  /user/createWithArray:
    post:
      tags:
        - user
      summary: Creates list of users with given input array
      description: ''
      operationId: createUsersWithArrayInput
      responses:
        default:
          description: successful operation
      requestBody:
        $ref: '#/components/requestBodies/UserArray'
  /user/createWithList:
    post:
      tags:
        - user
      summary: Creates list of users with given input array
      description: ''
      operationId: createUsersWithListInput
      responses:
        default:
          description: successful operation
      requestBody:
        $ref: '#/components/requestBodies/UserArray'
  /user/login:
    get:
      tags:
        - user
      summary: Logs user into the system
      description: ''
      operationId: loginUser
      parameters:
        - name: username
          in: query
          description: The user name for login
          required: true
          schema:
            type: string
        - name: password
          in: query
          description: The password for login in clear text
          required: true
          schema:
            type: string
      responses:
        '200':
          description: successful operation
          headers:
            X-Rate-Limit:
              description: calls per hour allowed by the user
              schema:
                type: integer
                format: int32
            X-Expires-After:
              description: date in UTC when token expires
              schema:
                type: string
                format: date-time
          content:
            application/xml:
              schema:
                type: string
            application/json:
              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
      responses:
        default:
          description: successful operation
  '/user/{username}':
    get:
      tags:
        - user
      summary: Get user by user name
      description: ''
      operationId: getUserByName
      parameters:
        - name: username
          in: path
          description: The name that needs to be fetched. Use user1 for testing.
          required: true
          schema:
            type: string
      responses:
        '200':
          description: successful operation
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/User'
            application/json:
              schema:
                $ref: '#/components/schemas/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
      parameters:
        - name: username
          in: path
          description: name that need to be deleted
          required: true
          schema:
            type: string
      responses:
        '400':
          description: Invalid user supplied
        '404':
          description: User not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/User'
        description: Updated user object
        required: true
    delete:
      tags:
        - user
      summary: Delete user
      description: This can only be done by the logged in user.
      operationId: deleteUser
      parameters:
        - name: username
          in: path
          description: The name that needs to be deleted
          required: true
          schema:
            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
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client'
      security:
        - api_key_query: []
      requestBody:
        $ref: '#/components/requestBodies/Client'
  /fake:
    patch:
      tags:
        - fake
      summary: To test "client" model
      description: To test "client" model
      operationId: testClientModel
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client'
      requestBody:
        $ref: '#/components/requestBodies/Client'
    get:
      tags:
        - fake
      summary: To test enum parameters
      description: To test enum parameters
      operationId: testEnumParameters
      parameters:
        - name: enum_header_string_array
          in: header
          description: Header parameter enum test (string array)
          schema:
            type: array
            items:
              type: string
              default: $
              enum:
                - '>'
                - $
        - name: enum_header_string
          in: header
          description: Header parameter enum test (string)
          schema:
            type: string
            enum:
              - _abc
              - '-efg'
              - (xyz)
            default: '-efg'
        - name: enum_query_string_array
          in: query
          description: Query parameter enum test (string array)
          schema:
            type: array
            items:
              type: string
              default: $
              enum:
                - '>'
                - $
        - name: enum_query_string
          in: query
          description: Query parameter enum test (string)
          schema:
            type: string
            enum:
              - _abc
              - '-efg'
              - (xyz)
            default: '-efg'
        - name: enum_query_integer
          in: query
          description: Query parameter enum test (double)
          schema:
            type: integer
            format: int32
            enum:
              - 1
              - -2
        - name: enum_query_double
          in: query
          description: Query parameter enum test (double)
          schema:
            type: number
            format: double
            enum:
              - 1.1
              - -1.2
      responses:
        '400':
          description: Invalid request
        '404':
          description: Not found
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                enum_form_string_array:
                  description: Form parameter enum test (string array)
                  type: array
                  items:
                    type: string
                    default: $
                    enum:
                      - '>'
                      - $
                enum_form_string:
                  description: Form parameter enum test (string)
                  type: string
                  enum:
                    - _abc
                    - '-efg'
                    - (xyz)
                  default: '-efg'
    post:
      tags:
        - fake
      summary: |
        Fake endpoint for testing various parameters
        假端點
        偽のエンドポイント
        가짜 엔드 포인트
      description: |
        Fake endpoint for testing various parameters
        假端點
        偽のエンドポイント
        가짜 엔드 포인트
      operationId: testEndpointParameters
      responses:
        '400':
          description: Invalid username supplied
        '404':
          description: User not found
      security:
        - http_basic_test: []
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                integer:
                  description: None
                  type: integer
                  minimum: 10
                  maximum: 100
                int32:
                  description: None
                  type: integer
                  format: int32
                  minimum: 20
                  maximum: 200
                int64:
                  description: None
                  type: integer
                  format: int64
                number:
                  description: None
                  type: number
                  minimum: 32.1
                  maximum: 543.2
                float:
                  description: None
                  type: number
                  format: float
                  maximum: 987.6
                double:
                  description: None
                  type: number
                  format: double
                  minimum: 67.8
                  maximum: 123.4
                string:
                  description: None
                  type: string
                  pattern: '/[a-z]/i'
                pattern_without_delimiter:
                  description: None
                  type: string
                  pattern: '^[A-Z].*'
                byte:
                  description: None
                  type: string
                  format: byte
                binary:
                  description: None
                  type: string
                  format: binary
                date:
                  description: None
                  type: string
                  format: date
                dateTime:
                  description: None
                  type: string
                  format: date-time
                  default: '2010-02-01T10:20:10.11111+01:00'
                  example: '2020-02-02T20:20:20.22222Z'
                password:
                  description: None
                  type: string
                  format: password
                  minLength: 10
                  maxLength: 64
                callback:
                  description: None
                  type: string
              required:
                - number
                - double
                - pattern_without_delimiter
                - byte
    delete:
      tags:
        - fake
      security:
        - bearer_test: []
      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
          in: query
          description: Required String in group parameters
          required: true
          schema:
            type: integer
        - name: required_boolean_group
          in: header
          description: Required Boolean in group parameters
          required: true
          schema:
            type: boolean
        - name: required_int64_group
          in: query
          description: Required Integer in group parameters
          required: true
          schema:
            type: integer
            format: int64
        - name: string_group
          in: query
          description: String in group parameters
          schema:
            type: integer
        - name: boolean_group
          in: header
          description: Boolean in group parameters
          schema:
            type: boolean
        - name: int64_group
          in: query
          description: Integer in group parameters
          schema:
            type: integer
            format: int64
      responses:
        '400':
          description: Something wrong
  /fake/outer/number:
    post:
      tags:
        - fake
      description: Test serialization of outer number types
      operationId: fakeOuterNumberSerialize
      responses:
        '200':
          description: Output number
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/OuterNumber'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OuterNumber'
        description: Input number as post body
  /fake/outer/string:
    post:
      tags:
        - fake
      description: Test serialization of outer string types
      operationId: fakeOuterStringSerialize
      responses:
        '200':
          description: Output string
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/OuterString'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OuterString'
        description: Input string as post body
  /fake/outer/boolean:
    post:
      tags:
        - fake
      description: Test serialization of outer boolean types
      operationId: fakeOuterBooleanSerialize
      responses:
        '200':
          description: Output boolean
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/OuterBoolean'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OuterBoolean'
        description: Input boolean as post body
  /fake/outer/composite:
    post:
      tags:
        - fake
      description: Test serialization of object with outer number type
      operationId: fakeOuterCompositeSerialize
      responses:
        '200':
          description: Output composite
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/OuterComposite'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OuterComposite'
        description: Input composite as post body
  /fake/jsonFormData:
    get:
      tags:
        - fake
      summary: test json serialization of form data
      description: ''
      operationId: testJsonFormData
      responses:
        '200':
          description: successful operation
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                param:
                  description: field1
                  type: string
                param2:
                  description: field2
                  type: string
              required:
                - param
                - param2
  /fake/inline-additionalProperties:
    post:
      tags:
        - fake
      summary: test inline additionalProperties
      description: ''
      operationId: testInlineAdditionalProperties
      responses:
        '200':
          description: successful operation
      requestBody:
        content:
          application/json:
            schema:
              type: object
              additionalProperties:
                type: string
        description: request body
        required: true
  /fake/body-with-query-params:
    put:
      tags:
        - fake
      operationId: testBodyWithQueryParams
      parameters:
        - name: query
          in: query
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/User'
        required: true
  /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'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client'
      requestBody:
        $ref: '#/components/requestBodies/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
      responses:
        '200':
          description: Success
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FileSchemaTestClass'
        required: true
  /fake/test-query-parameters:
    put:
      tags:
        - fake
      description: To test the collection format in query parameters
      operationId: testQueryParameterCollectionFormat
      parameters:
        - name: pipe
          in: query
          required: true
          schema:
            type: array
            items:
              type: string
        - name: ioutil
          in: query
          required: true
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
        - name: http
          in: query
          required: true
          style: spaceDelimited
          schema:
            type: array
            items:
              type: string
        - name: url
          in: query
          required: true
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
        - name: context
          in: query
          required: true
          explode: true
          schema:
            type: array
            items:
              type: string
      responses:
        "200":
          description: Success
  '/fake/{petId}/uploadImageWithRequiredFile':
    post:
      tags:
        - pet
      summary: uploads an image (required)
      description: ''
      operationId: uploadFileWithRequiredFile
      parameters:
        - name: petId
          in: path
          description: ID of pet to update
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
      security:
        - petstore_auth:
            - 'write:pets'
            - 'read:pets'
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                additionalMetadata:
                  description: Additional data to pass to server
                  type: string
                requiredFile:
                  description: file to upload
                  type: string
                  format: binary
              required:
                - requiredFile
  /fake/health:
    get:
      tags:
        - fake
      summary: Health check endpoint
      responses:
        200:
          description: The instance started successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HealthCheckResult'
  /fake/array-of-enums:
    get:
      tags:
        - fake
      summary: Array of Enums
      operationId: getArrayOfEnums
      responses:
        200:
          description: Got named array of enums
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ArrayOfEnums'
  /values:
    get:
      tags:
        - values
      summary: Get some primitive variable values
      description: ''
      operationId: getSomeValues
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Variable'
        '400':
          description: Invalid Value
servers:
  - url: 'http://{server}.swagger.io:{port}/v2'
    description: petstore server
    variables:
      server:
        enum:
          - 'petstore'
          - 'qa-petstore'
          - 'dev-petstore'
        default: 'petstore'
      port:
        enum:
          - 80
          - 8080
        default: 80
  - url: https://localhost:8080/{version}
    description: The local server
    variables:
      version:
        enum:
          - 'v1'
          - 'v2'
        default: 'v2'
  - url: https://127.0.0.1/no_variable
    description: The local server without variables
components:
  requestBodies:
    UserArray:
      content:
        application/json:
          schema:
            type: array
            items:
              $ref: '#/components/schemas/User'
          examples:
            simple-list:
              summary: Simple list example
              description: Should not get into code examples
              value:
                - username: foo
                - username: bar
      description: List of user object
      required: true
    Client:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Client'
      description: client model
      required: true
    Pet:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Pet'
        application/xml:
          schema:
            $ref: '#/components/schemas/Pet'
      description: Pet object that needs to be added to the store
      required: true
  securitySchemes:
    petstore_auth:
      type: oauth2
      flows:
        implicit:
          authorizationUrl: 'http://petstore.swagger.io/api/oauth/dialog'
          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: http
      scheme: basic
    bearer_test:
      type: http
      scheme: bearer
      bearerFormat: JWT
  schemas:
    Foo:
      type: object
      properties:
        bar:
          $ref: '#/components/schemas/Bar'
    Bar:
      type: string
      default: bar
    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
          example: '2020-02-02T20:20:20.000222Z'
        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
        objectWithNoDeclaredProps:
          type: object
          # Note: the 'additionalProperties' keyword is not specified, which is
          # equivalent to allowing undeclared properties of any type.
          description: test code generation for objects
            Value must be a map of strings to values. It cannot be the 'null' value.
        objectWithNoDeclaredPropsNullable:
          type: object
          # Note: the 'additionalProperties' keyword is not specified, which is
          # equivalent to allowing undeclared properties of any type.
          description: test code generation for nullable objects.
            Value must be a map of strings to values or the 'null' value.
          nullable: true
        anyTypeProp:
          description: test code generation for any type
            Here the 'type' attribute is not specified, which means the value can be anything,
            including the null value, string, number, boolean, array or object.
            See https://github.com/OAI/OpenAPI-Specification/issues/1389
        # TODO: this should be supported, currently there are some issues in the code generation.
        #anyTypeExceptNullProp:
        #  description: any type except 'null'
        #    Here the 'type' attribute is not specified, which means the value can be anything,
        #    including the null value, string, number, boolean, array or object.
        #  not:
        #    type: 'null'
        anyTypePropNullable:
          description: test code generation for any type
            Here the 'type' attribute is not specified, which means the value can be anything,
            including the null value, string, number, boolean, array or object.
            The 'nullable' attribute does not change the allowed values.
          nullable: true
      xml:
        name: User
    Tag:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
      xml:
        name: Tag
    Pet:
      type: object
      required:
        - name
        - photoUrls
      properties:
        id:
          type: integer
          format: int64
          x-is-unique: true
        category:
          $ref: '#/components/schemas/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: '#/components/schemas/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
    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
    Dog:
      allOf:
        - $ref: '#/components/schemas/Animal'
        - type: object
          properties:
            breed:
              type: string
    Cat:
      allOf:
        - $ref: '#/components/schemas/Animal'
        - $ref: '#/components/schemas/Address'
        - type: object
          properties:
            declawed:
              type: boolean
    Address:
      type: object
      additionalProperties:
         type: integer
    Animal:
      type: object
      discriminator:
        propertyName: className
      required:
        - className
      properties:
        className:
          type: string
        color:
          type: string
          default: red
    AnimalFarm:
      type: array
      items:
        $ref: '#/components/schemas/Animal'
    format_test:
      type: object
      required:
        - number
        - byte
        - date
        - password
      properties:
        integer:
          type: integer
          maximum: 100
          minimum: 10
          multipleOf: 2
        int32:
          type: integer
          format: int32
          maximum: 200
          minimum: 20
        int64:
          type: integer
          format: int64
        number:
          maximum: 543.2
          minimum: 32.1
          type: number
          multipleOf: 32.5
        float:
          type: number
          format: float
          maximum: 987.6
          minimum: 54.3
        double:
          type: number
          format: double
          maximum: 123.4
          minimum: 67.8
        decimal:
          type: string
          format: number
        string:
          type: string
          pattern: '/[a-z]/i'
        byte:
          type: string
          format: byte
        binary:
          type: string
          format: binary
        date:
          type: string
          format: date
          example: '2020-02-02'
        dateTime:
          type: string
          format: date-time
          example: '2007-12-03T10:15:30+01:00'
        uuid:
          type: string
          format: uuid
          example: 72f98069-206d-4f12-9f12-3d1e525a8e84
        uuid_with_default:
          type: string
          format: uuid
          default: 11111111-206d-4f12-9f12-3d1e525a8e84
        password:
          type: string
          format: password
          maxLength: 64
          minLength: 10
        pattern_with_digits:
          description: A string that is a 10 digit number. Can have leading zeros.
          type: string
          pattern: '^\d{10}$'
        pattern_with_digits_and_delimiter:
          description: A string starting with 'image_' (case insensitive) and one to three digits following i.e. Image_01.
          type: string
          pattern: '/^image_\d{1,3}$/i'
    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_integer_only:
          type: integer
          enum:
            - 2
            - -2
        enum_number:
          type: number
          format: double
          enum:
            - 1.1
            - -1.2
        outerEnum:
          $ref: '#/components/schemas/OuterEnum'
        outerEnumInteger:
          $ref: '#/components/schemas/OuterEnumInteger'
        outerEnumDefaultValue:
          $ref: '#/components/schemas/OuterEnumDefaultValue'
        outerEnumIntegerDefaultValue:
          $ref: '#/components/schemas/OuterEnumIntegerDefaultValue'
    AdditionalPropertiesClass:
      type: object
      properties:
        map_property:
          type: object
          additionalProperties:
            type: string
        map_of_map_property:
          type: object
          additionalProperties:
            type: object
            additionalProperties:
              type: string
        anytype_1: {}
        map_with_undeclared_properties_anytype_1:
          type: object
        map_with_undeclared_properties_anytype_2:
          type: object
          properties: {}
        map_with_undeclared_properties_anytype_3:
          type: object
          additionalProperties: true
        empty_map:
          type: object
          description: an object with no declared properties and no undeclared
            properties, hence it's an empty map.
          additionalProperties: false
        map_with_undeclared_properties_string:
          type: object
          additionalProperties:
            type: string
    MixedPropertiesAndAdditionalPropertiesClass:
      type: object
      properties:
        uuid:
          type: string
          format: uuid
        dateTime:
          type: string
          format: date-time
        map:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/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
        map_of_enum_string:
          type: object
          additionalProperties:
            type: string
            enum:
              - UPPER
              - lower
        direct_map:
          type: object
          additionalProperties:
            type: boolean
        indirect_map:
          $ref: '#/components/schemas/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: '#/components/schemas/ReadOnlyFirst'
    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
    OuterEnum:
      nullable: true
      type: string
      enum:
        - placed
        - approved
        - delivered
    OuterEnumInteger:
      type: integer
      enum:
      - 0
      - 1
      - 2
    OuterEnumDefaultValue:
      type: string
      enum:
      - placed
      - approved
      - delivered
      default: placed
    OuterEnumIntegerDefaultValue:
      type: integer
      enum:
      - 0
      - 1
      - 2
      default: 0
    OuterComposite:
      type: object
      properties:
        my_number:
          $ref: '#/components/schemas/OuterNumber'
        my_string:
          $ref: '#/components/schemas/OuterString'
        my_boolean:
          $ref: '#/components/schemas/OuterBoolean'
    OuterNumber:
      type: number
    OuterString:
      type: string
    OuterBoolean:
      type: boolean
      x-codegen-body-parameter-name: boolean_post_body
    StringBooleanMap:
      additionalProperties:
        type: boolean
    FileSchemaTestClass:
      type: object
      properties:
        file:
          $ref: '#/components/schemas/File'
        files:
          type: array
          items:
            $ref: '#/components/schemas/File'
    File:
      type: object
      description: Must be named `File` for test.
      properties:
        sourceURI:
          description: Test capitalization
          type: string
    _special_model.name_:
      properties:
        '$special[property.name]':
          type: integer
          format: int64
        '_special_model.name_':
          type: string
      xml:
        name: '$special[model.name]'
    HealthCheckResult:
      type: object
      properties:
        NullableMessage:
          nullable: true
          type: string
      description: Just a string to inform instance is up and running. Make it nullable in hope to get it as pointer in generated model.
    NullableClass:
      type: object
      properties:
        integer_prop:
          type: integer
          nullable: true
        number_prop:
          type: number
          nullable: true
        boolean_prop:
          type: boolean
          nullable: true
        string_prop:
          type: string
          nullable: true
        date_prop:
          type: string
          format: date
          nullable: true
        datetime_prop:
          type: string
          format: date-time
          nullable: true
        array_nullable_prop:
          type: array
          nullable: true
          items:
            type: object
        array_and_items_nullable_prop:
          type: array
          nullable: true
          items:
            type: object
            nullable: true
        array_items_nullable:
          type: array
          items:
            type: object
            nullable: true
        object_nullable_prop:
          type: object
          nullable: true
          additionalProperties:
            type: object
        object_and_items_nullable_prop:
          type: object
          nullable: true
          additionalProperties:
            type: object
            nullable: true
        object_items_nullable:
          type: object
          additionalProperties:
            type: object
            nullable: true
      additionalProperties:
        type: object
        nullable: true
    fruit:
      properties:
        color:
          type: string
      oneOf:
        - $ref: '#/components/schemas/apple'
        - $ref: '#/components/schemas/banana'
      # Below additionalProperties is set to false to validate the use
      # case when a composed schema has additionalProperties set to false.
      additionalProperties: false
    apple:
      type: object
      properties:
        cultivar:
          type: string
          pattern: ^[a-zA-Z\s]*$
        origin:
          type: string
          pattern: /^[A-Z\s]*$/i
      nullable: true
    banana:
      type: object
      properties:
        lengthCm:
          type: number
    mammal:
      oneOf:
        - $ref: '#/components/schemas/whale'
        - $ref: '#/components/schemas/zebra'
        - $ref: '#/components/schemas/Pig'
      discriminator:
        propertyName: className
    whale:
      type: object
      properties:
        hasBaleen:
          type: boolean
        hasTeeth:
          type: boolean
        className:
          type: string
      required:
        - className
    zebra:
      type: object
      properties:
        type:
          type: string
          enum:
            - plains
            - mountain
            - grevys
        className:
          type: string
      required:
        - className
      additionalProperties: true
    Pig:
      oneOf:
        - $ref: '#/components/schemas/BasquePig'
        - $ref: '#/components/schemas/DanishPig'
      discriminator:
        propertyName: className
    BasquePig:
      type: object
      properties:
        className:
          type: string
      required:
        - className
    DanishPig:
      type: object
      properties:
        className:
          type: string
      required:
        - className
    gmFruit:
       properties:
          color:
             type: string
       anyOf:
          - $ref: '#/components/schemas/apple'
          - $ref: '#/components/schemas/banana'
       additionalProperties: false
    fruitReq:
       oneOf:
          - type: 'null'
          - $ref: '#/components/schemas/appleReq'
          - $ref: '#/components/schemas/bananaReq'
       additionalProperties: false
    appleReq:
      type: object
      properties:
        cultivar:
          type: string
        mealy:
          type: boolean
      required:
        - cultivar
      additionalProperties: false
    bananaReq:
      type: object
      properties:
        lengthCm:
          type: number
        sweet:
          type: boolean
      required:
        - lengthCm
      additionalProperties: false
    # go-experimental is unable to make Triangle and Quadrilateral models
    # correctly https://github.com/OpenAPITools/openapi-generator/issues/6149
    Drawing:
      type: object
      properties:
        mainShape:
          # A property whose value is a 'oneOf' type, and the type is referenced instead
          # of being defined inline. The value cannot be null.
          $ref: '#/components/schemas/Shape'
        shapeOrNull:
          # A property whose value is a 'oneOf' type, and the type is referenced instead
          # of being defined inline. The value may be null because ShapeOrNull has 'null'
          # type as a child schema of 'oneOf'.
          $ref: '#/components/schemas/ShapeOrNull'
        nullableShape:
          # A property whose value is a 'oneOf' type, and the type is referenced instead
          # of being defined inline. The value may be null because NullableShape has the
          # 'nullable: true' attribute. For this specific scenario this is exactly the
          # same thing as 'shapeOrNull'.
          $ref: '#/components/schemas/NullableShape'
        shapes:
          type: array
          items:
            $ref: '#/components/schemas/Shape'
      additionalProperties:
        # Here the additional properties are specified using a referenced schema.
        # This is just to validate the generated code works when using $ref
        # under 'additionalProperties'.
        $ref: '#/components/schemas/fruit'
    Shape:
      oneOf:
        - $ref: '#/components/schemas/Triangle'
        - $ref: '#/components/schemas/Quadrilateral'
      discriminator:
        propertyName: shapeType
    ShapeOrNull:
      description: The value may be a shape or the 'null' value.
        This is introduced in OAS schema >= 3.1.
      oneOf:
        - type: 'null'
        - $ref: '#/components/schemas/Triangle'
        - $ref: '#/components/schemas/Quadrilateral'
      discriminator:
        propertyName: shapeType
    NullableShape:
      description: The value may be a shape or the 'null' value.
        The 'nullable' attribute was introduced in OAS schema >= 3.0
        and has been deprecated in OAS schema >= 3.1.
      oneOf:
        - $ref: '#/components/schemas/Triangle'
        - $ref: '#/components/schemas/Quadrilateral'
      discriminator:
        propertyName: shapeType
      nullable: true
    ShapeInterface:
      properties:
        shapeType:
          type: string
      required:
        - shapeType
    TriangleInterface:
      properties:
        triangleType:
          type: string
      required:
        - triangleType
    Triangle:
      oneOf:
        - $ref: '#/components/schemas/EquilateralTriangle'
        - $ref: '#/components/schemas/IsoscelesTriangle'
        - $ref: '#/components/schemas/ScaleneTriangle'
      discriminator:
        propertyName: triangleType
      # Note: the 'additionalProperties' keyword is not specified, which is
      # equivalent to allowing undeclared properties of any type.
    EquilateralTriangle:
      allOf:
        - $ref: '#/components/schemas/ShapeInterface'
        - $ref: '#/components/schemas/TriangleInterface'
    IsoscelesTriangle:
      allOf:
        - $ref: '#/components/schemas/ShapeInterface'
        - $ref: '#/components/schemas/TriangleInterface'
      additionalProperties: false
    ScaleneTriangle:
      allOf:
        - $ref: '#/components/schemas/ShapeInterface'
        - $ref: '#/components/schemas/TriangleInterface'
    QuadrilateralInterface:
      properties:
        quadrilateralType:
          type: string
      required:
        - quadrilateralType
    Quadrilateral:
      oneOf:
        - $ref: '#/components/schemas/SimpleQuadrilateral'
        - $ref: '#/components/schemas/ComplexQuadrilateral'
      discriminator:
        propertyName: quadrilateralType
    SimpleQuadrilateral:
      allOf:
        - $ref: '#/components/schemas/ShapeInterface'
        - $ref: '#/components/schemas/QuadrilateralInterface'
    ComplexQuadrilateral:
      allOf:
        - $ref: '#/components/schemas/ShapeInterface'
        - $ref: '#/components/schemas/QuadrilateralInterface'
    GrandparentAnimal:
      type: object
      required:
        - pet_type
      properties:
        pet_type:
          type: string
      discriminator:
        propertyName: pet_type
    ParentPet:
      type: object
      allOf:
        - $ref: '#/components/schemas/GrandparentAnimal'
    #ChildCat:
    #  allOf:
    #    - $ref: '#/components/schemas/ParentPet'
    #    - type: object
    #      properties:
    #        name:
    #          type: string
    #        pet_type:
    #          x-enum-as-string: true
    #          type: string
    #          enum:
    #          - ChildCat
    #          default: ChildCat
    ArrayOfEnums:
      type: array
      items:
        $ref: '#/components/schemas/OuterEnum'
    DateTimeTest:
      type: string
      default: '2010-01-01T10:10:10.000111+01:00'
      example: '2010-01-01T10:10:10.000111+01:00'
      format: date-time
    DeprecatedObject:
      type: object
      deprecated: true
      properties:
        name:
          type: string
    ObjectWithDeprecatedFields:
      type: object
      properties:
        uuid:
          type: string
        id:
          type: number
          deprecated: true
        deprecatedRef:
          $ref: '#/components/schemas/DeprecatedObject'
        bars:
          type: array
          deprecated: true
          items:
            $ref: '#/components/schemas/Bar'
    PetWithRequiredTags:
      type: object
      required:
        - name
        - photoUrls
        - tags
      properties:
        id:
          type: integer
          format: int64
          x-is-unique: true
        category:
          $ref: '#/components/schemas/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: '#/components/schemas/Tag'
        status:
          type: string
          description: pet status in the store
          enum:
            - available
            - pending
            - sold
      xml:
        name: Pet
    ArrayOfInlineAllOf:
      type: object
      required:
        - name
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
          example: doggie
        array_allof_dog_property:
          type: array
          items:
            allOf:
              - type: object
                properties:
                  breed:
                    type: string
              - type: object
                properties:
                  color:
                    type: string
    EnumStringDiscriminator:
      type: object
      description: An object to test discriminator of enum string
      discriminator:
        propertyName: enum_str_type
      required:
        - enum_str_type
      properties:
        enum_str_type:
          description: enum string type
          type: string
          enum:
            - type_a
            - type_b
    ArrayDefault:
      properties:
        WithDefaultEmptyBracket:
          default: []
          items:
            type: string
          type: array
        WithoutDefault:
          items:
            type: string
          type: array
    Variable:
      description: Value object
      properties:
        name:
          type: string
          example: 'variable_1'
        value:
          $ref: '#/components/schemas/Value'
      required:
        - name
        - value
    Value:
      oneOf:
        - $ref: '#/components/schemas/Scalar'
        - $ref: '#/components/schemas/Array'
    Scalar:
      description: Values of scalar type
      oneOf:
        - type: string
          maxLength: 1089
        - type: number
        - type: boolean
    Array:
      description: Values of array type
      type: array
      minItems: 1
      items:
        $ref: '#/components/schemas/Scalar'
    NewPet:
      type: object
      required:
        - name
        - photoUrls
      properties:
        id:
          type: integer
          format: int64
          x-is-unique: true
        category_inline_allof:
          allOf:
            - type: object
              required:
                - name
              properties:
                id:
                  type: integer
                  format: int64
                name:
                  type: string
                  default: default-name
                category_tag:
                  type: object
                  properties:
                    id:
                      type: integer
                      format: int64
                    name:
                      type: string
        category_allOf_ref:
          allOf:
            - $ref: '#/components/schemas/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:
            allOf:
              - $ref: '#/components/schemas/Tag'
        status:
          type: string
          description: pet status in the store
          enum:
            - available
            - pending
            - sold
    PropertyNameCollision:
      type: object
      properties:
        _type:
          type: string
        type:
          type: string
        type_:
          type: string
