openapi-library / OpenAPIValidators

Use Jest or Chai to assert that HTTP responses satisfy an OpenAPI spec
MIT License
189 stars 35 forks source link

Response validation does not work when multiple response content-types are defined in the API #288

Open tomasvalentaopenbean opened 1 year ago

tomasvalentaopenbean commented 1 year ago

Are you using jest or chai? Chai

Are you using OpenAPI 2, 3.0.X, or 3.1.0? 3.0.3

Describe the bug clearly When API has defined multiple content-types as possible responses, the validation only picks up the first defined content-type and fails when the API returns the other content-type in the response.

Steps to reproduce the bug:

  1. Define an API that returns 2 content-types:
    get:
    summary: Get Something
    operationId: getSomething
    responses:
    '200':
      content:
        text/csv:
          schema:
            type: string
            format: binary
        application/json:
          schema:
            type: array
            items:
              type: string
  2. Send a request that generates the 2nd content-type as a response
  3. An error is received (see below)
 AssertionError: expected res to satisfy API spec

expected res to satisfy the '200' response defined for endpoint 'GET /something' in your API spec

res did not satisfy it because: response must be string

res contained: {
  body: [
    'text1',
    'text2',
    'text3',
    'text4',
    'text5'
  ]
}

The '200' response defined for endpoint 'GET /something' in API spec: {
  '200': {
    description: "Get something.",
    content: {
      'text/csv': { schema: { type: 'string', format: 'binary' } },
      'application/json': {
        schema: { type: 'array', items: { type: 'string' } } }
      }
    }
  }
}

What did you expect to happen instead? Validation should pass because the response is valid.

Are you going to resolve the issue?