teamcapybara--capybara/spec/rack_test_spec.rb

187 lines
5.6 KiB
Ruby
Raw Normal View History

2016-03-08 00:52:19 +00:00
# frozen_string_literal: true
require 'spec_helper'
2012-10-30 13:32:47 +00:00
module TestSessions
RackTest = Capybara::Session.new(:rack_test, TestApp)
end
Capybara::SpecHelper.run_specs TestSessions::RackTest, "RackTest", :capybara_skip => [
:js,
2013-04-01 22:41:55 +00:00
:modals,
:screenshot,
:frames,
:windows,
2015-01-23 19:49:38 +00:00
:send_keys,
2013-02-25 18:37:25 +00:00
:server,
:hover,
:about_scheme,
]
RSpec.describe Capybara::Session do
context 'with rack test driver' do
before do
@session = TestSessions::RackTest
end
describe '#driver' do
it "should be a rack test driver" do
expect(@session.driver).to be_an_instance_of(Capybara::RackTest::Driver)
end
end
describe '#mode' do
it "should remember the mode" do
expect(@session.mode).to eq(:rack_test)
end
end
describe '#click_link' do
it "should use data-method if option is true" do
@session.driver.options[:respect_data_method] = true
@session.visit "/with_html"
@session.click_link "A link with data-method"
expect(@session.html).to include('The requested object was deleted')
end
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"
expect(@session.html).to include('Not deleted')
end
it "should use data-method if available even if it's capitalized" do
@session.driver.options[:respect_data_method] = true
@session.visit "/with_html"
@session.click_link "A link with capitalized data-method"
expect(@session.html).to include('The requested object was deleted')
end
after do
@session.driver.options[:respect_data_method] = false
end
end
2015-08-25 23:57:01 +00:00
describe "#fill_in" do
it "should warn that :fill_options are not supported" do
expect_any_instance_of(Capybara::Node::Element).to receive(:warn)
.with("Options passed to Capybara::Node#set but the driver doesn't support them")
@session.visit "/with_html"
@session.fill_in 'test_field', with: 'not_moneky', fill_options: { random: true }
end
end
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")
expect(@session.html).to include('Successfully ignored empty file field.')
end
end
end
end
end
2012-07-13 11:15:44 +00:00
RSpec.describe Capybara::RackTest::Driver do
2012-07-13 11:15:44 +00:00
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')
expect(@driver.html).to include('foobar')
2012-07-13 11:15:44 +00:00
end
it 'should keep headers on link clicks' do
@driver = Capybara::RackTest::Driver.new(TestApp, :headers => {'HTTP_FOO' => 'foobar'})
@driver.visit('/header_links')
@driver.find_xpath('.//a').first.click
expect(@driver.html).to include('foobar')
2012-07-13 11:15:44 +00:00
end
it 'should keep headers on form submit' do
@driver = Capybara::RackTest::Driver.new(TestApp, :headers => {'HTTP_FOO' => 'foobar'})
@driver.visit('/header_links')
@driver.find_xpath('.//input').first.click
expect(@driver.html).to include('foobar')
2012-07-13 11:15:44 +00: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')
expect(@driver.html).to include('foobar')
2012-07-13 11:15:44 +00:00
end
end
describe ':follow_redirects option' do
it "defaults to following redirects" do
@driver = Capybara::RackTest::Driver.new(TestApp)
@driver.visit('/redirect')
expect(@driver.response.header['Location']).to be_nil
2015-08-25 23:57:01 +00:00
expect(@driver.current_url).to match %r{/landed$}
2012-07-13 11:15:44 +00:00
end
it "is possible to not follow redirects" do
@driver = Capybara::RackTest::Driver.new(TestApp, :follow_redirects => false)
@driver.visit('/redirect')
expect(@driver.response.header['Location']).to match %r{/redirect_again$}
2015-08-25 23:57:01 +00:00
expect(@driver.current_url).to match %r{/redirect$}
2012-07-13 11:15:44 +00: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")
expect(@driver.html).to include('redirection complete')
2012-07-13 11:15:44 +00:00
end
it "should not follow more than 6 redirects" do
expect do
2012-07-13 11:15:44 +00:00
@driver.visit("/redirect/6/times")
end.to raise_error(Capybara::InfiniteRedirectError)
2012-07-13 11:15:44 +00: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")
expect(@driver.html).to include('redirection complete')
2012-07-13 11:15:44 +00:00
end
it "should not follow more than 21 redirects" do
expect do
2012-07-13 11:15:44 +00:00
@driver.visit("/redirect/22/times")
end.to raise_error(Capybara::InfiniteRedirectError)
2012-07-13 11:15:44 +00:00
end
end
end
end
module CSSHandlerIncludeTester
def dont_extend_css_handler
raise 'should never be called'
end
end
include CSSHandlerIncludeTester
2015-08-25 23:57:01 +00:00
RSpec.describe Capybara::RackTest::CSSHandlers do
it "should not be extended by global includes" do
expect(Capybara::RackTest::CSSHandlers.new).not_to respond_to(:dont_extend_css_handler)
end
end
2015-08-25 23:57:01 +00:00