module Pact::Provider::TestMethods

def parse_body_from_response rack_response

def parse_body_from_response rack_response
  case rack_response.headers['Content-Type']
  when /json/
    JSON.load(rack_response.body)
  else
    rack_response.body
  end
end

def replay_interaction interaction

def replay_interaction interaction
  request = Request::Replayable.new(interaction.request)
  args = [request.path, request.body, request.headers]
  logger.info "Sending #{request.method.upcase} request to path: \"#{request.path}\" with headers: #{request.headers}, see debug logs for body"
  logger.debug "body :#{request.body}"
  response = self.send(request.method.downcase, *args)
  logger.info "Received response with status: #{response.status}, headers: #{response.headers}, see debug logs for body"
  logger.debug "body: #{response.body}"
end

def set_metadata example, key, value

def set_metadata example, key, value
  Pact::RSpec.with_rspec_3 do
    example.metadata[key] = value
  end
  Pact::RSpec.with_rspec_2 do
    example.example.metadata[key] = value
  end
end

def set_up_provider_state provider_state_name, consumer, options = {}

def set_up_provider_state provider_state_name, consumer, options = {}
  Pact.configuration.provider_state_set_up.call(provider_state_name, consumer, options)
end

def tear_down_provider_state provider_state_name, consumer, options = {}

def tear_down_provider_state provider_state_name, consumer, options = {}
  Pact.configuration.provider_state_tear_down.call(provider_state_name, consumer, options)
end