2010-09-17 19:56:32 -04:00
|
|
|
require 'spec_helper'
|
2009-11-07 14:44:45 -05:00
|
|
|
|
2012-10-30 09:32:47 -04:00
|
|
|
module TestSessions
|
|
|
|
RackTest = Capybara::Session.new(:rack_test, TestApp)
|
|
|
|
end
|
|
|
|
|
2012-07-21 16:44:10 -04:00
|
|
|
Capybara::SpecHelper.run_specs TestSessions::RackTest, "RackTest", :skip => [
|
|
|
|
:js,
|
|
|
|
:screenshot,
|
|
|
|
:frames,
|
2012-11-14 08:29:12 -05:00
|
|
|
:windows,
|
2013-02-25 13:37:25 -05:00
|
|
|
:server,
|
|
|
|
:hover
|
2012-07-21 16:44:10 -04:00
|
|
|
]
|
|
|
|
|
2009-11-16 16:02:16 -05:00
|
|
|
describe Capybara::Session do
|
2009-11-07 14:44:45 -05:00
|
|
|
context 'with rack test driver' do
|
|
|
|
before do
|
2010-09-07 12:16:19 -04:00
|
|
|
@session = TestSessions::RackTest
|
2009-11-07 14:44:45 -05:00
|
|
|
end
|
2009-12-12 07:33:00 -05:00
|
|
|
|
2009-11-07 14:44:45 -05:00
|
|
|
describe '#driver' do
|
|
|
|
it "should be a rack test driver" do
|
2011-04-05 11:42:12 -04:00
|
|
|
@session.driver.should be_an_instance_of(Capybara::RackTest::Driver)
|
2009-11-07 14:44:45 -05:00
|
|
|
end
|
|
|
|
end
|
2009-12-12 07:33:00 -05:00
|
|
|
|
2009-11-07 14:44:45 -05:00
|
|
|
describe '#mode' do
|
|
|
|
it "should remember the mode" do
|
|
|
|
@session.mode.should == :rack_test
|
|
|
|
end
|
|
|
|
end
|
2009-12-12 07:33:00 -05:00
|
|
|
|
2010-04-09 08:01:17 -04:00
|
|
|
describe '#click_link' do
|
2012-07-12 08:39:18 -04:00
|
|
|
it "should use data-method if option is true" do
|
|
|
|
@session.driver.options[:respect_data_method] = true
|
2010-04-09 08:01:17 -04:00
|
|
|
@session.visit "/with_html"
|
|
|
|
@session.click_link "A link with data-method"
|
2012-09-09 21:05:17 -04:00
|
|
|
@session.html.should include('The requested object was deleted')
|
2010-04-09 08:01:17 -04:00
|
|
|
end
|
2011-08-30 05:20:29 -04:00
|
|
|
|
|
|
|
it "should not use data-method if option is false" do
|
|
|
|
@session.driver.options[:respect_data_method] = false
|
|
|
|
@session.visit "/with_html"
|
|
|
|
@session.click_link "A link with data-method"
|
2012-09-09 21:05:17 -04:00
|
|
|
@session.html.should include('Not deleted')
|
2011-08-30 05:20:29 -04:00
|
|
|
end
|
|
|
|
|
2011-10-18 08:41:44 -04:00
|
|
|
it "should use data-method if available even if it's capitalized" do
|
2012-07-12 08:39:18 -04:00
|
|
|
@session.driver.options[:respect_data_method] = true
|
2011-10-18 08:41:44 -04:00
|
|
|
@session.visit "/with_html"
|
2012-01-31 10:20:35 -05:00
|
|
|
@session.click_link "A link with capitalized data-method"
|
2012-09-09 21:05:17 -04:00
|
|
|
@session.html.should include('The requested object was deleted')
|
2011-10-18 08:41:44 -04:00
|
|
|
end
|
|
|
|
|
2011-08-30 05:20:29 -04:00
|
|
|
after do
|
2012-07-12 08:39:18 -04:00
|
|
|
@session.driver.options[:respect_data_method] = false
|
2011-08-30 05:20:29 -04:00
|
|
|
end
|
2010-04-09 08:01:17 -04:00
|
|
|
end
|
|
|
|
|
2010-12-06 02:22:59 -05:00
|
|
|
describe "#attach_file" do
|
|
|
|
context "with multipart form" do
|
|
|
|
it "should submit an empty form-data section if no file is submitted" do
|
|
|
|
@session.visit("/form")
|
|
|
|
@session.click_button("Upload Empty")
|
2012-09-09 21:05:17 -04:00
|
|
|
@session.html.should include('Successfully ignored empty file field.')
|
2010-12-06 02:22:59 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2009-11-07 14:44:45 -05:00
|
|
|
end
|
|
|
|
end
|
2012-07-13 07:15:44 -04:00
|
|
|
|
|
|
|
describe Capybara::RackTest::Driver do
|
|
|
|
before do
|
|
|
|
@driver = TestSessions::RackTest.driver
|
|
|
|
end
|
|
|
|
|
|
|
|
describe ':headers option' do
|
|
|
|
it 'should always set headers' do
|
|
|
|
@driver = Capybara::RackTest::Driver.new(TestApp, :headers => {'HTTP_FOO' => 'foobar'})
|
|
|
|
@driver.visit('/get_header')
|
2012-09-09 21:05:17 -04:00
|
|
|
@driver.html.should include('foobar')
|
2012-07-13 07:15:44 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'should keep headers on link clicks' do
|
|
|
|
@driver = Capybara::RackTest::Driver.new(TestApp, :headers => {'HTTP_FOO' => 'foobar'})
|
|
|
|
@driver.visit('/header_links')
|
2013-02-19 12:03:26 -05:00
|
|
|
@driver.find_xpath('.//a').first.click
|
2012-09-09 21:05:17 -04:00
|
|
|
@driver.html.should include('foobar')
|
2012-07-13 07:15:44 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'should keep headers on form submit' do
|
|
|
|
@driver = Capybara::RackTest::Driver.new(TestApp, :headers => {'HTTP_FOO' => 'foobar'})
|
|
|
|
@driver.visit('/header_links')
|
2013-02-19 12:03:26 -05:00
|
|
|
@driver.find_xpath('.//input').first.click
|
2012-09-09 21:05:17 -04:00
|
|
|
@driver.html.should include('foobar')
|
2012-07-13 07:15:44 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'should keep headers on redirects' do
|
|
|
|
@driver = Capybara::RackTest::Driver.new(TestApp, :headers => {'HTTP_FOO' => 'foobar'})
|
|
|
|
@driver.visit('/get_header_via_redirect')
|
2012-09-09 21:05:17 -04:00
|
|
|
@driver.html.should include('foobar')
|
2012-07-13 07:15:44 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe ':follow_redirects option' do
|
|
|
|
it "defaults to following redirects" do
|
|
|
|
@driver = Capybara::RackTest::Driver.new(TestApp)
|
|
|
|
|
|
|
|
@driver.visit('/redirect')
|
|
|
|
@driver.response.header['Location'].should be_nil
|
2012-09-06 04:46:54 -04:00
|
|
|
@driver.browser.current_url.should match %r{/landed$}
|
2012-07-13 07:15:44 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it "is possible to not follow redirects" do
|
|
|
|
@driver = Capybara::RackTest::Driver.new(TestApp, :follow_redirects => false)
|
|
|
|
|
|
|
|
@driver.visit('/redirect')
|
2012-09-06 04:46:54 -04:00
|
|
|
@driver.response.header['Location'].should match %r{/redirect_again$}
|
|
|
|
@driver.browser.current_url.should match %r{/redirect$}
|
2012-07-13 07:15:44 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe ':redirect_limit option' do
|
|
|
|
context "with default redirect limit" do
|
|
|
|
before do
|
|
|
|
@driver = Capybara::RackTest::Driver.new(TestApp)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "should follow 5 redirects" do
|
|
|
|
@driver.visit("/redirect/5/times")
|
2012-09-09 21:05:17 -04:00
|
|
|
@driver.html.should include('redirection complete')
|
2012-07-13 07:15:44 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it "should not follow more than 6 redirects" do
|
2012-10-30 09:26:19 -04:00
|
|
|
expect do
|
2012-07-13 07:15:44 -04:00
|
|
|
@driver.visit("/redirect/6/times")
|
2012-10-30 09:26:19 -04:00
|
|
|
end.to raise_error(Capybara::InfiniteRedirectError)
|
2012-07-13 07:15:44 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "with 21 redirect limit" do
|
|
|
|
before do
|
|
|
|
@driver = Capybara::RackTest::Driver.new(TestApp, :redirect_limit => 21)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "should follow 21 redirects" do
|
|
|
|
@driver.visit("/redirect/21/times")
|
2012-09-09 21:05:17 -04:00
|
|
|
@driver.html.should include('redirection complete')
|
2012-07-13 07:15:44 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it "should not follow more than 21 redirects" do
|
2012-10-30 09:26:19 -04:00
|
|
|
expect do
|
2012-07-13 07:15:44 -04:00
|
|
|
@driver.visit("/redirect/22/times")
|
2012-10-30 09:26:19 -04:00
|
|
|
end.to raise_error(Capybara::InfiniteRedirectError)
|
2012-07-13 07:15:44 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|