shoulda 2.10.3 → 2.11.0

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 (233) hide show
  1. data/Rakefile +8 -27
  2. data/lib/shoulda.rb +1 -3
  3. data/lib/shoulda/action_controller.rb +8 -0
  4. data/lib/shoulda/action_controller/macros.rb +54 -73
  5. data/lib/shoulda/action_controller/matchers.rb +2 -0
  6. data/lib/shoulda/action_controller/matchers/assign_to_matcher.rb +9 -6
  7. data/lib/shoulda/action_controller/matchers/filter_param_matcher.rb +18 -1
  8. data/lib/shoulda/action_controller/matchers/redirect_to_matcher.rb +62 -0
  9. data/lib/shoulda/action_controller/matchers/render_template_matcher.rb +54 -0
  10. data/lib/shoulda/action_controller/matchers/render_with_layout_matcher.rb +33 -15
  11. data/lib/shoulda/action_controller/matchers/respond_with_content_type_matcher.rb +1 -1
  12. data/lib/shoulda/action_controller/matchers/respond_with_matcher.rb +5 -1
  13. data/lib/shoulda/action_controller/matchers/route_matcher.rb +1 -1
  14. data/lib/shoulda/action_controller/matchers/set_session_matcher.rb +13 -2
  15. data/lib/shoulda/action_controller/matchers/set_the_flash_matcher.rb +1 -1
  16. data/lib/shoulda/action_mailer.rb +3 -0
  17. data/lib/shoulda/action_mailer/assertions.rb +4 -0
  18. data/lib/shoulda/action_mailer/matchers.rb +22 -0
  19. data/lib/shoulda/action_mailer/matchers/have_sent_email.rb +119 -0
  20. data/lib/shoulda/active_record/helpers.rb +6 -1
  21. data/lib/shoulda/active_record/macros.rb +86 -141
  22. data/lib/shoulda/active_record/matchers.rb +0 -1
  23. data/lib/shoulda/active_record/matchers/allow_mass_assignment_of_matcher.rb +1 -1
  24. data/lib/shoulda/active_record/matchers/allow_value_matcher.rb +10 -2
  25. data/lib/shoulda/assertions.rb +8 -0
  26. data/lib/shoulda/context.rb +52 -32
  27. data/lib/shoulda/macros.rb +16 -18
  28. data/lib/shoulda/rails.rb +0 -5
  29. data/lib/shoulda/rspec.rb +2 -0
  30. data/lib/shoulda/version.rb +4 -0
  31. data/rails/init.rb +1 -0
  32. data/test/fail_macros.rb +20 -4
  33. data/test/functional/posts_controller_test.rb +7 -7
  34. data/test/functional/users_controller_test.rb +1 -1
  35. data/test/matchers/action_mailer/have_sent_email_test.rb +53 -0
  36. data/test/matchers/active_record/allow_mass_assignment_of_matcher_test.rb +7 -1
  37. data/test/matchers/active_record/allow_value_matcher_test.rb +1 -1
  38. data/test/matchers/active_record/association_matcher_test.rb +16 -16
  39. data/test/matchers/active_record/ensure_inclusion_of_matcher_test.rb +3 -2
  40. data/test/matchers/active_record/ensure_length_of_matcher_test.rb +1 -1
  41. data/test/matchers/active_record/have_db_column_matcher_test.rb +1 -1
  42. data/test/matchers/active_record/have_db_index_matcher_test.rb +1 -1
  43. data/test/matchers/active_record/have_readonly_attributes_matcher_test.rb +1 -1
  44. data/test/matchers/active_record/validate_acceptance_of_matcher_test.rb +1 -1
  45. data/test/matchers/active_record/validate_format_of_matcher_test.rb +1 -1
  46. data/test/matchers/active_record/validate_numericality_of_matcher_test.rb +1 -1
  47. data/test/matchers/active_record/validate_presence_of_matcher_test.rb +1 -1
  48. data/test/matchers/active_record/validate_uniqueness_of_matcher_test.rb +1 -1
  49. data/test/matchers/controller/assign_to_matcher_test.rb +11 -1
  50. data/test/matchers/controller/filter_param_matcher_test.rb +10 -2
  51. data/test/matchers/controller/redirect_to_matcher_test.rb +37 -0
  52. data/test/matchers/controller/render_template_matcher_test.rb +37 -0
  53. data/test/matchers/controller/render_with_layout_matcher_test.rb +15 -1
  54. data/test/matchers/controller/respond_with_content_type_matcher_test.rb +1 -1
  55. data/test/matchers/controller/respond_with_matcher_test.rb +1 -11
  56. data/test/matchers/controller/route_matcher_test.rb +1 -1
  57. data/test/matchers/controller/set_session_matcher_test.rb +11 -1
  58. data/test/matchers/controller/set_the_flash_matcher.rb +1 -1
  59. data/test/other/autoload_macro_test.rb +1 -1
  60. data/test/other/context_test.rb +177 -8
  61. data/test/other/helpers_test.rb +13 -36
  62. data/test/other/private_helpers_test.rb +1 -1
  63. data/test/other/should_test.rb +1 -1
  64. data/test/{model_builder.rb → rails2_model_builder.rb} +28 -4
  65. data/test/{rails_root → rails2_root}/app/controllers/application_controller.rb +0 -3
  66. data/test/{rails_root → rails2_root}/app/controllers/posts_controller.rb +0 -0
  67. data/test/{rails_root → rails2_root}/app/controllers/users_controller.rb +0 -0
  68. data/test/{rails_root → rails2_root}/app/helpers/application_helper.rb +0 -0
  69. data/test/{rails_root → rails2_root}/app/helpers/posts_helper.rb +0 -0
  70. data/test/{rails_root → rails2_root}/app/helpers/users_helper.rb +0 -0
  71. data/test/{rails_root → rails2_root}/app/models/address.rb +0 -0
  72. data/test/rails2_root/app/models/flea.rb +11 -0
  73. data/test/{rails_root → rails2_root}/app/models/friendship.rb +0 -0
  74. data/test/rails2_root/app/models/notifier.rb +8 -0
  75. data/test/{rails_root → rails2_root}/app/models/pets/cat.rb +0 -0
  76. data/test/{rails_root → rails2_root}/app/models/pets/dog.rb +0 -0
  77. data/test/{rails_root → rails2_root}/app/models/post.rb +0 -0
  78. data/test/{rails_root → rails2_root}/app/models/product.rb +0 -0
  79. data/test/{rails_root → rails2_root}/app/models/profile.rb +0 -0
  80. data/test/{rails_root → rails2_root}/app/models/registration.rb +0 -0
  81. data/test/{rails_root → rails2_root}/app/models/tag.rb +0 -0
  82. data/test/{rails_root → rails2_root}/app/models/tagging.rb +0 -0
  83. data/test/{rails_root → rails2_root}/app/models/treat.rb +0 -0
  84. data/test/{rails_root → rails2_root}/app/models/user.rb +0 -0
  85. data/test/{rails_root → rails2_root}/app/views/layouts/posts.rhtml +0 -0
  86. data/test/{rails_root → rails2_root}/app/views/layouts/users.rhtml +0 -0
  87. data/test/{rails_root → rails2_root}/app/views/layouts/wide.html.erb +0 -0
  88. data/test/rails2_root/app/views/notifier/the_email.html.erb +1 -0
  89. data/test/{rails_root → rails2_root}/app/views/posts/edit.rhtml +0 -0
  90. data/test/{rails_root → rails2_root}/app/views/posts/index.rhtml +0 -0
  91. data/test/{rails_root → rails2_root}/app/views/posts/new.rhtml +0 -0
  92. data/test/{rails_root → rails2_root}/app/views/posts/show.rhtml +0 -0
  93. data/test/{rails_root → rails2_root}/app/views/users/edit.rhtml +0 -0
  94. data/test/{rails_root → rails2_root}/app/views/users/index.rhtml +0 -0
  95. data/test/{rails_root → rails2_root}/app/views/users/new.rhtml +0 -0
  96. data/test/{rails_root → rails2_root}/app/views/users/show.rhtml +0 -0
  97. data/test/{rails_root → rails2_root}/config/boot.rb +0 -0
  98. data/test/{rails_root → rails2_root}/config/database.yml +1 -1
  99. data/test/{rails_root → rails2_root}/config/environment.rb +0 -1
  100. data/test/rails2_root/config/environments/test.rb +23 -0
  101. data/test/{rails_root → rails2_root}/config/initializers/new_rails_defaults.rb +0 -0
  102. data/test/{rails_root → rails2_root}/config/initializers/shoulda.rb +0 -0
  103. data/test/{rails_root → rails2_root}/config/routes.rb +0 -0
  104. data/test/{rails_root → rails2_root}/db/migrate/001_create_users.rb +0 -0
  105. data/test/{rails_root → rails2_root}/db/migrate/002_create_posts.rb +0 -0
  106. data/test/{rails_root → rails2_root}/db/migrate/003_create_taggings.rb +0 -0
  107. data/test/{rails_root → rails2_root}/db/migrate/004_create_tags.rb +0 -0
  108. data/test/{rails_root → rails2_root}/db/migrate/005_create_dogs.rb +0 -0
  109. data/test/{rails_root → rails2_root}/db/migrate/006_create_addresses.rb +0 -0
  110. data/test/{rails_root → rails2_root}/db/migrate/007_create_fleas.rb +0 -0
  111. data/test/{rails_root → rails2_root}/db/migrate/008_create_dogs_fleas.rb +0 -0
  112. data/test/{rails_root → rails2_root}/db/migrate/009_create_products.rb +0 -0
  113. data/test/{rails_root → rails2_root}/db/migrate/010_create_friendships.rb +0 -0
  114. data/test/{rails_root → rails2_root}/db/migrate/011_create_treats.rb +0 -0
  115. data/test/{rails_root → rails2_root}/db/migrate/20090506203502_create_profiles.rb +0 -0
  116. data/test/{rails_root → rails2_root}/db/migrate/20090506203536_create_registrations.rb +0 -0
  117. data/test/{rails_root → rails2_root}/db/migrate/20090513104502_create_cats.rb +0 -0
  118. data/test/{rails_root → rails2_root}/db/schema.rb +0 -0
  119. data/test/rails2_root/log/test.log +121771 -0
  120. data/test/{rails_root → rails2_root}/public/404.html +0 -0
  121. data/test/{rails_root → rails2_root}/public/422.html +0 -0
  122. data/test/{rails_root → rails2_root}/public/500.html +0 -0
  123. data/test/{rails_root → rails2_root}/script/console +0 -0
  124. data/test/{rails_root → rails2_root}/script/generate +0 -0
  125. data/test/{rails_root → rails2_root}/test/shoulda_macros/custom_macro.rb +0 -0
  126. data/test/{rails_root → rails2_root}/vendor/gems/gem_with_macro-0.0.1/shoulda_macros/gem_macro.rb +0 -0
  127. data/test/{rails_root → rails2_root}/vendor/plugins/plugin_with_macro/shoulda_macros/plugin_macro.rb +0 -0
  128. data/test/rails2_test_helper.rb +6 -0
  129. data/test/rails3_model_builder.rb +118 -0
  130. data/test/rails3_root/Gemfile +28 -0
  131. data/test/rails3_root/README +244 -0
  132. data/test/rails3_root/Rakefile +10 -0
  133. data/test/rails3_root/app/controllers/application_controller.rb +22 -0
  134. data/test/rails3_root/app/controllers/posts_controller.rb +87 -0
  135. data/test/rails3_root/app/controllers/users_controller.rb +82 -0
  136. data/test/rails3_root/app/helpers/application_helper.rb +2 -0
  137. data/test/rails3_root/app/models/address.rb +7 -0
  138. data/test/rails3_root/app/models/flea.rb +11 -0
  139. data/test/rails3_root/app/models/friendship.rb +4 -0
  140. data/test/rails3_root/app/models/notifier.rb +8 -0
  141. data/test/rails3_root/app/models/pets/cat.rb +7 -0
  142. data/test/rails3_root/app/models/pets/dog.rb +10 -0
  143. data/test/rails3_root/app/models/post.rb +12 -0
  144. data/test/rails3_root/app/models/product.rb +12 -0
  145. data/test/rails3_root/app/models/profile.rb +2 -0
  146. data/test/rails3_root/app/models/registration.rb +2 -0
  147. data/test/rails3_root/app/models/tag.rb +8 -0
  148. data/test/rails3_root/app/models/tagging.rb +4 -0
  149. data/test/rails3_root/app/models/treat.rb +3 -0
  150. data/test/rails3_root/app/models/user.rb +32 -0
  151. data/test/rails3_root/app/views/layouts/application.html.erb +14 -0
  152. data/test/rails3_root/app/views/layouts/posts.rhtml +19 -0
  153. data/test/rails3_root/app/views/layouts/users.rhtml +17 -0
  154. data/test/rails3_root/app/views/layouts/wide.html.erb +1 -0
  155. data/test/rails3_root/app/views/notifier/the_email.html.erb +1 -0
  156. data/test/rails3_root/app/views/posts/edit.rhtml +27 -0
  157. data/test/rails3_root/app/views/posts/index.rhtml +25 -0
  158. data/test/rails3_root/app/views/posts/new.rhtml +24 -0
  159. data/test/rails3_root/app/views/posts/show.rhtml +18 -0
  160. data/test/rails3_root/app/views/users/edit.rhtml +22 -0
  161. data/test/rails3_root/app/views/users/index.rhtml +22 -0
  162. data/test/rails3_root/app/views/users/new.rhtml +21 -0
  163. data/test/rails3_root/app/views/users/show.rhtml +13 -0
  164. data/test/rails3_root/config.ru +4 -0
  165. data/test/rails3_root/config/application.rb +46 -0
  166. data/test/rails3_root/config/boot.rb +6 -0
  167. data/test/rails3_root/config/database.yml +22 -0
  168. data/test/rails3_root/config/environment.rb +5 -0
  169. data/test/rails3_root/config/environments/development.rb +19 -0
  170. data/test/rails3_root/config/environments/production.rb +42 -0
  171. data/test/rails3_root/config/environments/test.rb +32 -0
  172. data/test/rails3_root/config/initializers/backtrace_silencers.rb +7 -0
  173. data/test/rails3_root/config/initializers/inflections.rb +10 -0
  174. data/test/rails3_root/config/initializers/mime_types.rb +5 -0
  175. data/test/rails3_root/config/initializers/secret_token.rb +7 -0
  176. data/test/rails3_root/config/initializers/session_store.rb +8 -0
  177. data/test/rails3_root/config/locales/en.yml +5 -0
  178. data/test/rails3_root/config/routes.rb +4 -0
  179. data/test/rails3_root/db/migrate/001_create_users.rb +19 -0
  180. data/test/rails3_root/db/migrate/002_create_posts.rb +13 -0
  181. data/test/rails3_root/db/migrate/003_create_taggings.rb +12 -0
  182. data/test/rails3_root/db/migrate/004_create_tags.rb +11 -0
  183. data/test/rails3_root/db/migrate/005_create_dogs.rb +12 -0
  184. data/test/rails3_root/db/migrate/006_create_addresses.rb +14 -0
  185. data/test/rails3_root/db/migrate/007_create_fleas.rb +11 -0
  186. data/test/rails3_root/db/migrate/008_create_dogs_fleas.rb +12 -0
  187. data/test/rails3_root/db/migrate/009_create_products.rb +17 -0
  188. data/test/rails3_root/db/migrate/010_create_friendships.rb +14 -0
  189. data/test/rails3_root/db/migrate/011_create_treats.rb +12 -0
  190. data/test/rails3_root/db/migrate/20090506203502_create_profiles.rb +12 -0
  191. data/test/rails3_root/db/migrate/20090506203536_create_registrations.rb +14 -0
  192. data/test/rails3_root/db/migrate/20090513104502_create_cats.rb +12 -0
  193. data/test/rails3_root/db/seeds.rb +7 -0
  194. data/test/rails3_root/db/test.sqlite3 +0 -0
  195. data/test/rails3_root/doc/README_FOR_APP +2 -0
  196. data/test/{rails_root/config/environments/test.rb → rails3_root/log/development.log} +0 -0
  197. data/test/rails3_root/log/production.log +0 -0
  198. data/test/rails3_root/log/server.log +0 -0
  199. data/test/rails3_root/log/test.log +63274 -0
  200. data/test/rails3_root/public/404.html +26 -0
  201. data/test/rails3_root/public/422.html +26 -0
  202. data/test/rails3_root/public/500.html +26 -0
  203. data/test/rails3_root/public/favicon.ico +0 -0
  204. data/test/rails3_root/public/images/rails.png +0 -0
  205. data/test/rails3_root/public/index.html +279 -0
  206. data/test/rails3_root/public/javascripts/application.js +2 -0
  207. data/test/rails3_root/public/javascripts/controls.js +965 -0
  208. data/test/rails3_root/public/javascripts/dragdrop.js +974 -0
  209. data/test/rails3_root/public/javascripts/effects.js +1123 -0
  210. data/test/rails3_root/public/javascripts/prototype.js +4874 -0
  211. data/test/rails3_root/public/javascripts/rails.js +118 -0
  212. data/test/rails3_root/public/robots.txt +5 -0
  213. data/test/rails3_root/script/rails +9 -0
  214. data/test/rails3_root/test/performance/browsing_test.rb +9 -0
  215. data/test/rails3_root/test/test_helper.rb +13 -0
  216. data/test/rails3_test_helper.rb +6 -0
  217. data/test/test_helper.rb +16 -8
  218. data/test/unit/address_test.rb +1 -1
  219. data/test/unit/cat_test.rb +1 -1
  220. data/test/unit/dog_test.rb +1 -1
  221. data/test/unit/flea_test.rb +9 -1
  222. data/test/unit/friendship_test.rb +1 -1
  223. data/test/unit/post_test.rb +1 -5
  224. data/test/unit/product_test.rb +1 -1
  225. data/test/unit/tag_test.rb +1 -5
  226. data/test/unit/tagging_test.rb +1 -1
  227. data/test/unit/user_test.rb +3 -37
  228. metadata +180 -73
  229. data/lib/shoulda/action_view.rb +0 -10
  230. data/lib/shoulda/action_view/macros.rb +0 -61
  231. data/lib/shoulda/active_record/matchers/have_named_scope_matcher.rb +0 -128
  232. data/test/matchers/active_record/have_named_scope_matcher_test.rb +0 -65
  233. data/test/rails_root/app/models/flea.rb +0 -3
data/Rakefile CHANGED
@@ -10,7 +10,7 @@ load 'tasks/shoulda.rake'
10
10
  # Test::Unit::UI::VERBOSE
11
11
  test_files_pattern = 'test/{unit,functional,other,matchers}/**/*_test.rb'
12
12
  Rake::TestTask.new do |t|
13
- t.libs << 'lib'
13
+ t.libs << 'lib' << 'test'
14
14
  t.pattern = test_files_pattern
15
15
  t.verbose = false
16
16
  end
@@ -35,28 +35,15 @@ task :sync_docs => 'rdoc' do
35
35
  `rsync -ave ssh doc/ dev@dev.thoughtbot.com:/home/dev/www/dev.thoughtbot.com/shoulda`
36
36
  end
37
37
 
38
- desc 'Default: run tests.'
39
- task :default => ['test']
40
-
41
- spec = Gem::Specification.new do |s|
42
- s.name = "shoulda"
43
- s.version = Shoulda::VERSION
44
- s.summary = "Making tests easy on the fingers and eyes"
45
- s.homepage = "http://thoughtbot.com/projects/shoulda"
46
- s.rubyforge_project = "shoulda"
47
-
48
- s.files = FileList["[A-Z]*", "{bin,lib,rails,test}/**/*"]
49
- s.executables = s.files.grep(/^bin/) { |f| File.basename(f) }
50
-
51
- s.has_rdoc = true
52
- s.extra_rdoc_files = ["README.rdoc", "CONTRIBUTION_GUIDELINES.rdoc"]
53
- s.rdoc_options = ["--line-numbers", "--main", "README.rdoc"]
54
-
55
- s.authors = ["Tammer Saleh"]
56
- s.email = "tsaleh@thoughtbot.com"
38
+ desc 'Default: run tests for all supported versions of Rails'
39
+ task :default do
40
+ %w(2.3.8 3.0.0.beta3).each do |version|
41
+ system("RAILS_VERSION=#{version} rake -s test;")
42
+ end
57
43
  end
58
44
 
59
- Rake::GemPackageTask.new spec do |pkg|
45
+ eval("$specification = begin; #{IO.read('shoulda.gemspec')}; end")
46
+ Rake::GemPackageTask.new $specification do |pkg|
60
47
  pkg.need_tar = true
61
48
  pkg.need_zip = true
62
49
  end
@@ -64,9 +51,3 @@ end
64
51
  desc "Clean files generated by rake tasks"
65
52
  task :clobber => [:clobber_rdoc, :clobber_package]
66
53
 
67
- desc "Generate a gemspec file for GitHub"
68
- task :gemspec do
69
- File.open("#{spec.name}.gemspec", 'w') do |f|
70
- f.write spec.to_ruby
71
- end
72
- end
@@ -1,6 +1,4 @@
1
- module Shoulda
2
- VERSION = "2.10.3"
3
- end
1
+ require 'shoulda/version'
4
2
 
5
3
  if defined? Spec
6
4
  require 'shoulda/rspec'
@@ -24,3 +24,11 @@ module ActionController #:nodoc: all
24
24
  end
25
25
  end
26
26
  end
27
+
28
+ if defined?(ActionController::TestCase)
29
+ class ActionController::TestCase
30
+ def subject
31
+ @controller
32
+ end
33
+ end
34
+ end
@@ -24,37 +24,30 @@ module Shoulda # :nodoc:
24
24
  module Macros
25
25
  include Matchers
26
26
 
27
+ # Deprecated: use ActionController::Matchers#set_the_flash instead.
28
+ #
27
29
  # Macro that creates a test asserting that the flash contains the given
28
30
  # value. Expects a +String+ or +Regexp+.
29
31
  #
30
- # If the argument is +nil+, it will assert that the flash is not set.
31
- # This behavior is deprecated.
32
- #
33
32
  # Example:
34
33
  #
35
34
  # should_set_the_flash_to "Thank you for placing this order."
36
35
  # should_set_the_flash_to /created/i
37
36
  def should_set_the_flash_to(val)
38
- if val
39
- matcher = set_the_flash.to(val)
40
- should matcher.description do
41
- assert_accepts matcher, @controller
42
- end
43
- else
44
- warn "[DEPRECATION] should_set_the_flash_to nil is deprecated. " <<
45
- "Use should_not_set_the_flash instead."
46
- should_not_set_the_flash
47
- end
37
+ ::ActiveSupport::Deprecation.warn("use: should set_the_flash")
38
+ should set_the_flash.to(val)
48
39
  end
49
40
 
41
+ # Deprecated: use ActionController::Matchers#set_the_flash instead.
42
+ #
50
43
  # Macro that creates a test asserting that the flash is empty.
51
44
  def should_not_set_the_flash
52
- matcher = set_the_flash
53
- should "not #{matcher.description}" do
54
- assert_rejects matcher, @controller
55
- end
45
+ ::ActiveSupport::Deprecation.warn("use: should_not set_the_flash")
46
+ should_not set_the_flash
56
47
  end
57
48
 
49
+ # Deprecated: use ActionController::Matchers#filter_param instead.
50
+ #
58
51
  # Macro that creates a test asserting that filter_parameter_logging
59
52
  # is set for the specified keys
60
53
  #
@@ -62,14 +55,14 @@ module Shoulda # :nodoc:
62
55
  #
63
56
  # should_filter_params :password, :ssn
64
57
  def should_filter_params(*keys)
58
+ ::ActiveSupport::Deprecation.warn("use: should filter_param")
65
59
  keys.each do |key|
66
- matcher = filter_param(key)
67
- should matcher.description do
68
- assert_accepts matcher, @controller
69
- end
60
+ should filter_param(key)
70
61
  end
71
62
  end
72
63
 
64
+ # Deprecated: use ActionController::Matchers#assign_to instead.
65
+ #
73
66
  # Macro that creates a test asserting that the controller assigned to
74
67
  # each of the named instance variable(s).
75
68
  #
@@ -85,20 +78,17 @@ module Shoulda # :nodoc:
85
78
  # should_assign_to :user, :class => User
86
79
  # should_assign_to(:user) { @user }
87
80
  def should_assign_to(*names, &block)
81
+ ::ActiveSupport::Deprecation.warn("use: should assign_to")
88
82
  klass = get_options!(names, :class)
89
83
  names.each do |name|
90
84
  matcher = assign_to(name).with_kind_of(klass)
91
- should matcher.description do
92
- if block
93
- expected_value = instance_eval(&block)
94
- matcher = matcher.with(expected_value)
95
- end
96
-
97
- assert_accepts matcher, @controller
98
- end
85
+ matcher = matcher.with(&block) if block
86
+ should matcher
99
87
  end
100
88
  end
101
89
 
90
+ # Deprecated: use ActionController::Matchers#assign_to instead.
91
+ #
102
92
  # Macro that creates a test asserting that the controller did not assign to
103
93
  # any of the named instance variable(s).
104
94
  #
@@ -106,25 +96,25 @@ module Shoulda # :nodoc:
106
96
  #
107
97
  # should_not_assign_to :user, :posts
108
98
  def should_not_assign_to(*names)
99
+ ::ActiveSupport::Deprecation.warn("use: should_not assign_to")
109
100
  names.each do |name|
110
- matcher = assign_to(name)
111
- should "not #{matcher.description}" do
112
- assert_rejects matcher, @controller
113
- end
101
+ should_not assign_to(name)
114
102
  end
115
103
  end
116
104
 
105
+ # Deprecated: use ActionController::Matchers#respond_with instead.
106
+ #
117
107
  # Macro that creates a test asserting that the controller responded with a 'response' status code.
118
108
  # Example:
119
109
  #
120
110
  # should_respond_with :success
121
111
  def should_respond_with(response)
122
- should "respond with #{response}" do
123
- matcher = respond_with(response)
124
- assert_accepts matcher, @controller
125
- end
112
+ ::ActiveSupport::Deprecation.warn("use: should respond_with")
113
+ should respond_with(response)
126
114
  end
127
115
 
116
+ # Deprecated: use ActionController::Matchers#respond_with_content_type instead.
117
+ #
128
118
  # Macro that creates a test asserting that the response content type was 'content_type'.
129
119
  # Example:
130
120
  #
@@ -132,12 +122,12 @@ module Shoulda # :nodoc:
132
122
  # should_respond_with_content_type :rss
133
123
  # should_respond_with_content_type /rss/
134
124
  def should_respond_with_content_type(content_type)
135
- matcher = respond_with_content_type(content_type)
136
- should matcher.description do
137
- assert_accepts matcher, @controller
138
- end
125
+ ::ActiveSupport::Deprecation.warn("use: should respond_with_content_type")
126
+ should respond_with_content_type(content_type)
139
127
  end
140
128
 
129
+ # Deprecated: use ActionController::Matchers#set_session instead.
130
+ #
141
131
  # Macro that creates a test asserting that a value returned from the
142
132
  # session is correct. Expects the session key as a parameter, and a block
143
133
  # that returns the expected value.
@@ -147,47 +137,45 @@ module Shoulda # :nodoc:
147
137
  # should_set_session(:user_id) { @user.id }
148
138
  # should_set_session(:message) { "Free stuff" }
149
139
  def should_set_session(key, &block)
140
+ ::ActiveSupport::Deprecation.warn("use: should set_session")
150
141
  matcher = set_session(key)
151
- should matcher.description do
152
- expected_value = instance_eval(&block)
153
- matcher = matcher.to(expected_value)
154
- assert_accepts matcher, @controller
155
- end
142
+ matcher = matcher.to(&block) if block
143
+ should matcher
156
144
  end
157
145
 
146
+ # Deprecated: use ActionController::Matchers#render_template instead.
147
+ #
158
148
  # Macro that creates a test asserting that the controller rendered the given template.
159
149
  # Example:
160
150
  #
161
151
  # should_render_template :new
162
152
  def should_render_template(template)
163
- should "render template #{template.inspect}" do
164
- assert_template template.to_s
165
- end
153
+ ::ActiveSupport::Deprecation.warn("use: should render_template")
154
+ should render_template(template)
166
155
  end
167
156
 
157
+ # Deprecated: use ActionController::Matchers#render_with_layout instead.
158
+ #
168
159
  # Macro that creates a test asserting that the controller rendered with the given layout.
169
160
  # Example:
170
161
  #
171
162
  # should_render_with_layout 'special'
172
163
  def should_render_with_layout(expected_layout = 'application')
173
- matcher = render_with_layout(expected_layout)
174
- if expected_layout
175
- should matcher.description do
176
- assert_accepts matcher, @controller
177
- end
178
- else
179
- should "render without layout" do
180
- assert_rejects matcher, @controller
181
- end
182
- end
164
+ ::ActiveSupport::Deprecation.warn("use: should render_with_layout")
165
+ should render_with_layout(expected_layout)
183
166
  end
184
167
 
168
+ # Deprecated: use ActionController::Matchers#render_with_layout instead.
169
+ #
185
170
  # Macro that creates a test asserting that the controller rendered without a layout.
186
171
  # Same as @should_render_with_layout false@
187
172
  def should_render_without_layout
188
- should_render_with_layout nil
173
+ ::ActiveSupport::Deprecation.warn("use: should_not render_with_layout")
174
+ should_not render_with_layout
189
175
  end
190
176
 
177
+ # Deprecated: use ActionController::Matchers#redirect_to instead.
178
+ #
191
179
  # Macro that creates a test asserting that the controller returned a
192
180
  # redirect to the given path. The passed description will be used when
193
181
  # generating a test name. Expects a block that returns the expected path
@@ -197,12 +185,12 @@ module Shoulda # :nodoc:
197
185
  #
198
186
  # should_redirect_to("the user's profile") { user_url(@user) }
199
187
  def should_redirect_to(description, &block)
200
- should "redirect to #{description}" do
201
- expected_url = instance_eval(&block)
202
- assert_redirected_to expected_url
203
- end
188
+ ::ActiveSupport::Deprecation.warn("use: should redirect_to")
189
+ should redirect_to(description, &block)
204
190
  end
205
191
 
192
+ # Deprecated: use ActionController::Matchers#route instead.
193
+ #
206
194
  # Macro that creates a routing test. It tries to use the given HTTP
207
195
  # +method+ on the given +path+, and asserts that it routes to the
208
196
  # given +options+.
@@ -225,15 +213,8 @@ module Shoulda # :nodoc:
225
213
  # :action => :show, :id => 1, :user_id => 1
226
214
  #
227
215
  def should_route(method, path, options)
228
- unless options[:controller]
229
- options[:controller] = self.name.gsub(/ControllerTest$/, '').tableize
230
- end
231
-
232
- matcher = route(method, path).to(options)
233
-
234
- should matcher.description do
235
- assert_accepts matcher.in_context(self), self
236
- end
216
+ ::ActiveSupport::Deprecation.warn("use: should route")
217
+ should route(method, path).to(options)
237
218
  end
238
219
  end
239
220
  end
@@ -6,6 +6,8 @@ require 'shoulda/action_controller/matchers/respond_with_matcher'
6
6
  require 'shoulda/action_controller/matchers/respond_with_content_type_matcher'
7
7
  require 'shoulda/action_controller/matchers/set_session_matcher'
8
8
  require 'shoulda/action_controller/matchers/route_matcher'
9
+ require 'shoulda/action_controller/matchers/redirect_to_matcher'
10
+ require 'shoulda/action_controller/matchers/render_template_matcher'
9
11
 
10
12
  module Shoulda # :nodoc:
11
13
  module ActionController # :nodoc:
@@ -30,13 +30,15 @@ module Shoulda # :nodoc:
30
30
  self
31
31
  end
32
32
 
33
- def with(expected_value)
33
+ def with(expected_value = nil, &block)
34
34
  @expected_value = expected_value
35
+ @expectation_block = block
35
36
  self
36
37
  end
37
38
 
38
39
  def matches?(controller)
39
40
  @controller = controller
41
+ @expected_value = @context.instance_eval(&@expectation_block) if @expectation_block
40
42
  assigned_value? && kind_of_expected_class? && equal_to_expected_value?
41
43
  end
42
44
 
@@ -48,6 +50,11 @@ module Shoulda # :nodoc:
48
50
  description
49
51
  end
50
52
 
53
+ def in_context(context)
54
+ @context = context
55
+ self
56
+ end
57
+
51
58
  private
52
59
 
53
60
  def assigned_value?
@@ -95,11 +102,7 @@ module Shoulda # :nodoc:
95
102
  end
96
103
 
97
104
  def assigned_value
98
- assigns[@variable]
99
- end
100
-
101
- def assigns
102
- @controller.response.template.assigns
105
+ @controller.instance_variable_get("@#{@variable}")
103
106
  end
104
107
 
105
108
  end
@@ -37,7 +37,8 @@ module Shoulda # :nodoc:
37
37
  private
38
38
 
39
39
  def filters_params?
40
- @controller.respond_to?(:filter_parameters)
40
+ @controller.respond_to?(:filter_parameters) ||
41
+ request.respond_to?(:filtered_parameters)
41
42
  end
42
43
 
43
44
  def filters_key?
@@ -45,11 +46,27 @@ module Shoulda # :nodoc:
45
46
  end
46
47
 
47
48
  def filtered_value
49
+ if request.respond_to?(:filtered_parameters)
50
+ filtered_request_value
51
+ else
52
+ filtered_controller_value
53
+ end
54
+ end
55
+
56
+ def filtered_controller_value
48
57
  filtered = @controller.send(:filter_parameters,
49
58
  @key.to_s => @key.to_s)
50
59
  filtered[@key.to_s]
51
60
  end
52
61
 
62
+ def filtered_request_value
63
+ request.env['action_dispatch.request.parameters'] = { @key.to_s => 'value' }
64
+ request.filtered_parameters[@key.to_s]
65
+ end
66
+
67
+ def request
68
+ @request ||= ::ActionController::TestRequest.new
69
+ end
53
70
  end
54
71
 
55
72
  end
@@ -0,0 +1,62 @@
1
+ module Shoulda # :nodoc:
2
+ module ActionController # :nodoc:
3
+ module Matchers
4
+
5
+ # Ensures a controller redirected to the given url.
6
+ #
7
+ # Example:
8
+ #
9
+ # it { should redirect_to('http://somewhere.com') }
10
+ # it { should redirect_to(users_path) }
11
+ def redirect_to(url_or_description, &block)
12
+ RedirectToMatcher.new(url_or_description, self, &block)
13
+ end
14
+
15
+ class RedirectToMatcher # :nodoc:
16
+
17
+ def initialize(url_or_description, context, &block)
18
+ if block
19
+ @url_block = block
20
+ @location = @url_or_description
21
+ else
22
+ @url = url_or_description
23
+ @location = @url
24
+ end
25
+ @context = context
26
+ end
27
+
28
+ def in_context(context)
29
+ @context = context
30
+ self
31
+ end
32
+
33
+ def matches?(controller)
34
+ @controller = controller
35
+ redirects_to_url?
36
+ end
37
+
38
+ attr_reader :failure_message, :negative_failure_message
39
+
40
+ def description
41
+ "redirect to #{@location}"
42
+ end
43
+
44
+ private
45
+
46
+ def redirects_to_url?
47
+ @url = @context.instance_eval(&@url_block) if @url_block
48
+ begin
49
+ @context.send(:assert_redirected_to, @url)
50
+ @negative_failure_message = "Didn't expect to redirect to #{@url}"
51
+ true
52
+ rescue Test::Unit::AssertionFailedError => error
53
+ @failure_message = error.message
54
+ false
55
+ end
56
+ end
57
+
58
+ end
59
+
60
+ end
61
+ end
62
+ end