indirect-webrat 0.7.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 (218) hide show
  1. data/.document +4 -0
  2. data/.gitignore +21 -0
  3. data/Gemfile +14 -0
  4. data/History.txt +470 -0
  5. data/MIT-LICENSE.txt +19 -0
  6. data/README.rdoc +85 -0
  7. data/Rakefile +143 -0
  8. data/Thorfile +118 -0
  9. data/install.rb +1 -0
  10. data/lib/webrat.rb +18 -0
  11. data/lib/webrat/adapters/mechanize.rb +94 -0
  12. data/lib/webrat/adapters/merb.rb +11 -0
  13. data/lib/webrat/adapters/rack.rb +30 -0
  14. data/lib/webrat/adapters/rails.rb +77 -0
  15. data/lib/webrat/adapters/sinatra.rb +9 -0
  16. data/lib/webrat/core.rb +13 -0
  17. data/lib/webrat/core/configuration.rb +114 -0
  18. data/lib/webrat/core/elements/area.rb +31 -0
  19. data/lib/webrat/core/elements/element.rb +33 -0
  20. data/lib/webrat/core/elements/field.rb +438 -0
  21. data/lib/webrat/core/elements/form.rb +127 -0
  22. data/lib/webrat/core/elements/label.rb +31 -0
  23. data/lib/webrat/core/elements/link.rb +93 -0
  24. data/lib/webrat/core/elements/select_option.rb +48 -0
  25. data/lib/webrat/core/locators.rb +20 -0
  26. data/lib/webrat/core/locators/area_locator.rb +38 -0
  27. data/lib/webrat/core/locators/button_locator.rb +54 -0
  28. data/lib/webrat/core/locators/field_by_id_locator.rb +37 -0
  29. data/lib/webrat/core/locators/field_labeled_locator.rb +56 -0
  30. data/lib/webrat/core/locators/field_locator.rb +25 -0
  31. data/lib/webrat/core/locators/field_named_locator.rb +41 -0
  32. data/lib/webrat/core/locators/form_locator.rb +19 -0
  33. data/lib/webrat/core/locators/label_locator.rb +34 -0
  34. data/lib/webrat/core/locators/link_locator.rb +82 -0
  35. data/lib/webrat/core/locators/locator.rb +20 -0
  36. data/lib/webrat/core/locators/select_option_locator.rb +59 -0
  37. data/lib/webrat/core/logging.rb +23 -0
  38. data/lib/webrat/core/matchers.rb +4 -0
  39. data/lib/webrat/core/matchers/have_content.rb +68 -0
  40. data/lib/webrat/core/matchers/have_selector.rb +85 -0
  41. data/lib/webrat/core/matchers/have_tag.rb +21 -0
  42. data/lib/webrat/core/matchers/have_xpath.rb +124 -0
  43. data/lib/webrat/core/methods.rb +73 -0
  44. data/lib/webrat/core/mime.rb +18 -0
  45. data/lib/webrat/core/save_and_open_page.rb +28 -0
  46. data/lib/webrat/core/scope.rb +362 -0
  47. data/lib/webrat/core/session.rb +318 -0
  48. data/lib/webrat/core/xml.rb +44 -0
  49. data/lib/webrat/core_extensions/blank.rb +58 -0
  50. data/lib/webrat/core_extensions/deprecate.rb +8 -0
  51. data/lib/webrat/core_extensions/detect_mapped.rb +12 -0
  52. data/lib/webrat/core_extensions/meta_class.rb +6 -0
  53. data/lib/webrat/core_extensions/nil_to_query_string.rb +5 -0
  54. data/lib/webrat/core_extensions/tcp_socket.rb +27 -0
  55. data/lib/webrat/integrations/merb.rb +10 -0
  56. data/lib/webrat/integrations/rack.rb +9 -0
  57. data/lib/webrat/integrations/rails.rb +25 -0
  58. data/lib/webrat/integrations/rspec-rails.rb +11 -0
  59. data/lib/webrat/integrations/selenium.rb +11 -0
  60. data/lib/webrat/merb.rb +9 -0
  61. data/lib/webrat/rspec-rails.rb +2 -0
  62. data/lib/webrat/selenium.rb +70 -0
  63. data/lib/webrat/selenium/application_server_factory.rb +43 -0
  64. data/lib/webrat/selenium/application_servers.rb +5 -0
  65. data/lib/webrat/selenium/application_servers/base.rb +46 -0
  66. data/lib/webrat/selenium/application_servers/external.rb +26 -0
  67. data/lib/webrat/selenium/application_servers/merb.rb +50 -0
  68. data/lib/webrat/selenium/application_servers/rack.rb +51 -0
  69. data/lib/webrat/selenium/application_servers/rails.rb +44 -0
  70. data/lib/webrat/selenium/application_servers/sinatra.rb +37 -0
  71. data/lib/webrat/selenium/location_strategy_javascript/button.js +19 -0
  72. data/lib/webrat/selenium/location_strategy_javascript/label.js +48 -0
  73. data/lib/webrat/selenium/location_strategy_javascript/webrat.js +6 -0
  74. data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +32 -0
  75. data/lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js +15 -0
  76. data/lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js +5 -0
  77. data/lib/webrat/selenium/matchers.rb +4 -0
  78. data/lib/webrat/selenium/matchers/have_content.rb +78 -0
  79. data/lib/webrat/selenium/matchers/have_selector.rb +57 -0
  80. data/lib/webrat/selenium/matchers/have_tag.rb +72 -0
  81. data/lib/webrat/selenium/matchers/have_xpath.rb +53 -0
  82. data/lib/webrat/selenium/selenium_extensions.js +6 -0
  83. data/lib/webrat/selenium/selenium_rc_server.rb +89 -0
  84. data/lib/webrat/selenium/selenium_session.rb +276 -0
  85. data/lib/webrat/selenium/silence_stream.rb +18 -0
  86. data/spec/fakes/test_adapter.rb +33 -0
  87. data/spec/integration/mechanize/Rakefile +7 -0
  88. data/spec/integration/mechanize/config.ru +2 -0
  89. data/spec/integration/mechanize/sample_app.rb +35 -0
  90. data/spec/integration/mechanize/spec/mechanize_spec.rb +30 -0
  91. data/spec/integration/mechanize/spec/spec_helper.rb +29 -0
  92. data/spec/integration/merb/.gitignore +21 -0
  93. data/spec/integration/merb/Rakefile +35 -0
  94. data/spec/integration/merb/app/controllers/application.rb +2 -0
  95. data/spec/integration/merb/app/controllers/exceptions.rb +13 -0
  96. data/spec/integration/merb/app/controllers/testing.rb +27 -0
  97. data/spec/integration/merb/app/views/exceptions/not_acceptable.html.erb +63 -0
  98. data/spec/integration/merb/app/views/exceptions/not_found.html.erb +47 -0
  99. data/spec/integration/merb/app/views/layout/application.html.erb +12 -0
  100. data/spec/integration/merb/app/views/testing/show_form.html.erb +27 -0
  101. data/spec/integration/merb/app/views/testing/upload.html.erb +9 -0
  102. data/spec/integration/merb/config/environments/development.rb +15 -0
  103. data/spec/integration/merb/config/environments/rake.rb +11 -0
  104. data/spec/integration/merb/config/environments/test.rb +14 -0
  105. data/spec/integration/merb/config/init.rb +25 -0
  106. data/spec/integration/merb/config/rack.rb +11 -0
  107. data/spec/integration/merb/config/router.rb +34 -0
  108. data/spec/integration/merb/spec/spec.opts +1 -0
  109. data/spec/integration/merb/spec/spec_helper.rb +26 -0
  110. data/spec/integration/merb/spec/webrat_spec.rb +39 -0
  111. data/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -0
  112. data/spec/integration/merb/tasks/merb.thor/common.rb +64 -0
  113. data/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -0
  114. data/spec/integration/merb/tasks/merb.thor/main.thor +150 -0
  115. data/spec/integration/merb/tasks/merb.thor/ops.rb +93 -0
  116. data/spec/integration/merb/tasks/merb.thor/utils.rb +40 -0
  117. data/spec/integration/rack/Rakefile +5 -0
  118. data/spec/integration/rack/app.rb +89 -0
  119. data/spec/integration/rack/test/helper.rb +20 -0
  120. data/spec/integration/rack/test/webrat_rack_test.rb +74 -0
  121. data/spec/integration/rails/.gitignore +3 -0
  122. data/spec/integration/rails/Rakefile +30 -0
  123. data/spec/integration/rails/app/controllers/application_controller.rb +15 -0
  124. data/spec/integration/rails/app/controllers/buttons_controller.rb +7 -0
  125. data/spec/integration/rails/app/controllers/fields_controller.rb +4 -0
  126. data/spec/integration/rails/app/controllers/links_controller.rb +7 -0
  127. data/spec/integration/rails/app/controllers/webrat_controller.rb +46 -0
  128. data/spec/integration/rails/app/helpers/buttons_helper.rb +2 -0
  129. data/spec/integration/rails/app/helpers/fields_helper.rb +2 -0
  130. data/spec/integration/rails/app/helpers/links_helper.rb +2 -0
  131. data/spec/integration/rails/app/views/buttons/show.html.erb +9 -0
  132. data/spec/integration/rails/app/views/fields/show.html.erb +9 -0
  133. data/spec/integration/rails/app/views/links/show.html.erb +5 -0
  134. data/spec/integration/rails/app/views/webrat/before_redirect_form.html.erb +4 -0
  135. data/spec/integration/rails/app/views/webrat/buttons.html.erb +9 -0
  136. data/spec/integration/rails/app/views/webrat/form.html.erb +28 -0
  137. data/spec/integration/rails/app/views/webrat/within.html.erb +3 -0
  138. data/spec/integration/rails/config/boot.rb +109 -0
  139. data/spec/integration/rails/config/environment.rb +12 -0
  140. data/spec/integration/rails/config/environments/development.rb +17 -0
  141. data/spec/integration/rails/config/environments/selenium.rb +22 -0
  142. data/spec/integration/rails/config/environments/test.rb +22 -0
  143. data/spec/integration/rails/config/initializers/inflections.rb +10 -0
  144. data/spec/integration/rails/config/initializers/mime_types.rb +5 -0
  145. data/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -0
  146. data/spec/integration/rails/config/locales/en.yml +5 -0
  147. data/spec/integration/rails/config/routes.rb +19 -0
  148. data/spec/integration/rails/public/404.html +30 -0
  149. data/spec/integration/rails/public/422.html +30 -0
  150. data/spec/integration/rails/public/500.html +33 -0
  151. data/spec/integration/rails/script/about +4 -0
  152. data/spec/integration/rails/script/console +3 -0
  153. data/spec/integration/rails/script/dbconsole +3 -0
  154. data/spec/integration/rails/script/destroy +3 -0
  155. data/spec/integration/rails/script/generate +3 -0
  156. data/spec/integration/rails/script/performance/benchmarker +3 -0
  157. data/spec/integration/rails/script/performance/profiler +3 -0
  158. data/spec/integration/rails/script/performance/request +3 -0
  159. data/spec/integration/rails/script/plugin +3 -0
  160. data/spec/integration/rails/script/process/inspector +3 -0
  161. data/spec/integration/rails/script/process/reaper +3 -0
  162. data/spec/integration/rails/script/process/spawner +3 -0
  163. data/spec/integration/rails/script/runner +3 -0
  164. data/spec/integration/rails/script/server +3 -0
  165. data/spec/integration/rails/test/integration/button_click_test.rb +66 -0
  166. data/spec/integration/rails/test/integration/fill_in_test.rb +24 -0
  167. data/spec/integration/rails/test/integration/link_click_test.rb +27 -0
  168. data/spec/integration/rails/test/integration/webrat_test.rb +123 -0
  169. data/spec/integration/rails/test/test_helper.rb +27 -0
  170. data/spec/integration/sinatra/Rakefile +5 -0
  171. data/spec/integration/sinatra/classic_app.rb +63 -0
  172. data/spec/integration/sinatra/modular_app.rb +15 -0
  173. data/spec/integration/sinatra/test/classic_app_test.rb +38 -0
  174. data/spec/integration/sinatra/test/modular_app_test.rb +18 -0
  175. data/spec/integration/sinatra/test/test_helper.rb +16 -0
  176. data/spec/private/core/configuration_spec.rb +87 -0
  177. data/spec/private/core/field_spec.rb +83 -0
  178. data/spec/private/core/form_spec.rb +51 -0
  179. data/spec/private/core/link_spec.rb +24 -0
  180. data/spec/private/core/session_spec.rb +182 -0
  181. data/spec/private/mechanize/mechanize_adapter_spec.rb +96 -0
  182. data/spec/private/nokogiri_spec.rb +77 -0
  183. data/spec/private/rails/attaches_file_spec.rb +114 -0
  184. data/spec/private/rails/rails_adapter_spec.rb +79 -0
  185. data/spec/private/selenium/application_servers/rails_spec.rb +26 -0
  186. data/spec/public/basic_auth_spec.rb +35 -0
  187. data/spec/public/check_spec.rb +191 -0
  188. data/spec/public/choose_spec.rb +118 -0
  189. data/spec/public/click_area_spec.rb +106 -0
  190. data/spec/public/click_button_spec.rb +494 -0
  191. data/spec/public/click_link_spec.rb +544 -0
  192. data/spec/public/fill_in_spec.rb +224 -0
  193. data/spec/public/locators/field_by_xpath_spec.rb +19 -0
  194. data/spec/public/locators/field_labeled_spec.rb +172 -0
  195. data/spec/public/locators/field_with_id_spec.rb +16 -0
  196. data/spec/public/matchers/contain_spec.rb +118 -0
  197. data/spec/public/matchers/have_selector_spec.rb +146 -0
  198. data/spec/public/matchers/have_tag_spec.rb +39 -0
  199. data/spec/public/matchers/have_xpath_spec.rb +165 -0
  200. data/spec/public/reload_spec.rb +10 -0
  201. data/spec/public/save_and_open_spec.rb +49 -0
  202. data/spec/public/select_date_spec.rb +112 -0
  203. data/spec/public/select_datetime_spec.rb +137 -0
  204. data/spec/public/select_spec.rb +474 -0
  205. data/spec/public/select_time_spec.rb +100 -0
  206. data/spec/public/selenium/application_server_factory_spec.rb +49 -0
  207. data/spec/public/selenium/application_servers/external_spec.rb +12 -0
  208. data/spec/public/selenium/selenium_session_spec.rb +37 -0
  209. data/spec/public/set_hidden_field_spec.rb +5 -0
  210. data/spec/public/submit_form_spec.rb +56 -0
  211. data/spec/public/visit_spec.rb +58 -0
  212. data/spec/public/within_spec.rb +177 -0
  213. data/spec/rcov.opts +1 -0
  214. data/spec/spec.opts +2 -0
  215. data/spec/spec_helper.rb +53 -0
  216. data/vendor/selenium-server.jar +0 -0
  217. data/webrat.gemspec +355 -0
  218. metadata +424 -0
@@ -0,0 +1,114 @@
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
+
82
+ it "should support nested attributes" do
83
+ with_html <<-HTML
84
+ <html>
85
+ <form method="post" action="/albums">
86
+ <label for="photo_file1">Photo</label>
87
+ <input type="file" id="photo_file1" name="album[photos_attributes][][image]" />
88
+ <input type="submit" />
89
+ </form>
90
+ </html>
91
+ HTML
92
+ webrat_session.should_receive(:post).with("/albums", { "album" => { "photos_attributes" => [{"image" => @uploaded_file}] } })
93
+ attach_file "Photo", @filename
94
+ click_button
95
+ end
96
+
97
+ it "should support nested attributes with multiple files" do
98
+ with_html <<-HTML
99
+ <html>
100
+ <form method="post" action="/albums">
101
+ <label for="photo_file1">Photo 1</label>
102
+ <input type="file" id="photo_file1" name="album[photos_attributes][][image]" />
103
+ <label for="photo_file2">Photo 2</label>
104
+ <input type="file" id="photo_file2" name="album[photos_attributes][][image]" />
105
+ <input type="submit" />
106
+ </form>
107
+ </html>
108
+ HTML
109
+ webrat_session.should_receive(:post).with("/albums", { "album" => { "photos_attributes" => [{"image" => @uploaded_file}, {"image" => @uploaded_file}] } })
110
+ attach_file "Photo 1", @filename
111
+ attach_file "Photo 2", @filename
112
+ click_button
113
+ end
114
+ end
@@ -0,0 +1,79 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ describe Webrat::RailsAdapter do
4
+ before :each do
5
+ Webrat.configuration.mode = :rails
6
+ @integration_session = mock("integration_session")
7
+ end
8
+
9
+ it "should delegate response_body to the session response body" do
10
+ @integration_session.stub!(:response => mock("response", :body => "<html>"))
11
+ Webrat::RailsAdapter.new(@integration_session).response_body.should == "<html>"
12
+ end
13
+
14
+ it "should delegate response_code to the session response code" do
15
+ @integration_session.stub!(:response => mock("response", :code => "42"))
16
+ Webrat::RailsAdapter.new(@integration_session).response_code.should == 42
17
+ end
18
+
19
+ it "should delegate get to the integration session" do
20
+ @integration_session.should_receive(:get).with("url", "data", "headers")
21
+ rails_session = Webrat::RailsAdapter.new(@integration_session)
22
+ rails_session.get("url", "data", "headers")
23
+ end
24
+
25
+ it "should delegate post to the integration session" do
26
+ @integration_session.should_receive(:post).with("url", "data", "headers")
27
+ rails_session = Webrat::RailsAdapter.new(@integration_session)
28
+ rails_session.post("url", "data", "headers")
29
+ end
30
+
31
+ it "should delegate put to the integration session" do
32
+ @integration_session.should_receive(:put).with("url", "data", "headers")
33
+ rails_session = Webrat::RailsAdapter.new(@integration_session)
34
+ rails_session.put("url", "data", "headers")
35
+ end
36
+
37
+ it "should delegate delete to the integration session" do
38
+ @integration_session.should_receive(:delete).with("url", "data", "headers")
39
+ rails_session = Webrat::RailsAdapter.new(@integration_session)
40
+ rails_session.delete("url", "data", "headers")
41
+ end
42
+
43
+ context "the URL is a full path" do
44
+ it "should pass the full url" do
45
+ @integration_session.stub!(:https!)
46
+ @integration_session.should_receive(:get).with("http://www.example.com/url", "data", "headers")
47
+ rails_session = Webrat::RailsAdapter.new(@integration_session)
48
+ rails_session.get("http://www.example.com/url", "data", "headers")
49
+ end
50
+ end
51
+
52
+ context "the URL is https://" do
53
+ it "should call #https! with true before the request before passing along the full url" do
54
+ @integration_session.should_receive(:https!).with(true)
55
+ @integration_session.should_receive(:get).with("https://www.example.com/url", "data", "headers")
56
+ rails_session = Webrat::RailsAdapter.new(@integration_session)
57
+ rails_session.get("https://www.example.com/url", "data", "headers")
58
+ end
59
+ end
60
+
61
+ context "the URL is http://" do
62
+ it "should call #https! with true before the request" do
63
+ @integration_session.stub!(:get)
64
+ @integration_session.should_receive(:https!).with(false)
65
+ rails_session = Webrat::RailsAdapter.new(@integration_session)
66
+ rails_session.get("http://www.example.com/url", "data", "headers")
67
+ end
68
+ end
69
+
70
+ context "the URL include an anchor" do
71
+ it "should strip out the anchor" do
72
+ @integration_session.should_receive(:https!).with(false)
73
+ @integration_session.should_receive(:get).with("http://www.example.com/url", "data", "headers")
74
+ rails_session = Webrat::RailsAdapter.new(@integration_session)
75
+ rails_session.get("http://www.example.com/url#foo", "data", "headers")
76
+ end
77
+ end
78
+
79
+ end
@@ -0,0 +1,26 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../../spec_helper")
2
+ require "webrat/selenium/application_servers/rails"
3
+
4
+ RAILS_ROOT = "." unless defined?(RAILS_ROOT)
5
+
6
+ describe Webrat::Selenium::ApplicationServers::Rails do
7
+ include Webrat::Selenium::SilenceStream
8
+
9
+ before do
10
+ @server = Webrat::Selenium::ApplicationServers::Rails.new
11
+ # require "rubygems"; require "ruby-debug"; Debugger.start; debugger
12
+ @server.stub!(:system)
13
+ @server.stub!(:at_exit)
14
+ end
15
+
16
+ describe "boot" do
17
+ it "should wait for the server to start on 0.0.0.0" do
18
+ TCPSocket.should_receive(:wait_for_service_with_timeout).
19
+ with(hash_including(:host => "0.0.0.0"))
20
+
21
+ silence_stream(STDERR) do
22
+ @server.boot
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,35 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe "Basic Auth HTTP headers" do
4
+ before do
5
+ basic_auth('user', 'secret')
6
+ end
7
+
8
+ it "should be present in visit" do
9
+ webrat_session.should_receive(:get).with("/", {}, {'HTTP_AUTHORIZATION' => "Basic dXNlcjpzZWNyZXQ="})
10
+ visit("/")
11
+ end
12
+
13
+ it "should be present in form submits" do
14
+ with_html <<-HTML
15
+ <html>
16
+ <form method="post" action="/form1">
17
+ <input type="submit" />
18
+ </form>
19
+ </html>
20
+ HTML
21
+ webrat_session.should_receive(:post).with("/form1", {}, {'HTTP_AUTHORIZATION' => "Basic dXNlcjpzZWNyZXQ="})
22
+ click_button
23
+ end
24
+
25
+ context "with long username and password combination" do
26
+ before do
27
+ basic_auth('user', 'secret1234567890123456789012345678901234567890123456789012345678901234567890')
28
+ end
29
+
30
+ it "should be present, without new lines, in visit" do
31
+ webrat_session.should_receive(:get).with("/", {}, {'HTTP_AUTHORIZATION' => "Basic dXNlcjpzZWNyZXQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkw"})
32
+ visit("/")
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,191 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe "check" do
4
+ it "should fail if no checkbox found" do
5
+ with_html <<-HTML
6
+ <html>
7
+ <form method="post" action="/login">
8
+ </form>
9
+ </html>
10
+ HTML
11
+
12
+ lambda { check "remember_me" }.should raise_error(Webrat::NotFoundError)
13
+ end
14
+
15
+ it "should fail if input is not a checkbox" do
16
+ with_html <<-HTML
17
+ <html>
18
+ <form method="post" action="/login">
19
+ <input type="text" name="remember_me" />
20
+ </form>
21
+ </html>
22
+ HTML
23
+
24
+ lambda { check "remember_me" }.should raise_error(Webrat::NotFoundError)
25
+ end
26
+
27
+ it "should check rails style checkboxes" do
28
+ with_html <<-HTML
29
+ <html>
30
+ <form method="get" action="/login">
31
+ <input id="user_tos" name="user[tos]" type="checkbox" value="1" />
32
+ <input name="user[tos]" type="hidden" value="0" />
33
+ <label for="user_tos">TOS</label>
34
+ <input type="submit" />
35
+ </form>
36
+ </html>
37
+ HTML
38
+
39
+ webrat_session.should_receive(:get).with("/login", "user" => {"tos" => "1"})
40
+ check "TOS"
41
+ click_button
42
+ end
43
+
44
+ it "should result in the value on being posted if not specified" do
45
+ with_html <<-HTML
46
+ <html>
47
+ <form method="post" action="/login">
48
+ <input type="checkbox" name="remember_me" />
49
+ <input type="submit" />
50
+ </form>
51
+ </html>
52
+ HTML
53
+
54
+ webrat_session.should_receive(:post).with("/login", "remember_me" => "on")
55
+ check "remember_me"
56
+ click_button
57
+ end
58
+
59
+ it "should fail if the checkbox is disabled" do
60
+ with_html <<-HTML
61
+ <html>
62
+ <form method="post" action="/login">
63
+ <input type="checkbox" name="remember_me" disabled="disabled" />
64
+ <input type="submit" />
65
+ </form>
66
+ </html>
67
+ HTML
68
+
69
+ lambda { check "remember_me" }.should raise_error(Webrat::DisabledFieldError)
70
+ end
71
+
72
+ it "should result in a custom value being posted" do
73
+ with_html <<-HTML
74
+ <html>
75
+ <form method="post" action="/login">
76
+ <input type="checkbox" name="remember_me" value="yes" />
77
+ <input type="submit" />
78
+ </form>
79
+ </html>
80
+ HTML
81
+
82
+ webrat_session.should_receive(:post).with("/login", "remember_me" => "yes")
83
+ check "remember_me"
84
+ click_button
85
+ end
86
+ end
87
+
88
+ describe "uncheck" do
89
+ it "should fail if no checkbox found" do
90
+ with_html <<-HTML
91
+ <html>
92
+ <form method="post" action="/login">
93
+ </form>
94
+ </html>
95
+ HTML
96
+
97
+ lambda { uncheck "remember_me" }.should raise_error(Webrat::NotFoundError)
98
+ end
99
+
100
+ it "should fail if input is not a checkbox" do
101
+ with_html <<-HTML
102
+ <html>
103
+ <form method="post" action="/login">
104
+ <input type="text" name="remember_me" />
105
+ </form>
106
+ </html>
107
+ HTML
108
+
109
+ lambda { uncheck "remember_me" }.should raise_error(Webrat::NotFoundError)
110
+ end
111
+
112
+ it "should fail if the checkbox is disabled" do
113
+ with_html <<-HTML
114
+ <html>
115
+ <form method="post" action="/login">
116
+ <input type="checkbox" name="remember_me" checked="checked" disabled="disabled" />
117
+ <input type="submit" />
118
+ </form>
119
+ </html>
120
+ HTML
121
+ lambda { uncheck "remember_me" }.should raise_error(Webrat::DisabledFieldError)
122
+ end
123
+
124
+ it "should uncheck rails style checkboxes" do
125
+ with_html <<-HTML
126
+ <html>
127
+ <form method="get" action="/login">
128
+ <input id="user_tos" name="user[tos]" type="checkbox" value="1" checked="checked" />
129
+ <input name="user[tos]" type="hidden" value="0" />
130
+ <label for="user_tos">TOS</label>
131
+ <input type="submit" />
132
+ </form>
133
+ </html>
134
+ HTML
135
+ webrat_session.should_receive(:get).with("/login", "user" => {"tos" => "0"})
136
+ check "TOS"
137
+ uncheck "TOS"
138
+ click_button
139
+ end
140
+
141
+ it "should result in value not being posted" do
142
+ with_html <<-HTML
143
+ <html>
144
+ <form method="post" action="/login">
145
+ <input type="checkbox" name="remember_me" value="yes" checked="checked" />
146
+ <input type="submit" />
147
+ </form>
148
+ </html>
149
+ HTML
150
+ webrat_session.should_receive(:post).with("/login", {})
151
+ uncheck "remember_me"
152
+ click_button
153
+ end
154
+
155
+ it "should work with checkboxes with the same name" do
156
+ with_html <<-HTML
157
+ <html>
158
+ <form method="post" action="/login">
159
+ <input id="option_1" name="options[]" type="checkbox" value="1" />
160
+ <label for="option_1">Option 1</label>
161
+ <input id="option_2" name="options[]" type="checkbox" value="2" />
162
+ <label for="option_2">Option 2</label>
163
+ <input type="submit" />
164
+ </form>
165
+ </html>
166
+ HTML
167
+ webrat_session.should_receive(:post).with("/login", {"options" => ["1", "2"]})
168
+ check 'Option 1'
169
+ check 'Option 2'
170
+ click_button
171
+ end
172
+
173
+ it "should uncheck rails style checkboxes nested inside a label" do
174
+ with_html <<-HTML
175
+ <html>
176
+ <form method="get" action="/login">
177
+ <label>
178
+ TOS
179
+ <input name="user[tos]" type="hidden" value="0" />
180
+ <input id="user_tos" name="user[tos]" type="checkbox" value="1" checked="checked" />
181
+ </label>
182
+ <input type="submit" />
183
+ </form>
184
+ </html>
185
+ HTML
186
+ webrat_session.should_receive(:get).with("/login", "user" => {"tos" => "0"})
187
+ uncheck "TOS"
188
+ click_button
189
+ end
190
+
191
+ end