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,469 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe "click_link" do
4
+ it "should click links with ampertands" do
5
+ with_html <<-HTML
6
+ <html>
7
+ <a href="/page">Save &amp; go back</a>
8
+ </html>
9
+ HTML
10
+ webrat_session.should_receive(:get).with("/page", {})
11
+ click_link "Save & go back"
12
+ end
13
+
14
+ it "should use get by default" do
15
+ with_html <<-HTML
16
+ <html>
17
+ <a href="/page">Link text</a>
18
+ </html>
19
+ HTML
20
+ webrat_session.should_receive(:get).with("/page", {})
21
+ click_link "Link text"
22
+ end
23
+
24
+ it "should click get links" do
25
+ with_html <<-HTML
26
+ <html>
27
+ <a href="/page">Link text</a>
28
+ </html>
29
+ HTML
30
+ webrat_session.should_receive(:get).with("/page", {})
31
+ click_link "Link text", :method => :get
32
+ end
33
+
34
+ it "should click link on substring" do
35
+ with_html <<-HTML
36
+ <html>
37
+ <a href="/page">Link text</a>
38
+ </html>
39
+ HTML
40
+ webrat_session.should_receive(:get).with("/page", {})
41
+ click_link "ink tex", :method => :get
42
+ end
43
+
44
+ it "should click delete links" do
45
+ with_html <<-HTML
46
+ <html>
47
+ <a href="/page">Link text</a>
48
+ </html>
49
+ HTML
50
+ webrat_session.should_receive(:delete).with("/page", {})
51
+ click_link "Link text", :method => :delete
52
+ end
53
+
54
+
55
+ it "should click post links" do
56
+ with_html <<-HTML
57
+ <html>
58
+ <a href="/page">Link text</a>
59
+ </html>
60
+ HTML
61
+ webrat_session.should_receive(:post).with("/page", {})
62
+ click_link "Link text", :method => :post
63
+ end
64
+
65
+ it "should click put links" do
66
+ with_html <<-HTML
67
+ <html>
68
+ <a href="/page">Link text</a>
69
+ </html>
70
+ HTML
71
+ webrat_session.should_receive(:put).with("/page", {})
72
+ click_link "Link text", :method => :put
73
+ end
74
+
75
+ it "should click links by regexp" do
76
+ with_html <<-HTML
77
+ <html>
78
+ <a href="/page">Link text</a>
79
+ </html>
80
+ HTML
81
+ webrat_session.should_receive(:get).with("/page", {})
82
+ click_link /link [a-z]/i
83
+ end
84
+
85
+ it "should click links by id" do
86
+ with_html <<-HTML
87
+ <html>
88
+ <a id="link_text_link" href="/page">Link text</a>
89
+ </html>
90
+ HTML
91
+ webrat_session.should_receive(:get).with("/page", {})
92
+ click_link "link_text_link"
93
+ end
94
+
95
+ it "should click links by id regexp" do
96
+ with_html <<-HTML
97
+ <html>
98
+ <a id="link_text_link" href="/page">Link text</a>
99
+ </html>
100
+ HTML
101
+ webrat_session.should_receive(:get).with("/page", {})
102
+ click_link /_text_/
103
+ end
104
+
105
+ it "should click rails javascript links with authenticity tokens" do
106
+ with_html <<-HTML
107
+ <html>
108
+ <a href="/posts" onclick="var f = document.createElement('form');
109
+ f.style.display = 'none';
110
+ this.parentNode.appendChild(f);
111
+ f.method = 'POST';
112
+ f.action = this.href;
113
+ var s = document.createElement('input');
114
+ s.setAttribute('type', 'hidden');
115
+ s.setAttribute('name', 'authenticity_token');
116
+ s.setAttribute('value', 'aa79cb354597a60a3786e7e291ed4f74d77d3a62');
117
+ f.appendChild(s);
118
+ f.submit();
119
+ return false;">Posts</a>
120
+ </html>
121
+ HTML
122
+ webrat_session.should_receive(:post).with("/posts", "authenticity_token" => "aa79cb354597a60a3786e7e291ed4f74d77d3a62")
123
+ click_link "Posts"
124
+ end
125
+
126
+ it "should click rails javascript delete links" do
127
+ with_html <<-HTML
128
+ <html>
129
+ <a href="/posts/1" onclick="var f = document.createElement('form');
130
+ f.style.display = 'none';
131
+ this.parentNode.appendChild(f);
132
+ f.method = 'POST';
133
+ f.action = this.href;
134
+ var m = document.createElement('input');
135
+ m.setAttribute('type', 'hidden');
136
+ m.setAttribute('name', '_method');
137
+ m.setAttribute('value', 'delete');
138
+ f.appendChild(m);
139
+ f.submit();
140
+ return false;">Delete</a>
141
+ </html>
142
+ HTML
143
+ webrat_session.should_receive(:delete).with("/posts/1", {})
144
+ click_link "Delete"
145
+ end
146
+
147
+ it "should click rails javascript post links" do
148
+ with_html <<-HTML
149
+ <html>
150
+ <a href="/posts" onclick="var f = document.createElement('form');
151
+ f.style.display = 'none';
152
+ this.parentNode.appendChild(f);
153
+ f.method = 'POST';
154
+ f.action = this.href;
155
+ f.submit();
156
+ return false;">Posts</a>
157
+ </html>
158
+ HTML
159
+ webrat_session.should_receive(:post).with("/posts", {})
160
+ click_link "Posts"
161
+ end
162
+
163
+ it "should click rails javascript post links without javascript" do
164
+ with_html <<-HTML
165
+ <html>
166
+ <a href="/posts" onclick="var f = document.createElement('form');
167
+ f.style.display = 'none';
168
+ this.parentNode.appendChild(f);
169
+ f.method = 'POST';
170
+ f.action = this.href;
171
+ f.submit();
172
+ return false;">Posts</a>
173
+ </html>
174
+ HTML
175
+ webrat_session.should_receive(:get).with("/posts", {})
176
+ click_link "Posts", :javascript => false
177
+ end
178
+
179
+ it "should click rails javascript put links" do
180
+ with_html <<-HTML
181
+ <html>
182
+ <a href="/posts" onclick="var f = document.createElement('form');
183
+ f.style.display = 'none';
184
+ this.parentNode.appendChild(f);
185
+ f.method = 'POST';
186
+ f.action = this.href;
187
+ var m = document.createElement('input');
188
+ m.setAttribute('type', 'hidden');
189
+ m.setAttribute('name', '_method');
190
+ m.setAttribute('value', 'put');
191
+ f.appendChild(m);
192
+ f.submit();
193
+ return false;">Put</a></h2>
194
+ </html>
195
+ HTML
196
+ webrat_session.should_receive(:put).with("/posts", {})
197
+ click_link "Put"
198
+ end
199
+
200
+ it "should fail if the javascript link doesn't have a value for the _method input" do
201
+ with_html <<-HTML
202
+ <html>
203
+ <a href="/posts/1" onclick="var f = document.createElement('form');
204
+ f.style.display = 'none';
205
+ this.parentNode.appendChild(f);
206
+ f.method = 'POST';
207
+ f.action = this.href;
208
+ var m = document.createElement('input');
209
+ m.setAttribute('type', 'hidden');
210
+ m.setAttribute('name', '_method');
211
+ f.appendChild(m);
212
+ f.submit();
213
+ return false;">Link</a>
214
+ </html>
215
+ HTML
216
+
217
+ lambda {
218
+ click_link "Link"
219
+ }.should raise_error(Webrat::WebratError)
220
+ end
221
+
222
+ it "should assert valid response" do
223
+ with_html <<-HTML
224
+ <html>
225
+ <a href="/page">Link text</a>
226
+ </html>
227
+ HTML
228
+ webrat_session.response_code = 501
229
+ lambda { click_link "Link text" }.should raise_error(Webrat::PageLoadError)
230
+ end
231
+
232
+ [200, 300, 400, 499].each do |status|
233
+ it "should consider the #{status} status code as success" do
234
+ with_html <<-HTML
235
+ <html>
236
+ <a href="/page">Link text</a>
237
+ </html>
238
+ HTML
239
+ webrat_session.stub!(:redirect? => false)
240
+ webrat_session.response_code = status
241
+ lambda { click_link "Link text" }.should_not raise_error
242
+ end
243
+ end
244
+
245
+ it "should fail is the link doesn't exist" do
246
+ with_html <<-HTML
247
+ <html>
248
+ <a href="/page">Link text</a>
249
+ </html>
250
+ HTML
251
+
252
+ lambda {
253
+ click_link "Missing link"
254
+ }.should raise_error(Webrat::NotFoundError)
255
+ end
256
+
257
+ it "should not be case sensitive" do
258
+ with_html <<-HTML
259
+ <html>
260
+ <a href="/page">Link text</a>
261
+ </html>
262
+ HTML
263
+ webrat_session.should_receive(:get).with("/page", {})
264
+ click_link "LINK TEXT"
265
+ end
266
+
267
+ it "should match link substrings" do
268
+ with_html <<-HTML
269
+ <html>
270
+ <a href="/page">This is some cool link text, isn't it?</a>
271
+ </html>
272
+ HTML
273
+ webrat_session.should_receive(:get).with("/page", {})
274
+ click_link "Link text"
275
+ end
276
+
277
+ it "should work with elements in the link" do
278
+ with_html <<-HTML
279
+ <html>
280
+ <a href="/page"><span>Link text</span></a>
281
+ </html>
282
+ HTML
283
+ webrat_session.should_receive(:get).with("/page", {})
284
+ click_link "Link text"
285
+ end
286
+
287
+ it "should match the first matching link" do
288
+ with_html <<-HTML
289
+ <html>
290
+ <a href="/page1">Link text</a>
291
+ <a href="/page2">Link text</a>
292
+ </html>
293
+ HTML
294
+ webrat_session.should_receive(:get).with("/page1", {})
295
+ click_link "Link text"
296
+ end
297
+
298
+ it "should choose the shortest link text match" do
299
+ with_html <<-HTML
300
+ <html>
301
+ <a href="/page1">Linkerama</a>
302
+ <a href="/page2">Link</a>
303
+ </html>
304
+ HTML
305
+
306
+ webrat_session.should_receive(:get).with("/page2", {})
307
+ click_link "Link"
308
+ end
309
+
310
+ it "should treat non-breaking spaces as spaces" do
311
+ with_html <<-HTML
312
+ <html>
313
+ <a href="/page1">This&nbsp;is&nbsp;a&nbsp;link</a>
314
+ </html>
315
+ HTML
316
+
317
+ webrat_session.should_receive(:get).with("/page1", {})
318
+ click_link "This is a link"
319
+ end
320
+
321
+ it "should not match on non-text contents" do
322
+ pending "needs fix" do
323
+ with_html <<-HTML
324
+ <html>
325
+ <a href="/page1"><span class="location">My house</span></a>
326
+ <a href="/page2">Location</a>
327
+ </html>
328
+ HTML
329
+
330
+ webrat_session.should_receive(:get).with("/page2", {})
331
+ click_link "Location"
332
+ end
333
+ end
334
+
335
+ it "should click link within a selector" do
336
+ with_html <<-HTML
337
+ <html>
338
+ <a href="/page1">Link</a>
339
+ <div id="container">
340
+ <a href="/page2">Link</a>
341
+ </div>
342
+ </html>
343
+ HTML
344
+
345
+ webrat_session.should_receive(:get).with("/page2", {})
346
+ click_link_within "#container", "Link"
347
+ end
348
+
349
+ it "should not make request when link is local anchor" do
350
+ with_html <<-HTML
351
+ <html>
352
+ <a href="#section-1">Jump to Section 1</a>
353
+ </html>
354
+ HTML
355
+ # Don't know why webrat_session.should_receive(:get).never doesn't work here
356
+ webrat_session.should_receive(:send).with('get_via_redirect', '#section-1', {}).never
357
+ click_link "Jump to Section 1"
358
+ end
359
+
360
+ it "should follow relative links" do
361
+ webrat_session.stub!(:current_url => "/page")
362
+ with_html <<-HTML
363
+ <html>
364
+ <a href="sub">Jump to sub page</a>
365
+ </html>
366
+ HTML
367
+ webrat_session.should_receive(:get).with("/page/sub", {})
368
+ click_link "Jump to sub page"
369
+ end
370
+
371
+ it "should follow fully qualified local links" do
372
+ webrat_session.stub!(:current_url => "/page")
373
+ with_html <<-HTML
374
+ <html>
375
+ <a href="http://subdomain.example.com/page/sub">Jump to sub page</a>
376
+ </html>
377
+ HTML
378
+ webrat_session.should_receive(:get).with("http://subdomain.example.com/page/sub", {})
379
+ click_link "Jump to sub page"
380
+ end
381
+
382
+ it "should follow fully qualified local links to example.com" do
383
+ with_html <<-HTML
384
+ <html>
385
+ <a href="http://www.example.com/page/sub">Jump to sub page</a>
386
+ </html>
387
+ HTML
388
+ webrat_session.should_receive(:get).with("http://www.example.com/page/sub", {})
389
+ click_link "Jump to sub page"
390
+ end
391
+
392
+ it "should follow query parameters" do
393
+ webrat_session.stub!(:current_url => "/page")
394
+ with_html <<-HTML
395
+ <html>
396
+ <a href="?foo=bar">Jump to foo bar</a>
397
+ </html>
398
+ HTML
399
+ webrat_session.should_receive(:get).with("/page?foo=bar", {})
400
+ click_link "Jump to foo bar"
401
+ end
402
+
403
+ it "should matches_text? on regexp" do
404
+ pending "need to update these"
405
+ link = Webrat::Link.new(webrat_session, nil)
406
+ link.should_receive(:text).and_return(@link_text_with_nbsp)
407
+ link.matches_text?(/link/i).should == 0
408
+ end
409
+
410
+ it "should matches_text? on link_text" do
411
+ pending "need to update these"
412
+ link = Webrat::Link.new(webrat_session, nil)
413
+ link.should_receive(:text).and_return(@link_text_with_nbsp)
414
+ link.matches_text?("Link Text").should == 0
415
+ end
416
+
417
+ it "should matches_text? on substring" do
418
+ pending "need to update these"
419
+ link = Webrat::Link.new(webrat_session, nil)
420
+ link.should_receive(:text).and_return(@link_text_with_nbsp)
421
+ link.matches_text?("nk Te").should_not be_nil
422
+ end
423
+
424
+ it "should not matches_text? on link_text case insensitive" do
425
+ pending "need to update these"
426
+ link = Webrat::Link.new(webrat_session, nil)
427
+ link.should_receive(:text).and_return(@link_text_with_nbsp)
428
+ link.should_receive(:inner_html).and_return('Link&nbsp;Text')
429
+ link.should_receive(:title).and_return(nil)
430
+ link.matches_text?("link_text").should == false
431
+ end
432
+
433
+ it "should match text not include &nbsp;" do
434
+ pending "need to update these"
435
+ link = Webrat::Link.new(webrat_session, nil)
436
+ link.should_receive(:text).and_return('LinkText')
437
+ link.matches_text?("LinkText").should == 0
438
+ end
439
+
440
+ it "should not matches_text? on wrong text" do
441
+ pending "need to update these"
442
+ link = Webrat::Link.new(webrat_session, nil)
443
+ nbsp = [0xA0].pack("U")
444
+ link.should_receive(:text).and_return("Some"+nbsp+"Other"+nbsp+"Link")
445
+ link.should_receive(:inner_html).and_return("Some&nbsp;Other&nbsp;Link")
446
+ link.should_receive(:title).and_return(nil)
447
+ link.matches_text?("Link Text").should == false
448
+ end
449
+
450
+ it "should match text including character reference" do
451
+ pending "need to update these"
452
+ no_ko_gi_ri = [0x30CE,0x30B3,0x30AE,0x30EA]
453
+ nokogiri_ja_kana = no_ko_gi_ri.pack("U*")
454
+ nokogiri_char_ref = no_ko_gi_ri.map{|c| "&#x%X;" % c }.join("")
455
+
456
+ link = Webrat::Link.new(webrat_session, nil)
457
+ link.should_receive(:text).and_return(nokogiri_ja_kana)
458
+ link.matches_text?(nokogiri_ja_kana).should == 0
459
+ end
460
+
461
+ it "should match img link" do
462
+ pending "need to update these"
463
+ link = Webrat::Link.new(webrat_session, nil)
464
+ link.should_receive(:text).and_return('')
465
+ link.should_receive(:inner_html).and_return('<img src="logo.png" />')
466
+ link.matches_text?('logo.png').should == 10
467
+ end
468
+
469
+ end