diff --git a/lib/webrat/adapters/mechanize.rb b/lib/webrat/adapters/mechanize.rb index e97aeb9..84f9fe1 100644 --- a/lib/webrat/adapters/mechanize.rb +++ b/lib/webrat/adapters/mechanize.rb @@ -39,8 +39,16 @@ module Webrat #:nodoc: @response.code.to_i end + def response_headers + @response.header + end + def mechanize - @mechanize ||= WWW::Mechanize.new + unless @mechanize + @mechanize = Mechanize.new + @mechanize.redirect_ok = false + end + @mechanize end def_delegators :mechanize, :basic_auth diff --git a/lib/webrat/adapters/rack.rb b/lib/webrat/adapters/rack.rb index 89f938d..3611846 100644 --- a/lib/webrat/adapters/rack.rb +++ b/lib/webrat/adapters/rack.rb @@ -18,6 +18,10 @@ module Webrat response.status end + def response_headers + response.headers + end + def response @session.last_response end diff --git a/lib/webrat/adapters/rails.rb b/lib/webrat/adapters/rails.rb index 1d4264c..fadb423 100644 --- a/lib/webrat/adapters/rails.rb +++ b/lib/webrat/adapters/rails.rb @@ -35,6 +35,10 @@ module Webrat response.code.to_i end + def response_headers + response.headers + end + def xml_content_type? response.headers["Content-Type"].to_s =~ /xml/ end diff --git a/lib/webrat/core/session.rb b/lib/webrat/core/session.rb index 939771b..07d86cb 100644 --- a/lib/webrat/core/session.rb +++ b/lib/webrat/core/session.rb @@ -281,7 +281,7 @@ For example: end def response_location - response.headers["Location"] + response_headers['Location'] end def current_host diff --git a/spec/private/mechanize/mechanize_adapter_spec.rb b/spec/private/mechanize/mechanize_adapter_spec.rb index fc620d6..aa7fc32 100644 --- a/spec/private/mechanize/mechanize_adapter_spec.rb +++ b/spec/private/mechanize/mechanize_adapter_spec.rb @@ -9,6 +9,13 @@ describe Webrat::MechanizeAdapter do @mech = Webrat::MechanizeAdapter.new end + describe "mechanize" do + it "should disable the following of redirects on the mechanize instance" do + mech = @mech.mechanize + mech.redirect_ok.should be_false + end + end + describe "post" do def url 'http://test.host/users' @@ -24,7 +31,8 @@ describe Webrat::MechanizeAdapter do it "should flatten model post data" do mechanize = mock(:mechanize) - WWW::Mechanize.stub!(:new => mechanize) + mechanize.stub!(:redirect_ok=) + Mechanize.stub!(:new => mechanize) mechanize.should_receive(:post).with(url, flattened_data) Webrat::MechanizeAdapter.new.post(url, data) end @@ -70,4 +78,16 @@ describe Webrat::MechanizeAdapter do @session.absolute_url(relative_url).should == 'https://test.host/wilma' end end + + describe "response_headers" do + it "should return the Headers object from the response" do + mech = @mech.mechanize + resp = mock('Mechanize::File') + hdr = Mechanize::Headers.new + resp.should_receive(:header).and_return(hdr) + mech.stub!(:get).and_return(resp) + @mech.get('/', nil) + @mech.response_headers.should == hdr + end + end end