shoulda 2.10.3 → 2.11.0

Sign up to get free protection for your applications and to get access to all the features.
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