openapi: 3.0.0
info:
  title: Request Parameters Test Cases
  description: Various request parameters types with defaults, examples and allowed values
  version: 1.0.0
paths:
  /request-parameters:
    post:
      tags:
        - Request Parameters
      summary: 1. Request parameter test cases
      description: Various request parameters types with defaults, examples and allowed values
      parameters:
        - name: country-code-1
          in: query
          description: Parameter level `single` example for a string parameter (has allowed-values)
          example: us
          schema:
            type: string
            enum:
              - us
              - in
              - jp
            default: us
        - name: country-code-2
          in: query
          description: Field level `single` example for a string parameter (has allowed-values)
          schema:
            type: string
            example: us
            enum:
              - us
              - in
              - jp
            default: us
        - name: country-code-3
          in: query
          description: Parameter level `multiple` examples (`only values`) for a string parameter (has allowed-values)
          examples: 
            - us
            - jp
          schema:
            type: string
            enum:
              - us
              - in
              - jp
            default: us
        - name: country-code-4
          in: query
          description: Parameter level `multiple` examples (with `value and summary`) for a string parameter (has allowed-values)
          examples: 
            example-1:
              value: us
              summary: United States
            example-2:
              value: in
              summary: India
          schema:
            type: string
            enum:
              - us
              - in
              - jp
        - name: country-code-5
          description: Parameter level `single` example for a `array` parameter (has allowed-values)
          in: query
          example:
            - us
            - jp
          schema:
            type: array
            minItems: 1
            maxItems: 3
            items:
              type: string
              enum:
              - us
              - in
              - jp
        - name: country-code-6
          description: Parameter level `multiple` example for a `array` parameter (has allowed-values)
          in: query
          examples:
            example-1:
              value:
                - in
                - jp
              summary: India and Japan  
            example-2:
              value:
                - in
                - us
              summary: India and United States
          schema:
            type: array
            minItems: 1
            maxItems: 3
            items:
              type: string
              enum:
              - us
              - in
              - jp
        - name: country-code-7
          description: Schema-Field level `single` examples for a `array` parameter (has allowed-values)
          in: query
          schema:
            type: array
            example:
              - us
              - jp
            items:
              type: string
              enum:
              - us
              - in
              - jp
        - name: country-code-8
          description: |
            Schema-Field level `multiple` examples (with value and summary) for a `array` parameter (has allowed-values)

            **INVALID** > `examples` under schema is `NOT ALLOWED`
          in: query
          schema:
            type: array
            examples:
              - in
              - jp
            items:
              type: string
              enum:
              - us
              - in
              - jp              
        - name: country-code-9
          description: |
            Schema-Field level `multiple` examples (with value and summary) for a `array` parameter (has allowed-values)

            **INVALID** > `examples` under schema is `NOT ALLOWED`
          in: query
          schema:
            type: array
            examples:
              example-1:
                value:
                  - in
                  - jp
                summary: India and Japan  
              example-2:
                value:
                  - in
                  - us
                summary: India and United States
            items:
              type: string
              enum:
              - us
              - in
              - jp
        - name: country-code-10
          in: query
          description: No example provided for `string`
          schema:
            type: string
            default: us
            enum:
              - us
              - in
              - jp
        - name: country-code-11
          description: No example provided for `array`
          in: query
          default: 
          - us
          - in
          schema:
            type: array
            minItems: 1
            maxItems: 3
            items:
              type: string
              enum:
              - us
              - in
              - jp
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                namePart:
                  type: object
                  description: |
                    `firstName` and `lastName` of the person
                  properties:
                    firstName:
                      type: string
                    lastName:
                      type: string
                agePart:
                  type: integer
                  description: 'Age of the person'
                genderPart:
                  type: gender
                  default: male
                  example: female
                  description: 'Gender of the person'
                interest:
                  type: array
                  example:
                    - music
                    - dance
                  items:
                    type: string
                    enum:
                    - music
                    - dance
                    - hiking
                photoPart:
                  type: string
                  format: binary
      responses:
        '200':
          description: successful operation
  /request-body-data-as-json:
    post:
      summary: 2. Request body as JSON
      tags:
        - Request Parameters
      requestBody:
        description: Request body as **JSON**
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                type: object
                properties:
                  amount:
                    type: integer
                    description: Amount
                  currency:
                    type: string
                    description: Currency Code
            examples:
              USD:
                description: Cost in `US Dollars`
                value: |
                  {
                    amount: 10,
                    currency: USD
                  }
              INR:
                description: Cost in `Indian Rupees`
                value: |
                  {
                    amount: 700,
                    currency: INR
                  }
      responses:
        '200':
          description: successful operation
  /request-body-data-as-form-data:
    post:
      summary: 3. Request body as FORM DATA
      tags:
        - Request Parameters
      requestBody:
        description: Request body as **FORM DATA**
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                type: object
                properties:
                  amount:
                    type: integer
                    description: Amount
                  currency:
                    type: string
                    description: Currency Code
            examples:
              USD:
                description: Cost in `US Dollars`
                value: |
                  {
                    amount: 10,
                    currency: USD
                  }
              INR:
                description: Cost in `Indian Rupees`
                value: |
                  {
                    amount: 700,
                    currency: INR
                  }
      responses:
        '200':
          description: successful operation
