diabolo-webrat 0.4.3 → 0.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. data/History.txt +8 -0
  2. data/Rakefile +5 -1
  3. data/lib/webrat/core/locators/field_labeled_locator.rb +1 -1
  4. data/lib/webrat/core/locators/label_locator.rb +1 -1
  5. data/lib/webrat/core_extensions/tcp_socket.rb +27 -0
  6. data/lib/webrat/selenium/application_server.rb +71 -0
  7. data/lib/webrat/selenium/merb_application_server.rb +48 -0
  8. data/lib/webrat/selenium/rails_application_server.rb +42 -0
  9. data/lib/webrat/selenium/selenium_rc_server.rb +80 -0
  10. data/lib/webrat/selenium/sinatra_application_server.rb +35 -0
  11. data/spec/fakes/test_session.rb +34 -0
  12. data/spec/integration/merb/app/controllers/application.rb +2 -0
  13. data/spec/integration/merb/app/controllers/exceptions.rb +13 -0
  14. data/spec/integration/merb/app/controllers/testing.rb +18 -0
  15. data/spec/integration/merb/config/environments/development.rb +15 -0
  16. data/spec/integration/merb/config/environments/rake.rb +11 -0
  17. data/spec/integration/merb/config/environments/test.rb +14 -0
  18. data/spec/integration/merb/config/init.rb +25 -0
  19. data/spec/integration/merb/config/rack.rb +11 -0
  20. data/spec/integration/merb/config/router.rb +33 -0
  21. data/spec/integration/merb/spec/spec_helper.rb +24 -0
  22. data/spec/integration/merb/spec/webrat_spec.rb +32 -0
  23. data/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -0
  24. data/spec/integration/merb/tasks/merb.thor/common.rb +64 -0
  25. data/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -0
  26. data/spec/integration/merb/tasks/merb.thor/ops.rb +93 -0
  27. data/spec/integration/merb/tasks/merb.thor/utils.rb +40 -0
  28. data/spec/integration/rails/app/controllers/application.rb +15 -0
  29. data/spec/integration/rails/app/controllers/webrat_controller.rb +39 -0
  30. data/spec/integration/rails/config/boot.rb +109 -0
  31. data/spec/integration/rails/config/environment.rb +12 -0
  32. data/spec/integration/rails/config/environments/development.rb +17 -0
  33. data/spec/integration/rails/config/environments/selenium.rb +22 -0
  34. data/spec/integration/rails/config/environments/test.rb +22 -0
  35. data/spec/integration/rails/config/initializers/inflections.rb +10 -0
  36. data/spec/integration/rails/config/initializers/mime_types.rb +5 -0
  37. data/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -0
  38. data/spec/integration/rails/config/routes.rb +14 -0
  39. data/spec/integration/rails/test/integration/webrat_test.rb +80 -0
  40. data/spec/integration/rails/test/test_helper.rb +25 -0
  41. data/spec/integration/sinatra/classic_app.rb +64 -0
  42. data/spec/integration/sinatra/modular_app.rb +16 -0
  43. data/spec/integration/sinatra/test/classic_app_test.rb +37 -0
  44. data/spec/integration/sinatra/test/modular_app_test.rb +18 -0
  45. data/spec/integration/sinatra/test/test_helper.rb +16 -0
  46. data/spec/private/core/configuration_spec.rb +104 -0
  47. data/spec/private/core/field_spec.rb +67 -0
  48. data/spec/private/core/link_spec.rb +24 -0
  49. data/spec/private/core/logging_spec.rb +10 -0
  50. data/spec/private/core/session_spec.rb +198 -0
  51. data/spec/private/mechanize/mechanize_session_spec.rb +81 -0
  52. data/spec/private/merb/merb_session_spec.rb +42 -0
  53. data/spec/private/nokogiri_spec.rb +77 -0
  54. data/spec/private/rails/attaches_file_spec.rb +81 -0
  55. data/spec/private/rails/rails_session_spec.rb +110 -0
  56. data/spec/public/basic_auth_spec.rb +24 -0
  57. data/spec/public/check_spec.rb +191 -0
  58. data/spec/public/choose_spec.rb +118 -0
  59. data/spec/public/click_area_spec.rb +106 -0
  60. data/spec/public/click_button_spec.rb +502 -0
  61. data/spec/public/click_link_spec.rb +541 -0
  62. data/spec/public/fill_in_spec.rb +209 -0
  63. data/spec/public/locators/field_by_xpath_spec.rb +19 -0
  64. data/spec/public/locators/field_labeled_spec.rb +172 -0
  65. data/spec/public/locators/field_with_id_spec.rb +16 -0
  66. data/spec/public/matchers/contain_spec.rb +114 -0
  67. data/spec/public/matchers/have_selector_spec.rb +135 -0
  68. data/spec/public/matchers/have_tag_spec.rb +39 -0
  69. data/spec/public/matchers/have_xpath_spec.rb +123 -0
  70. data/spec/public/reload_spec.rb +10 -0
  71. data/spec/public/save_and_open_spec.rb +51 -0
  72. data/spec/public/select_date_spec.rb +112 -0
  73. data/spec/public/select_datetime_spec.rb +137 -0
  74. data/spec/public/select_spec.rb +261 -0
  75. data/spec/public/select_time_spec.rb +100 -0
  76. data/spec/public/set_hidden_field_spec.rb +5 -0
  77. data/spec/public/submit_form_spec.rb +5 -0
  78. data/spec/public/visit_spec.rb +58 -0
  79. data/spec/public/within_spec.rb +177 -0
  80. data/spec/spec_helper.rb +50 -0
  81. metadata +90 -25
@@ -0,0 +1,80 @@
1
+ require 'test_helper'
2
+
3
+ class WebratTest < ActionController::IntegrationTest
4
+
5
+ test "should visit fully qualified urls" do
6
+ visit root_url(:host => "chunkybacon.example.com")
7
+ assert_equal "chunkybacon", request.subdomains.first
8
+ end
9
+
10
+ test "should visit pages" do
11
+ visit root_path
12
+ assert_contain("Webrat Form")
13
+ end
14
+
15
+ test "should submit forms" do
16
+ visit root_path
17
+ fill_in "Text field", :with => "Hello"
18
+ check "TOS"
19
+ select "January"
20
+ click_button "Test"
21
+ end
22
+
23
+ test "should check the value of a field" do
24
+ visit "/"
25
+ assert field_labeled("Prefilled").value, "text"
26
+ end
27
+
28
+ test "should not carry params through redirects" do
29
+ visit before_redirect_form_path
30
+ fill_in "Text field", :with => "value"
31
+ click_button
32
+
33
+ assert response.body !~ /value/
34
+ assert response.body =~ /custom_param/
35
+ end
36
+
37
+ test "should follow internal redirects" do
38
+ visit internal_redirect_path
39
+ assert !response.redirect?
40
+ assert response.body.include?("OK")
41
+ end
42
+
43
+ test "should not follow external redirects" do
44
+ visit external_redirect_path
45
+ assert response.redirect?
46
+ end
47
+
48
+ test "should click link by text" do
49
+ visit internal_redirect_path
50
+ click_link "Test Link Text"
51
+ assert_contain("Webrat Form")
52
+ end
53
+
54
+ test "should click link by id" do
55
+ visit internal_redirect_path
56
+ click_link "link_id"
57
+ assert_contain("Webrat Form")
58
+ end
59
+
60
+ test "should be able to assert xpath" do
61
+ visit root_path
62
+ assert_have_xpath "//h1"
63
+ end
64
+
65
+ test "should be able to assert selector" do
66
+ visit root_path
67
+ assert_have_selector "h1"
68
+ end
69
+
70
+ test "should detect infinite redirects" do
71
+ assert_raises Webrat::InfiniteRedirectError do
72
+ visit infinite_redirect_path
73
+ end
74
+ end
75
+
76
+ # test "should be able to assert have tag" do
77
+ # visit root_path
78
+ # assert_have_tag "h1"
79
+ # end
80
+ end
@@ -0,0 +1,25 @@
1
+ ENV["RAILS_ENV"] = "test"
2
+ require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
3
+ require 'test_help'
4
+
5
+ begin
6
+ require "redgreen"
7
+ rescue MissingSourceFile
8
+ end
9
+
10
+ require File.dirname(__FILE__) + "/../../../../lib/webrat"
11
+
12
+ Webrat.configure do |config|
13
+ config.mode = ENV['WEBRAT_INTEGRATION_MODE'].to_sym
14
+ end
15
+
16
+ ActionController::Base.class_eval do
17
+ def perform_action
18
+ perform_action_without_rescue
19
+ end
20
+ end
21
+ Dispatcher.class_eval do
22
+ def self.failsafe_response(output, status, exception = nil)
23
+ raise exception
24
+ end
25
+ end
@@ -0,0 +1,64 @@
1
+ require "rubygems"
2
+ require "sinatra"
3
+
4
+ use_in_file_templates!
5
+
6
+ get "/" do
7
+ erb :home
8
+ end
9
+
10
+ get "/go" do
11
+ erb :go
12
+ end
13
+
14
+ get "/internal_redirect" do
15
+ redirect "/"
16
+ end
17
+
18
+ get "/external_redirect" do
19
+ redirect "http://google.com"
20
+ end
21
+
22
+ post "/go" do
23
+ @user = params[:name]
24
+ @email = params[:email]
25
+ erb :hello
26
+ end
27
+
28
+ __END__
29
+
30
+ @@ layout
31
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
32
+ <html>
33
+ <title>sinatra testing with webrat</title>
34
+ <body>
35
+ <%= yield %>
36
+ </body>
37
+ </html>
38
+
39
+ @@ home
40
+ <p> visit <a href="/go">there</a></p>
41
+
42
+ <form>
43
+ <label>
44
+ Prefilled
45
+ <input type="text" name="prefilled" value="text" />
46
+ </label>
47
+ </form>
48
+
49
+ @@ go
50
+ <form method="post" action="/go">
51
+ <div>
52
+ <label for="name">Name</label>
53
+ <input type="text" name="name" id="name">
54
+ </div>
55
+ <div>
56
+ <label for="email">Email</label>
57
+ <input type="text" name="email" id="email">
58
+ </div>
59
+ <input type="submit" value="Submit" />
60
+ </form>
61
+
62
+ @@ hello
63
+ <p>Hello, <%= @user %></p>
64
+ <p>Your email is: <%= @email %></p>
@@ -0,0 +1,16 @@
1
+ require "rubygems"
2
+ require "sinatra/base"
3
+
4
+ class MyModularApp < Sinatra::Default
5
+ get "/" do
6
+ "Hello World"
7
+ end
8
+
9
+ get "/redirect_absolute_url" do
10
+ redirect URI.join(request.url, "foo").to_s
11
+ end
12
+
13
+ get "/foo" do
14
+ "spam"
15
+ end
16
+ end
@@ -0,0 +1,37 @@
1
+ require File.dirname(__FILE__) + "/test_helper"
2
+ require File.dirname(__FILE__) + "/../classic_app"
3
+
4
+ class MyClassicAppTest < Test::Unit::TestCase
5
+ def test_visits_pages
6
+ visit "/"
7
+ assert response_body.include?("visit")
8
+
9
+ click_link "there"
10
+ assert response_body.include?('<form method="post" action="/go">')
11
+ end
12
+
13
+ def test_submits_form
14
+ visit "/go"
15
+ fill_in "Name", :with => "World"
16
+ fill_in "Email", :with => "world@example.org"
17
+ click_button "Submit"
18
+
19
+ assert response_body.include?("Hello, World")
20
+ assert response_body.include?("Your email is: world@example.org")
21
+ end
22
+
23
+ def test_check_value_of_field
24
+ visit "/"
25
+ assert field_labeled("Prefilled").value, "text"
26
+ end
27
+
28
+ def test_follows_internal_redirects
29
+ visit "/internal_redirect"
30
+ assert response_body.include?("visit")
31
+ end
32
+
33
+ def test_does_not_follow_external_redirects
34
+ visit "/external_redirect"
35
+ assert response_code == 302
36
+ end
37
+ end
@@ -0,0 +1,18 @@
1
+ require File.dirname(__FILE__) + "/test_helper"
2
+ require File.dirname(__FILE__) + "/../modular_app"
3
+
4
+ class MyModularAppTest < Test::Unit::TestCase
5
+ def app
6
+ MyModularApp
7
+ end
8
+
9
+ def test_it_works
10
+ visit "/"
11
+ assert_contain "Hello World"
12
+ end
13
+
14
+ def test_redirects
15
+ visit "/redirect_absolute_url"
16
+ assert_equal "spam", response_body
17
+ end
18
+ end
@@ -0,0 +1,16 @@
1
+ require "rubygems"
2
+ require "test/unit"
3
+ require "redgreen"
4
+
5
+ require File.dirname(__FILE__) + "/../../../../lib/webrat"
6
+
7
+ Webrat.configure do |config|
8
+ config.mode = :sinatra
9
+ end
10
+
11
+ class Test::Unit::TestCase
12
+ include Webrat::Methods
13
+ include Webrat::Matchers
14
+
15
+ Webrat::Methods.delegate_to_session :response_code, :response_body
16
+ end
@@ -0,0 +1,104 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
+
3
+ describe Webrat::Configuration do
4
+ predicate_matchers[:parse_with_nokogiri] = :parse_with_nokogiri?
5
+ predicate_matchers[:open_error_files] = :open_error_files?
6
+
7
+ it "should have a mode" do
8
+ Webrat.configuration.should respond_to(:mode)
9
+ end
10
+
11
+ it "should use Nokogiri as the parser by default" do
12
+ Webrat.stub!(:on_java? => false)
13
+ config = Webrat::Configuration.new
14
+ config.should parse_with_nokogiri
15
+ end
16
+
17
+ it "should not use Nokogiri as the parser when on JRuby" do
18
+ Webrat.stub!(:on_java? => true)
19
+ config = Webrat::Configuration.new
20
+ config.should_not parse_with_nokogiri
21
+ end
22
+
23
+ it "should open error files by default" do
24
+ config = Webrat::Configuration.new
25
+ config.should open_error_files
26
+ end
27
+
28
+ it "should detect infinite redirects after 10" do
29
+ config = Webrat::Configuration.new
30
+ config.infinite_redirect_limit.should == 10
31
+ end
32
+
33
+ it "should be configurable with a block" do
34
+ Webrat.configure do |config|
35
+ config.open_error_files = false
36
+ end
37
+
38
+ config = Webrat.configuration
39
+ config.should_not open_error_files
40
+ end
41
+
42
+ it "should be configurable with multiple blocks" do
43
+ Webrat.configure do |config|
44
+ config.open_error_files = false
45
+ end
46
+
47
+ Webrat.configure do |config|
48
+ config.selenium_server_port = 1234
49
+ end
50
+
51
+ config = Webrat.configuration
52
+ config.should_not open_error_files
53
+ config.selenium_server_port.should == 1234
54
+ end
55
+
56
+ [:rails,
57
+ :selenium,
58
+ :rack,
59
+ :sinatra,
60
+ :mechanize].each do |mode|
61
+ it "should require correct lib when in #{mode} mode" do
62
+ config = Webrat::Configuration.new
63
+ config.should_receive(:require).with("webrat/#{mode}")
64
+ config.mode = mode
65
+ end
66
+ end
67
+
68
+ it "should require merb_session when in merb mode" do
69
+ config = Webrat::Configuration.new
70
+ config.should_receive(:require).with("webrat/merb_session")
71
+ config.mode = :merb
72
+ end
73
+
74
+ describe "Selenium" do
75
+ before :each do
76
+ @config = Webrat::Configuration.new
77
+ end
78
+
79
+ it "should use 'test' as the application environment by default" do
80
+ @config.application_environment.should == :test
81
+ end
82
+
83
+ it "should use 3001 as the application port by default" do
84
+ @config.application_port.should == 3001
85
+ end
86
+
87
+ it 'should default application address to localhost' do
88
+ @config.application_address.should == 'localhost'
89
+ end
90
+
91
+ it 'should default selenium server address to nil' do
92
+ @config.selenium_server_address.should be_nil
93
+ end
94
+
95
+ it 'should default selenium server port to 4444' do
96
+ @config.selenium_server_port.should == 4444
97
+ end
98
+
99
+ it 'should default selenium browser key to *firefox' do
100
+ @config.selenium_browser_key.should == '*firefox'
101
+ end
102
+ end
103
+
104
+ end
@@ -0,0 +1,67 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
+
3
+ module Webrat
4
+ describe Field do
5
+ it "should have nice inspect output" do
6
+ html = <<-HTML
7
+ <html>
8
+ <input type='checkbox' checked='checked' />
9
+ </html>
10
+ HTML
11
+
12
+ element = Webrat::XML.css_search(Webrat::XML.document(html), "input").first
13
+ checkbox = CheckboxField.new(nil, element)
14
+ checkbox.inspect.should =~ /#<Webrat::CheckboxField @element=<input type=['"]checkbox['"] checked(=['"]checked['"])?\/?>>/
15
+ end
16
+ end
17
+
18
+ describe CheckboxField do
19
+ it "should say it is checked if it is" do
20
+ html = <<-HTML
21
+ <html>
22
+ <input type='checkbox' checked='checked' />
23
+ </html>
24
+ HTML
25
+
26
+ element = Webrat::XML.css_search(Webrat::XML.document(html), "input").first
27
+ checkbox = CheckboxField.new(nil, element)
28
+ checkbox.should be_checked
29
+ end
30
+
31
+ it "should say it is not checked if it is not" do
32
+ html = <<-HTML
33
+ <html>
34
+ <input type='checkbox' />
35
+ </html>
36
+ HTML
37
+
38
+ element = Webrat::XML.css_search(Webrat::XML.document(html), "input").first
39
+ checkbox = CheckboxField.new(nil, element)
40
+ checkbox.should_not be_checked
41
+ end
42
+ end
43
+
44
+ describe RadioField do
45
+ it "should say it is checked if it is" do
46
+ html = <<-HTML
47
+ <html>
48
+ <input type='radio' checked='checked' />
49
+ </html>
50
+ HTML
51
+
52
+ element = Webrat::XML.css_search(Webrat::XML.document(html), "input").first
53
+ radio_button = RadioField.new(nil, element)
54
+ radio_button.should be_checked
55
+ end
56
+
57
+ it "should say it is not checked if it is not" do
58
+ html = <<-HTML
59
+ <html><input type='radio' /></html>
60
+ HTML
61
+
62
+ element = Webrat::XML.css_search(Webrat::XML.document(html), "input").first
63
+ radio_button = RadioField.new(nil, element)
64
+ radio_button.should_not be_checked
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,24 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
+
3
+ describe Webrat::Link do
4
+ # include Webrat::Link
5
+
6
+ before do
7
+ webrat_session = mock(Webrat::TestSession)
8
+ @link_text_with_nbsp = 'Link' + [0xA0].pack("U") + 'Text'
9
+ end
10
+
11
+ it "should pass through relative urls" do
12
+ link = Webrat::Link.new(webrat_session, {"href" => "/path"})
13
+ webrat_session.should_receive(:request_page).with("/path", :get, {})
14
+ link.click
15
+ end
16
+
17
+ it "shouldnt put base url onto " do
18
+ url = "https://www.example.com/path"
19
+ webrat_session.should_receive(:request_page).with(url, :get, {})
20
+ link = Webrat::Link.new(webrat_session, {"href" => url})
21
+ link.click
22
+ end
23
+
24
+ end
@@ -0,0 +1,10 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
+
3
+ describe Webrat::Logging do
4
+
5
+ it "should not log if there is no logger" do
6
+ klass = Class.new
7
+ klass.send(:include, Webrat::Logging)
8
+ klass.new.debug_log "Testing"
9
+ end
10
+ end
@@ -0,0 +1,198 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
+
3
+ describe Webrat::Session do
4
+
5
+ it "should not have a doc_root" do
6
+ session = Webrat::Session.new
7
+ session.doc_root.should be_nil
8
+ end
9
+
10
+ it "should expose the current_dom" do
11
+ session = Webrat::Session.new
12
+
13
+ def session.response
14
+ Object.new
15
+ end
16
+
17
+ def session.response_body
18
+ "<html></html>"
19
+ end
20
+
21
+ session.should respond_to(:current_dom)
22
+ end
23
+
24
+ it "should open the page in the browser in MacOSX" do
25
+ session = Webrat::Session.new
26
+ session.stub!(:ruby_platform => 'darwin')
27
+ session.should_receive(:`).with("open path")
28
+ session.open_in_browser("path")
29
+ end
30
+
31
+ it "should open the page in the browser in cygwin" do
32
+ session = Webrat::Session.new
33
+ session.stub!(:ruby_platform => 'i386-cygwin')
34
+ session.should_receive(:`).with("rundll32 url.dll,FileProtocolHandler path\\to\\file")
35
+ session.open_in_browser("path/to/file")
36
+ end
37
+
38
+ it "should open the page in the browser in Win32" do
39
+ session = Webrat::Session.new
40
+ session.stub!(:ruby_platform => 'win32')
41
+ session.should_receive(:`).with("rundll32 url.dll,FileProtocolHandler path\\to\\file")
42
+ session.open_in_browser("path/to/file")
43
+ end
44
+
45
+ it "should provide a current_page for backwards compatibility" do
46
+ session = Webrat::Session.new
47
+ current_page = session.current_page
48
+ current_page.should_not be_nil
49
+ current_page.should respond_to(:url)
50
+ end
51
+
52
+ it "should allow custom headers to be set" do
53
+ session = Webrat::Session.new
54
+ session.header('Accept', 'application/xml')
55
+
56
+ session.instance_variable_get(:@custom_headers)['Accept'].should == 'application/xml'
57
+ end
58
+
59
+ it "should return a copy of the headers to be sent" do
60
+ session = Webrat::Session.new
61
+ session.instance_eval {
62
+ @default_headers = {'HTTP_X_FORWARDED_FOR' => '192.168.1.1'}
63
+ @custom_headers = {'Accept' => 'application/xml'}
64
+ }
65
+ session.headers.should == {'HTTP_X_FORWARDED_FOR' => '192.168.1.1', 'Accept' => 'application/xml'}
66
+ end
67
+
68
+ describe "#http_accept" do
69
+ before(:each) do
70
+ webrat_session = Webrat::Session.new
71
+ end
72
+
73
+ it "should set the Accept header with the string Mime type" do
74
+ webrat_session.http_accept('application/xml')
75
+ webrat_session.headers['Accept'].should == 'application/xml'
76
+ end
77
+
78
+ it "should set the Accept head with the string value of the symbol Mime type" do
79
+ webrat_session.http_accept(:xml)
80
+ webrat_session.headers['Accept'].should == 'application/xml'
81
+ end
82
+
83
+ it "should raise an error if a symbol Mime type is passed that does not exist" do
84
+ lambda { webrat_session.http_accept(:oogabooga) }.should raise_error(ArgumentError)
85
+ end
86
+ end
87
+
88
+ describe "#request_page" do
89
+ before(:each) do
90
+ webrat_session = Webrat::Session.new
91
+ end
92
+
93
+ it "should raise an error if the request is not a success" do
94
+ webrat_session.stub!(:get)
95
+ webrat_session.stub!(:response_body => "Exception caught")
96
+ webrat_session.stub!(:response_code => 500)
97
+ webrat_session.stub!(:formatted_error => "application error")
98
+ webrat_session.stub!(:save_and_open_page)
99
+
100
+ lambda { webrat_session.request_page('some url', :get, {}) }.should raise_error(Webrat::PageLoadError)
101
+ end
102
+
103
+ it "should raise an error but not open if the request is not a success and config quashes save_and_open" do
104
+ Webrat.configure do |config|
105
+ config.open_error_files = false
106
+ end
107
+ webrat_session.stub!(:get)
108
+ webrat_session.stub!(:response_body => "Exception caught")
109
+ webrat_session.stub!(:response_code => 500)
110
+ webrat_session.stub!(:formatted_error => "application error")
111
+ webrat_session.should_not_receive(:save_and_open_page)
112
+
113
+ lambda { webrat_session.request_page('some url', :get, {}) }.should raise_error(Webrat::PageLoadError)
114
+ end
115
+
116
+ it "should now follow external redirects" do
117
+ webrat_session.should_receive(:internal_redirect?).and_return(false)
118
+
119
+ webrat_session.request_page("/oldurl", :get, {})
120
+
121
+ webrat_session.current_url.should == "/oldurl"
122
+ end
123
+ end
124
+
125
+ describe "#redirect?" do
126
+ before(:each) do
127
+ webrat_session = Webrat::Session.new
128
+ end
129
+
130
+ it "should return true if the last response was a redirect" do
131
+ webrat_session.stub!(:response_code => 301)
132
+ webrat_session.redirect?.should be_true
133
+ end
134
+
135
+ it "should return false if the last response wasn't a redirect" do
136
+ webrat_session.stub!(:response_code => 200)
137
+ webrat_session.redirect?.should be_false
138
+ end
139
+ end
140
+
141
+ describe "#internal_redirect?" do
142
+ before(:each) do
143
+ webrat_session = Webrat::Session.new
144
+ end
145
+
146
+ it "should return true if the last response was a redirect and the host of the current_url matches that of the response location" do
147
+ webrat_session.stub!(:redirect? => true)
148
+ webrat_session.stub!(:current_url => "http://example.com")
149
+ webrat_session.stub!(:response_location => "http://example.com")
150
+ webrat_session.internal_redirect?.should be_true
151
+ end
152
+
153
+ it "should return true if the last response was a redirect and the hosts are the same but the subdomains are different" do
154
+ webrat_session.stub!(:redirect? => true)
155
+ webrat_session.stub!(:current_url => "http://example.com")
156
+ webrat_session.stub!(:response_location => "http://myName.example.com")
157
+ webrat_session.internal_redirect?.should be_true
158
+ end
159
+
160
+ it "should return false if the last response was not a redirect" do
161
+ webrat_session.stub!(:redirect? => false)
162
+ webrat_session.internal_redirect?.should be_false
163
+ end
164
+
165
+ it "should return false if the last response was a redirect but the host of the current_url doesn't matches that of the response location" do
166
+ webrat_session.stub!(:redirect? => true)
167
+ webrat_session.stub!(:current_url => "http://example.com")
168
+ webrat_session.stub!(:response_location => "http://google.com")
169
+ webrat_session.internal_redirect?.should be_false
170
+ end
171
+
172
+ it "should return false if the last response was a redirect but the host of the current_url doesn't matches that of the response location, but they have the same subdomain" do
173
+ webrat_session.stub!(:redirect? => true)
174
+ webrat_session.stub!(:current_url => "http://login.example.com")
175
+ webrat_session.stub!(:response_location => "http://login.google.com")
176
+ webrat_session.internal_redirect?.should be_false
177
+ end
178
+ end
179
+
180
+ describe "#redirected_to" do
181
+ before(:each) do
182
+ webrat_session = Webrat::Session.new
183
+ end
184
+
185
+ it "should return nil if not redirected" do
186
+ webrat_session.stub!(:redirect? => false)
187
+ webrat_session.redirected_to.should be_nil
188
+ end
189
+
190
+ it "should return the response_location if redirected" do
191
+ webrat_session.stub!(:redirect? => true)
192
+ webrat_session.stub!(:response_location => "http://www.example.com")
193
+ webrat_session.redirected_to.should == "http://www.example.com"
194
+ end
195
+
196
+ end
197
+
198
+ end