38e699820f
Conflicts: lib/webrat/adapters/mechanize.rb
97 lines
2.5 KiB
Ruby
97 lines
2.5 KiB
Ruby
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
|
|
|
describe Webrat::MechanizeAdapter do
|
|
|
|
Mechanize = WWW::Mechanize if defined?(WWW::Mechanize)
|
|
|
|
before :each do
|
|
Webrat.configuration.mode = :mechanize
|
|
end
|
|
|
|
before(:each) 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'
|
|
end
|
|
|
|
def data
|
|
{:user => {:first_name => 'Nancy', :last_name => 'Callahan'}}
|
|
end
|
|
|
|
def flattened_data
|
|
{'user[first_name]' => 'Nancy', 'user[last_name]' => 'Callahan'}
|
|
end
|
|
|
|
it "should flatten model post data" do
|
|
mechanize = mock(:mechanize)
|
|
mechanize.stub!(:redirect_ok=)
|
|
Mechanize.stub!(:new => mechanize)
|
|
mechanize.should_receive(:post).with(url, flattened_data)
|
|
Webrat::MechanizeAdapter.new.post(url, data)
|
|
end
|
|
end
|
|
|
|
describe "#absolute_url" do
|
|
before(:each) do
|
|
@session = Webrat::MechanizeAdapter.new
|
|
@session.stub!(:current_url).and_return(absolute_url)
|
|
end
|
|
|
|
def absolute_url
|
|
'http://test.host/users/fred/cabbages'
|
|
end
|
|
|
|
def rooted_url
|
|
'/users/fred/cabbages'
|
|
end
|
|
|
|
def relative_url
|
|
'../../wilma'
|
|
end
|
|
|
|
it "should return unmodified url if prefixed with scheme" do
|
|
@session.absolute_url(absolute_url).should == absolute_url
|
|
end
|
|
|
|
it "should prefix scheme and hostname if url begins with /" do
|
|
@session.absolute_url(rooted_url).should == absolute_url
|
|
end
|
|
|
|
it "should resolve sibling URLs relative to current path" do
|
|
@session.absolute_url(relative_url).should == 'http://test.host/users/wilma'
|
|
end
|
|
|
|
it "should cope with sibling URLs from root of site" do
|
|
@session.stub!(:current_url).and_return('http://test.host')
|
|
@session.absolute_url(relative_url).should == 'http://test.host/wilma'
|
|
end
|
|
|
|
it "should cope with https" do
|
|
@session.stub!(:current_url).and_return('https://test.host')
|
|
@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
|