mkuklis-webrat 0.5.1 → 0.6.rc1

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 (211) hide show
  1. data/.document +3 -3
  2. data/.gitignore +14 -14
  3. data/History.txt +413 -413
  4. data/MIT-LICENSE.txt +19 -19
  5. data/README.rdoc +84 -84
  6. data/Rakefile +187 -187
  7. data/VERSION +1 -1
  8. data/install.rb +1 -1
  9. data/lib/webrat/adapters/mechanize.rb +78 -78
  10. data/lib/webrat/adapters/merb.rb +11 -11
  11. data/lib/webrat/adapters/rack.rb +25 -25
  12. data/lib/webrat/adapters/rails.rb +81 -81
  13. data/lib/webrat/adapters/sinatra.rb +9 -9
  14. data/lib/webrat/core/configuration.rb +92 -92
  15. data/lib/webrat/core/elements/area.rb +31 -31
  16. data/lib/webrat/core/elements/element.rb +33 -33
  17. data/lib/webrat/core/elements/field.rb +487 -487
  18. data/lib/webrat/core/elements/form.rb +103 -103
  19. data/lib/webrat/core/elements/label.rb +31 -31
  20. data/lib/webrat/core/elements/link.rb +93 -93
  21. data/lib/webrat/core/elements/select_option.rb +48 -48
  22. data/lib/webrat/core/locators/area_locator.rb +38 -38
  23. data/lib/webrat/core/locators/button_locator.rb +54 -54
  24. data/lib/webrat/core/locators/field_by_id_locator.rb +37 -37
  25. data/lib/webrat/core/locators/field_labeled_locator.rb +56 -56
  26. data/lib/webrat/core/locators/field_locator.rb +25 -25
  27. data/lib/webrat/core/locators/field_named_locator.rb +41 -41
  28. data/lib/webrat/core/locators/form_locator.rb +19 -19
  29. data/lib/webrat/core/locators/label_locator.rb +34 -34
  30. data/lib/webrat/core/locators/link_locator.rb +74 -74
  31. data/lib/webrat/core/locators/locator.rb +20 -20
  32. data/lib/webrat/core/locators/select_option_locator.rb +59 -59
  33. data/lib/webrat/core/locators.rb +20 -20
  34. data/lib/webrat/core/logging.rb +23 -23
  35. data/lib/webrat/core/matchers/have_content.rb +68 -68
  36. data/lib/webrat/core/matchers/have_selector.rb +74 -74
  37. data/lib/webrat/core/matchers/have_tag.rb +21 -21
  38. data/lib/webrat/core/matchers/have_xpath.rb +122 -122
  39. data/lib/webrat/core/matchers.rb +4 -4
  40. data/lib/webrat/core/methods.rb +64 -64
  41. data/lib/webrat/core/mime.rb +18 -18
  42. data/lib/webrat/core/save_and_open_page.rb +48 -48
  43. data/lib/webrat/core/scope.rb +365 -365
  44. data/lib/webrat/core/session.rb +306 -306
  45. data/lib/webrat/core/xml.rb +72 -72
  46. data/lib/webrat/core.rb +13 -13
  47. data/lib/webrat/core_extensions/blank.rb +58 -58
  48. data/lib/webrat/core_extensions/deprecate.rb +8 -8
  49. data/lib/webrat/core_extensions/detect_mapped.rb +12 -12
  50. data/lib/webrat/core_extensions/meta_class.rb +6 -6
  51. data/lib/webrat/core_extensions/nil_to_param.rb +5 -5
  52. data/lib/webrat/core_extensions/tcp_socket.rb +27 -27
  53. data/lib/webrat/integrations/merb.rb +10 -10
  54. data/lib/webrat/integrations/rails.rb +25 -25
  55. data/lib/webrat/integrations/rspec-rails.rb +10 -10
  56. data/lib/webrat/integrations/selenium.rb +11 -11
  57. data/lib/webrat/merb.rb +9 -9
  58. data/lib/webrat/rspec-rails.rb +2 -2
  59. data/lib/webrat/selenium/application_server_factory.rb +40 -40
  60. data/lib/webrat/selenium/application_servers/external.rb +26 -26
  61. data/lib/webrat/selenium/application_servers/merb.rb +50 -50
  62. data/lib/webrat/selenium/application_servers/rails.rb +3 -6
  63. data/lib/webrat/selenium/application_servers/sinatra.rb +37 -37
  64. data/lib/webrat/selenium/application_servers.rb +5 -5
  65. data/lib/webrat/selenium/location_strategy_javascript/button.js +19 -19
  66. data/lib/webrat/selenium/location_strategy_javascript/label.js +42 -42
  67. data/lib/webrat/selenium/location_strategy_javascript/webrat.js +6 -6
  68. data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +32 -32
  69. data/lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js +15 -15
  70. data/lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js +5 -5
  71. data/lib/webrat/selenium/matchers/have_content.rb +66 -66
  72. data/lib/webrat/selenium/matchers/have_selector.rb +49 -49
  73. data/lib/webrat/selenium/matchers/have_tag.rb +72 -72
  74. data/lib/webrat/selenium/matchers/have_xpath.rb +45 -45
  75. data/lib/webrat/selenium/matchers.rb +4 -4
  76. data/lib/webrat/selenium/selenium_extensions.js +5 -5
  77. data/lib/webrat/selenium/selenium_rc_server.rb +86 -86
  78. data/lib/webrat/selenium/selenium_session.rb +267 -272
  79. data/lib/webrat/selenium/silence_stream.rb +18 -18
  80. data/lib/webrat/selenium.rb +70 -70
  81. data/lib/webrat.rb +18 -18
  82. data/spec/fakes/test_adapter.rb +37 -37
  83. data/spec/integration/mechanize/Rakefile +6 -6
  84. data/spec/integration/mechanize/config.ru +1 -1
  85. data/spec/integration/mechanize/sample_app.rb +20 -20
  86. data/spec/integration/mechanize/spec/mechanize_spec.rb +22 -22
  87. data/spec/integration/mechanize/spec/spec_helper.rb +27 -27
  88. data/spec/integration/merb/.gitignore +20 -20
  89. data/spec/integration/merb/Rakefile +35 -35
  90. data/spec/integration/merb/app/controllers/application.rb +2 -2
  91. data/spec/integration/merb/app/controllers/exceptions.rb +13 -13
  92. data/spec/integration/merb/app/controllers/testing.rb +27 -27
  93. data/spec/integration/merb/app/views/exceptions/not_acceptable.html.erb +63 -63
  94. data/spec/integration/merb/app/views/exceptions/not_found.html.erb +47 -47
  95. data/spec/integration/merb/app/views/layout/application.html.erb +11 -11
  96. data/spec/integration/merb/app/views/testing/show_form.html.erb +26 -26
  97. data/spec/integration/merb/app/views/testing/upload.html.erb +8 -8
  98. data/spec/integration/merb/config/environments/development.rb +15 -15
  99. data/spec/integration/merb/config/environments/rake.rb +11 -11
  100. data/spec/integration/merb/config/environments/test.rb +14 -14
  101. data/spec/integration/merb/config/init.rb +25 -25
  102. data/spec/integration/merb/config/rack.rb +11 -11
  103. data/spec/integration/merb/config/router.rb +34 -34
  104. data/spec/integration/merb/spec/spec.opts +1 -1
  105. data/spec/integration/merb/spec/spec_helper.rb +26 -26
  106. data/spec/integration/merb/spec/webrat_spec.rb +39 -39
  107. data/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -31
  108. data/spec/integration/merb/tasks/merb.thor/common.rb +64 -64
  109. data/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -124
  110. data/spec/integration/merb/tasks/merb.thor/main.thor +149 -149
  111. data/spec/integration/merb/tasks/merb.thor/ops.rb +93 -93
  112. data/spec/integration/merb/tasks/merb.thor/utils.rb +40 -40
  113. data/spec/integration/rack/Rakefile +5 -5
  114. data/spec/integration/rack/app.rb +89 -89
  115. data/spec/integration/rack/test/helper.rb +21 -21
  116. data/spec/integration/rack/test/webrat_rack_test.rb +73 -73
  117. data/spec/integration/rails/.gitignore +3 -3
  118. data/spec/integration/rails/Rakefile +30 -30
  119. data/spec/integration/rails/app/controllers/application.rb +15 -15
  120. data/spec/integration/rails/app/controllers/buttons_controller.rb +7 -7
  121. data/spec/integration/rails/app/controllers/fields_controller.rb +4 -4
  122. data/spec/integration/rails/app/controllers/links_controller.rb +7 -7
  123. data/spec/integration/rails/app/controllers/webrat_controller.rb +46 -46
  124. data/spec/integration/rails/app/helpers/buttons_helper.rb +2 -2
  125. data/spec/integration/rails/app/helpers/fields_helper.rb +2 -2
  126. data/spec/integration/rails/app/helpers/links_helper.rb +2 -2
  127. data/spec/integration/rails/app/views/buttons/show.html.erb +10 -10
  128. data/spec/integration/rails/app/views/fields/show.html.erb +8 -8
  129. data/spec/integration/rails/app/views/links/show.html.erb +5 -5
  130. data/spec/integration/rails/app/views/webrat/before_redirect_form.html.erb +3 -3
  131. data/spec/integration/rails/app/views/webrat/buttons.html.erb +10 -10
  132. data/spec/integration/rails/app/views/webrat/form.html.erb +27 -27
  133. data/spec/integration/rails/app/views/webrat/within.html.erb +2 -2
  134. data/spec/integration/rails/config/boot.rb +109 -109
  135. data/spec/integration/rails/config/environment.rb +12 -12
  136. data/spec/integration/rails/config/environments/development.rb +17 -17
  137. data/spec/integration/rails/config/environments/selenium.rb +22 -22
  138. data/spec/integration/rails/config/environments/test.rb +22 -22
  139. data/spec/integration/rails/config/initializers/inflections.rb +10 -10
  140. data/spec/integration/rails/config/initializers/mime_types.rb +5 -5
  141. data/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -17
  142. data/spec/integration/rails/config/locales/en.yml +4 -4
  143. data/spec/integration/rails/config/routes.rb +19 -19
  144. data/spec/integration/rails/public/404.html +29 -29
  145. data/spec/integration/rails/public/422.html +29 -29
  146. data/spec/integration/rails/public/500.html +33 -33
  147. data/spec/integration/rails/script/about +3 -3
  148. data/spec/integration/rails/script/console +3 -3
  149. data/spec/integration/rails/script/dbconsole +3 -3
  150. data/spec/integration/rails/script/destroy +3 -3
  151. data/spec/integration/rails/script/generate +3 -3
  152. data/spec/integration/rails/script/performance/benchmarker +3 -3
  153. data/spec/integration/rails/script/performance/profiler +3 -3
  154. data/spec/integration/rails/script/performance/request +3 -3
  155. data/spec/integration/rails/script/plugin +3 -3
  156. data/spec/integration/rails/script/process/inspector +3 -3
  157. data/spec/integration/rails/script/process/reaper +3 -3
  158. data/spec/integration/rails/script/process/spawner +3 -3
  159. data/spec/integration/rails/script/runner +3 -3
  160. data/spec/integration/rails/script/server +3 -3
  161. data/spec/integration/rails/test/integration/button_click_test.rb +80 -80
  162. data/spec/integration/rails/test/integration/fill_in_test.rb +24 -24
  163. data/spec/integration/rails/test/integration/link_click_test.rb +27 -27
  164. data/spec/integration/rails/test/integration/webrat_test.rb +122 -122
  165. data/spec/integration/rails/test/test_helper.rb +26 -26
  166. data/spec/integration/sinatra/Rakefile +5 -5
  167. data/spec/integration/sinatra/classic_app.rb +64 -64
  168. data/spec/integration/sinatra/modular_app.rb +16 -16
  169. data/spec/integration/sinatra/test/classic_app_test.rb +37 -37
  170. data/spec/integration/sinatra/test/modular_app_test.rb +18 -18
  171. data/spec/integration/sinatra/test/test_helper.rb +17 -17
  172. data/spec/private/core/configuration_spec.rb +87 -87
  173. data/spec/private/core/field_spec.rb +85 -85
  174. data/spec/private/core/link_spec.rb +24 -24
  175. data/spec/private/core/session_spec.rb +200 -200
  176. data/spec/private/mechanize/mechanize_adapter_spec.rb +73 -73
  177. data/spec/private/nokogiri_spec.rb +77 -77
  178. data/spec/private/rails/attaches_file_spec.rb +81 -81
  179. data/spec/private/rails/rails_adapter_spec.rb +86 -86
  180. data/spec/private/selenium/application_servers/rails_spec.rb +26 -26
  181. data/spec/public/basic_auth_spec.rb +24 -24
  182. data/spec/public/check_spec.rb +191 -191
  183. data/spec/public/choose_spec.rb +118 -118
  184. data/spec/public/click_area_spec.rb +106 -106
  185. data/spec/public/click_button_spec.rb +494 -494
  186. data/spec/public/click_link_spec.rb +511 -511
  187. data/spec/public/fill_in_spec.rb +224 -224
  188. data/spec/public/locators/field_by_xpath_spec.rb +19 -19
  189. data/spec/public/locators/field_labeled_spec.rb +172 -172
  190. data/spec/public/locators/field_with_id_spec.rb +16 -16
  191. data/spec/public/matchers/contain_spec.rb +114 -114
  192. data/spec/public/matchers/have_selector_spec.rb +146 -146
  193. data/spec/public/matchers/have_tag_spec.rb +39 -39
  194. data/spec/public/matchers/have_xpath_spec.rb +136 -136
  195. data/spec/public/reload_spec.rb +10 -10
  196. data/spec/public/save_and_open_spec.rb +70 -70
  197. data/spec/public/select_date_spec.rb +112 -112
  198. data/spec/public/select_datetime_spec.rb +137 -137
  199. data/spec/public/select_spec.rb +455 -455
  200. data/spec/public/select_time_spec.rb +100 -100
  201. data/spec/public/selenium/application_server_factory_spec.rb +49 -49
  202. data/spec/public/selenium/application_servers/external_spec.rb +12 -12
  203. data/spec/public/selenium/selenium_session_spec.rb +37 -37
  204. data/spec/public/set_hidden_field_spec.rb +5 -5
  205. data/spec/public/submit_form_spec.rb +5 -5
  206. data/spec/public/visit_spec.rb +58 -58
  207. data/spec/public/within_spec.rb +177 -177
  208. data/spec/spec.opts +1 -1
  209. data/spec/spec_helper.rb +54 -54
  210. data/webrat.gemspec +360 -0
  211. metadata +6 -5
@@ -1,200 +1,200 @@
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 provide a current_page for backwards compatibility" do
25
- session = Webrat::Session.new
26
- current_page = session.current_page
27
- current_page.should_not be_nil
28
- current_page.should respond_to(:url)
29
- end
30
-
31
- it "should allow custom headers to be set" do
32
- session = Webrat::Session.new
33
- session.header('Accept', 'application/xml')
34
-
35
- session.instance_variable_get(:@custom_headers)['Accept'].should == 'application/xml'
36
- end
37
-
38
- it "should return a copy of the headers to be sent" do
39
- session = Webrat::Session.new
40
- session.instance_eval {
41
- @default_headers = {'HTTP_X_FORWARDED_FOR' => '192.168.1.1'}
42
- @custom_headers = {'Accept' => 'application/xml'}
43
- }
44
- session.headers.should == {'HTTP_X_FORWARDED_FOR' => '192.168.1.1', 'Accept' => 'application/xml'}
45
- end
46
-
47
- describe "#http_accept" do
48
- before(:each) do
49
- webrat_session = Webrat::Session.new
50
- end
51
-
52
- it "should set the Accept header with the string Mime type" do
53
- webrat_session.http_accept('application/xml')
54
- webrat_session.headers['Accept'].should == 'application/xml'
55
- end
56
-
57
- it "should set the Accept head with the string value of the symbol Mime type" do
58
- webrat_session.http_accept(:xml)
59
- webrat_session.headers['Accept'].should == 'application/xml'
60
- end
61
-
62
- it "should raise an error if a symbol Mime type is passed that does not exist" do
63
- lambda { webrat_session.http_accept(:oogabooga) }.should raise_error(ArgumentError)
64
- end
65
-
66
- it "should recognize a couple of webrat-specific formats" do
67
- webrat_session.http_accept(:multipart_form).should == "multipart/form-data"
68
- webrat_session.http_accept(:url_encoded_form).should == "application/x-www-form-urlencoded"
69
- end
70
- end
71
-
72
- describe "#request_page" do
73
- before(:each) do
74
- webrat_session = Webrat::Session.new
75
- end
76
-
77
- it "should raise an error if the request is not a success" do
78
- webrat_session.stub!(:get)
79
- webrat_session.stub!(:response_body => "Exception caught")
80
- webrat_session.stub!(:response_code => 500)
81
- webrat_session.stub!(:formatted_error => "application error")
82
- webrat_session.stub!(:save_and_open_page)
83
-
84
- lambda { webrat_session.request_page('some url', :get, {}) }.should raise_error(Webrat::PageLoadError)
85
- end
86
-
87
- it "should raise an error but not open if the request is not a success and config quashes save_and_open" do
88
- Webrat.configure do |config|
89
- config.open_error_files = false
90
- end
91
- webrat_session.stub!(:get)
92
- webrat_session.stub!(:response_body => "Exception caught")
93
- webrat_session.stub!(:response_code => 500)
94
- webrat_session.stub!(:formatted_error => "application error")
95
- webrat_session.should_not_receive(:save_and_open_page)
96
-
97
- lambda { webrat_session.request_page('some url', :get, {}) }.should raise_error(Webrat::PageLoadError)
98
- end
99
-
100
- it "should now follow external redirects" do
101
- webrat_session.should_receive(:internal_redirect?).and_return(false)
102
-
103
- webrat_session.request_page("/oldurl", :get, {})
104
-
105
- webrat_session.current_url.should == "/oldurl"
106
- end
107
- end
108
-
109
- describe "#redirect?" do
110
- before(:each) do
111
- webrat_session = Webrat::Session.new
112
- end
113
-
114
- it "should return true if the last response was a redirect and Fixnum#/ returns a Rational" do
115
- # This happens if the ruby-units gem has been required
116
- Fixnum.class_eval do
117
- alias_method :original_divide, "/".to_sym
118
-
119
- def /(other)
120
- Rational(self, other)
121
- end
122
- end
123
-
124
- webrat_session.stub!(:response_code => 301)
125
- webrat_session.redirect?.should be_true
126
-
127
- Fixnum.class_eval do
128
- alias_method "/".to_sym, :original_divide
129
- end
130
- end
131
-
132
- it "should return true if the last response was a redirect" do
133
- webrat_session.stub!(:response_code => 301)
134
- webrat_session.redirect?.should be_true
135
- end
136
-
137
- it "should return false if the last response wasn't a redirect" do
138
- webrat_session.stub!(:response_code => 200)
139
- webrat_session.redirect?.should be_false
140
- end
141
- end
142
-
143
- describe "#internal_redirect?" do
144
- before(:each) do
145
- webrat_session = Webrat::Session.new
146
- end
147
-
148
- 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
149
- webrat_session.stub!(:redirect? => true)
150
- webrat_session.stub!(:current_url => "http://example.com")
151
- webrat_session.stub!(:response_location => "http://example.com")
152
- webrat_session.internal_redirect?.should be_true
153
- end
154
-
155
- it "should return true if the last response was a redirect and the hosts are the same but the subdomains are different" do
156
- webrat_session.stub!(:redirect? => true)
157
- webrat_session.stub!(:current_url => "http://example.com")
158
- webrat_session.stub!(:response_location => "http://myName.example.com")
159
- webrat_session.internal_redirect?.should be_true
160
- end
161
-
162
- it "should return false if the last response was not a redirect" do
163
- webrat_session.stub!(:redirect? => false)
164
- webrat_session.internal_redirect?.should be_false
165
- end
166
-
167
- 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
168
- webrat_session.stub!(:redirect? => true)
169
- webrat_session.stub!(:current_url => "http://example.com")
170
- webrat_session.stub!(:response_location => "http://google.com")
171
- webrat_session.internal_redirect?.should be_false
172
- end
173
-
174
- 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
175
- webrat_session.stub!(:redirect? => true)
176
- webrat_session.stub!(:current_url => "http://login.example.com")
177
- webrat_session.stub!(:response_location => "http://login.google.com")
178
- webrat_session.internal_redirect?.should be_false
179
- end
180
- end
181
-
182
- describe "#redirected_to" do
183
- before(:each) do
184
- webrat_session = Webrat::Session.new
185
- end
186
-
187
- it "should return nil if not redirected" do
188
- webrat_session.stub!(:redirect? => false)
189
- webrat_session.redirected_to.should be_nil
190
- end
191
-
192
- it "should return the response_location if redirected" do
193
- webrat_session.stub!(:redirect? => true)
194
- webrat_session.stub!(:response_location => "http://www.example.com")
195
- webrat_session.redirected_to.should == "http://www.example.com"
196
- end
197
-
198
- end
199
-
200
- end
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 provide a current_page for backwards compatibility" do
25
+ session = Webrat::Session.new
26
+ current_page = session.current_page
27
+ current_page.should_not be_nil
28
+ current_page.should respond_to(:url)
29
+ end
30
+
31
+ it "should allow custom headers to be set" do
32
+ session = Webrat::Session.new
33
+ session.header('Accept', 'application/xml')
34
+
35
+ session.instance_variable_get(:@custom_headers)['Accept'].should == 'application/xml'
36
+ end
37
+
38
+ it "should return a copy of the headers to be sent" do
39
+ session = Webrat::Session.new
40
+ session.instance_eval {
41
+ @default_headers = {'HTTP_X_FORWARDED_FOR' => '192.168.1.1'}
42
+ @custom_headers = {'Accept' => 'application/xml'}
43
+ }
44
+ session.headers.should == {'HTTP_X_FORWARDED_FOR' => '192.168.1.1', 'Accept' => 'application/xml'}
45
+ end
46
+
47
+ describe "#http_accept" do
48
+ before(:each) do
49
+ webrat_session = Webrat::Session.new
50
+ end
51
+
52
+ it "should set the Accept header with the string Mime type" do
53
+ webrat_session.http_accept('application/xml')
54
+ webrat_session.headers['Accept'].should == 'application/xml'
55
+ end
56
+
57
+ it "should set the Accept head with the string value of the symbol Mime type" do
58
+ webrat_session.http_accept(:xml)
59
+ webrat_session.headers['Accept'].should == 'application/xml'
60
+ end
61
+
62
+ it "should raise an error if a symbol Mime type is passed that does not exist" do
63
+ lambda { webrat_session.http_accept(:oogabooga) }.should raise_error(ArgumentError)
64
+ end
65
+
66
+ it "should recognize a couple of webrat-specific formats" do
67
+ webrat_session.http_accept(:multipart_form).should == "multipart/form-data"
68
+ webrat_session.http_accept(:url_encoded_form).should == "application/x-www-form-urlencoded"
69
+ end
70
+ end
71
+
72
+ describe "#request_page" do
73
+ before(:each) do
74
+ webrat_session = Webrat::Session.new
75
+ end
76
+
77
+ it "should raise an error if the request is not a success" do
78
+ webrat_session.stub!(:get)
79
+ webrat_session.stub!(:response_body => "Exception caught")
80
+ webrat_session.stub!(:response_code => 500)
81
+ webrat_session.stub!(:formatted_error => "application error")
82
+ webrat_session.stub!(:save_and_open_page)
83
+
84
+ lambda { webrat_session.request_page('some url', :get, {}) }.should raise_error(Webrat::PageLoadError)
85
+ end
86
+
87
+ it "should raise an error but not open if the request is not a success and config quashes save_and_open" do
88
+ Webrat.configure do |config|
89
+ config.open_error_files = false
90
+ end
91
+ webrat_session.stub!(:get)
92
+ webrat_session.stub!(:response_body => "Exception caught")
93
+ webrat_session.stub!(:response_code => 500)
94
+ webrat_session.stub!(:formatted_error => "application error")
95
+ webrat_session.should_not_receive(:save_and_open_page)
96
+
97
+ lambda { webrat_session.request_page('some url', :get, {}) }.should raise_error(Webrat::PageLoadError)
98
+ end
99
+
100
+ it "should now follow external redirects" do
101
+ webrat_session.should_receive(:internal_redirect?).and_return(false)
102
+
103
+ webrat_session.request_page("/oldurl", :get, {})
104
+
105
+ webrat_session.current_url.should == "/oldurl"
106
+ end
107
+ end
108
+
109
+ describe "#redirect?" do
110
+ before(:each) do
111
+ webrat_session = Webrat::Session.new
112
+ end
113
+
114
+ it "should return true if the last response was a redirect and Fixnum#/ returns a Rational" do
115
+ # This happens if the ruby-units gem has been required
116
+ Fixnum.class_eval do
117
+ alias_method :original_divide, "/".to_sym
118
+
119
+ def /(other)
120
+ Rational(self, other)
121
+ end
122
+ end
123
+
124
+ webrat_session.stub!(:response_code => 301)
125
+ webrat_session.redirect?.should be_true
126
+
127
+ Fixnum.class_eval do
128
+ alias_method "/".to_sym, :original_divide
129
+ end
130
+ end
131
+
132
+ it "should return true if the last response was a redirect" do
133
+ webrat_session.stub!(:response_code => 301)
134
+ webrat_session.redirect?.should be_true
135
+ end
136
+
137
+ it "should return false if the last response wasn't a redirect" do
138
+ webrat_session.stub!(:response_code => 200)
139
+ webrat_session.redirect?.should be_false
140
+ end
141
+ end
142
+
143
+ describe "#internal_redirect?" do
144
+ before(:each) do
145
+ webrat_session = Webrat::Session.new
146
+ end
147
+
148
+ 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
149
+ webrat_session.stub!(:redirect? => true)
150
+ webrat_session.stub!(:current_url => "http://example.com")
151
+ webrat_session.stub!(:response_location => "http://example.com")
152
+ webrat_session.internal_redirect?.should be_true
153
+ end
154
+
155
+ it "should return true if the last response was a redirect and the hosts are the same but the subdomains are different" do
156
+ webrat_session.stub!(:redirect? => true)
157
+ webrat_session.stub!(:current_url => "http://example.com")
158
+ webrat_session.stub!(:response_location => "http://myName.example.com")
159
+ webrat_session.internal_redirect?.should be_true
160
+ end
161
+
162
+ it "should return false if the last response was not a redirect" do
163
+ webrat_session.stub!(:redirect? => false)
164
+ webrat_session.internal_redirect?.should be_false
165
+ end
166
+
167
+ 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
168
+ webrat_session.stub!(:redirect? => true)
169
+ webrat_session.stub!(:current_url => "http://example.com")
170
+ webrat_session.stub!(:response_location => "http://google.com")
171
+ webrat_session.internal_redirect?.should be_false
172
+ end
173
+
174
+ 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
175
+ webrat_session.stub!(:redirect? => true)
176
+ webrat_session.stub!(:current_url => "http://login.example.com")
177
+ webrat_session.stub!(:response_location => "http://login.google.com")
178
+ webrat_session.internal_redirect?.should be_false
179
+ end
180
+ end
181
+
182
+ describe "#redirected_to" do
183
+ before(:each) do
184
+ webrat_session = Webrat::Session.new
185
+ end
186
+
187
+ it "should return nil if not redirected" do
188
+ webrat_session.stub!(:redirect? => false)
189
+ webrat_session.redirected_to.should be_nil
190
+ end
191
+
192
+ it "should return the response_location if redirected" do
193
+ webrat_session.stub!(:redirect? => true)
194
+ webrat_session.stub!(:response_location => "http://www.example.com")
195
+ webrat_session.redirected_to.should == "http://www.example.com"
196
+ end
197
+
198
+ end
199
+
200
+ end
@@ -1,73 +1,73 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
-
3
- describe Webrat::MechanizeAdapter do
4
- before :each do
5
- Webrat.configuration.mode = :mechanize
6
- end
7
-
8
- before(:each) do
9
- @mech = Webrat::MechanizeAdapter.new
10
- end
11
-
12
- describe "post" do
13
- def url
14
- 'http://test.host/users'
15
- end
16
-
17
- def data
18
- {:user => {:first_name => 'Nancy', :last_name => 'Callahan'}}
19
- end
20
-
21
- def flattened_data
22
- {'user[first_name]' => 'Nancy', 'user[last_name]' => 'Callahan'}
23
- end
24
-
25
- it "should flatten model post data" do
26
- mechanize = mock(:mechanize)
27
- WWW::Mechanize.stub!(:new => mechanize)
28
- mechanize.should_receive(:post).with(url, flattened_data)
29
- Webrat::MechanizeAdapter.new.post(url, data)
30
- end
31
- end
32
-
33
- describe "#absolute_url" do
34
- before(:each) do
35
- @session = Webrat::MechanizeAdapter.new
36
- @session.stub!(:current_url).and_return(absolute_url)
37
- end
38
-
39
- def absolute_url
40
- 'http://test.host/users/fred/cabbages'
41
- end
42
-
43
- def rooted_url
44
- '/users/fred/cabbages'
45
- end
46
-
47
- def relative_url
48
- '../../wilma'
49
- end
50
-
51
- it "should return unmodified url if prefixed with scheme" do
52
- @session.absolute_url(absolute_url).should == absolute_url
53
- end
54
-
55
- it "should prefix scheme and hostname if url begins with /" do
56
- @session.absolute_url(rooted_url).should == absolute_url
57
- end
58
-
59
- it "should resolve sibling URLs relative to current path" do
60
- @session.absolute_url(relative_url).should == 'http://test.host/users/wilma'
61
- end
62
-
63
- it "should cope with sibling URLs from root of site" do
64
- @session.stub!(:current_url).and_return('http://test.host')
65
- @session.absolute_url(relative_url).should == 'http://test.host/wilma'
66
- end
67
-
68
- it "should cope with https" do
69
- @session.stub!(:current_url).and_return('https://test.host')
70
- @session.absolute_url(relative_url).should == 'https://test.host/wilma'
71
- end
72
- end
73
- end
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ describe Webrat::MechanizeAdapter do
4
+ before :each do
5
+ Webrat.configuration.mode = :mechanize
6
+ end
7
+
8
+ before(:each) do
9
+ @mech = Webrat::MechanizeAdapter.new
10
+ end
11
+
12
+ describe "post" do
13
+ def url
14
+ 'http://test.host/users'
15
+ end
16
+
17
+ def data
18
+ {:user => {:first_name => 'Nancy', :last_name => 'Callahan'}}
19
+ end
20
+
21
+ def flattened_data
22
+ {'user[first_name]' => 'Nancy', 'user[last_name]' => 'Callahan'}
23
+ end
24
+
25
+ it "should flatten model post data" do
26
+ mechanize = mock(:mechanize)
27
+ WWW::Mechanize.stub!(:new => mechanize)
28
+ mechanize.should_receive(:post).with(url, flattened_data)
29
+ Webrat::MechanizeAdapter.new.post(url, data)
30
+ end
31
+ end
32
+
33
+ describe "#absolute_url" do
34
+ before(:each) do
35
+ @session = Webrat::MechanizeAdapter.new
36
+ @session.stub!(:current_url).and_return(absolute_url)
37
+ end
38
+
39
+ def absolute_url
40
+ 'http://test.host/users/fred/cabbages'
41
+ end
42
+
43
+ def rooted_url
44
+ '/users/fred/cabbages'
45
+ end
46
+
47
+ def relative_url
48
+ '../../wilma'
49
+ end
50
+
51
+ it "should return unmodified url if prefixed with scheme" do
52
+ @session.absolute_url(absolute_url).should == absolute_url
53
+ end
54
+
55
+ it "should prefix scheme and hostname if url begins with /" do
56
+ @session.absolute_url(rooted_url).should == absolute_url
57
+ end
58
+
59
+ it "should resolve sibling URLs relative to current path" do
60
+ @session.absolute_url(relative_url).should == 'http://test.host/users/wilma'
61
+ end
62
+
63
+ it "should cope with sibling URLs from root of site" do
64
+ @session.stub!(:current_url).and_return('http://test.host')
65
+ @session.absolute_url(relative_url).should == 'http://test.host/wilma'
66
+ end
67
+
68
+ it "should cope with https" do
69
+ @session.stub!(:current_url).and_return('https://test.host')
70
+ @session.absolute_url(relative_url).should == 'https://test.host/wilma'
71
+ end
72
+ end
73
+ end