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,135 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
+
3
+ describe "have_selector" do
4
+ include Webrat::Matchers
5
+
6
+ before(:each) do
7
+ @body = <<-HTML
8
+ <div id='main'>
9
+ <div class='inner'>hello, world!</div>
10
+ <h2>Welcome "Bryan"</h2>
11
+ <h3>Welcome 'Bryan'</h3>
12
+ <h4>Welcome 'Bryan"</h4>
13
+ <ul>
14
+ <li>First</li>
15
+ <li>Second</li>
16
+ </ul>
17
+ </div>
18
+ HTML
19
+ end
20
+
21
+ it "should be able to match a CSS selector" do
22
+ @body.should have_selector("div")
23
+ end
24
+
25
+ it "should not match a CSS selector that does not exist" do
26
+ @body.should_not have_selector("p")
27
+ end
28
+
29
+ describe "specifying attributes" do
30
+ it "should be able to specify the attributes of the tag" do
31
+ @body.should have_selector("div", :class => "inner")
32
+ end
33
+ end
34
+
35
+ describe "specifying content" do
36
+ it "should be able to specify the content of the tag" do
37
+ @body.should have_selector("div", :content => "hello, world!")
38
+ end
39
+
40
+ it "should be able to specify the content of the tag with double quotes in it" do
41
+ @body.should have_selector("h2", :content => 'Welcome "Bryan"')
42
+ end
43
+
44
+ it "should be able to specify the content of the tag with single quotes in it" do
45
+ @body.should have_selector("h3", :content => "Welcome 'Bryan'")
46
+ end
47
+
48
+ it "should be able to specify the content of the tag with both kinds of quotes" do
49
+ @body.should have_selector("h4", :content => "Welcome 'Bryan\"")
50
+ end
51
+ end
52
+
53
+ describe "specifying counts" do
54
+ it "should be able to specify the number of occurences of the tag" do
55
+ @body.should have_selector("li", :count => 2)
56
+ end
57
+
58
+ it "should not match if the count is wrong" do
59
+ lambda {
60
+ @body.should have_selector("li", :count => 3)
61
+ }.should raise_error(Spec::Expectations::ExpectationNotMetError)
62
+ end
63
+ end
64
+
65
+ describe "specifying nested elements" do
66
+ it "should be able to loop over all the matched elements" do
67
+ @body.should have_selector("div") do |node|
68
+ node.first.name.should == "div"
69
+ end
70
+ end
71
+
72
+ it "should not match of any of the matchers in the block fail" do
73
+ lambda {
74
+ @body.should have_selector("div") do |node|
75
+ node.first.name.should == "p"
76
+ end
77
+ }.should raise_error(Spec::Expectations::ExpectationNotMetError)
78
+ end
79
+
80
+ it "should be able to use #have_selector in the block" do
81
+ @body.should have_selector("#main") do |node|
82
+ node.should have_selector(".inner")
83
+ end
84
+ end
85
+
86
+ it "should not match any parent tags in the block" do
87
+ lambda {
88
+ @body.should have_selector(".inner") do |node|
89
+ node.should have_selector("#main")
90
+ end
91
+ }.should raise_error(Spec::Expectations::ExpectationNotMetError)
92
+ end
93
+
94
+ it "should work with items that have multiple child nodes" do
95
+ @body.should have_selector("ul") do |n|
96
+ n.should have_selector("li", :content => "First")
97
+ n.should have_selector("li", :content => "Second")
98
+ end
99
+ end
100
+ end
101
+
102
+ describe "Test::Unit assertions" do
103
+ include Test::Unit::Assertions
104
+
105
+ before(:each) do
106
+ require 'test/unit'
107
+ should_receive(:response_body).and_return @body
108
+ end
109
+
110
+ describe "assert_have_selector" do
111
+ it "should pass when body contains the selection" do
112
+ assert_have_selector("div")
113
+ end
114
+
115
+ it "should throw an exception when the body doesnt have matching selection" do
116
+ lambda {
117
+ assert_have_selector("p")
118
+ }.should raise_error(Test::Unit::AssertionFailedError)
119
+ end
120
+ end
121
+
122
+ describe "assert_have_not_selector" do
123
+ it "should pass when the body doesn't contan the selection" do
124
+ assert_have_no_selector("p")
125
+ end
126
+
127
+ it "should throw an exception when the body does contain the selection" do
128
+ lambda {
129
+ assert_have_no_selector("div")
130
+ }.should raise_error(Test::Unit::AssertionFailedError)
131
+ end
132
+ end
133
+ end
134
+
135
+ end
@@ -0,0 +1,39 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
+
3
+ describe "have_tag" do
4
+ include Webrat::Matchers
5
+ include Webrat::HaveTagMatcher
6
+
7
+ before(:each) do
8
+ @body = <<-HTML
9
+ <div id='main'>
10
+ <div class='inner'>hello, world!</div>
11
+ </div>
12
+ HTML
13
+ end
14
+
15
+ it "should be an alias for have_selector" do
16
+ @body.should have_tag("div")
17
+ end
18
+
19
+ describe "asserts for tags" do
20
+ include Test::Unit::Assertions
21
+
22
+ before(:each) do
23
+ should_receive(:response_body).and_return @body
24
+ require 'test/unit'
25
+ end
26
+
27
+ describe "assert_have_tag" do
28
+ it "should be an alias for assert_have_selector" do
29
+ assert_have_tag("div")
30
+ end
31
+ end
32
+
33
+ describe "assert_have_no_tag" do
34
+ it "should be an alias for assert_have_no_selector" do
35
+ assert_have_no_tag("p")
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,123 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
+
3
+ describe "have_xpath" do
4
+ include Webrat::Matchers
5
+
6
+ before(:each) do
7
+ @body = <<-HTML
8
+ <div id='main'>
9
+ <div class='inner'>hello, world!</div>
10
+ <h2>Welcome "Bryan"</h2>
11
+ <h3>Welcome 'Bryan'</h3>
12
+ <h4>Welcome 'Bryan"</h4>
13
+ <ul>
14
+ <li>First</li>
15
+ <li>Second</li>
16
+ </ul>
17
+ </div>
18
+ HTML
19
+ end
20
+
21
+ it "should be able to match an XPATH" do
22
+ @body.should have_xpath("//div")
23
+ end
24
+
25
+ it "should be able to match an XPATH with attributes" do
26
+ @body.should have_xpath("//div", :class => "inner")
27
+ end
28
+
29
+ it "should be able to match an XPATH with content" do
30
+ @body.should have_xpath("//div", :content => "hello, world!")
31
+ end
32
+
33
+ it "should not match an XPATH without content" do
34
+ @body.should_not have_xpath("//div", :content => "not present")
35
+ end
36
+
37
+ it "should be able to match an XPATH with content and class" do
38
+ @body.should have_xpath("//div", :class => "inner", :content => "hello, world!")
39
+ end
40
+
41
+ it "should not match an XPATH with content and wrong class" do
42
+ @body.should_not have_xpath("//div", :class => "outer", :content => "hello, world!")
43
+ end
44
+
45
+ it "should not match an XPATH with wrong content and class" do
46
+ @body.should_not have_xpath("//div", :class => "inner", :content => "wrong")
47
+ end
48
+
49
+ it "should not match an XPATH with wrong content and wrong class" do
50
+ @body.should_not have_xpath("//div", :class => "outer", :content => "wrong")
51
+ end
52
+
53
+ it "should not match a XPATH that does not exist" do
54
+ @body.should_not have_xpath("//p")
55
+ end
56
+
57
+ it "should be able to loop over all the matched elements" do
58
+ @body.should have_xpath("//div") do |node|
59
+ node.first.name.should == "div"
60
+ end
61
+ end
62
+
63
+ it "should not match if any of the matchers in the block fail" do
64
+ lambda {
65
+ @body.should have_xpath("//div") do |node|
66
+ node.first.name.should == "p"
67
+ end
68
+ }.should raise_error(Spec::Expectations::ExpectationNotMetError)
69
+ end
70
+
71
+ it "should be able to use #have_xpath in the block" do
72
+ @body.should have_xpath("//div[@id='main']") do |node|
73
+ node.should have_xpath("./div[@class='inner']")
74
+ end
75
+ end
76
+
77
+ it "should convert absolute paths to relative in the block" do
78
+ @body.should have_xpath("//div[@id='main']") do |node|
79
+ node.should have_xpath("//div[@class='inner']")
80
+ end
81
+ end
82
+
83
+ it "should not match any parent tags in the block" do
84
+ lambda {
85
+ @body.should have_xpath("//div[@class='inner']") do |node|
86
+ node.should have_xpath("//div[@id='main']")
87
+ end
88
+ }.should raise_error(Spec::Expectations::ExpectationNotMetError)
89
+ end
90
+
91
+ describe 'asserts for xpath' do
92
+ include Test::Unit::Assertions
93
+
94
+ before(:each) do
95
+ should_receive(:response_body).and_return @body
96
+ require 'test/unit'
97
+ end
98
+
99
+ describe "assert_have_xpath" do
100
+ it "should pass when body contains the selection" do
101
+ assert_have_xpath("//div")
102
+ end
103
+
104
+ it "should throw an exception when the body doesnt have matching xpath" do
105
+ lambda {
106
+ assert_have_xpath("//p")
107
+ }.should raise_error(Test::Unit::AssertionFailedError)
108
+ end
109
+ end
110
+
111
+ describe "assert_have_no_xpath" do
112
+ it "should pass when the body doesn't contan the xpath" do
113
+ assert_have_no_xpath("//p")
114
+ end
115
+
116
+ it "should throw an exception when the body does contain the xpath" do
117
+ lambda {
118
+ assert_have_no_xpath("//div")
119
+ }.should raise_error(Test::Unit::AssertionFailedError)
120
+ end
121
+ end
122
+ end
123
+ end
@@ -0,0 +1,10 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe "reloads" do
4
+ it "should reload the page with http referer" do
5
+ webrat_session.should_receive(:get).with("/", {})
6
+ webrat_session.should_receive(:get).with("/", {}, {"HTTP_REFERER"=>"/"})
7
+ visit("/")
8
+ reload
9
+ end
10
+ end
@@ -0,0 +1,51 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe "save_and_open_page" do
4
+ before do
5
+ with_html <<-HTML
6
+ <html>
7
+ <head>
8
+ <link href="/stylesheets/foo.css" media="screen" rel="stylesheet" type="text/css" />
9
+ </head>
10
+ <body>
11
+ <h1>Hello world</h1>
12
+ <img src="/images/bar.png" />
13
+ </body>
14
+ </html>
15
+ HTML
16
+
17
+ File.stub!(:exist? => true)
18
+ Time.stub!(:now => 1234)
19
+ webrat_session.stub!(:open_in_browser)
20
+
21
+ @file_handle = mock("file handle")
22
+ File.stub!(:open).with(filename, 'w').and_yield(@file_handle)
23
+ @file_handle.stub!(:write)
24
+ end
25
+
26
+ it "should rewrite css rules" do
27
+ @file_handle.should_receive(:write) do |html|
28
+ html.should =~ %r|#{webrat_session.doc_root}/stylesheets/foo.css|s
29
+ end
30
+
31
+ save_and_open_page
32
+ end
33
+
34
+ it "should rewrite image paths" do
35
+ @file_handle.should_receive(:write) do |html|
36
+ html.should =~ %r|#{webrat_session.doc_root}/images/bar.png|s
37
+ end
38
+
39
+ save_and_open_page
40
+ end
41
+
42
+ it "should open the temp file in a browser" do
43
+ webrat_session.should_receive(:open_in_browser).with(filename)
44
+ save_and_open_page
45
+ end
46
+
47
+ def filename
48
+ File.expand_path("./webrat-#{Time.now}.html")
49
+ end
50
+
51
+ end
@@ -0,0 +1,88 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe "select_date" do
4
+ it "should send the values for each individual date component" do
5
+ with_html <<-HTML
6
+ <html>
7
+ <form action="/appointments" method="post">
8
+ <label for="appointment_date">Date</label><br />
9
+ <select id="appointment_date_1i" name="appointment[date(1i)]">
10
+ <option value="2003">2003</option>
11
+ </select>
12
+ <select id="appointment_date_2i" name="appointment[date(2i)]">
13
+ <option value="12">December</option>
14
+ </select>
15
+ <select id="appointment_date_3i" name="appointment[date(3i)]">
16
+ <option value="25">25</option>
17
+ </select>
18
+ <input type="submit" />
19
+ </form>
20
+ </html>
21
+ HTML
22
+ webrat_session.should_receive(:post).with("/appointments",
23
+ "appointment" => {"date(1i)" => '2003', "date(2i)" => "12", "date(3i)" => "25"})
24
+ select_date "December 25, 2003", :from => "Date"
25
+ click_button
26
+ end
27
+
28
+ it "should accept a date object" do
29
+ with_html <<-HTML
30
+ <html>
31
+ <form action="/appointments" method="post">
32
+ <label for="appointment_date">date</label><br />
33
+ <select id="appointment_date_1i" name="appointment[date(1i)]">
34
+ <option value="2003">2003</option>
35
+ </select>
36
+ <select id="appointment_date_2i" name="appointment[date(2i)]">
37
+ <option value="12">December</option>
38
+ </select>
39
+ <select id="appointment_date_3i" name="appointment[date(3i)]">
40
+ <option value="25">25</option>
41
+ </select>
42
+ <input type="submit" />
43
+ </form>
44
+ </html>
45
+ HTML
46
+ webrat_session.should_receive(:post).with("/appointments",
47
+ "appointment" => {"date(1i)" => '2003', "date(2i)" => "12", "date(3i)" => "25"})
48
+ select_date Date.parse("December 25, 2003"), :from => "date"
49
+ click_button
50
+ end
51
+
52
+ it "should work when no label is specified" do
53
+ with_html <<-HTML
54
+ <html>
55
+ <form action="/appointments" method="post">
56
+ <select id="appointment_date_1i" name="appointment[date(1i)]">
57
+ <option value="2003">2003</option>
58
+ </select>
59
+ <select id="appointment_date_2i" name="appointment[date(2i)]">
60
+ <option value="12">December</option>
61
+ </select>
62
+ <select id="appointment_date_3i" name="appointment[date(3i)]">
63
+ <option value="25">25</option>
64
+ </select>
65
+ <input type="submit" />
66
+ </form>
67
+ </html>
68
+ HTML
69
+ webrat_session.should_receive(:post).with("/appointments",
70
+ "appointment" => {"date(1i)" => '2003', "date(2i)" => "12", "date(3i)" => "25"})
71
+ select_date "December 25, 2003"
72
+ click_button
73
+ end
74
+
75
+ it "should fail if the specified label is not found" do
76
+ with_html <<-HTML
77
+ <html>
78
+ <form method="post" action="/appointments">
79
+ <select name="month"><option>January</option></select>
80
+ <input type="submit" />
81
+ </form>
82
+ </html>
83
+ HTML
84
+
85
+ lambda { select_date "December 25, 2003", :from => "date" }.should raise_error(Webrat::NotFoundError)
86
+ end
87
+
88
+ end