Eliminate dependency on Heroku apps to make specs less brittle
Fold all current_host specs into common current{_url,_host,_path} specs, since current_host simply calls current_url. Since current_host omits the port, differentiating between different servers on localhost is impossible without the help of current_url. Two examples are pending now, since Rack::Test ignores ports when changing hosts.
This commit is contained in:
parent
4c86d3a5cb
commit
74d01a7b2b
|
@ -56,19 +56,15 @@ shared_examples_for "session" do
|
|||
@session.body.should_not include('test_cookie')
|
||||
end
|
||||
|
||||
it "resets current host" do
|
||||
@session.visit('http://capybara-testapp.heroku.com')
|
||||
@session.current_host.should == 'http://capybara-testapp.heroku.com'
|
||||
it "resets current url, host, path" do
|
||||
@session.visit '/foo'
|
||||
@session.current_url.should_not be_empty
|
||||
@session.current_host.should_not be_empty
|
||||
@session.current_path.should == '/foo'
|
||||
|
||||
@session.reset_session!
|
||||
[nil, '', 'about:blank'].should include @session.current_url
|
||||
@session.current_host.should be_nil
|
||||
end
|
||||
|
||||
it "resets current path" do
|
||||
@session.visit('/with_html')
|
||||
@session.current_path.should == '/with_html'
|
||||
|
||||
@session.reset_session!
|
||||
@session.current_path.should be_nil
|
||||
end
|
||||
|
||||
|
@ -112,7 +108,6 @@ shared_examples_for "session" do
|
|||
it_should_behave_like "unselect"
|
||||
it_should_behave_like "within"
|
||||
it_should_behave_like "current_url"
|
||||
it_should_behave_like "current_host"
|
||||
|
||||
it "should encode complex field names, like array[][value]" do
|
||||
@session.visit('/form')
|
||||
|
|
|
@ -1,68 +0,0 @@
|
|||
shared_examples_for "current_host" do
|
||||
after do
|
||||
Capybara.app_host = nil
|
||||
end
|
||||
|
||||
describe '#current_host' do
|
||||
it "is affected by visiting a page directly" do
|
||||
@session.visit('http://capybara-testapp.heroku.com/host')
|
||||
@session.body.should include('Current host is http://capybara-testapp.heroku.com')
|
||||
@session.current_host.should == 'http://capybara-testapp.heroku.com'
|
||||
end
|
||||
|
||||
it "returns to the app host when visiting a relative url" do
|
||||
Capybara.app_host = "http://capybara1.elabs.se"
|
||||
@session.visit('http://capybara-testapp.heroku.com/host')
|
||||
@session.body.should include('Current host is http://capybara-testapp.heroku.com')
|
||||
@session.current_host.should == 'http://capybara-testapp.heroku.com'
|
||||
@session.visit('/host')
|
||||
@session.body.should include('Current host is http://capybara1.elabs.se')
|
||||
@session.current_host.should == 'http://capybara1.elabs.se'
|
||||
end
|
||||
|
||||
it "is affected by setting Capybara.app_host" do
|
||||
Capybara.app_host = "http://capybara-testapp.heroku.com"
|
||||
@session.visit('/host')
|
||||
@session.body.should include('Current host is http://capybara-testapp.heroku.com')
|
||||
@session.current_host.should == 'http://capybara-testapp.heroku.com'
|
||||
Capybara.app_host = "http://capybara1.elabs.se"
|
||||
@session.visit('/host')
|
||||
@session.body.should include('Current host is http://capybara1.elabs.se')
|
||||
@session.current_host.should == 'http://capybara1.elabs.se'
|
||||
end
|
||||
|
||||
it "is unaffected by following a relative link" do
|
||||
@session.visit('http://capybara-testapp.heroku.com/host_links')
|
||||
@session.click_link('Relative Host')
|
||||
@session.body.should include('Current host is http://capybara-testapp.heroku.com')
|
||||
@session.current_host.should == 'http://capybara-testapp.heroku.com'
|
||||
end
|
||||
|
||||
it "is affected by following an absolute link" do
|
||||
@session.visit('http://capybara-testapp.heroku.com/host_links')
|
||||
@session.click_link('Absolute Host')
|
||||
@session.body.should include('Current host is http://capybara2.elabs.se')
|
||||
@session.current_host.should == 'http://capybara2.elabs.se'
|
||||
end
|
||||
|
||||
it "is unaffected by posting through a relative form" do
|
||||
@session.visit('http://capybara-testapp.heroku.com/host_links')
|
||||
@session.click_button('Relative Host')
|
||||
@session.body.should include('Current host is http://capybara-testapp.heroku.com')
|
||||
@session.current_host.should == 'http://capybara-testapp.heroku.com'
|
||||
end
|
||||
|
||||
it "is affected by posting through an absolute form" do
|
||||
@session.visit('http://capybara-testapp.heroku.com/host_links')
|
||||
@session.click_button('Absolute Host')
|
||||
@session.body.should include('Current host is http://capybara2.elabs.se')
|
||||
@session.current_host.should == 'http://capybara2.elabs.se'
|
||||
end
|
||||
|
||||
it "is affected by following a redirect" do
|
||||
@session.visit('http://capybara-testapp.heroku.com/redirect_secure')
|
||||
@session.body.should include('Current host is https://capybara-testapp.heroku.com')
|
||||
@session.current_host.should == 'https://capybara-testapp.heroku.com'
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,15 +1,85 @@
|
|||
shared_examples_for "current_url" do
|
||||
describe '#current_url' do
|
||||
it "should return the current url" do
|
||||
@session.visit('/form')
|
||||
@session.current_url.should =~ %r(http://[^/]+/form)
|
||||
end
|
||||
before :all do
|
||||
@servers = 2.times.map { Capybara::Server.new(TestApp.clone).boot }
|
||||
# sanity check
|
||||
@servers[0].port.should_not == @servers[1].port
|
||||
@servers.map { |s| s.port }.should_not include 80
|
||||
end
|
||||
|
||||
describe '#current_path' do
|
||||
it 'should show the correct location' do
|
||||
@session.visit('/foo')
|
||||
@session.current_path.should == '/foo'
|
||||
def bases
|
||||
@servers.map { |s| "http://#{s.host}:#{s.port}" }
|
||||
end
|
||||
|
||||
describe '#current_url, #current_path, #current_host' do
|
||||
def should_be_on server_index, path="/host", scheme="http"
|
||||
# Check that we are on /host on the given server
|
||||
s = @servers[server_index]
|
||||
@session.current_url.should == "#{scheme}://#{s.host}:#{s.port}#{path}"
|
||||
@session.current_host.should == "#{scheme}://#{s.host}" # no port
|
||||
@session.current_path.should == path
|
||||
if path == '/host'
|
||||
# Server should agree with us
|
||||
@session.body.should include("Current host is #{scheme}://#{s.host}:#{s.port}")
|
||||
end
|
||||
end
|
||||
|
||||
def visit_host_links
|
||||
@session.visit("#{bases[0]}/host_links?absolute_host=#{bases[1]}")
|
||||
end
|
||||
|
||||
it "is affected by visiting a page directly" do
|
||||
@session.visit("#{bases[0]}/host")
|
||||
should_be_on 0
|
||||
end
|
||||
|
||||
it "returns to the app host when visiting a relative url" do
|
||||
Capybara.app_host = bases[1]
|
||||
@session.visit("#{bases[0]}/host")
|
||||
should_be_on 0
|
||||
@session.visit('/host')
|
||||
should_be_on 1
|
||||
Capybara.app_host = nil
|
||||
end
|
||||
|
||||
it "is affected by setting Capybara.app_host" do
|
||||
Capybara.app_host = bases[0]
|
||||
@session.visit("/host")
|
||||
should_be_on 0
|
||||
Capybara.app_host = bases[1]
|
||||
@session.visit("/host")
|
||||
should_be_on 1
|
||||
Capybara.app_host = nil
|
||||
end
|
||||
|
||||
it "is unaffected by following a relative link" do
|
||||
pending 'reverts to port 80'
|
||||
visit_host_links
|
||||
@session.click_link("Relative Host")
|
||||
should_be_on 0
|
||||
end
|
||||
|
||||
it "is affected by following an absolute link" do
|
||||
visit_host_links
|
||||
@session.click_link("Absolute Host")
|
||||
should_be_on 1
|
||||
end
|
||||
|
||||
it "is unaffected by posting through a relative form" do
|
||||
pending 'reverts to port 80'
|
||||
visit_host_links
|
||||
@session.click_button("Relative Host")
|
||||
should_be_on 0
|
||||
end
|
||||
|
||||
it "is affected by posting through an absolute form" do
|
||||
visit_host_links
|
||||
@session.click_button("Absolute Host")
|
||||
should_be_on 1
|
||||
end
|
||||
|
||||
it "is affected by following a redirect" do
|
||||
@session.visit("#{bases[0]}/redirect")
|
||||
should_be_on 0, "/landed"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -23,7 +23,7 @@ class TestApp < Sinatra::Base
|
|||
end
|
||||
|
||||
get '/host' do
|
||||
"Current host is #{request.scheme}://#{request.host}"
|
||||
"Current host is #{request.scheme}://#{request.host}:#{request.port}"
|
||||
end
|
||||
|
||||
get '/redirect/:times/times' do
|
||||
|
@ -72,7 +72,7 @@ class TestApp < Sinatra::Base
|
|||
end
|
||||
|
||||
get '/redirect_secure' do
|
||||
redirect "https://#{request.host}/host"
|
||||
redirect "https://#{request.host}:#{request.port}/host"
|
||||
end
|
||||
|
||||
get '/slow_response' do
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
<p>
|
||||
<a href="/host">Relative Host</a>
|
||||
<a href="http://capybara2.elabs.se/host">Absolute Host</a>
|
||||
<a href="<%= params[:absolute_host] %>/host">Absolute Host</a>
|
||||
</p>
|
||||
|
||||
<form action="/host">
|
||||
<p><input type="submit" value="Relative Host"/></p>
|
||||
</form>
|
||||
|
||||
<form action="http://capybara2.elabs.se/host">
|
||||
<form action="<%= params[:absolute_host] %>/host">
|
||||
<p><input type="submit" value="Absolute Host"/></p>
|
||||
</form>
|
||||
|
|
Loading…
Reference in New Issue