integrity 0.1.8 → 0.1.9

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 (249) hide show
  1. data/README.markdown +7 -0
  2. data/Rakefile +59 -132
  3. data/VERSION.yml +1 -1
  4. data/config/config.ru +29 -0
  5. data/config/config.sample.ru +6 -16
  6. data/config/config.sample.yml +15 -12
  7. data/config/config.yml +34 -0
  8. data/lib/integrity.rb +13 -13
  9. data/lib/integrity/app.rb +138 -0
  10. data/lib/integrity/author.rb +39 -0
  11. data/lib/integrity/build.rb +54 -31
  12. data/lib/integrity/commit.rb +71 -0
  13. data/lib/integrity/helpers.rb +3 -3
  14. data/lib/integrity/helpers/authorization.rb +2 -2
  15. data/lib/integrity/helpers/forms.rb +3 -3
  16. data/lib/integrity/helpers/pretty_output.rb +1 -1
  17. data/lib/integrity/helpers/rendering.rb +6 -1
  18. data/lib/integrity/helpers/resources.rb +9 -3
  19. data/lib/integrity/helpers/urls.rb +15 -13
  20. data/lib/integrity/installer.rb +45 -56
  21. data/lib/integrity/migrations.rb +31 -48
  22. data/lib/integrity/notifier.rb +14 -16
  23. data/lib/integrity/notifier/base.rb +29 -19
  24. data/lib/integrity/notifier/test_helpers.rb +100 -0
  25. data/lib/integrity/project.rb +69 -33
  26. data/lib/integrity/project_builder.rb +23 -14
  27. data/lib/integrity/scm/git.rb +15 -14
  28. data/lib/integrity/scm/git/uri.rb +9 -9
  29. data/test/acceptance/api_test.rb +97 -0
  30. data/test/acceptance/browse_project_builds_test.rb +65 -0
  31. data/test/acceptance/browse_project_test.rb +95 -0
  32. data/test/acceptance/build_notifications_test.rb +42 -0
  33. data/test/acceptance/create_project_test.rb +97 -0
  34. data/test/acceptance/delete_project_test.rb +53 -0
  35. data/test/acceptance/edit_project_test.rb +117 -0
  36. data/test/acceptance/error_page_test.rb +18 -0
  37. data/test/acceptance/helpers.rb +2 -0
  38. data/test/acceptance/installer_test.rb +62 -0
  39. data/test/acceptance/manual_build_project_test.rb +82 -0
  40. data/test/acceptance/notifier_test.rb +109 -0
  41. data/test/acceptance/project_syndication_test.rb +30 -0
  42. data/test/acceptance/stylesheet_test.rb +18 -0
  43. data/test/helpers.rb +59 -26
  44. data/test/helpers/acceptance.rb +19 -65
  45. data/test/helpers/acceptance/email_notifier.rb +55 -0
  46. data/test/helpers/acceptance/git_helper.rb +15 -15
  47. data/test/helpers/acceptance/textfile_notifier.rb +3 -3
  48. data/test/helpers/expectations.rb +0 -1
  49. data/test/helpers/expectations/be_a.rb +4 -4
  50. data/test/helpers/expectations/change.rb +5 -5
  51. data/test/helpers/expectations/have.rb +4 -4
  52. data/test/helpers/expectations/predicates.rb +4 -4
  53. data/test/helpers/fixtures.rb +44 -18
  54. data/test/helpers/initial_migration_fixture.sql +44 -0
  55. data/test/unit/build_test.rb +51 -0
  56. data/test/unit/commit_test.rb +83 -0
  57. data/test/unit/helpers_test.rb +56 -0
  58. data/test/unit/integrity_test.rb +18 -0
  59. data/test/unit/migrations_test.rb +56 -0
  60. data/test/unit/notifier_test.rb +123 -0
  61. data/test/unit/project_builder_test.rb +108 -0
  62. data/test/unit/project_test.rb +282 -0
  63. data/test/unit/scm_test.rb +54 -0
  64. data/vendor/webrat/History.txt +306 -0
  65. data/vendor/webrat/MIT-LICENSE.txt +19 -0
  66. data/vendor/webrat/README.rdoc +85 -0
  67. data/vendor/webrat/Rakefile +151 -0
  68. data/vendor/webrat/install.rb +1 -0
  69. data/vendor/webrat/lib/webrat.rb +34 -0
  70. data/vendor/webrat/lib/webrat/core.rb +14 -0
  71. data/vendor/webrat/lib/webrat/core/configuration.rb +98 -0
  72. data/vendor/webrat/lib/webrat/core/elements/area.rb +31 -0
  73. data/vendor/webrat/lib/webrat/core/elements/element.rb +33 -0
  74. data/vendor/webrat/lib/webrat/core/elements/field.rb +403 -0
  75. data/vendor/webrat/lib/webrat/core/elements/form.rb +103 -0
  76. data/vendor/webrat/lib/webrat/core/elements/label.rb +31 -0
  77. data/vendor/webrat/lib/webrat/core/elements/link.rb +90 -0
  78. data/vendor/webrat/lib/webrat/core/elements/select_option.rb +35 -0
  79. data/vendor/webrat/lib/webrat/core/locators.rb +20 -0
  80. data/vendor/webrat/lib/webrat/core/locators/area_locator.rb +38 -0
  81. data/vendor/webrat/lib/webrat/core/locators/button_locator.rb +54 -0
  82. data/vendor/webrat/lib/webrat/core/locators/field_by_id_locator.rb +37 -0
  83. data/vendor/webrat/lib/webrat/core/locators/field_labeled_locator.rb +56 -0
  84. data/vendor/webrat/lib/webrat/core/locators/field_locator.rb +25 -0
  85. data/vendor/webrat/lib/webrat/core/locators/field_named_locator.rb +41 -0
  86. data/vendor/webrat/lib/webrat/core/locators/form_locator.rb +19 -0
  87. data/vendor/webrat/lib/webrat/core/locators/label_locator.rb +34 -0
  88. data/vendor/webrat/lib/webrat/core/locators/link_locator.rb +66 -0
  89. data/vendor/webrat/lib/webrat/core/locators/locator.rb +20 -0
  90. data/vendor/webrat/lib/webrat/core/locators/select_option_locator.rb +59 -0
  91. data/vendor/webrat/lib/webrat/core/logging.rb +21 -0
  92. data/vendor/webrat/lib/webrat/core/matchers.rb +4 -0
  93. data/vendor/webrat/lib/webrat/core/matchers/have_content.rb +73 -0
  94. data/vendor/webrat/lib/webrat/core/matchers/have_selector.rb +74 -0
  95. data/vendor/webrat/lib/webrat/core/matchers/have_tag.rb +21 -0
  96. data/vendor/webrat/lib/webrat/core/matchers/have_xpath.rb +147 -0
  97. data/vendor/webrat/lib/webrat/core/methods.rb +61 -0
  98. data/vendor/webrat/lib/webrat/core/mime.rb +29 -0
  99. data/vendor/webrat/lib/webrat/core/save_and_open_page.rb +50 -0
  100. data/vendor/webrat/lib/webrat/core/scope.rb +350 -0
  101. data/vendor/webrat/lib/webrat/core/session.rb +281 -0
  102. data/vendor/webrat/lib/webrat/core/xml.rb +115 -0
  103. data/vendor/webrat/lib/webrat/core/xml/hpricot.rb +19 -0
  104. data/vendor/webrat/lib/webrat/core/xml/nokogiri.rb +76 -0
  105. data/vendor/webrat/lib/webrat/core/xml/rexml.rb +24 -0
  106. data/vendor/webrat/lib/webrat/core_extensions/blank.rb +58 -0
  107. data/vendor/webrat/lib/webrat/core_extensions/deprecate.rb +8 -0
  108. data/vendor/webrat/lib/webrat/core_extensions/detect_mapped.rb +12 -0
  109. data/vendor/webrat/lib/webrat/core_extensions/meta_class.rb +6 -0
  110. data/vendor/webrat/lib/webrat/core_extensions/nil_to_param.rb +5 -0
  111. data/vendor/webrat/lib/webrat/mechanize.rb +74 -0
  112. data/vendor/webrat/lib/webrat/merb.rb +9 -0
  113. data/vendor/webrat/lib/webrat/merb_session.rb +65 -0
  114. data/vendor/webrat/lib/webrat/rack.rb +24 -0
  115. data/vendor/webrat/lib/webrat/rails.rb +105 -0
  116. data/vendor/webrat/lib/webrat/rspec-rails.rb +13 -0
  117. data/vendor/webrat/lib/webrat/selenium.rb +154 -0
  118. data/vendor/webrat/lib/webrat/selenium/location_strategy_javascript/button.js +12 -0
  119. data/vendor/webrat/lib/webrat/selenium/location_strategy_javascript/label.js +16 -0
  120. data/vendor/webrat/lib/webrat/selenium/location_strategy_javascript/webrat.js +5 -0
  121. data/vendor/webrat/lib/webrat/selenium/location_strategy_javascript/webratlink.js +9 -0
  122. data/vendor/webrat/lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js +15 -0
  123. data/vendor/webrat/lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js +5 -0
  124. data/vendor/webrat/lib/webrat/selenium/matchers.rb +4 -0
  125. data/vendor/webrat/lib/webrat/selenium/matchers/have_content.rb +66 -0
  126. data/vendor/webrat/lib/webrat/selenium/matchers/have_selector.rb +49 -0
  127. data/vendor/webrat/lib/webrat/selenium/matchers/have_tag.rb +72 -0
  128. data/vendor/webrat/lib/webrat/selenium/matchers/have_xpath.rb +45 -0
  129. data/vendor/webrat/lib/webrat/selenium/selenium_extensions.js +6 -0
  130. data/vendor/webrat/lib/webrat/selenium/selenium_session.rb +247 -0
  131. data/vendor/webrat/lib/webrat/sinatra.rb +44 -0
  132. data/vendor/webrat/spec/fakes/test_session.rb +34 -0
  133. data/vendor/webrat/spec/integration/merb/Rakefile +35 -0
  134. data/vendor/webrat/spec/integration/merb/app/controllers/application.rb +2 -0
  135. data/vendor/webrat/spec/integration/merb/app/controllers/exceptions.rb +13 -0
  136. data/vendor/webrat/spec/integration/merb/app/controllers/testing.rb +18 -0
  137. data/vendor/webrat/spec/integration/merb/app/views/exceptions/not_acceptable.html.erb +63 -0
  138. data/vendor/webrat/spec/integration/merb/app/views/exceptions/not_found.html.erb +47 -0
  139. data/vendor/webrat/spec/integration/merb/app/views/layout/application.html.erb +12 -0
  140. data/vendor/webrat/spec/integration/merb/app/views/testing/show_form.html.erb +27 -0
  141. data/vendor/webrat/spec/integration/merb/config/environments/development.rb +15 -0
  142. data/vendor/webrat/spec/integration/merb/config/environments/rake.rb +11 -0
  143. data/vendor/webrat/spec/integration/merb/config/environments/test.rb +14 -0
  144. data/vendor/webrat/spec/integration/merb/config/init.rb +25 -0
  145. data/vendor/webrat/spec/integration/merb/config/rack.rb +11 -0
  146. data/vendor/webrat/spec/integration/merb/config/router.rb +33 -0
  147. data/vendor/webrat/spec/integration/merb/spec/spec.opts +1 -0
  148. data/vendor/webrat/spec/integration/merb/spec/spec_helper.rb +24 -0
  149. data/vendor/webrat/spec/integration/merb/spec/webrat_spec.rb +32 -0
  150. data/vendor/webrat/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -0
  151. data/vendor/webrat/spec/integration/merb/tasks/merb.thor/common.rb +64 -0
  152. data/vendor/webrat/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -0
  153. data/vendor/webrat/spec/integration/merb/tasks/merb.thor/main.thor +150 -0
  154. data/vendor/webrat/spec/integration/merb/tasks/merb.thor/ops.rb +93 -0
  155. data/vendor/webrat/spec/integration/merb/tasks/merb.thor/utils.rb +40 -0
  156. data/vendor/webrat/spec/integration/rails/Rakefile +30 -0
  157. data/vendor/webrat/spec/integration/rails/app/controllers/application.rb +15 -0
  158. data/vendor/webrat/spec/integration/rails/app/controllers/webrat_controller.rb +39 -0
  159. data/vendor/webrat/spec/integration/rails/app/views/webrat/before_redirect_form.html.erb +4 -0
  160. data/vendor/webrat/spec/integration/rails/app/views/webrat/form.html.erb +28 -0
  161. data/vendor/webrat/spec/integration/rails/config/boot.rb +109 -0
  162. data/vendor/webrat/spec/integration/rails/config/environment.rb +12 -0
  163. data/vendor/webrat/spec/integration/rails/config/environments/development.rb +17 -0
  164. data/vendor/webrat/spec/integration/rails/config/environments/selenium.rb +22 -0
  165. data/vendor/webrat/spec/integration/rails/config/environments/test.rb +22 -0
  166. data/vendor/webrat/spec/integration/rails/config/initializers/inflections.rb +10 -0
  167. data/vendor/webrat/spec/integration/rails/config/initializers/mime_types.rb +5 -0
  168. data/vendor/webrat/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -0
  169. data/vendor/webrat/spec/integration/rails/config/locales/en.yml +5 -0
  170. data/vendor/webrat/spec/integration/rails/config/routes.rb +14 -0
  171. data/vendor/webrat/spec/integration/rails/public/404.html +30 -0
  172. data/vendor/webrat/spec/integration/rails/public/422.html +30 -0
  173. data/vendor/webrat/spec/integration/rails/public/500.html +33 -0
  174. data/vendor/webrat/spec/integration/rails/script/about +4 -0
  175. data/vendor/webrat/spec/integration/rails/script/console +3 -0
  176. data/vendor/webrat/spec/integration/rails/script/dbconsole +3 -0
  177. data/vendor/webrat/spec/integration/rails/script/destroy +3 -0
  178. data/vendor/webrat/spec/integration/rails/script/generate +3 -0
  179. data/vendor/webrat/spec/integration/rails/script/performance/benchmarker +3 -0
  180. data/vendor/webrat/spec/integration/rails/script/performance/profiler +3 -0
  181. data/vendor/webrat/spec/integration/rails/script/performance/request +3 -0
  182. data/vendor/webrat/spec/integration/rails/script/plugin +3 -0
  183. data/vendor/webrat/spec/integration/rails/script/process/inspector +3 -0
  184. data/vendor/webrat/spec/integration/rails/script/process/reaper +3 -0
  185. data/vendor/webrat/spec/integration/rails/script/process/spawner +3 -0
  186. data/vendor/webrat/spec/integration/rails/script/runner +3 -0
  187. data/vendor/webrat/spec/integration/rails/script/server +3 -0
  188. data/vendor/webrat/spec/integration/rails/test/integration/webrat_test.rb +80 -0
  189. data/vendor/webrat/spec/integration/rails/test/test_helper.rb +25 -0
  190. data/vendor/webrat/spec/integration/sinatra/Rakefile +5 -0
  191. data/vendor/webrat/spec/integration/sinatra/classic_app.rb +64 -0
  192. data/vendor/webrat/spec/integration/sinatra/modular_app.rb +16 -0
  193. data/vendor/webrat/spec/integration/sinatra/test/classic_app_test.rb +37 -0
  194. data/vendor/webrat/spec/integration/sinatra/test/modular_app_test.rb +18 -0
  195. data/vendor/webrat/spec/integration/sinatra/test/test_helper.rb +16 -0
  196. data/vendor/webrat/spec/private/core/configuration_spec.rb +104 -0
  197. data/vendor/webrat/spec/private/core/field_spec.rb +67 -0
  198. data/vendor/webrat/spec/private/core/link_spec.rb +24 -0
  199. data/vendor/webrat/spec/private/core/logging_spec.rb +10 -0
  200. data/vendor/webrat/spec/private/core/session_spec.rb +198 -0
  201. data/vendor/webrat/spec/private/mechanize/mechanize_session_spec.rb +81 -0
  202. data/vendor/webrat/spec/private/merb/merb_session_spec.rb +42 -0
  203. data/vendor/webrat/spec/private/nokogiri_spec.rb +77 -0
  204. data/vendor/webrat/spec/private/rails/attaches_file_spec.rb +81 -0
  205. data/vendor/webrat/spec/private/rails/rails_session_spec.rb +110 -0
  206. data/vendor/webrat/spec/private/selenium/selenium_session_spec.rb +44 -0
  207. data/vendor/webrat/spec/private/selenium/selenium_spec.rb +109 -0
  208. data/vendor/webrat/spec/public/basic_auth_spec.rb +24 -0
  209. data/vendor/webrat/spec/public/check_spec.rb +191 -0
  210. data/vendor/webrat/spec/public/choose_spec.rb +118 -0
  211. data/vendor/webrat/spec/public/click_area_spec.rb +106 -0
  212. data/vendor/webrat/spec/public/click_button_spec.rb +502 -0
  213. data/vendor/webrat/spec/public/click_link_spec.rb +469 -0
  214. data/vendor/webrat/spec/public/fill_in_spec.rb +209 -0
  215. data/vendor/webrat/spec/public/locators/field_by_xpath_spec.rb +19 -0
  216. data/vendor/webrat/spec/public/locators/field_labeled_spec.rb +157 -0
  217. data/vendor/webrat/spec/public/locators/field_with_id_spec.rb +16 -0
  218. data/vendor/webrat/spec/public/matchers/contain_spec.rb +114 -0
  219. data/vendor/webrat/spec/public/matchers/have_selector_spec.rb +135 -0
  220. data/vendor/webrat/spec/public/matchers/have_tag_spec.rb +39 -0
  221. data/vendor/webrat/spec/public/matchers/have_xpath_spec.rb +123 -0
  222. data/vendor/webrat/spec/public/reload_spec.rb +10 -0
  223. data/vendor/webrat/spec/public/save_and_open_spec.rb +51 -0
  224. data/vendor/webrat/spec/public/select_date_spec.rb +88 -0
  225. data/vendor/webrat/spec/public/select_datetime_spec.rb +106 -0
  226. data/vendor/webrat/spec/public/select_spec.rb +246 -0
  227. data/vendor/webrat/spec/public/select_time_spec.rb +79 -0
  228. data/vendor/webrat/spec/public/set_hidden_field_spec.rb +5 -0
  229. data/vendor/webrat/spec/public/submit_form_spec.rb +5 -0
  230. data/vendor/webrat/spec/public/visit_spec.rb +58 -0
  231. data/vendor/webrat/spec/public/within_spec.rb +177 -0
  232. data/vendor/webrat/spec/rcov.opts +1 -0
  233. data/vendor/webrat/spec/spec.opts +2 -0
  234. data/vendor/webrat/spec/spec_helper.rb +50 -0
  235. data/vendor/webrat/vendor/selenium-server.jar +0 -0
  236. data/views/_commit_info.haml +24 -0
  237. data/views/build.haml +2 -2
  238. data/views/error.haml +4 -3
  239. data/views/home.haml +3 -5
  240. data/views/integrity.sass +19 -6
  241. data/views/new.haml +6 -6
  242. data/views/project.builder +9 -9
  243. data/views/project.haml +14 -12
  244. metadata +319 -124
  245. data/app.rb +0 -138
  246. data/integrity.gemspec +0 -76
  247. data/lib/integrity/core_ext/string.rb +0 -5
  248. data/test/helpers/expectations/have_tag.rb +0 -128
  249. data/views/_build_info.haml +0 -18
@@ -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,110 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ require "webrat/rails"
4
+
5
+ describe Webrat::RailsSession 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::RailsSession.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::RailsSession.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::RailsSession.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::RailsSession.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::RailsSession.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::RailsSession.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::RailsSession.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::RailsSession.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::RailsSession.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::RailsSession.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::RailsSession.new(mock("integration session")).should respond_to(:saved_page_dir)
83
+ end
84
+
85
+ it "should provide a doc_root" do
86
+ Webrat::RailsSession.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
+ body = <<-HTML
91
+ <a href="/page1">Edit</a>
92
+ <div id="new_object">
93
+ <a href="/page2">Edit</a>
94
+ </div>
95
+ HTML
96
+
97
+ response = mock("response", :body => body, :headers => {}, :code => 200)
98
+ @integration_session.stub!(:response => response)
99
+ @integration_session.should_receive(:get).with("/page2", {}, nil)
100
+
101
+ rails_session = Webrat::RailsSession.new(@integration_session)
102
+
103
+ object = Object.new
104
+ object.stub!(:id => nil)
105
+
106
+ rails_session.within(object) do
107
+ rails_session.click_link 'Edit'
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,44 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+ require "action_controller"
3
+ require "action_controller/integration"
4
+ require "webrat/selenium"
5
+
6
+ describe Webrat::SeleniumSession do
7
+
8
+ describe "create browser" do
9
+
10
+ it "should start the local selenium client and set speed to 0 when selenium_server_address is nil" do
11
+ selenium_session = Webrat::SeleniumSession.new
12
+ browser = mock "mock browser"
13
+ ::Selenium::Client::Driver.should_receive(:new).with("localhost", Webrat.configuration.selenium_server_port, "*firefox", "http://#{Webrat.configuration.application_address}:#{Webrat.configuration.application_port}").and_return browser
14
+ browser.should_receive(:set_speed).with(0)
15
+ selenium_session.send :create_browser
16
+ end
17
+
18
+ it "should start the remote selenium client when selenium_server_address is set" do
19
+ Webrat.configuration.selenium_server_address = 'foo address'
20
+ selenium_session = Webrat::SeleniumSession.new
21
+ browser = mock "mock browser"
22
+ ::Selenium::Client::Driver.should_receive(:new).with(Webrat.configuration.selenium_server_address, Webrat.configuration.selenium_server_port, "*firefox", "http://#{Webrat.configuration.application_address}:#{Webrat.configuration.application_port}").and_return browser
23
+ browser.should_not_receive(:set_speed)
24
+ selenium_session.send :create_browser
25
+ end
26
+
27
+ it "should use the config specifications" do
28
+ Webrat.configuration.selenium_server_port = 'selenium port'
29
+ Webrat.configuration.selenium_server_address = 'selenium address'
30
+ Webrat.configuration.application_port = 'app port'
31
+ Webrat.configuration.application_address = 'app address'
32
+ Webrat.configuration.selenium_browser_key = 'browser key'
33
+
34
+ selenium_session = Webrat::SeleniumSession.new
35
+ browser = mock "mock browser"
36
+ ::Selenium::Client::Driver.should_receive(:new).with('selenium address',
37
+ 'selenium port', 'browser key',
38
+ "http://app address:app port").and_return browser
39
+ browser.should_not_receive(:set_speed)
40
+ selenium_session.send :create_browser
41
+ end
42
+ end
43
+
44
+ end
@@ -0,0 +1,109 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+ require "action_controller"
3
+ require "action_controller/integration"
4
+ require "webrat/selenium"
5
+
6
+ RAILS_ROOT = "/"
7
+
8
+
9
+ describe Webrat, "Selenium" do
10
+ describe "start_app_server" do
11
+ after(:each) { Webrat.configuration.application_framework = :rails }
12
+ describe "ruby on rails" do
13
+ it "should start the app server with correct config options" do
14
+ pid_file = "file"
15
+ Webrat.should_receive(:prepare_pid_file).with("#{RAILS_ROOT}/tmp/pids","mongrel_selenium.pid").and_return pid_file
16
+ Webrat.should_receive(:system).with("mongrel_rails start -d --chdir='#{RAILS_ROOT}' --port=#{Webrat.configuration.application_port} --environment=#{Webrat.configuration.application_environment} --pid #{pid_file} &")
17
+ TCPSocket.should_receive(:wait_for_service).with(:host => Webrat.configuration.application_address, :port => Webrat.configuration.application_port.to_i)
18
+ Webrat.start_app_server
19
+ end
20
+ end
21
+ describe "merb" do
22
+ it "should start the app server with correct config options" do
23
+ Webrat.configuration.application_framework = :merb
24
+ Webrat.should_receive(:system).with("merb -d -p #{Webrat.configuration.application_port} -e #{Webrat.configuration.application_environment}")
25
+ TCPSocket.should_receive(:wait_for_service).with(:host => Webrat.configuration.application_address, :port => Webrat.configuration.application_port.to_i)
26
+ Webrat.start_app_server
27
+ end
28
+ end
29
+ describe "sinatra" do
30
+ it "should start the app server with correct config options" do
31
+ rackup_file = File.expand_path(Dir.pwd + '/config.ru')
32
+ Webrat.configuration.application_framework = :sinatra
33
+ Webrat.should_receive(:fork)
34
+ # Kernel.should_receive(:exec).with(['rackup', rackup_file, '-p', Webrat.configuration.application_port])
35
+ TCPSocket.should_receive(:wait_for_service).with(:host => Webrat.configuration.application_address, :port => Webrat.configuration.application_port.to_i)
36
+ Webrat.start_app_server
37
+ FileUtils.rm_f 'rack.pid'
38
+ end
39
+ end
40
+ end
41
+ describe "stop_app_server" do
42
+ after(:each) { Webrat.configuration.application_framework = :rails }
43
+ describe "ruby on rails" do
44
+ it "should stop the app server with correct config options" do
45
+ pid_file = RAILS_ROOT+'/tmp/pids/mongrel_selenium.pid'
46
+ Webrat.should_receive(:system).with("mongrel_rails stop -c #{RAILS_ROOT} --pid #{pid_file}")
47
+ Webrat.stop_app_server
48
+ end
49
+ end
50
+ describe "merb" do
51
+ it "should stop the app server with correct config options" do
52
+ Webrat.configuration.application_framework = :merb
53
+ File.should_receive(:read).with('log/merb.3001.pid').and_return('666')
54
+ Webrat.should_receive(:system).with("kill -9 666")
55
+ Webrat.stop_app_server
56
+ end
57
+ end
58
+ describe "sinatra" do
59
+ it "should stop the app server with correct config options" do
60
+ Webrat.configuration.application_framework = :sinatra
61
+ File.should_receive(:read).with('rack.pid').and_return('666')
62
+ Webrat.should_receive(:system).with("kill -9 666")
63
+ Webrat.stop_app_server
64
+ FileUtils.rm_f 'rack.pid'
65
+ end
66
+ end
67
+ end
68
+
69
+ it 'prepare_pid_file' do
70
+ File.should_receive(:expand_path).with('path').and_return('full_path')
71
+ FileUtils.should_receive(:mkdir_p).with 'full_path'
72
+ File.should_receive(:expand_path).with('path/name')
73
+ Webrat.prepare_pid_file 'path', 'name'
74
+ end
75
+
76
+ describe "start_selenium_server" do
77
+ it "should not start the local selenium server if the selenium_server_address is set" do
78
+ Webrat.configuration.selenium_server_address = 'foo address'
79
+ ::Selenium::RemoteControl::RemoteControl.should_not_receive(:new)
80
+ TCPSocket.should_receive(:wait_for_service).with(:host => Webrat.configuration.selenium_server_address, :port => Webrat.configuration.selenium_server_port)
81
+ Webrat.start_selenium_server
82
+ end
83
+
84
+ it "should start the local selenium server if the selenium_server_address is set" do
85
+ remote_control = mock "selenium remote control"
86
+ ::Selenium::RemoteControl::RemoteControl.should_receive(:new).with("0.0.0.0", Webrat.configuration.selenium_server_port, 5).and_return remote_control
87
+ remote_control.should_receive(:jar_file=).with(/selenium-server\.jar/)
88
+ remote_control.should_receive(:start).with(:background => true)
89
+ TCPSocket.should_receive(:wait_for_service).with(:host => "0.0.0.0", :port => Webrat.configuration.selenium_server_port)
90
+ Webrat.start_selenium_server
91
+ end
92
+ end
93
+
94
+ describe "stop_selenium_server" do
95
+
96
+ it "should not attempt to stop the server if the selenium_server_address is set" do
97
+ Webrat.configuration.selenium_server_address = 'foo address'
98
+ ::Selenium::RemoteControl::RemoteControl.should_not_receive(:new)
99
+ Webrat.stop_selenium_server
100
+ end
101
+
102
+ it "should stop the local server is the selenium_server_address is nil" do
103
+ remote_control = mock "selenium remote control"
104
+ ::Selenium::RemoteControl::RemoteControl.should_receive(:new).with("0.0.0.0", Webrat.configuration.selenium_server_port, 5).and_return remote_control
105
+ remote_control.should_receive(:stop)
106
+ Webrat.stop_selenium_server
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,24 @@
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=\n"})
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=\n"})
22
+ click_button
23
+ end
24
+ 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