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,39 +0,0 @@
1
- require 'shoulda/action_controller/matchers/assign_to_matcher'
2
- require 'shoulda/action_controller/matchers/filter_param_matcher'
3
- require 'shoulda/action_controller/matchers/set_the_flash_matcher'
4
- require 'shoulda/action_controller/matchers/render_with_layout_matcher'
5
- require 'shoulda/action_controller/matchers/respond_with_matcher'
6
- require 'shoulda/action_controller/matchers/respond_with_content_type_matcher'
7
- require 'shoulda/action_controller/matchers/set_session_matcher'
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'
11
-
12
- module Shoulda # :nodoc:
13
- module ActionController # :nodoc:
14
-
15
- # By using the macro helpers you can quickly and easily create concise and
16
- # easy to read test suites.
17
- #
18
- # This code segment:
19
- #
20
- # describe UsersController, "on GET to show with a valid id" do
21
- # before(:each) do
22
- # get :show, :id => User.first.to_param
23
- # end
24
- #
25
- # it { should assign_to(:user) }
26
- # it { should respond_with(:success) }
27
- # it { should render_template(:show) }
28
- # it { should not_set_the_flash) }
29
- #
30
- # it "should do something else really cool" do
31
- # assigns[:user].id.should == 1
32
- # end
33
- # end
34
- #
35
- # Would produce 5 tests for the show action
36
- module Matchers
37
- end
38
- end
39
- end
@@ -1,112 +0,0 @@
1
- module Shoulda # :nodoc:
2
- module ActionController # :nodoc:
3
- module Matchers
4
-
5
- # Ensures that the controller assigned to the named instance variable.
6
- #
7
- # Options:
8
- # * <tt>with_kind_of</tt> - The expected class of the instance variable
9
- # being checked.
10
- # * <tt>with</tt> - The value that should be assigned.
11
- #
12
- # Example:
13
- #
14
- # it { should assign_to(:user) }
15
- # it { should_not assign_to(:user) }
16
- # it { should assign_to(:user).with_kind_of(User) }
17
- # it { should assign_to(:user).with(@user) }
18
- def assign_to(variable)
19
- AssignToMatcher.new(variable)
20
- end
21
-
22
- class AssignToMatcher # :nodoc:
23
-
24
- def initialize(variable)
25
- @variable = variable.to_s
26
- end
27
-
28
- def with_kind_of(expected_class)
29
- @expected_class = expected_class
30
- self
31
- end
32
-
33
- def with(expected_value = nil, &block)
34
- @expected_value = expected_value
35
- @expectation_block = block
36
- self
37
- end
38
-
39
- def matches?(controller)
40
- @controller = controller
41
- @expected_value = @context.instance_eval(&@expectation_block) if @expectation_block
42
- assigned_value? && kind_of_expected_class? && equal_to_expected_value?
43
- end
44
-
45
- attr_reader :failure_message, :negative_failure_message
46
-
47
- def description
48
- description = "assign @#{@variable}"
49
- description << " with a kind of #{@expected_class}" if @expected_class
50
- description
51
- end
52
-
53
- def in_context(context)
54
- @context = context
55
- self
56
- end
57
-
58
- private
59
-
60
- def assigned_value?
61
- if assigned_value.nil?
62
- @failure_message =
63
- "Expected action to assign a value for @#{@variable}"
64
- false
65
- else
66
- @negative_failure_message =
67
- "Didn't expect action to assign a value for @#{@variable}, " <<
68
- "but it was assigned to #{assigned_value.inspect}"
69
- true
70
- end
71
- end
72
-
73
- def kind_of_expected_class?
74
- return true unless @expected_class
75
- if assigned_value.kind_of?(@expected_class)
76
- @negative_failure_message =
77
- "Didn't expect action to assign a kind of #{@expected_class} " <<
78
- "for #{@variable}, but got one anyway"
79
- true
80
- else
81
- @failure_message =
82
- "Expected action to assign a kind of #{@expected_class} " <<
83
- "for #{@variable}, but got #{@variable.inspect} " <<
84
- "(#{@variable.class.name})"
85
- false
86
- end
87
- end
88
-
89
- def equal_to_expected_value?
90
- return true unless @expected_value
91
- if @expected_value == assigned_value
92
- @negative_failure_message =
93
- "Didn't expect action to assign #{@expected_value.inspect} " <<
94
- "for #{@variable}, but got it anyway"
95
- true
96
- else
97
- @failure_message =
98
- "Expected action to assign #{@expected_value.inspect} " <<
99
- "for #{@variable}, but got #{assigned_value.inspect}"
100
- false
101
- end
102
- end
103
-
104
- def assigned_value
105
- @controller.instance_variable_get("@#{@variable}")
106
- end
107
-
108
- end
109
-
110
- end
111
- end
112
- end
@@ -1,74 +0,0 @@
1
- module Shoulda # :nodoc:
2
- module ActionController # :nodoc:
3
- module Matchers
4
-
5
- # Ensures that filter_parameter_logging is set for the specified key.
6
- #
7
- # Example:
8
- #
9
- # it { should filter_param(:password) }
10
- def filter_param(key)
11
- FilterParamMatcher.new(key)
12
- end
13
-
14
- class FilterParamMatcher # :nodoc:
15
-
16
- def initialize(key)
17
- @key = key.to_s
18
- end
19
-
20
- def matches?(controller)
21
- @controller = controller
22
- filters_params? && filters_key?
23
- end
24
-
25
- def failure_message
26
- "Expected #{@key} to be filtered"
27
- end
28
-
29
- def negative_failure_message
30
- "Did not expect #{@key} to be filtered"
31
- end
32
-
33
- def description
34
- "filter #{@key}"
35
- end
36
-
37
- private
38
-
39
- def filters_params?
40
- @controller.respond_to?(:filter_parameters) ||
41
- request.respond_to?(:filtered_parameters)
42
- end
43
-
44
- def filters_key?
45
- filtered_value == '[FILTERED]'
46
- end
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
57
- filtered = @controller.send(:filter_parameters,
58
- @key.to_s => @key.to_s)
59
- filtered[@key.to_s]
60
- end
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
70
- end
71
-
72
- end
73
- end
74
- end
@@ -1,62 +0,0 @@
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
@@ -1,54 +0,0 @@
1
- module Shoulda # :nodoc:
2
- module ActionController # :nodoc:
3
- module Matchers
4
-
5
- # Ensures a controller rendered the given template.
6
- #
7
- # Example:
8
- #
9
- # it { should render_template(:show) }
10
- def render_template(template)
11
- RenderTemplateMatcher.new(template, self)
12
- end
13
-
14
- class RenderTemplateMatcher # :nodoc:
15
-
16
- def initialize(template, context)
17
- @template = template.to_s
18
- @context = context
19
- end
20
-
21
- def matches?(controller)
22
- @controller = controller
23
- renders_template?
24
- end
25
-
26
- attr_reader :failure_message, :negative_failure_message
27
-
28
- def description
29
- "render template #{@template}"
30
- end
31
-
32
- def in_context(context)
33
- @context = context
34
- self
35
- end
36
-
37
- private
38
-
39
- def renders_template?
40
- begin
41
- @context.send(:assert_template, @template)
42
- @negative_failure_message = "Didn't expect to render #{@template}"
43
- true
44
- rescue Test::Unit::AssertionFailedError => error
45
- @failure_message = error.message
46
- false
47
- end
48
- end
49
-
50
- end
51
-
52
- end
53
- end
54
- end
@@ -1,99 +0,0 @@
1
- module Shoulda # :nodoc:
2
- module ActionController # :nodoc:
3
- module Matchers
4
-
5
- # Ensures that the controller rendered with the given layout.
6
- #
7
- # Example:
8
- #
9
- # it { should render_with_layout }
10
- # it { should render_with_layout(:special) }
11
- # it { should_not render_with_layout }
12
- def render_with_layout(expected_layout = nil)
13
- RenderWithLayout.new(expected_layout)
14
- end
15
-
16
- class RenderWithLayout # :nodoc:
17
-
18
- def initialize(expected_layout)
19
- @expected_layout = expected_layout.to_s unless expected_layout.nil?
20
- end
21
-
22
- # Used to provide access to layouts recorded by
23
- # ActionController::TemplateAssertions in Rails 3
24
- def in_context(context)
25
- @context = context
26
- self
27
- end
28
-
29
- def matches?(controller)
30
- @controller = controller
31
- rendered_with_layout? && rendered_with_expected_layout?
32
- end
33
-
34
- def failure_message
35
- "Expected #{expectation}, but #{result}"
36
- end
37
-
38
- def negative_failure_message
39
- "Did not expect #{expectation}, but #{result}"
40
- end
41
-
42
- def description
43
- description = "render with "
44
- if @expected_layout.nil?
45
- description << "a layout"
46
- else
47
- description << "the #{@expected_layout.inspect} layout"
48
- end
49
- description
50
- end
51
-
52
- private
53
-
54
- def rendered_with_layout?
55
- !rendered_layouts.empty?
56
- end
57
-
58
- def rendered_with_expected_layout?
59
- return true if @expected_layout.nil?
60
- rendered_layouts.include?(@expected_layout)
61
- end
62
-
63
- def rendered_layouts
64
- if recorded_layouts
65
- recorded_layouts.keys.compact.map { |layout| layout.sub(%r{^layouts/}, '') }
66
- else
67
- layout = @controller.response.layout
68
- if layout.nil?
69
- []
70
- else
71
- [layout.split('/').last]
72
- end
73
- end
74
- end
75
-
76
- def recorded_layouts
77
- if @context
78
- @context.instance_variable_get('@layouts')
79
- end
80
- end
81
-
82
- def expectation
83
- "to #{description}"
84
- end
85
-
86
- def result
87
- if rendered_with_layout?
88
- "rendered with " <<
89
- rendered_layouts.map { |layout| layout.inspect }.join(", ")
90
- else
91
- "rendered without a layout"
92
- end
93
- end
94
-
95
- end
96
-
97
- end
98
- end
99
- end
@@ -1,74 +0,0 @@
1
- module Shoulda # :nodoc:
2
- module ActionController # :nodoc:
3
- module Matchers
4
-
5
- # Ensures a controller responded with expected 'response' content type.
6
- #
7
- # You can pass an explicit content type such as 'application/rss+xml'
8
- # or its symbolic equivalent :rss
9
- # or a regular expression such as /rss/
10
- #
11
- # Example:
12
- #
13
- # it { should respond_with_content_type(:xml) }
14
- # it { should respond_with_content_type(:csv) }
15
- # it { should respond_with_content_type(:atom) }
16
- # it { should respond_with_content_type(:yaml) }
17
- # it { should respond_with_content_type(:text) }
18
- # it { should respond_with_content_type('application/rss+xml') }
19
- # it { should respond_with_content_type(/json/) }
20
- def respond_with_content_type(content_type)
21
- RespondWithContentTypeMatcher.new(content_type)
22
- end
23
-
24
- class RespondWithContentTypeMatcher # :nodoc:
25
-
26
- def initialize(content_type)
27
- @content_type = if content_type.is_a?(Symbol)
28
- lookup_by_extension(content_type)
29
- else
30
- content_type
31
- end
32
- end
33
-
34
- def description
35
- "respond with content type of #{@content_type}"
36
- end
37
-
38
- def matches?(controller)
39
- @controller = controller
40
- if @content_type.is_a?(Regexp)
41
- response_content_type =~ @content_type
42
- else
43
- response_content_type == @content_type
44
- end
45
- end
46
-
47
- def failure_message
48
- "Expected #{expectation}"
49
- end
50
-
51
- def negative_failure_message
52
- "Did not expect #{expectation}"
53
- end
54
-
55
- protected
56
-
57
- def response_content_type
58
- @controller.response.content_type.to_s
59
- end
60
-
61
- def lookup_by_extension(extension)
62
- Mime::Type.lookup_by_extension(extension.to_s).to_s
63
- end
64
-
65
- def expectation
66
- "content type to be #{@content_type}, " <<
67
- "but was #{response_content_type}"
68
- end
69
-
70
- end
71
-
72
- end
73
- end
74
- end