class OpenapiRspec::RequestValidator

Attributes

response[R]
result[R]

Public Instance Methods

app() click to toggle source
# File lib/openapi_rspec/request_validator.rb, line 22
def app
  OpenapiRspec.app
end
description() click to toggle source
# File lib/openapi_rspec/request_validator.rb, line 35
def description
  "return valid response with code #{code} on `#{method.to_s.upcase} #{path}`"
end
failure_message() click to toggle source
# File lib/openapi_rspec/request_validator.rb, line 39
def failure_message
  if response
    (%W[Response: #{response.body}] + result.errors).join("\n")
  else
    result.errors.join("\n")
  end
end
matches?(doc) click to toggle source
# File lib/openapi_rspec/request_validator.rb, line 26
def matches?(doc)
  @result = doc.validate_request(path: path, method: method, code: code, media_type: media_type)
  return false unless result.valid?

  perform_request(doc)
  result.validate_response(body: response.body, code: response.status)
  result.valid?
end

Private Instance Methods

perform_request(doc) click to toggle source
# File lib/openapi_rspec/request_validator.rb, line 62
def perform_request(doc)
  headers.each do |key, value|
    header key, value
  end
  request(request_uri(doc), method: method, **request_params)
  @response = last_response
end
request_params() click to toggle source
# File lib/openapi_rspec/request_validator.rb, line 70
def request_params
  {
    headers: headers,
    params: params,
  }
end
request_uri(doc) click to toggle source
# File lib/openapi_rspec/request_validator.rb, line 49
def request_uri(doc)
  path.scan(/\{([^\}]*)\}/).each do |param|
    key = param.first.to_sym
    if params && params[key]
      @path = path.gsub "{#{key}}", params.delete(key).to_s
    else
      raise URI::InvalidURIError, "No substitution data found for {#{key}}"\
        " to test the path #{path}."
    end
  end
  "#{doc.api_base_path}#{path}?#{URI.encode_www_form(query)}"
end