function buildConnectionClass()

in index.js [134:205]


function buildConnectionClass (mocker) {
  class MockConnection extends BaseConnection {
    request (params, options) {
      const abortListener = () => {
        aborted = true
      }
      let aborted = false
      if (options.signal != null) {
        options.signal.addEventListener('abort', abortListener, { once: true })
      }

      return new Promise((resolve, reject) => {
        normalizeParams(params, prepareResponse)
        function prepareResponse (error, params) {
          /* istanbul ignore next */
          if (options.signal != null) {
            if ('removeEventListener' in options.signal) {
              options.signal.removeEventListener('abort', abortListener)
            } else {
              options.signal.removeListener('abort', abortListener)
            }
          }
          /* istanbul ignore next */
          if (aborted) {
            return reject(new RequestAbortedError())
          }
          /* istanbul ignore next */
          if (error) {
            return reject(new ConnectionError(error.message))
          }

          const response = {}
          let payload = ''
          let statusCode = 200

          const resolver = mocker.get(params)

          if (resolver === null) {
            payload = { error: 'Mock not found', params }
            statusCode = 404
          } else {
            payload = resolver(params)
            if (payload instanceof ResponseError) {
              statusCode = payload.statusCode
              payload = payload.body
            } else if (payload instanceof ElasticsearchClientError) {
              return reject(payload)
            }
          }

          response.body = typeof payload === 'string' ? payload : JSON.stringify(payload)
          response.statusCode = statusCode
          response.headers = {
            'content-type': typeof payload === 'string'
              ? 'text/plain;utf=8'
              : 'application/json;utf=8',
            date: new Date().toISOString(),
            connection: 'keep-alive',
            'x-elastic-product': 'Elasticsearch',
            'content-length': Buffer.byteLength(
              typeof payload === 'string' ? payload : JSON.stringify(payload)
            )
          }

          resolve(response)
        }
      })
    }
  }

  return MockConnection
}