Sha256: 10fc34bbac31d71d149b750a2360692eef24cbb66a759da41c44929193c8ab10

Contents?: true

Size: 1.32 KB

Versions: 1

Compression:

Stored size: 1.32 KB

Contents

require 'rack/test'

module Kookaburra
  class APIDriver
    def initialize(opts)
      @app = opts.fetch(:app)
    end

    protected

    include Rack::Test::Methods

    attr_reader :app

    def raise_unless_status(expected_status, short_description)
      message = "%s failed (#{last_response.status})\n#{last_response.body}" % short_description
      raise message unless last_response.status == expected_status
    end

    ##### JSON Tools #####

    def post_as_json(short_description, path, data = {}, options = {})
      set_json_request_headers
      post path, data.to_json
      raise_unless_status options[:expected_status] || 201, short_description
    end

    def put_as_json(short_description, path, data = {}, options = {})
      set_json_request_headers
      put path, data.to_json
      raise_unless_status options[:expected_status] || 201, short_description
    end

    def get_as_json(short_description, path, data = {}, options = {})
      set_json_request_headers
      get path, data
      raise_unless_status options[:expected_status] || 200, short_description
    end

    def hash_from_response_json
      HashWithIndifferentAccess.new( JSON.parse(last_response.body) )
    end

    def set_json_request_headers
      header 'Content-Type', 'application/json'
      header 'Accept', 'application/json'
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
kookaburra-0.8.0 lib/kookaburra/api_driver.rb