diff --git a/lib/capybara/rack_test/browser.rb b/lib/capybara/rack_test/browser.rb index 9c75262e..52f9f37e 100644 --- a/lib/capybara/rack_test/browser.rb +++ b/lib/capybara/rack_test/browser.rb @@ -114,7 +114,11 @@ protected def env env = {} begin - env["HTTP_REFERER"] = last_request.url + if last_response.redirect? + env["HTTP_REFERER"] = last_request.env["HTTP_REFERER"] + else + env["HTTP_REFERER"] = last_request.url + end rescue Rack::Test::Error # no request yet end @@ -122,4 +126,5 @@ protected env end + end diff --git a/lib/capybara/spec/test_app.rb b/lib/capybara/spec/test_app.rb index 93a3fc2e..fdb1540b 100644 --- a/lib/capybara/spec/test_app.rb +++ b/lib/capybara/spec/test_app.rb @@ -22,6 +22,18 @@ class TestApp < Sinatra::Base redirect '/landed' end + get '/referer_base' do + 'Referer base Link that will redirect' + end + + get '/redirect_and_keep_referer' do + redirect '/check_referer' + end + + get '/check_referer' do + 'Check referer' + end + get '/host' do "Current host is #{request.scheme}://#{request.host}:#{request.port}" end diff --git a/spec/driver/rack_test_driver_spec.rb b/spec/driver/rack_test_driver_spec.rb index 15146d63..a29c71f1 100644 --- a/spec/driver/rack_test_driver_spec.rb +++ b/spec/driver/rack_test_driver_spec.rb @@ -86,4 +86,14 @@ describe Capybara::RackTest::Driver do @driver.body.should include('foobar') end end + + describe "keeping referer on redirect" do + it "should not update HTTP_REFERER on redirects" do + @driver.visit('/referer_base') + @driver.visit('/redirect_and_keep_referer') + @driver.body.should include('Check referer') + @driver.request.referer.should =~ /referer_base/ + end + + end end