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,67 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
+
3
+ module Webrat
4
+ describe Field do
5
+ it "should have nice inspect output" do
6
+ html = <<-HTML
7
+ <html>
8
+ <input type='checkbox' checked='checked' />
9
+ </html>
10
+ HTML
11
+
12
+ element = Webrat::XML.css_search(Webrat::XML.document(html), "input").first
13
+ checkbox = CheckboxField.new(nil, element)
14
+ checkbox.inspect.should =~ /#<Webrat::CheckboxField @element=<input type=['"]checkbox['"] checked(=['"]checked['"])?\/?>>/
15
+ end
16
+ end
17
+
18
+ describe CheckboxField do
19
+ it "should say it is checked if it is" do
20
+ html = <<-HTML
21
+ <html>
22
+ <input type='checkbox' checked='checked' />
23
+ </html>
24
+ HTML
25
+
26
+ element = Webrat::XML.css_search(Webrat::XML.document(html), "input").first
27
+ checkbox = CheckboxField.new(nil, element)
28
+ checkbox.should be_checked
29
+ end
30
+
31
+ it "should say it is not checked if it is not" do
32
+ html = <<-HTML
33
+ <html>
34
+ <input type='checkbox' />
35
+ </html>
36
+ HTML
37
+
38
+ element = Webrat::XML.css_search(Webrat::XML.document(html), "input").first
39
+ checkbox = CheckboxField.new(nil, element)
40
+ checkbox.should_not be_checked
41
+ end
42
+ end
43
+
44
+ describe RadioField do
45
+ it "should say it is checked if it is" do
46
+ html = <<-HTML
47
+ <html>
48
+ <input type='radio' checked='checked' />
49
+ </html>
50
+ HTML
51
+
52
+ element = Webrat::XML.css_search(Webrat::XML.document(html), "input").first
53
+ radio_button = RadioField.new(nil, element)
54
+ radio_button.should be_checked
55
+ end
56
+
57
+ it "should say it is not checked if it is not" do
58
+ html = <<-HTML
59
+ <html><input type='radio' /></html>
60
+ HTML
61
+
62
+ element = Webrat::XML.css_search(Webrat::XML.document(html), "input").first
63
+ radio_button = RadioField.new(nil, element)
64
+ radio_button.should_not be_checked
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,24 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
+
3
+ describe Webrat::Link do
4
+ # include Webrat::Link
5
+
6
+ before do
7
+ webrat_session = mock(Webrat::TestSession)
8
+ @link_text_with_nbsp = 'Link' + [0xA0].pack("U") + 'Text'
9
+ end
10
+
11
+ it "should pass through relative urls" do
12
+ link = Webrat::Link.new(webrat_session, {"href" => "/path"})
13
+ webrat_session.should_receive(:request_page).with("/path", :get, {})
14
+ link.click
15
+ end
16
+
17
+ it "shouldnt put base url onto " do
18
+ url = "https://www.example.com/path"
19
+ webrat_session.should_receive(:request_page).with(url, :get, {})
20
+ link = Webrat::Link.new(webrat_session, {"href" => url})
21
+ link.click
22
+ end
23
+
24
+ end
@@ -0,0 +1,10 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
+
3
+ describe Webrat::Logging do
4
+
5
+ it "should not log if there is no logger" do
6
+ klass = Class.new
7
+ klass.send(:include, Webrat::Logging)
8
+ klass.new.debug_log "Testing"
9
+ end
10
+ end
@@ -0,0 +1,198 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
+
3
+ describe Webrat::Session do
4
+
5
+ it "should not have a doc_root" do
6
+ session = Webrat::Session.new
7
+ session.doc_root.should be_nil
8
+ end
9
+
10
+ it "should expose the current_dom" do
11
+ session = Webrat::Session.new
12
+
13
+ def session.response
14
+ Object.new
15
+ end
16
+
17
+ def session.response_body
18
+ "<html></html>"
19
+ end
20
+
21
+ session.should respond_to(:current_dom)
22
+ end
23
+
24
+ it "should open the page in the browser in MacOSX" do
25
+ session = Webrat::Session.new
26
+ session.stub!(:ruby_platform => 'darwin')
27
+ session.should_receive(:`).with("open path")
28
+ session.open_in_browser("path")
29
+ end
30
+
31
+ it "should open the page in the browser in cygwin" do
32
+ session = Webrat::Session.new
33
+ session.stub!(:ruby_platform => 'i386-cygwin')
34
+ session.should_receive(:`).with("rundll32 url.dll,FileProtocolHandler path\\to\\file")
35
+ session.open_in_browser("path/to/file")
36
+ end
37
+
38
+ it "should open the page in the browser in Win32" do
39
+ session = Webrat::Session.new
40
+ session.stub!(:ruby_platform => 'win32')
41
+ session.should_receive(:`).with("rundll32 url.dll,FileProtocolHandler path\\to\\file")
42
+ session.open_in_browser("path/to/file")
43
+ end
44
+
45
+ it "should provide a current_page for backwards compatibility" do
46
+ session = Webrat::Session.new
47
+ current_page = session.current_page
48
+ current_page.should_not be_nil
49
+ current_page.should respond_to(:url)
50
+ end
51
+
52
+ it "should allow custom headers to be set" do
53
+ session = Webrat::Session.new
54
+ session.header('Accept', 'application/xml')
55
+
56
+ session.instance_variable_get(:@custom_headers)['Accept'].should == 'application/xml'
57
+ end
58
+
59
+ it "should return a copy of the headers to be sent" do
60
+ session = Webrat::Session.new
61
+ session.instance_eval {
62
+ @default_headers = {'HTTP_X_FORWARDED_FOR' => '192.168.1.1'}
63
+ @custom_headers = {'Accept' => 'application/xml'}
64
+ }
65
+ session.headers.should == {'HTTP_X_FORWARDED_FOR' => '192.168.1.1', 'Accept' => 'application/xml'}
66
+ end
67
+
68
+ describe "#http_accept" do
69
+ before(:each) do
70
+ webrat_session = Webrat::Session.new
71
+ end
72
+
73
+ it "should set the Accept header with the string Mime type" do
74
+ webrat_session.http_accept('application/xml')
75
+ webrat_session.headers['Accept'].should == 'application/xml'
76
+ end
77
+
78
+ it "should set the Accept head with the string value of the symbol Mime type" do
79
+ webrat_session.http_accept(:xml)
80
+ webrat_session.headers['Accept'].should == 'application/xml'
81
+ end
82
+
83
+ it "should raise an error if a symbol Mime type is passed that does not exist" do
84
+ lambda { webrat_session.http_accept(:oogabooga) }.should raise_error(ArgumentError)
85
+ end
86
+ end
87
+
88
+ describe "#request_page" do
89
+ before(:each) do
90
+ webrat_session = Webrat::Session.new
91
+ end
92
+
93
+ it "should raise an error if the request is not a success" do
94
+ webrat_session.stub!(:get)
95
+ webrat_session.stub!(:response_body => "Exception caught")
96
+ webrat_session.stub!(:response_code => 500)
97
+ webrat_session.stub!(:formatted_error => "application error")
98
+ webrat_session.stub!(:save_and_open_page)
99
+
100
+ lambda { webrat_session.request_page('some url', :get, {}) }.should raise_error(Webrat::PageLoadError)
101
+ end
102
+
103
+ it "should raise an error but not open if the request is not a success and config quashes save_and_open" do
104
+ Webrat.configure do |config|
105
+ config.open_error_files = false
106
+ end
107
+ webrat_session.stub!(:get)
108
+ webrat_session.stub!(:response_body => "Exception caught")
109
+ webrat_session.stub!(:response_code => 500)
110
+ webrat_session.stub!(:formatted_error => "application error")
111
+ webrat_session.should_not_receive(:save_and_open_page)
112
+
113
+ lambda { webrat_session.request_page('some url', :get, {}) }.should raise_error(Webrat::PageLoadError)
114
+ end
115
+
116
+ it "should now follow external redirects" do
117
+ webrat_session.should_receive(:internal_redirect?).and_return(false)
118
+
119
+ webrat_session.request_page("/oldurl", :get, {})
120
+
121
+ webrat_session.current_url.should == "/oldurl"
122
+ end
123
+ end
124
+
125
+ describe "#redirect?" do
126
+ before(:each) do
127
+ webrat_session = Webrat::Session.new
128
+ end
129
+
130
+ it "should return true if the last response was a redirect" do
131
+ webrat_session.stub!(:response_code => 301)
132
+ webrat_session.redirect?.should be_true
133
+ end
134
+
135
+ it "should return false if the last response wasn't a redirect" do
136
+ webrat_session.stub!(:response_code => 200)
137
+ webrat_session.redirect?.should be_false
138
+ end
139
+ end
140
+
141
+ describe "#internal_redirect?" do
142
+ before(:each) do
143
+ webrat_session = Webrat::Session.new
144
+ end
145
+
146
+ it "should return true if the last response was a redirect and the host of the current_url matches that of the response location" do
147
+ webrat_session.stub!(:redirect? => true)
148
+ webrat_session.stub!(:current_url => "http://example.com")
149
+ webrat_session.stub!(:response_location => "http://example.com")
150
+ webrat_session.internal_redirect?.should be_true
151
+ end
152
+
153
+ it "should return true if the last response was a redirect and the hosts are the same but the subdomains are different" do
154
+ webrat_session.stub!(:redirect? => true)
155
+ webrat_session.stub!(:current_url => "http://example.com")
156
+ webrat_session.stub!(:response_location => "http://myName.example.com")
157
+ webrat_session.internal_redirect?.should be_true
158
+ end
159
+
160
+ it "should return false if the last response was not a redirect" do
161
+ webrat_session.stub!(:redirect? => false)
162
+ webrat_session.internal_redirect?.should be_false
163
+ end
164
+
165
+ it "should return false if the last response was a redirect but the host of the current_url doesn't matches that of the response location" do
166
+ webrat_session.stub!(:redirect? => true)
167
+ webrat_session.stub!(:current_url => "http://example.com")
168
+ webrat_session.stub!(:response_location => "http://google.com")
169
+ webrat_session.internal_redirect?.should be_false
170
+ end
171
+
172
+ it "should return false if the last response was a redirect but the host of the current_url doesn't matches that of the response location, but they have the same subdomain" do
173
+ webrat_session.stub!(:redirect? => true)
174
+ webrat_session.stub!(:current_url => "http://login.example.com")
175
+ webrat_session.stub!(:response_location => "http://login.google.com")
176
+ webrat_session.internal_redirect?.should be_false
177
+ end
178
+ end
179
+
180
+ describe "#redirected_to" do
181
+ before(:each) do
182
+ webrat_session = Webrat::Session.new
183
+ end
184
+
185
+ it "should return nil if not redirected" do
186
+ webrat_session.stub!(:redirect? => false)
187
+ webrat_session.redirected_to.should be_nil
188
+ end
189
+
190
+ it "should return the response_location if redirected" do
191
+ webrat_session.stub!(:redirect? => true)
192
+ webrat_session.stub!(:response_location => "http://www.example.com")
193
+ webrat_session.redirected_to.should == "http://www.example.com"
194
+ end
195
+
196
+ end
197
+
198
+ end
@@ -0,0 +1,81 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ require "webrat/mechanize"
4
+
5
+ describe Webrat::MechanizeSession do
6
+ before :each do
7
+ Webrat.configuration.mode = :mechanize
8
+ end
9
+
10
+ before(:each) do
11
+ @mech = Webrat::MechanizeSession.new
12
+ end
13
+
14
+ describe "headers method" do
15
+ it "should return empty headers for a newly initialized session" do
16
+ @mech.headers.should == {}
17
+ end
18
+ end
19
+
20
+ describe "post" do
21
+ def url
22
+ 'http://test.host/users'
23
+ end
24
+
25
+ def data
26
+ {:user => {:first_name => 'Nancy', :last_name => 'Callahan'}}
27
+ end
28
+
29
+ def flattened_data
30
+ {'user[first_name]' => 'Nancy', 'user[last_name]' => 'Callahan'}
31
+ end
32
+
33
+ it "should flatten model post data" do
34
+ mechanize = mock(:mechanize)
35
+ WWW::Mechanize.stub!(:new => mechanize)
36
+ mechanize.should_receive(:post).with(url, flattened_data)
37
+ Webrat::MechanizeSession.new.post(url, data)
38
+ end
39
+ end
40
+
41
+ describe "#absolute_url" do
42
+ before(:each) do
43
+ @session = Webrat::MechanizeSession.new
44
+ @session.stub!(:current_url).and_return(absolute_url)
45
+ end
46
+
47
+ def absolute_url
48
+ 'http://test.host/users/fred/cabbages'
49
+ end
50
+
51
+ def rooted_url
52
+ '/users/fred/cabbages'
53
+ end
54
+
55
+ def relative_url
56
+ '../../wilma'
57
+ end
58
+
59
+ it "should return unmodified url if prefixed with scheme" do
60
+ @session.absolute_url(absolute_url).should == absolute_url
61
+ end
62
+
63
+ it "should prefix scheme and hostname if url begins with /" do
64
+ @session.absolute_url(rooted_url).should == absolute_url
65
+ end
66
+
67
+ it "should resolve sibling URLs relative to current path" do
68
+ @session.absolute_url(relative_url).should == 'http://test.host/users/wilma'
69
+ end
70
+
71
+ it "should cope with sibling URLs from root of site" do
72
+ @session.stub!(:current_url).and_return('http://test.host')
73
+ @session.absolute_url(relative_url).should == 'http://test.host/wilma'
74
+ end
75
+
76
+ it "should cope with https" do
77
+ @session.stub!(:current_url).and_return('https://test.host')
78
+ @session.absolute_url(relative_url).should == 'https://test.host/wilma'
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,42 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
+
3
+ require "webrat/merb"
4
+
5
+ describe Webrat::MerbSession do
6
+ it "should not pass empty params if data is and empty hash" do
7
+ session = Webrat::MerbSession.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::MerbSession.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
+ context "a session with a response" do
26
+ setup do
27
+ @session = Webrat::MerbSession.new
28
+ @response = OpenStruct.new
29
+ @response.status = 200
30
+ @response.body = 'test response'
31
+ @session.instance_variable_set(:@response, @response)
32
+ end
33
+
34
+ it "should return body of a request as a response_body" do
35
+ @session.response_body.should == @response.body
36
+ end
37
+
38
+ it "should return status of a request as a response_code" do
39
+ @session.response_code.should == @response.status
40
+ end
41
+ end
42
+ 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