---
swagger: "2.0"
info:
  version: "0.1.0"
  title: referenced validation
paths:
  /:
    get:
      parameters:
        - $ref: "#/parameters/rateLimit"
        - $ref: "#/parameters/requiredPatternProps"
      responses:
        default:
          description: the record
          schema:
            $ref: "#/definitions/record"
        404:
          $ref: "#/responses/notFound"
        403:
          $ref: "#/responses/wrongMe"
  /greatAgain:
    get:
      parameters:
        - $ref: "#/parameters/rateLimit"
        - $ref: "#/parameters/requiredPatternItems"
      responses:
        default:
          description: the record
          schema:
            $ref: "#/definitions/record"
        404:
          $ref: "#/responses/notFound"
        403:
          $ref: "#/responses/despicableMeItems"

parameters:
  rateLimit:
    name: X-Rate-Limit
    in: header
    type: integer                              #<--- try error with $ref in header
    format: int32
  requiredPatternProps:
    name: badPattern
    in: body
    schema:
      $ref: '#/definitions/record'              #<--- patternProperties in parameters
  requiredPatternItems:
    name: badPatternInItems
    in: body
    schema:
      type: array
      items:
        $ref: '#/definitions/lotOfErrors2'      #<--- patternProperties in parameters

responses:
  notFound:
    description: Not found
    schema:
      $ref: "#/definitions/record"
  wrongMe:
    description: wrong me
    schema:
      $ref: "#/definitions/lotOfErrors"
  despicableMeItems:
    description: despicable me
    schema:
      type: array
      items:
        $ref: "#/definitions/lotOfErrors2"

definitions:
  record:
    type: object
    additionalProperties: true
    required: [ createdAt, oneMore ]
    properties:
      createdAt:
        type: string
        format: date-time
  lotOfErrors:
    type: object
    required: [ a, b-1, x, z-1, bug ]
    properties:
      a:
        type: integer
        format: int32
        readOnly: true            #<--- warning
        default: 3
        example: 5
    additionalProperties:
      #type: object
      properties:
        x:
          type: integer
        z:
          type: integer
      additionalProperties: false
      patternProperties:                          #<-- unsupported: patternProperties in schema
        '^z-.*$':
          type: integer
          format: int32
          readOnly: true                       #<-- warning
          default: 3
          example: 5
    patternProperties:                          #<-- unsupported: patternProperties in schema
      '^b-.*$':
        type: integer
        format: int32
        default: 3
        example: 5
      '^)b-InvalidRegexp1.(*$':                                #<-- invalid regexp
        type: integer
        format: int32
        default: 3
        example: 5
  lotOfErrors2:                                 #<-- note the missing type to declare in items
    required: [ a , b-8]
    properties:
      a:
        type: integer
        format: int32
        default: 3
        example: 5
    patternProperties:                          #<-- unsupported: patternProperties in schema
      '^b-.*$':
        type: integer
        format: int32
        readOnly: true                          #<--- warning
        default: 3
        example: 5
      '^)b-InvalidRegexp2.(*$':                                #<-- invalid regexp
        type: integer
        format: int32
        default: 3
        example: 5
