shoulda 2.11.3 → 3.0.0.beta1

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 (262) hide show
  1. data/Gemfile +9 -0
  2. data/Gemfile.lock +108 -0
  3. data/README.md +95 -0
  4. data/Rakefile +6 -50
  5. data/lib/shoulda/version.rb +1 -1
  6. metadata +50 -269
  7. data/README.rdoc +0 -154
  8. data/bin/convert_to_should_syntax +0 -42
  9. data/lib/shoulda.rb +0 -9
  10. data/lib/shoulda/action_controller.rb +0 -34
  11. data/lib/shoulda/action_controller/macros.rb +0 -221
  12. data/lib/shoulda/action_controller/matchers.rb +0 -39
  13. data/lib/shoulda/action_controller/matchers/assign_to_matcher.rb +0 -112
  14. data/lib/shoulda/action_controller/matchers/filter_param_matcher.rb +0 -74
  15. data/lib/shoulda/action_controller/matchers/redirect_to_matcher.rb +0 -62
  16. data/lib/shoulda/action_controller/matchers/render_template_matcher.rb +0 -54
  17. data/lib/shoulda/action_controller/matchers/render_with_layout_matcher.rb +0 -99
  18. data/lib/shoulda/action_controller/matchers/respond_with_content_type_matcher.rb +0 -74
  19. data/lib/shoulda/action_controller/matchers/respond_with_matcher.rb +0 -85
  20. data/lib/shoulda/action_controller/matchers/route_matcher.rb +0 -93
  21. data/lib/shoulda/action_controller/matchers/set_session_matcher.rb +0 -98
  22. data/lib/shoulda/action_controller/matchers/set_the_flash_matcher.rb +0 -100
  23. data/lib/shoulda/action_mailer.rb +0 -13
  24. data/lib/shoulda/action_mailer/assertions.rb +0 -42
  25. data/lib/shoulda/action_mailer/matchers.rb +0 -22
  26. data/lib/shoulda/action_mailer/matchers/have_sent_email.rb +0 -110
  27. data/lib/shoulda/active_record.rb +0 -16
  28. data/lib/shoulda/active_record/assertions.rb +0 -69
  29. data/lib/shoulda/active_record/helpers.rb +0 -32
  30. data/lib/shoulda/active_record/macros.rb +0 -457
  31. data/lib/shoulda/active_record/matchers.rb +0 -42
  32. data/lib/shoulda/active_record/matchers/allow_mass_assignment_of_matcher.rb +0 -83
  33. data/lib/shoulda/active_record/matchers/allow_value_matcher.rb +0 -110
  34. data/lib/shoulda/active_record/matchers/association_matcher.rb +0 -226
  35. data/lib/shoulda/active_record/matchers/ensure_inclusion_of_matcher.rb +0 -87
  36. data/lib/shoulda/active_record/matchers/ensure_length_of_matcher.rb +0 -141
  37. data/lib/shoulda/active_record/matchers/have_db_column_matcher.rb +0 -169
  38. data/lib/shoulda/active_record/matchers/have_db_index_matcher.rb +0 -112
  39. data/lib/shoulda/active_record/matchers/have_readonly_attribute_matcher.rb +0 -59
  40. data/lib/shoulda/active_record/matchers/validate_acceptance_of_matcher.rb +0 -41
  41. data/lib/shoulda/active_record/matchers/validate_format_of_matcher.rb +0 -65
  42. data/lib/shoulda/active_record/matchers/validate_numericality_of_matcher.rb +0 -39
  43. data/lib/shoulda/active_record/matchers/validate_presence_of_matcher.rb +0 -60
  44. data/lib/shoulda/active_record/matchers/validate_uniqueness_of_matcher.rb +0 -148
  45. data/lib/shoulda/active_record/matchers/validation_matcher.rb +0 -56
  46. data/lib/shoulda/assertions.rb +0 -79
  47. data/lib/shoulda/autoload_macros.rb +0 -46
  48. data/lib/shoulda/context.rb +0 -433
  49. data/lib/shoulda/helpers.rb +0 -8
  50. data/lib/shoulda/integrations/rspec.rb +0 -13
  51. data/lib/shoulda/integrations/rspec2.rb +0 -22
  52. data/lib/shoulda/integrations/test_unit.rb +0 -22
  53. data/lib/shoulda/macros.rb +0 -161
  54. data/lib/shoulda/private_helpers.rb +0 -13
  55. data/lib/shoulda/proc_extensions.rb +0 -14
  56. data/lib/shoulda/rails.rb +0 -8
  57. data/lib/shoulda/tasks.rb +0 -3
  58. data/lib/shoulda/tasks/list_tests.rake +0 -29
  59. data/lib/shoulda/tasks/yaml_to_shoulda.rake +0 -28
  60. data/rails/init.rb +0 -8
  61. data/test/README +0 -36
  62. data/test/fail_macros.rb +0 -55
  63. data/test/fixtures/addresses.yml +0 -3
  64. data/test/fixtures/friendships.yml +0 -0
  65. data/test/fixtures/posts.yml +0 -5
  66. data/test/fixtures/products.yml +0 -0
  67. data/test/fixtures/taggings.yml +0 -0
  68. data/test/fixtures/tags.yml +0 -9
  69. data/test/fixtures/users.yml +0 -6
  70. data/test/functional/posts_controller_test.rb +0 -121
  71. data/test/functional/users_controller_test.rb +0 -19
  72. data/test/matchers/action_mailer/have_sent_email_test.rb +0 -70
  73. data/test/matchers/active_record/allow_mass_assignment_of_matcher_test.rb +0 -74
  74. data/test/matchers/active_record/allow_value_matcher_test.rb +0 -64
  75. data/test/matchers/active_record/association_matcher_test.rb +0 -263
  76. data/test/matchers/active_record/ensure_inclusion_of_matcher_test.rb +0 -81
  77. data/test/matchers/active_record/ensure_length_of_matcher_test.rb +0 -158
  78. data/test/matchers/active_record/have_db_column_matcher_test.rb +0 -169
  79. data/test/matchers/active_record/have_db_index_matcher_test.rb +0 -91
  80. data/test/matchers/active_record/have_readonly_attributes_matcher_test.rb +0 -29
  81. data/test/matchers/active_record/validate_acceptance_of_matcher_test.rb +0 -44
  82. data/test/matchers/active_record/validate_format_of_matcher_test.rb +0 -39
  83. data/test/matchers/active_record/validate_numericality_of_matcher_test.rb +0 -52
  84. data/test/matchers/active_record/validate_presence_of_matcher_test.rb +0 -86
  85. data/test/matchers/active_record/validate_uniqueness_of_matcher_test.rb +0 -147
  86. data/test/matchers/controller/assign_to_matcher_test.rb +0 -45
  87. data/test/matchers/controller/filter_param_matcher_test.rb +0 -40
  88. data/test/matchers/controller/redirect_to_matcher_test.rb +0 -37
  89. data/test/matchers/controller/render_template_matcher_test.rb +0 -37
  90. data/test/matchers/controller/render_with_layout_matcher_test.rb +0 -47
  91. data/test/matchers/controller/respond_with_content_type_matcher_test.rb +0 -32
  92. data/test/matchers/controller/respond_with_matcher_test.rb +0 -96
  93. data/test/matchers/controller/route_matcher_test.rb +0 -75
  94. data/test/matchers/controller/set_session_matcher_test.rb +0 -48
  95. data/test/matchers/controller/set_the_flash_matcher.rb +0 -95
  96. data/test/other/autoload_macro_test.rb +0 -18
  97. data/test/other/context_test.rb +0 -372
  98. data/test/other/convert_to_should_syntax_test.rb +0 -63
  99. data/test/other/helpers_test.rb +0 -317
  100. data/test/other/private_helpers_test.rb +0 -32
  101. data/test/other/should_test.rb +0 -271
  102. data/test/rails2_model_builder.rb +0 -130
  103. data/test/rails2_root/app/controllers/application_controller.rb +0 -22
  104. data/test/rails2_root/app/controllers/posts_controller.rb +0 -87
  105. data/test/rails2_root/app/controllers/users_controller.rb +0 -84
  106. data/test/rails2_root/app/helpers/application_helper.rb +0 -3
  107. data/test/rails2_root/app/helpers/posts_helper.rb +0 -2
  108. data/test/rails2_root/app/helpers/users_helper.rb +0 -2
  109. data/test/rails2_root/app/models/address.rb +0 -7
  110. data/test/rails2_root/app/models/flea.rb +0 -11
  111. data/test/rails2_root/app/models/friendship.rb +0 -4
  112. data/test/rails2_root/app/models/notifier.rb +0 -8
  113. data/test/rails2_root/app/models/pets/cat.rb +0 -7
  114. data/test/rails2_root/app/models/pets/dog.rb +0 -10
  115. data/test/rails2_root/app/models/post.rb +0 -12
  116. data/test/rails2_root/app/models/product.rb +0 -12
  117. data/test/rails2_root/app/models/profile.rb +0 -2
  118. data/test/rails2_root/app/models/registration.rb +0 -2
  119. data/test/rails2_root/app/models/tag.rb +0 -8
  120. data/test/rails2_root/app/models/tagging.rb +0 -4
  121. data/test/rails2_root/app/models/treat.rb +0 -3
  122. data/test/rails2_root/app/models/user.rb +0 -32
  123. data/test/rails2_root/app/views/layouts/posts.rhtml +0 -19
  124. data/test/rails2_root/app/views/layouts/users.rhtml +0 -17
  125. data/test/rails2_root/app/views/layouts/wide.html.erb +0 -1
  126. data/test/rails2_root/app/views/notifier/the_email.html.erb +0 -1
  127. data/test/rails2_root/app/views/posts/edit.rhtml +0 -27
  128. data/test/rails2_root/app/views/posts/index.rhtml +0 -25
  129. data/test/rails2_root/app/views/posts/new.rhtml +0 -26
  130. data/test/rails2_root/app/views/posts/show.rhtml +0 -18
  131. data/test/rails2_root/app/views/users/edit.rhtml +0 -22
  132. data/test/rails2_root/app/views/users/index.rhtml +0 -22
  133. data/test/rails2_root/app/views/users/new.rhtml +0 -21
  134. data/test/rails2_root/app/views/users/show.rhtml +0 -13
  135. data/test/rails2_root/config/boot.rb +0 -110
  136. data/test/rails2_root/config/database.yml +0 -4
  137. data/test/rails2_root/config/environment.rb +0 -17
  138. data/test/rails2_root/config/environments/test.rb +0 -23
  139. data/test/rails2_root/config/initializers/new_rails_defaults.rb +0 -15
  140. data/test/rails2_root/config/initializers/shoulda.rb +0 -8
  141. data/test/rails2_root/config/routes.rb +0 -6
  142. data/test/rails2_root/db/migrate/001_create_users.rb +0 -19
  143. data/test/rails2_root/db/migrate/002_create_posts.rb +0 -13
  144. data/test/rails2_root/db/migrate/003_create_taggings.rb +0 -12
  145. data/test/rails2_root/db/migrate/004_create_tags.rb +0 -11
  146. data/test/rails2_root/db/migrate/005_create_dogs.rb +0 -12
  147. data/test/rails2_root/db/migrate/006_create_addresses.rb +0 -14
  148. data/test/rails2_root/db/migrate/007_create_fleas.rb +0 -11
  149. data/test/rails2_root/db/migrate/008_create_dogs_fleas.rb +0 -12
  150. data/test/rails2_root/db/migrate/009_create_products.rb +0 -17
  151. data/test/rails2_root/db/migrate/010_create_friendships.rb +0 -14
  152. data/test/rails2_root/db/migrate/011_create_treats.rb +0 -12
  153. data/test/rails2_root/db/migrate/20090506203502_create_profiles.rb +0 -12
  154. data/test/rails2_root/db/migrate/20090506203536_create_registrations.rb +0 -14
  155. data/test/rails2_root/db/migrate/20090513104502_create_cats.rb +0 -12
  156. data/test/rails2_root/db/schema.rb +0 -0
  157. data/test/rails2_root/log/test.log +0 -50381
  158. data/test/rails2_root/public/404.html +0 -30
  159. data/test/rails2_root/public/422.html +0 -30
  160. data/test/rails2_root/public/500.html +0 -30
  161. data/test/rails2_root/script/console +0 -3
  162. data/test/rails2_root/script/generate +0 -3
  163. data/test/rails2_root/test/shoulda_macros/custom_macro.rb +0 -6
  164. data/test/rails2_root/vendor/gems/gem_with_macro-0.0.1/shoulda_macros/gem_macro.rb +0 -6
  165. data/test/rails2_root/vendor/plugins/plugin_with_macro/shoulda_macros/plugin_macro.rb +0 -6
  166. data/test/rails2_test_helper.rb +0 -6
  167. data/test/rails3_model_builder.rb +0 -118
  168. data/test/rails3_root/Gemfile +0 -28
  169. data/test/rails3_root/README +0 -244
  170. data/test/rails3_root/Rakefile +0 -10
  171. data/test/rails3_root/app/controllers/application_controller.rb +0 -22
  172. data/test/rails3_root/app/controllers/posts_controller.rb +0 -87
  173. data/test/rails3_root/app/controllers/users_controller.rb +0 -82
  174. data/test/rails3_root/app/helpers/application_helper.rb +0 -2
  175. data/test/rails3_root/app/models/address.rb +0 -7
  176. data/test/rails3_root/app/models/flea.rb +0 -11
  177. data/test/rails3_root/app/models/friendship.rb +0 -4
  178. data/test/rails3_root/app/models/notifier.rb +0 -8
  179. data/test/rails3_root/app/models/pets/cat.rb +0 -7
  180. data/test/rails3_root/app/models/pets/dog.rb +0 -10
  181. data/test/rails3_root/app/models/post.rb +0 -12
  182. data/test/rails3_root/app/models/product.rb +0 -12
  183. data/test/rails3_root/app/models/profile.rb +0 -2
  184. data/test/rails3_root/app/models/registration.rb +0 -2
  185. data/test/rails3_root/app/models/tag.rb +0 -8
  186. data/test/rails3_root/app/models/tagging.rb +0 -4
  187. data/test/rails3_root/app/models/treat.rb +0 -3
  188. data/test/rails3_root/app/models/user.rb +0 -32
  189. data/test/rails3_root/app/views/layouts/application.html.erb +0 -14
  190. data/test/rails3_root/app/views/layouts/posts.rhtml +0 -19
  191. data/test/rails3_root/app/views/layouts/users.rhtml +0 -17
  192. data/test/rails3_root/app/views/layouts/wide.html.erb +0 -1
  193. data/test/rails3_root/app/views/notifier/the_email.html.erb +0 -1
  194. data/test/rails3_root/app/views/posts/edit.rhtml +0 -27
  195. data/test/rails3_root/app/views/posts/index.rhtml +0 -25
  196. data/test/rails3_root/app/views/posts/new.rhtml +0 -24
  197. data/test/rails3_root/app/views/posts/show.rhtml +0 -18
  198. data/test/rails3_root/app/views/users/edit.rhtml +0 -22
  199. data/test/rails3_root/app/views/users/index.rhtml +0 -22
  200. data/test/rails3_root/app/views/users/new.rhtml +0 -21
  201. data/test/rails3_root/app/views/users/show.rhtml +0 -13
  202. data/test/rails3_root/config.ru +0 -4
  203. data/test/rails3_root/config/application.rb +0 -46
  204. data/test/rails3_root/config/boot.rb +0 -6
  205. data/test/rails3_root/config/database.yml +0 -22
  206. data/test/rails3_root/config/environment.rb +0 -5
  207. data/test/rails3_root/config/environments/development.rb +0 -19
  208. data/test/rails3_root/config/environments/production.rb +0 -42
  209. data/test/rails3_root/config/environments/test.rb +0 -32
  210. data/test/rails3_root/config/initializers/backtrace_silencers.rb +0 -7
  211. data/test/rails3_root/config/initializers/inflections.rb +0 -10
  212. data/test/rails3_root/config/initializers/mime_types.rb +0 -5
  213. data/test/rails3_root/config/initializers/secret_token.rb +0 -7
  214. data/test/rails3_root/config/initializers/session_store.rb +0 -8
  215. data/test/rails3_root/config/locales/en.yml +0 -5
  216. data/test/rails3_root/config/routes.rb +0 -4
  217. data/test/rails3_root/db/migrate/001_create_users.rb +0 -19
  218. data/test/rails3_root/db/migrate/002_create_posts.rb +0 -13
  219. data/test/rails3_root/db/migrate/003_create_taggings.rb +0 -12
  220. data/test/rails3_root/db/migrate/004_create_tags.rb +0 -11
  221. data/test/rails3_root/db/migrate/005_create_dogs.rb +0 -12
  222. data/test/rails3_root/db/migrate/006_create_addresses.rb +0 -14
  223. data/test/rails3_root/db/migrate/007_create_fleas.rb +0 -11
  224. data/test/rails3_root/db/migrate/008_create_dogs_fleas.rb +0 -12
  225. data/test/rails3_root/db/migrate/009_create_products.rb +0 -17
  226. data/test/rails3_root/db/migrate/010_create_friendships.rb +0 -14
  227. data/test/rails3_root/db/migrate/011_create_treats.rb +0 -12
  228. data/test/rails3_root/db/migrate/20090506203502_create_profiles.rb +0 -12
  229. data/test/rails3_root/db/migrate/20090506203536_create_registrations.rb +0 -14
  230. data/test/rails3_root/db/migrate/20090513104502_create_cats.rb +0 -12
  231. data/test/rails3_root/db/seeds.rb +0 -7
  232. data/test/rails3_root/db/test.sqlite3 +0 -0
  233. data/test/rails3_root/log/test.log +0 -10834
  234. data/test/rails3_root/public/404.html +0 -26
  235. data/test/rails3_root/public/422.html +0 -26
  236. data/test/rails3_root/public/500.html +0 -26
  237. data/test/rails3_root/public/favicon.ico +0 -0
  238. data/test/rails3_root/public/images/rails.png +0 -0
  239. data/test/rails3_root/public/index.html +0 -279
  240. data/test/rails3_root/public/javascripts/application.js +0 -2
  241. data/test/rails3_root/public/javascripts/controls.js +0 -965
  242. data/test/rails3_root/public/javascripts/dragdrop.js +0 -974
  243. data/test/rails3_root/public/javascripts/effects.js +0 -1123
  244. data/test/rails3_root/public/javascripts/prototype.js +0 -4874
  245. data/test/rails3_root/public/javascripts/rails.js +0 -118
  246. data/test/rails3_root/public/robots.txt +0 -5
  247. data/test/rails3_root/script/rails +0 -9
  248. data/test/rails3_root/test/performance/browsing_test.rb +0 -9
  249. data/test/rails3_root/test/test_helper.rb +0 -13
  250. data/test/rails3_test_helper.rb +0 -6
  251. data/test/rspec_test.rb +0 -207
  252. data/test/test_helper.rb +0 -36
  253. data/test/unit/address_test.rb +0 -10
  254. data/test/unit/cat_test.rb +0 -7
  255. data/test/unit/dog_test.rb +0 -9
  256. data/test/unit/flea_test.rb +0 -14
  257. data/test/unit/friendship_test.rb +0 -6
  258. data/test/unit/post_test.rb +0 -15
  259. data/test/unit/product_test.rb +0 -23
  260. data/test/unit/tag_test.rb +0 -11
  261. data/test/unit/tagging_test.rb +0 -6
  262. data/test/unit/user_test.rb +0 -46
@@ -1,85 +0,0 @@
1
- module Shoulda # :nodoc:
2
- module ActionController # :nodoc:
3
- module Matchers
4
-
5
- # Ensures a controller responded with expected 'response' status code.
6
- #
7
- # You can pass an explicit status number like 200, 301, 404, 500
8
- # or its symbolic equivalent :success, :redirect, :missing, :error.
9
- # See ActionController::StatusCodes for a full list.
10
- #
11
- # Example:
12
- #
13
- # it { should respond_with(:success) }
14
- # it { should respond_with(:redirect) }
15
- # it { should respond_with(:missing) }
16
- # it { should respond_with(:error) }
17
- # it { should respond_with(501) }
18
- def respond_with(status)
19
- RespondWithMatcher.new(status)
20
- end
21
-
22
- class RespondWithMatcher # :nodoc:
23
-
24
- def initialize(status)
25
- @status = symbol_to_status_code(status)
26
- end
27
-
28
- def matches?(controller)
29
- @controller = controller
30
- correct_status_code? || correct_status_code_range?
31
- end
32
-
33
- def failure_message
34
- "Expected #{expectation}"
35
- end
36
-
37
- def negative_failure_message
38
- "Did not expect #{expectation}"
39
- end
40
-
41
- def description
42
- "respond with #{@status}"
43
- end
44
-
45
- protected
46
-
47
- def correct_status_code?
48
- response_code == @status
49
- end
50
-
51
- def correct_status_code_range?
52
- @status.is_a?(Range) &&
53
- @status.include?(response_code)
54
- end
55
-
56
- def response_code
57
- @controller.response.response_code
58
- end
59
-
60
- def symbol_to_status_code(potential_symbol)
61
- case potential_symbol
62
- when :success then 200
63
- when :redirect then 300..399
64
- when :missing then 404
65
- when :error then 500..599
66
- when Symbol
67
- if defined?(::Rack::Utils::SYMBOL_TO_STATUS_CODE)
68
- ::Rack::Utils::SYMBOL_TO_STATUS_CODE[potential_symbol]
69
- else
70
- ::ActionController::Base::SYMBOL_TO_STATUS_CODE[potential_symbol]
71
- end
72
- else
73
- potential_symbol
74
- end
75
- end
76
-
77
- def expectation
78
- "response to be a #{@status}, but was #{response_code}"
79
- end
80
-
81
- end
82
-
83
- end
84
- end
85
- end
@@ -1,93 +0,0 @@
1
- module Shoulda # :nodoc:
2
- module ActionController # :nodoc:
3
- module Matchers
4
-
5
- # Ensures that requesting +path+ using +method+ routes to +options+.
6
- #
7
- # If you don't specify a controller, it will use the controller from the
8
- # example group.
9
- #
10
- # +to_param+ is called on the +options+ given.
11
- #
12
- # Examples:
13
- #
14
- # it { should route(:get, "/posts").
15
- # to(:controller => :posts, :action => :index) }
16
- # it { should route(:get, "/posts/new").to(:action => :new) }
17
- # it { should route(:post, "/posts").to(:action => :create) }
18
- # it { should route(:get, "/posts/1").to(:action => :show, :id => 1) }
19
- # it { should route(:edit, "/posts/1").to(:action => :show, :id => 1) }
20
- # it { should route(:put, "/posts/1").to(:action => :update, :id => 1) }
21
- # it { should route(:delete, "/posts/1").
22
- # to(:action => :destroy, :id => 1) }
23
- # it { should route(:get, "/users/1/posts/1").
24
- # to(:action => :show, :id => 1, :user_id => 1) }
25
- def route(method, path)
26
- RouteMatcher.new(method, path, self)
27
- end
28
-
29
- class RouteMatcher # :nodoc:
30
-
31
- def initialize(method, path, context)
32
- @method = method
33
- @path = path
34
- @context = context
35
- end
36
-
37
- def to(params)
38
- @params = params
39
- stringify_params!
40
- self
41
- end
42
-
43
- def in_context(context)
44
- @context = context
45
- self
46
- end
47
-
48
- def matches?(controller)
49
- @controller = controller
50
- guess_controller!
51
- route_recognized?
52
- end
53
-
54
- attr_reader :failure_message, :negative_failure_message
55
-
56
- def description
57
- "route #{@method.to_s.upcase} #{@path} to/from #{@params.inspect}"
58
- end
59
-
60
- private
61
-
62
- def guess_controller!
63
- @params[:controller] ||= @controller.controller_path
64
- end
65
-
66
- def stringify_params!
67
- @params.each do |key, value|
68
- @params[key] = value.is_a?(Array) ? value.collect {|v| v.to_param } : value.to_param
69
- end
70
- end
71
-
72
- def route_recognized?
73
- begin
74
- @context.send(:assert_routing,
75
- { :method => @method, :path => @path },
76
- @params)
77
-
78
- @negative_failure_message = "Didn't expect to #{description}"
79
- true
80
- rescue ::ActionController::RoutingError => error
81
- @failure_message = error.message
82
- false
83
- rescue Test::Unit::AssertionFailedError => error
84
- @failure_message = error.message
85
- false
86
- end
87
- end
88
-
89
- end
90
-
91
- end
92
- end
93
- end
@@ -1,98 +0,0 @@
1
- module Shoulda # :nodoc:
2
- module ActionController # :nodoc:
3
- module Matchers
4
-
5
- # Ensures that a session key was set to the expected value.
6
- #
7
- # Example:
8
- #
9
- # it { should set_session(:message) }
10
- # it { should set_session(:user_id).to(@user.id) }
11
- # it { should_not set_session(:user_id) }
12
- def set_session(key)
13
- SetSessionMatcher.new(key)
14
- end
15
-
16
- class SetSessionMatcher # :nodoc:
17
-
18
- def initialize(key)
19
- @key = key.to_s
20
- end
21
-
22
- def to(value = nil, &block)
23
- @value = value
24
- @value_block = block
25
- self
26
- end
27
-
28
- def matches?(controller)
29
- @controller = controller
30
- @value = @context.instance_eval(&@value_block) if @value_block
31
- (assigned_value? && assigned_correct_value?) || cleared_value?
32
- end
33
-
34
- def failure_message
35
- "Expected #{expectation}, but #{result}"
36
- end
37
-
38
- def negative_failure_message
39
- "Didn't expect #{expectation}, but #{result}"
40
- end
41
-
42
- def description
43
- description = "set session variable #{@key.inspect}"
44
- description << " to #{@value.inspect}" if defined?(@value)
45
- description
46
- end
47
-
48
- def in_context(context)
49
- @context = context
50
- self
51
- end
52
-
53
- private
54
-
55
- def assigned_value?
56
- !assigned_value.nil?
57
- end
58
-
59
- def cleared_value?
60
- defined?(@value) && @value.nil? && assigned_value.nil?
61
- end
62
-
63
- def assigned_correct_value?
64
- return true if @value.nil?
65
- assigned_value == @value
66
- end
67
-
68
- def assigned_value
69
- session[@key]
70
- end
71
-
72
- def session
73
- if @controller.request.respond_to?(:session)
74
- @controller.request.session.to_hash
75
- else
76
- @controller.response.session.data
77
- end
78
- end
79
-
80
- def expectation
81
- expectation = "session variable #{@key} to be set"
82
- expectation << " to #{@value.inspect}" if @value
83
- expectation
84
- end
85
-
86
- def result
87
- if session.empty?
88
- "no session variables were set"
89
- else
90
- "the session was #{session.inspect}"
91
- end
92
- end
93
-
94
- end
95
-
96
- end
97
- end
98
- end
@@ -1,100 +0,0 @@
1
- module Shoulda # :nodoc:
2
- module ActionController # :nodoc:
3
- module Matchers
4
-
5
- # Ensures that the flash contains the given value. Can be a String, a
6
- # Regexp, or nil (indicating that the flash should not be set).
7
- #
8
- # Example:
9
- #
10
- # it { should set_the_flash }
11
- # it { should set_the_flash.to("Thank you for placing this order.") }
12
- # it { should set_the_flash.to(/created/i) }
13
- # it { should set_the_flash.to(/logged in/i).now }
14
- # it { should_not set_the_flash }
15
- def set_the_flash
16
- SetTheFlashMatcher.new
17
- end
18
-
19
- class SetTheFlashMatcher # :nodoc:
20
-
21
- def to(value)
22
- @value = value
23
- self
24
- end
25
-
26
- def now
27
- @now = true
28
- self
29
- end
30
-
31
- def matches?(controller)
32
- @controller = controller
33
- sets_the_flash? && string_value_matches? && regexp_value_matches?
34
- end
35
-
36
- attr_reader :failure_message, :negative_failure_message
37
-
38
- def description
39
- description = "set the flash"
40
- description << " to #{@value.inspect}" unless @value.nil?
41
- description
42
- end
43
-
44
- def failure_message
45
- "Expected #{expectation}"
46
- end
47
-
48
- def negative_failure_message
49
- "Did not expect #{expectation}"
50
- end
51
-
52
- private
53
-
54
- def sets_the_flash?
55
- !flash.blank?
56
- end
57
-
58
- def string_value_matches?
59
- return true unless String === @value
60
- flash.values.any? {|value| value == @value }
61
- end
62
-
63
- def regexp_value_matches?
64
- return true unless Regexp === @value
65
- flash.values.any? {|value| value =~ @value }
66
- end
67
-
68
- def flash
69
- return @flash if @flash
70
- flash_and_now = @controller.request.session["flash"].dup if @controller.request.session["flash"]
71
- flash = @controller.send(:flash)
72
-
73
- @flash = if @now
74
- flash.keys.each {|key| flash_and_now.delete(key) }
75
- flash_and_now
76
- else
77
- flash
78
- end
79
- end
80
-
81
- def expectation
82
- expectation = "the flash#{".now" if @now} to be set"
83
- expectation << " to #{@value.inspect}" unless @value.nil?
84
- expectation << ", but #{flash_description}"
85
- expectation
86
- end
87
-
88
- def flash_description
89
- if flash.blank?
90
- "no flash was set"
91
- else
92
- "was #{flash.inspect}"
93
- end
94
- end
95
-
96
- end
97
-
98
- end
99
- end
100
- end
@@ -1,13 +0,0 @@
1
- require 'shoulda'
2
- require 'shoulda/action_mailer/assertions'
3
- require 'shoulda/action_mailer/matchers'
4
-
5
- module Test # :nodoc: all
6
- module Unit
7
- class TestCase
8
- include Shoulda::ActionMailer::Assertions
9
- include Shoulda::ActionMailer::Matchers
10
- extend Shoulda::ActionMailer::Matchers
11
- end
12
- end
13
- end
@@ -1,42 +0,0 @@
1
- module Shoulda # :nodoc:
2
- module ActionMailer # :nodoc:
3
- module Assertions
4
- # Asserts that an email was delivered. Can take a block that can further
5
- # narrow down the types of emails you're expecting.
6
- #
7
- # assert_sent_email
8
- #
9
- # Passes if ActionMailer::Base.deliveries has an email
10
- #
11
- # assert_sent_email do |email|
12
- # email.subject =~ /hi there/ && email.to.include?('none@none.com')
13
- # end
14
- #
15
- # Passes if there is an email with subject containing 'hi there' and
16
- # 'none@none.com' as one of the recipients.
17
- #
18
- def assert_sent_email
19
- ::ActiveSupport::Deprecation.warn("use: should have_sent_email")
20
- emails = ::ActionMailer::Base.deliveries
21
- assert !emails.empty?, "No emails were sent"
22
- if block_given?
23
- matching_emails = emails.select {|email| yield email }
24
- assert !matching_emails.empty?, "None of the emails matched."
25
- end
26
- end
27
-
28
- # should have_sent_email.with_subject(/hi there/).to('none@none.com').from('noreply@example.com').with_body(/reach out/)
29
-
30
- # Asserts that no ActionMailer mails were delivered
31
- #
32
- # assert_did_not_send_email
33
- def assert_did_not_send_email
34
- ::ActiveSupport::Deprecation.warn("use: should_not have_sent_email")
35
- msg = "Sent #{::ActionMailer::Base.deliveries.size} emails.\n"
36
- ::ActionMailer::Base.deliveries.each { |m| msg << " '#{m.subject}' sent to #{m.to.to_sentence}\n" }
37
- assert ::ActionMailer::Base.deliveries.empty?, msg
38
- end
39
- end
40
- end
41
- end
42
-
@@ -1,22 +0,0 @@
1
- require 'shoulda/action_mailer/matchers/have_sent_email'
2
-
3
- module Shoulda # :nodoc:
4
- module ActionMailer # :nodoc:
5
- # = Matchers for your mailers
6
- #
7
- # This matcher will test that email is sent properly
8
- #
9
- # describe User do
10
- # it { should have_sent_email.with_subject(/is spam$/) }
11
- # it { should have_sent_email.from('do-not-reply@example.com') }
12
- # it { should have_sent_email.with_body(/is spam\./) }
13
- # it { should have_sent_email.to('myself@me.com') }
14
- # it { should have_sent_email.with_subject(/spam/).
15
- # from('do-not-reply@example.com').
16
- # with_body(/spam/).
17
- # to('myself@me.com') }
18
- # end
19
- module Matchers
20
- end
21
- end
22
- end