diff --git a/lib/airborne.rb b/lib/airborne.rb index 60d4101..60cf145 100644 --- a/lib/airborne.rb +++ b/lib/airborne.rb @@ -10,6 +10,7 @@ config.add_setting :base_url config.add_setting :headers config.add_setting :rack_app + config.add_setting :rack_browser config.add_setting :requester_type config.add_setting :requester_module end diff --git a/lib/airborne/base.rb b/lib/airborne/base.rb index a7c6ef0..a9bdd10 100644 --- a/lib/airborne/base.rb +++ b/lib/airborne/base.rb @@ -18,7 +18,7 @@ def self.configure def self.included(base) if !Airborne.configuration.requester_module.nil? base.send(:include, Airborne.configuration.requester_module) - elsif !Airborne.configuration.rack_app.nil? + elsif !Airborne.configuration.rack_app.nil? || !Airborne.configuration.rack_browser.nil? base.send(:include, RackTestRequester) else base.send(:include, RestClientRequester) diff --git a/lib/airborne/rack_test_requester.rb b/lib/airborne/rack_test_requester.rb index abcb652..01f3f9b 100644 --- a/lib/airborne/rack_test_requester.rb +++ b/lib/airborne/rack_test_requester.rb @@ -6,7 +6,8 @@ def make_request(method, url, options = {}) headers = options[:headers] || {} base_headers = Airborne.configuration.headers || {} headers = base_headers.merge(headers) - browser = Rack::Test::Session.new(Rack::MockSession.new(Airborne.configuration.rack_app)) + browser = Airborne.configuration.rack_browser + browser ||= Rack::Test::Session.new(Rack::MockSession.new(Airborne.configuration.rack_app)) headers.each { |name, value| browser.header(name, value) } browser.send(method, url, options[:body] || {}, headers) Rack::MockResponse.class_eval do diff --git a/spec/airborne/rack/rack_sinatra_browser_spec.rb b/spec/airborne/rack/rack_sinatra_browser_spec.rb new file mode 100644 index 0000000..7dd9ffc --- /dev/null +++ b/spec/airborne/rack/rack_sinatra_browser_spec.rb @@ -0,0 +1,23 @@ +require 'json' +require 'sinatra' + +class SampleApp < Sinatra::Application + before do + content_type 'application/json' + end + + get '/' do + { foo: 'bar' }.to_json + end +end + +Airborne.configure do |config| + config.rack_browser = Rack::Test::Session.new(Rack::MockSession.new(SampleApp)) +end + +describe 'rack app via browser' do + it 'should allow requests against a sinatra app' do + get '/' + expect_json_types(foo: :string) + end +end