dstrelau-webrat 0.5.1

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 (225) hide show
  1. data/.document +4 -0
  2. data/.gitignore +15 -0
  3. data/History.txt +381 -0
  4. data/MIT-LICENSE.txt +19 -0
  5. data/README.rdoc +85 -0
  6. data/Rakefile +181 -0
  7. data/VERSION +1 -0
  8. data/install.rb +1 -0
  9. data/lib/webrat.rb +10 -0
  10. data/lib/webrat/core.rb +14 -0
  11. data/lib/webrat/core/configuration.rb +102 -0
  12. data/lib/webrat/core/elements/area.rb +31 -0
  13. data/lib/webrat/core/elements/element.rb +33 -0
  14. data/lib/webrat/core/elements/field.rb +411 -0
  15. data/lib/webrat/core/elements/form.rb +103 -0
  16. data/lib/webrat/core/elements/label.rb +31 -0
  17. data/lib/webrat/core/elements/link.rb +93 -0
  18. data/lib/webrat/core/elements/select_option.rb +35 -0
  19. data/lib/webrat/core/locators.rb +20 -0
  20. data/lib/webrat/core/locators/area_locator.rb +38 -0
  21. data/lib/webrat/core/locators/button_locator.rb +54 -0
  22. data/lib/webrat/core/locators/field_by_id_locator.rb +37 -0
  23. data/lib/webrat/core/locators/field_labeled_locator.rb +56 -0
  24. data/lib/webrat/core/locators/field_locator.rb +25 -0
  25. data/lib/webrat/core/locators/field_named_locator.rb +41 -0
  26. data/lib/webrat/core/locators/form_locator.rb +19 -0
  27. data/lib/webrat/core/locators/label_locator.rb +34 -0
  28. data/lib/webrat/core/locators/link_locator.rb +74 -0
  29. data/lib/webrat/core/locators/locator.rb +20 -0
  30. data/lib/webrat/core/locators/select_option_locator.rb +59 -0
  31. data/lib/webrat/core/logging.rb +24 -0
  32. data/lib/webrat/core/matchers.rb +4 -0
  33. data/lib/webrat/core/matchers/have_content.rb +73 -0
  34. data/lib/webrat/core/matchers/have_selector.rb +74 -0
  35. data/lib/webrat/core/matchers/have_tag.rb +21 -0
  36. data/lib/webrat/core/matchers/have_xpath.rb +147 -0
  37. data/lib/webrat/core/methods.rb +63 -0
  38. data/lib/webrat/core/mime.rb +18 -0
  39. data/lib/webrat/core/save_and_open_page.rb +48 -0
  40. data/lib/webrat/core/scope.rb +350 -0
  41. data/lib/webrat/core/session.rb +308 -0
  42. data/lib/webrat/core/xml.rb +115 -0
  43. data/lib/webrat/core/xml/hpricot.rb +19 -0
  44. data/lib/webrat/core/xml/nokogiri.rb +76 -0
  45. data/lib/webrat/core/xml/rexml.rb +24 -0
  46. data/lib/webrat/core_extensions/blank.rb +58 -0
  47. data/lib/webrat/core_extensions/deprecate.rb +8 -0
  48. data/lib/webrat/core_extensions/detect_mapped.rb +12 -0
  49. data/lib/webrat/core_extensions/meta_class.rb +6 -0
  50. data/lib/webrat/core_extensions/nil_to_param.rb +5 -0
  51. data/lib/webrat/core_extensions/tcp_socket.rb +27 -0
  52. data/lib/webrat/culerity.rb +69 -0
  53. data/lib/webrat/culerity/core_ext/button.rb +6 -0
  54. data/lib/webrat/culerity/core_ext/container.rb +13 -0
  55. data/lib/webrat/culerity/core_ext/frame.rb +14 -0
  56. data/lib/webrat/culerity/core_ext/generic_field.rb +21 -0
  57. data/lib/webrat/culerity/core_ext/socket.rb +21 -0
  58. data/lib/webrat/culerity/locator.rb +22 -0
  59. data/lib/webrat/culerity/scope.rb +97 -0
  60. data/lib/webrat/culerity/session.rb +155 -0
  61. data/lib/webrat/mechanize.rb +78 -0
  62. data/lib/webrat/merb.rb +9 -0
  63. data/lib/webrat/merb_adapter.rb +82 -0
  64. data/lib/webrat/merb_multipart_support.rb +27 -0
  65. data/lib/webrat/rack.rb +25 -0
  66. data/lib/webrat/rails.rb +106 -0
  67. data/lib/webrat/rspec-rails.rb +10 -0
  68. data/lib/webrat/selenium.rb +80 -0
  69. data/lib/webrat/selenium/application_server_factory.rb +40 -0
  70. data/lib/webrat/selenium/application_servers.rb +5 -0
  71. data/lib/webrat/selenium/application_servers/base.rb +46 -0
  72. data/lib/webrat/selenium/application_servers/external.rb +26 -0
  73. data/lib/webrat/selenium/application_servers/merb.rb +50 -0
  74. data/lib/webrat/selenium/application_servers/rails.rb +44 -0
  75. data/lib/webrat/selenium/application_servers/sinatra.rb +37 -0
  76. data/lib/webrat/selenium/location_strategy_javascript/button.js +19 -0
  77. data/lib/webrat/selenium/location_strategy_javascript/label.js +16 -0
  78. data/lib/webrat/selenium/location_strategy_javascript/webrat.js +5 -0
  79. data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +12 -0
  80. data/lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js +15 -0
  81. data/lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js +5 -0
  82. data/lib/webrat/selenium/matchers.rb +4 -0
  83. data/lib/webrat/selenium/matchers/have_content.rb +66 -0
  84. data/lib/webrat/selenium/matchers/have_selector.rb +49 -0
  85. data/lib/webrat/selenium/matchers/have_tag.rb +72 -0
  86. data/lib/webrat/selenium/matchers/have_xpath.rb +45 -0
  87. data/lib/webrat/selenium/selenium_extensions.js +6 -0
  88. data/lib/webrat/selenium/selenium_rc_server.rb +86 -0
  89. data/lib/webrat/selenium/selenium_session.rb +248 -0
  90. data/lib/webrat/selenium/silence_stream.rb +18 -0
  91. data/lib/webrat/sinatra.rb +11 -0
  92. data/spec/fakes/test_adapter.rb +37 -0
  93. data/spec/integration/mechanize/Rakefile +7 -0
  94. data/spec/integration/mechanize/config.ru +2 -0
  95. data/spec/integration/mechanize/sample_app.rb +20 -0
  96. data/spec/integration/mechanize/spec/mechanize_spec.rb +22 -0
  97. data/spec/integration/mechanize/spec/spec_helper.rb +27 -0
  98. data/spec/integration/merb/.gitignore +21 -0
  99. data/spec/integration/merb/Rakefile +35 -0
  100. data/spec/integration/merb/app/controllers/application.rb +2 -0
  101. data/spec/integration/merb/app/controllers/exceptions.rb +13 -0
  102. data/spec/integration/merb/app/controllers/testing.rb +27 -0
  103. data/spec/integration/merb/app/views/exceptions/not_acceptable.html.erb +63 -0
  104. data/spec/integration/merb/app/views/exceptions/not_found.html.erb +47 -0
  105. data/spec/integration/merb/app/views/layout/application.html.erb +12 -0
  106. data/spec/integration/merb/app/views/testing/show_form.html.erb +27 -0
  107. data/spec/integration/merb/app/views/testing/upload.html.erb +9 -0
  108. data/spec/integration/merb/config/environments/development.rb +15 -0
  109. data/spec/integration/merb/config/environments/rake.rb +11 -0
  110. data/spec/integration/merb/config/environments/test.rb +14 -0
  111. data/spec/integration/merb/config/init.rb +25 -0
  112. data/spec/integration/merb/config/rack.rb +11 -0
  113. data/spec/integration/merb/config/router.rb +34 -0
  114. data/spec/integration/merb/spec/spec.opts +1 -0
  115. data/spec/integration/merb/spec/spec_helper.rb +26 -0
  116. data/spec/integration/merb/spec/webrat_spec.rb +39 -0
  117. data/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -0
  118. data/spec/integration/merb/tasks/merb.thor/common.rb +64 -0
  119. data/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -0
  120. data/spec/integration/merb/tasks/merb.thor/main.thor +150 -0
  121. data/spec/integration/merb/tasks/merb.thor/ops.rb +93 -0
  122. data/spec/integration/merb/tasks/merb.thor/utils.rb +40 -0
  123. data/spec/integration/rack/Rakefile +5 -0
  124. data/spec/integration/rack/app.rb +89 -0
  125. data/spec/integration/rack/test/helper.rb +21 -0
  126. data/spec/integration/rack/test/webrat_rack_test.rb +73 -0
  127. data/spec/integration/rails/.gitignore +3 -0
  128. data/spec/integration/rails/Rakefile +30 -0
  129. data/spec/integration/rails/app/controllers/application.rb +15 -0
  130. data/spec/integration/rails/app/controllers/buttons_controller.rb +7 -0
  131. data/spec/integration/rails/app/controllers/fields_controller.rb +4 -0
  132. data/spec/integration/rails/app/controllers/links_controller.rb +7 -0
  133. data/spec/integration/rails/app/controllers/webrat_controller.rb +43 -0
  134. data/spec/integration/rails/app/helpers/buttons_helper.rb +2 -0
  135. data/spec/integration/rails/app/helpers/fields_helper.rb +2 -0
  136. data/spec/integration/rails/app/helpers/links_helper.rb +2 -0
  137. data/spec/integration/rails/app/views/buttons/show.html.erb +11 -0
  138. data/spec/integration/rails/app/views/fields/show.html.erb +9 -0
  139. data/spec/integration/rails/app/views/links/show.html.erb +5 -0
  140. data/spec/integration/rails/app/views/webrat/before_redirect_form.html.erb +4 -0
  141. data/spec/integration/rails/app/views/webrat/buttons.html.erb +11 -0
  142. data/spec/integration/rails/app/views/webrat/form.html.erb +28 -0
  143. data/spec/integration/rails/config/boot.rb +109 -0
  144. data/spec/integration/rails/config/environment.rb +12 -0
  145. data/spec/integration/rails/config/environments/development.rb +17 -0
  146. data/spec/integration/rails/config/environments/selenium.rb +22 -0
  147. data/spec/integration/rails/config/environments/test.rb +22 -0
  148. data/spec/integration/rails/config/initializers/inflections.rb +10 -0
  149. data/spec/integration/rails/config/initializers/mime_types.rb +5 -0
  150. data/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -0
  151. data/spec/integration/rails/config/locales/en.yml +5 -0
  152. data/spec/integration/rails/config/routes.rb +18 -0
  153. data/spec/integration/rails/public/404.html +30 -0
  154. data/spec/integration/rails/public/422.html +30 -0
  155. data/spec/integration/rails/public/500.html +33 -0
  156. data/spec/integration/rails/script/about +4 -0
  157. data/spec/integration/rails/script/console +3 -0
  158. data/spec/integration/rails/script/dbconsole +3 -0
  159. data/spec/integration/rails/script/destroy +3 -0
  160. data/spec/integration/rails/script/generate +3 -0
  161. data/spec/integration/rails/script/performance/benchmarker +3 -0
  162. data/spec/integration/rails/script/performance/profiler +3 -0
  163. data/spec/integration/rails/script/performance/request +3 -0
  164. data/spec/integration/rails/script/plugin +3 -0
  165. data/spec/integration/rails/script/process/inspector +3 -0
  166. data/spec/integration/rails/script/process/reaper +3 -0
  167. data/spec/integration/rails/script/process/spawner +3 -0
  168. data/spec/integration/rails/script/runner +3 -0
  169. data/spec/integration/rails/script/server +3 -0
  170. data/spec/integration/rails/test/integration/button_click_test.rb +80 -0
  171. data/spec/integration/rails/test/integration/fill_in_test.rb +24 -0
  172. data/spec/integration/rails/test/integration/link_click_test.rb +27 -0
  173. data/spec/integration/rails/test/integration/webrat_test.rb +97 -0
  174. data/spec/integration/rails/test/test_helper.rb +26 -0
  175. data/spec/integration/sinatra/Rakefile +5 -0
  176. data/spec/integration/sinatra/classic_app.rb +64 -0
  177. data/spec/integration/sinatra/modular_app.rb +16 -0
  178. data/spec/integration/sinatra/test/classic_app_test.rb +37 -0
  179. data/spec/integration/sinatra/test/modular_app_test.rb +18 -0
  180. data/spec/integration/sinatra/test/test_helper.rb +17 -0
  181. data/spec/private/core/configuration_spec.rb +116 -0
  182. data/spec/private/core/field_spec.rb +85 -0
  183. data/spec/private/core/link_spec.rb +24 -0
  184. data/spec/private/core/logging_spec.rb +10 -0
  185. data/spec/private/core/session_spec.rb +200 -0
  186. data/spec/private/mechanize/mechanize_adapter_spec.rb +75 -0
  187. data/spec/private/merb/attaches_file_spec.rb +93 -0
  188. data/spec/private/merb/merb_adapter_spec.rb +61 -0
  189. data/spec/private/nokogiri_spec.rb +77 -0
  190. data/spec/private/rails/attaches_file_spec.rb +81 -0
  191. data/spec/private/rails/rails_adapter_spec.rb +112 -0
  192. data/spec/private/selenium/application_servers/rails_spec.rb +26 -0
  193. data/spec/public/basic_auth_spec.rb +24 -0
  194. data/spec/public/check_spec.rb +191 -0
  195. data/spec/public/choose_spec.rb +118 -0
  196. data/spec/public/click_area_spec.rb +106 -0
  197. data/spec/public/click_button_spec.rb +496 -0
  198. data/spec/public/click_link_spec.rb +511 -0
  199. data/spec/public/fill_in_spec.rb +209 -0
  200. data/spec/public/locators/field_by_xpath_spec.rb +19 -0
  201. data/spec/public/locators/field_labeled_spec.rb +172 -0
  202. data/spec/public/locators/field_with_id_spec.rb +16 -0
  203. data/spec/public/matchers/contain_spec.rb +114 -0
  204. data/spec/public/matchers/have_selector_spec.rb +142 -0
  205. data/spec/public/matchers/have_tag_spec.rb +39 -0
  206. data/spec/public/matchers/have_xpath_spec.rb +136 -0
  207. data/spec/public/reload_spec.rb +10 -0
  208. data/spec/public/save_and_open_spec.rb +70 -0
  209. data/spec/public/select_date_spec.rb +112 -0
  210. data/spec/public/select_datetime_spec.rb +137 -0
  211. data/spec/public/select_spec.rb +249 -0
  212. data/spec/public/select_time_spec.rb +100 -0
  213. data/spec/public/selenium/application_server_factory_spec.rb +49 -0
  214. data/spec/public/selenium/application_servers/external_spec.rb +12 -0
  215. data/spec/public/selenium/selenium_session_spec.rb +37 -0
  216. data/spec/public/set_hidden_field_spec.rb +5 -0
  217. data/spec/public/submit_form_spec.rb +5 -0
  218. data/spec/public/visit_spec.rb +58 -0
  219. data/spec/public/within_spec.rb +177 -0
  220. data/spec/rcov.opts +1 -0
  221. data/spec/spec.opts +2 -0
  222. data/spec/spec_helper.rb +52 -0
  223. data/vendor/selenium-server.jar +0 -0
  224. data/webrat.gemspec +365 -0
  225. metadata +387 -0
@@ -0,0 +1,75 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ require "webrat/mechanize"
4
+
5
+ describe Webrat::MechanizeAdapter do
6
+ before :each do
7
+ Webrat.configuration.mode = :mechanize
8
+ end
9
+
10
+ before(:each) do
11
+ @mech = Webrat::MechanizeAdapter.new
12
+ end
13
+
14
+ describe "post" do
15
+ def url
16
+ 'http://test.host/users'
17
+ end
18
+
19
+ def data
20
+ {:user => {:first_name => 'Nancy', :last_name => 'Callahan'}}
21
+ end
22
+
23
+ def flattened_data
24
+ {'user[first_name]' => 'Nancy', 'user[last_name]' => 'Callahan'}
25
+ end
26
+
27
+ it "should flatten model post data" do
28
+ mechanize = mock(:mechanize)
29
+ WWW::Mechanize.stub!(:new => mechanize)
30
+ mechanize.should_receive(:post).with(url, flattened_data)
31
+ Webrat::MechanizeAdapter.new.post(url, data)
32
+ end
33
+ end
34
+
35
+ describe "#absolute_url" do
36
+ before(:each) do
37
+ @session = Webrat::MechanizeAdapter.new
38
+ @session.stub!(:current_url).and_return(absolute_url)
39
+ end
40
+
41
+ def absolute_url
42
+ 'http://test.host/users/fred/cabbages'
43
+ end
44
+
45
+ def rooted_url
46
+ '/users/fred/cabbages'
47
+ end
48
+
49
+ def relative_url
50
+ '../../wilma'
51
+ end
52
+
53
+ it "should return unmodified url if prefixed with scheme" do
54
+ @session.absolute_url(absolute_url).should == absolute_url
55
+ end
56
+
57
+ it "should prefix scheme and hostname if url begins with /" do
58
+ @session.absolute_url(rooted_url).should == absolute_url
59
+ end
60
+
61
+ it "should resolve sibling URLs relative to current path" do
62
+ @session.absolute_url(relative_url).should == 'http://test.host/users/wilma'
63
+ end
64
+
65
+ it "should cope with sibling URLs from root of site" do
66
+ @session.stub!(:current_url).and_return('http://test.host')
67
+ @session.absolute_url(relative_url).should == 'http://test.host/wilma'
68
+ end
69
+
70
+ it "should cope with https" do
71
+ @session.stub!(:current_url).and_return('https://test.host')
72
+ @session.absolute_url(relative_url).should == 'https://test.host/wilma'
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,93 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ describe "attach_file with merb" do
4
+ before do
5
+ Webrat.configuration.mode = :merb
6
+ @filename = __FILE__
7
+ end
8
+
9
+ it "should fail if no file field found" do
10
+ with_html <<-HTML
11
+ <html>
12
+ <form method="post" action="/widgets">
13
+ </form>
14
+ </html>
15
+ HTML
16
+ lambda { attach_file("Doc", "/some/path") }.should raise_error(Webrat::NotFoundError)
17
+ end
18
+
19
+ it "should submit empty strings for blank file fields" do
20
+ with_html <<-HTML
21
+ <html>
22
+ <form method="post" action="/widgets">
23
+ <input type="file" id="widget_file" name="widget[file]" />
24
+ <input type="submit" />
25
+ </form>
26
+ </html>
27
+ HTML
28
+ webrat_session.should_receive(:post).with("/widgets", { "widget" => { "file" => "" } })
29
+ click_button
30
+ end
31
+
32
+ it "should submit the attached file" do
33
+ with_html <<-HTML
34
+ <html>
35
+ <form method="post" action="/widgets">
36
+ <label for="widget_file">Document</label>
37
+ <input type="file" id="widget_file" name="widget[file]" />
38
+ <input type="submit" />
39
+ </form>
40
+ </html>
41
+ HTML
42
+ webrat_session.should_receive(:post).with { |path, params|
43
+ path.should == "/widgets"
44
+ params.should have_key("widget")
45
+ params["widget"].should have_key("file")
46
+ params["widget"]["file"].should be_an_instance_of(File)
47
+ params["widget"]["file"].path.should == @filename
48
+ }
49
+ attach_file "Document", @filename
50
+ click_button
51
+ end
52
+
53
+ it "should support collections" do
54
+ with_html <<-HTML
55
+ <html>
56
+ <form method="post" action="/widgets">
57
+ <label for="widget_file1">Document</label>
58
+ <input type="file" id="widget_file1" name="widget[files][]" />
59
+ <label for="widget_file2">Spreadsheet</label>
60
+ <input type="file" id="widget_file2" name="widget[files][]" />
61
+ <input type="submit" />
62
+ </form>
63
+ </html>
64
+ HTML
65
+ webrat_session.should_receive(:post).with { |path, params|
66
+ path.should == "/widgets"
67
+ params.should have_key("widget")
68
+ params["widget"].should have_key("files")
69
+ params["widget"]["files"][0].should be_an_instance_of(File)
70
+ params["widget"]["files"][0].path.should == @filename
71
+ params["widget"]["files"][1].should be_an_instance_of(File)
72
+ params["widget"]["files"][1].path.should == @filename
73
+ }
74
+ attach_file "Document", @filename
75
+ attach_file "Spreadsheet", @filename
76
+ click_button
77
+ end
78
+
79
+ xit "should allow the content type to be specified" do
80
+ with_html <<-HTML
81
+ <html>
82
+ <form method="post" action="/widgets">
83
+ <label for="person_picture">Picture</label>
84
+ <input type="file" id="person_picture" name="person[picture]" />
85
+ <input type="submit" />
86
+ </form>
87
+ </html>
88
+ HTML
89
+ ActionController::TestUploadedFile.should_receive(:new).with(@filename, "image/png").any_number_of_times
90
+ attach_file "Picture", @filename, "image/png"
91
+ click_button
92
+ end
93
+ end
@@ -0,0 +1,61 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
+
3
+ require "webrat/merb"
4
+
5
+ describe Webrat::MerbAdapter do
6
+ it "should not pass empty params if data is and empty hash" do
7
+ session = Webrat::MerbAdapter.new
8
+ response = OpenStruct.new
9
+ response.status = 200
10
+ session.should_receive(:request).with('url', {:params=> nil, :method=>"GET", :headers=>nil}).and_return(response)
11
+ session.get('url', {}, nil)
12
+ end
13
+
14
+ %w{post put delete}.each do |request_method|
15
+ it "should call do request with method #{request_method.upcase} for a #{request_method} call" do
16
+ session = Webrat::MerbAdapter.new
17
+ response = OpenStruct.new
18
+ response.status = 200
19
+
20
+ session.should_receive(:request).with('url', {:params=>nil, :method=>request_method.upcase, :headers=>nil}).and_return(response)
21
+ session.send(request_method, 'url', {}, nil)
22
+ end
23
+ end
24
+
25
+ %w{post put}.each do |request_method|
26
+ it "should call do request with method #{request_method.upcase} with a file attachment" do
27
+ session = Webrat::MerbAdapter.new
28
+ response = OpenStruct.new
29
+ response.status = 200
30
+
31
+ file = File.new(__FILE__)
32
+ session.should_receive(:request).with { |path, env|
33
+ path.should == "url"
34
+ env[:method].should == request_method.upcase
35
+ env[:headers].should be_nil
36
+ env[:input].should be_an_instance_of(StringIO)
37
+ env["CONTENT_LENGTH"].should be_an_instance_of(Fixnum)
38
+ env["CONTENT_TYPE"].should match(/multipart.*boundary/)
39
+ }.and_return(response)
40
+ session.send(request_method, 'url', { :file => file }, nil)
41
+ end
42
+ end
43
+
44
+ context "a session with a response" do
45
+ before do
46
+ @session = Webrat::MerbAdapter.new
47
+ @response = OpenStruct.new
48
+ @response.status = 200
49
+ @response.body = 'test response'
50
+ @session.instance_variable_set(:@response, @response)
51
+ end
52
+
53
+ it "should return body of a request as a response_body" do
54
+ @session.response_body.should == @response.body
55
+ end
56
+
57
+ it "should return status of a request as a response_code" do
58
+ @session.response_code.should == @response.status
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,77 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ if defined?(Nokogiri::XML) && Webrat.configuration.parse_with_nokogiri?
4
+ describe "Nokogiri Extension" do
5
+ include Webrat::Matchers
6
+
7
+ def fail
8
+ raise_error(Spec::Expectations::ExpectationNotMetError)
9
+ end
10
+
11
+ before(:each) do
12
+ @text_and_password = <<-HTML
13
+ <div>
14
+ <input type="text"/>
15
+ <input type="password"/>
16
+ <span type="text"/>
17
+ </div>
18
+ HTML
19
+
20
+ @text_only = <<-HTML
21
+ <div>
22
+ <input type="text" disabled="disabled" />
23
+ </div>
24
+ HTML
25
+
26
+ @password_only = <<-HTML
27
+ <div>
28
+ <input type="password"/>
29
+ <div>
30
+ HTML
31
+ end
32
+
33
+ describe ":text" do
34
+ it "passes have_selector(:text) if a node with type=text exists" do
35
+ @text_and_password.should have_selector(":text")
36
+ end
37
+
38
+ it "passes not have_selector(:text) if no node with text=text exists" do
39
+ @password_only.should_not have_selector(":text")
40
+ end
41
+
42
+ it "fails have_selector(:text) if no node with type=text exists" do
43
+ lambda { @password_only.should have_selector(":text") }.should fail
44
+ end
45
+
46
+ it "fails not have_selector(:text) if a node with type=text exists" do
47
+ lambda { @text_only.should_not have_selector(":text") }.should fail
48
+ end
49
+
50
+ it "works together with other selectors" do
51
+ @text_and_password.should have_selector("input:text[type*='te']")
52
+ end
53
+ end
54
+
55
+ describe ":password" do
56
+ it "passes have_selector(:password) if a node with type=password exists" do
57
+ @text_and_password.should have_selector(":password")
58
+ end
59
+
60
+ it "passes not have_selector(:text) if no node with text=text exists" do
61
+ @text_only.should_not have_selector(":password")
62
+ end
63
+
64
+ it "fails have_selector(:password) if no node with type=password exists" do
65
+ lambda { @text_only.should have_selector(":password") }.should fail
66
+ end
67
+
68
+ it "fails not have_selector(:password) if a node with type=password exists" do
69
+ lambda { @password_only.should_not have_selector(":password") }.should fail
70
+ end
71
+
72
+ it "works together with other selectors" do
73
+ @text_and_password.should have_selector("input:password[type*='pa']")
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,81 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ describe "attach_file" do
4
+ before do
5
+ Webrat.configuration.mode = :rails
6
+ @filename = __FILE__
7
+ @uploaded_file = mock("uploaded file")
8
+ ActionController::TestUploadedFile.stub!(:new => @uploaded_file)
9
+ end
10
+
11
+ it "should fail if no file field found" do
12
+ with_html <<-HTML
13
+ <html>
14
+ <form method="post" action="/widgets">
15
+ </form>
16
+ </html>
17
+ HTML
18
+ lambda { attach_file("Doc", "/some/path") }.should raise_error(Webrat::NotFoundError)
19
+ end
20
+
21
+ it "should submit empty strings for blank file fields" do
22
+ with_html <<-HTML
23
+ <html>
24
+ <form method="post" action="/widgets">
25
+ <input type="file" id="widget_file" name="widget[file]" />
26
+ <input type="submit" />
27
+ </form>
28
+ </html>
29
+ HTML
30
+ webrat_session.should_receive(:post).with("/widgets", { "widget" => { "file" => "" } })
31
+ click_button
32
+ end
33
+
34
+ it "should submit the attached file" do
35
+ with_html <<-HTML
36
+ <html>
37
+ <form method="post" action="/widgets">
38
+ <label for="widget_file">Document</label>
39
+ <input type="file" id="widget_file" name="widget[file]" />
40
+ <input type="submit" />
41
+ </form>
42
+ </html>
43
+ HTML
44
+ webrat_session.should_receive(:post).with("/widgets", { "widget" => { "file" => @uploaded_file } })
45
+ attach_file "Document", @filename
46
+ click_button
47
+ end
48
+
49
+ it "should support collections" do
50
+ with_html <<-HTML
51
+ <html>
52
+ <form method="post" action="/widgets">
53
+ <label for="widget_file1">Document</label>
54
+ <input type="file" id="widget_file1" name="widget[files][]" />
55
+ <label for="widget_file2">Spreadsheet</label>
56
+ <input type="file" id="widget_file2" name="widget[files][]" />
57
+ <input type="submit" />
58
+ </form>
59
+ </html>
60
+ HTML
61
+ webrat_session.should_receive(:post).with("/widgets", { "widget" => { "files" => [@uploaded_file, @uploaded_file] } })
62
+ attach_file "Document", @filename
63
+ attach_file "Spreadsheet", @filename
64
+ click_button
65
+ end
66
+
67
+ it "should allow the content type to be specified" do
68
+ with_html <<-HTML
69
+ <html>
70
+ <form method="post" action="/widgets">
71
+ <label for="person_picture">Picture</label>
72
+ <input type="file" id="person_picture" name="person[picture]" />
73
+ <input type="submit" />
74
+ </form>
75
+ </html>
76
+ HTML
77
+ ActionController::TestUploadedFile.should_receive(:new).with(@filename, "image/png").any_number_of_times
78
+ attach_file "Picture", @filename, "image/png"
79
+ click_button
80
+ end
81
+ end
@@ -0,0 +1,112 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ require "webrat/rails"
4
+
5
+ describe Webrat::RailsAdapter do
6
+ before :each do
7
+ Webrat.configuration.mode = :rails
8
+ @integration_session = mock("integration_session")
9
+ end
10
+
11
+ it "should delegate response_body to the session response body" do
12
+ @integration_session.stub!(:response => mock("response", :body => "<html>"))
13
+ Webrat::RailsAdapter.new(@integration_session).response_body.should == "<html>"
14
+ end
15
+
16
+ it "should delegate response_code to the session response code" do
17
+ @integration_session.stub!(:response => mock("response", :code => "42"))
18
+ Webrat::RailsAdapter.new(@integration_session).response_code.should == 42
19
+ end
20
+
21
+ it "should delegate get to the integration session" do
22
+ @integration_session.should_receive(:get).with("url", "data", "headers")
23
+ rails_session = Webrat::RailsAdapter.new(@integration_session)
24
+ rails_session.get("url", "data", "headers")
25
+ end
26
+
27
+ it "should delegate post to the integration session" do
28
+ @integration_session.should_receive(:post).with("url", "data", "headers")
29
+ rails_session = Webrat::RailsAdapter.new(@integration_session)
30
+ rails_session.post("url", "data", "headers")
31
+ end
32
+
33
+ it "should delegate put to the integration session" do
34
+ @integration_session.should_receive(:put).with("url", "data", "headers")
35
+ rails_session = Webrat::RailsAdapter.new(@integration_session)
36
+ rails_session.put("url", "data", "headers")
37
+ end
38
+
39
+ it "should delegate delete to the integration session" do
40
+ @integration_session.should_receive(:delete).with("url", "data", "headers")
41
+ rails_session = Webrat::RailsAdapter.new(@integration_session)
42
+ rails_session.delete("url", "data", "headers")
43
+ end
44
+
45
+ context "the URL is a full path" do
46
+ it "should pass the full url" do
47
+ @integration_session.stub!(:https!)
48
+ @integration_session.should_receive(:get).with("http://www.example.com/url", "data", "headers")
49
+ rails_session = Webrat::RailsAdapter.new(@integration_session)
50
+ rails_session.get("http://www.example.com/url", "data", "headers")
51
+ end
52
+ end
53
+
54
+ context "the URL is https://" do
55
+ it "should call #https! with true before the request before passing along the full url" do
56
+ @integration_session.should_receive(:https!).with(true)
57
+ @integration_session.should_receive(:get).with("https://www.example.com/url", "data", "headers")
58
+ rails_session = Webrat::RailsAdapter.new(@integration_session)
59
+ rails_session.get("https://www.example.com/url", "data", "headers")
60
+ end
61
+ end
62
+
63
+ context "the URL is http://" do
64
+ it "should call #https! with true before the request" do
65
+ @integration_session.stub!(:get)
66
+ @integration_session.should_receive(:https!).with(false)
67
+ rails_session = Webrat::RailsAdapter.new(@integration_session)
68
+ rails_session.get("http://www.example.com/url", "data", "headers")
69
+ end
70
+ end
71
+
72
+ context "the URL include an anchor" do
73
+ it "should strip out the anchor" do
74
+ @integration_session.should_receive(:https!).with(false)
75
+ @integration_session.should_receive(:get).with("http://www.example.com/url", "data", "headers")
76
+ rails_session = Webrat::RailsAdapter.new(@integration_session)
77
+ rails_session.get("http://www.example.com/url#foo", "data", "headers")
78
+ end
79
+ end
80
+
81
+ it "should provide a saved_page_dir" do
82
+ Webrat::RailsAdapter.new(mock("integration session")).should respond_to(:saved_page_dir)
83
+ end
84
+
85
+ it "should provide a doc_root" do
86
+ Webrat::RailsAdapter.new(mock("integration session")).should respond_to(:doc_root)
87
+ end
88
+
89
+ it "should accept an ActiveRecord argument to #within and translate to a selector using dom_id" do
90
+ pending "Move this to spec/public/within_spec.rb"
91
+
92
+ body = <<-HTML
93
+ <a href="/page1">Edit</a>
94
+ <div id="new_object">
95
+ <a href="/page2">Edit</a>
96
+ </div>
97
+ HTML
98
+
99
+ response = mock("response", :body => body, :headers => {}, :code => 200)
100
+ @integration_session.stub!(:response => response)
101
+ @integration_session.should_receive(:get).with("/page2", {}, nil)
102
+
103
+ rails_session = Webrat::RailsAdapter.new(@integration_session)
104
+
105
+ object = Object.new
106
+ object.stub!(:id => nil)
107
+
108
+ rails_session.within(object) do
109
+ rails_session.click_link 'Edit'
110
+ end
111
+ end
112
+ end