faster_shoulda 2.11.3

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 (259) hide show
  1. data/CONTRIBUTION_GUIDELINES.rdoc +10 -0
  2. data/MIT-LICENSE +22 -0
  3. data/README.rdoc +154 -0
  4. data/Rakefile +74 -0
  5. data/bin/convert_to_should_syntax +42 -0
  6. data/lib/shoulda/action_controller/macros.rb +221 -0
  7. data/lib/shoulda/action_controller/matchers/assign_to_matcher.rb +114 -0
  8. data/lib/shoulda/action_controller/matchers/filter_param_matcher.rb +74 -0
  9. data/lib/shoulda/action_controller/matchers/redirect_to_matcher.rb +62 -0
  10. data/lib/shoulda/action_controller/matchers/render_template_matcher.rb +54 -0
  11. data/lib/shoulda/action_controller/matchers/render_with_layout_matcher.rb +99 -0
  12. data/lib/shoulda/action_controller/matchers/respond_with_content_type_matcher.rb +74 -0
  13. data/lib/shoulda/action_controller/matchers/respond_with_matcher.rb +85 -0
  14. data/lib/shoulda/action_controller/matchers/route_matcher.rb +93 -0
  15. data/lib/shoulda/action_controller/matchers/set_session_matcher.rb +98 -0
  16. data/lib/shoulda/action_controller/matchers/set_the_flash_matcher.rb +100 -0
  17. data/lib/shoulda/action_controller/matchers.rb +39 -0
  18. data/lib/shoulda/action_controller.rb +34 -0
  19. data/lib/shoulda/action_mailer/assertions.rb +42 -0
  20. data/lib/shoulda/action_mailer/matchers/have_sent_email.rb +110 -0
  21. data/lib/shoulda/action_mailer/matchers.rb +22 -0
  22. data/lib/shoulda/action_mailer.rb +13 -0
  23. data/lib/shoulda/active_record/assertions.rb +69 -0
  24. data/lib/shoulda/active_record/helpers.rb +32 -0
  25. data/lib/shoulda/active_record/macros.rb +457 -0
  26. data/lib/shoulda/active_record/matchers/allow_mass_assignment_of_matcher.rb +83 -0
  27. data/lib/shoulda/active_record/matchers/allow_value_matcher.rb +110 -0
  28. data/lib/shoulda/active_record/matchers/association_matcher.rb +226 -0
  29. data/lib/shoulda/active_record/matchers/ensure_inclusion_of_matcher.rb +87 -0
  30. data/lib/shoulda/active_record/matchers/ensure_length_of_matcher.rb +141 -0
  31. data/lib/shoulda/active_record/matchers/have_db_column_matcher.rb +169 -0
  32. data/lib/shoulda/active_record/matchers/have_db_index_matcher.rb +112 -0
  33. data/lib/shoulda/active_record/matchers/have_readonly_attribute_matcher.rb +59 -0
  34. data/lib/shoulda/active_record/matchers/validate_acceptance_of_matcher.rb +41 -0
  35. data/lib/shoulda/active_record/matchers/validate_format_of_matcher.rb +65 -0
  36. data/lib/shoulda/active_record/matchers/validate_numericality_of_matcher.rb +39 -0
  37. data/lib/shoulda/active_record/matchers/validate_presence_of_matcher.rb +60 -0
  38. data/lib/shoulda/active_record/matchers/validate_uniqueness_of_matcher.rb +148 -0
  39. data/lib/shoulda/active_record/matchers/validation_matcher.rb +56 -0
  40. data/lib/shoulda/active_record/matchers.rb +42 -0
  41. data/lib/shoulda/active_record.rb +16 -0
  42. data/lib/shoulda/assertions.rb +79 -0
  43. data/lib/shoulda/autoload_macros.rb +46 -0
  44. data/lib/shoulda/context.rb +537 -0
  45. data/lib/shoulda/helpers.rb +8 -0
  46. data/lib/shoulda/integrations/rspec.rb +13 -0
  47. data/lib/shoulda/integrations/rspec2.rb +22 -0
  48. data/lib/shoulda/integrations/test_unit.rb +22 -0
  49. data/lib/shoulda/macros.rb +161 -0
  50. data/lib/shoulda/private_helpers.rb +13 -0
  51. data/lib/shoulda/proc_extensions.rb +14 -0
  52. data/lib/shoulda/rails.rb +8 -0
  53. data/lib/shoulda/tasks/list_tests.rake +29 -0
  54. data/lib/shoulda/tasks/yaml_to_shoulda.rake +28 -0
  55. data/lib/shoulda/tasks.rb +3 -0
  56. data/lib/shoulda/version.rb +4 -0
  57. data/lib/shoulda.rb +9 -0
  58. data/rails/init.rb +8 -0
  59. data/test/README +36 -0
  60. data/test/fail_macros.rb +55 -0
  61. data/test/fixtures/addresses.yml +3 -0
  62. data/test/fixtures/friendships.yml +0 -0
  63. data/test/fixtures/posts.yml +5 -0
  64. data/test/fixtures/products.yml +0 -0
  65. data/test/fixtures/taggings.yml +0 -0
  66. data/test/fixtures/tags.yml +9 -0
  67. data/test/fixtures/users.yml +6 -0
  68. data/test/functional/posts_controller_test.rb +121 -0
  69. data/test/functional/users_controller_test.rb +19 -0
  70. data/test/hello_should.rb +37 -0
  71. data/test/matchers/action_mailer/have_sent_email_test.rb +76 -0
  72. data/test/matchers/active_record/allow_mass_assignment_of_matcher_test.rb +74 -0
  73. data/test/matchers/active_record/allow_value_matcher_test.rb +64 -0
  74. data/test/matchers/active_record/association_matcher_test.rb +263 -0
  75. data/test/matchers/active_record/ensure_inclusion_of_matcher_test.rb +81 -0
  76. data/test/matchers/active_record/ensure_length_of_matcher_test.rb +158 -0
  77. data/test/matchers/active_record/have_db_column_matcher_test.rb +169 -0
  78. data/test/matchers/active_record/have_db_index_matcher_test.rb +91 -0
  79. data/test/matchers/active_record/have_readonly_attributes_matcher_test.rb +29 -0
  80. data/test/matchers/active_record/validate_acceptance_of_matcher_test.rb +44 -0
  81. data/test/matchers/active_record/validate_format_of_matcher_test.rb +39 -0
  82. data/test/matchers/active_record/validate_numericality_of_matcher_test.rb +52 -0
  83. data/test/matchers/active_record/validate_presence_of_matcher_test.rb +86 -0
  84. data/test/matchers/active_record/validate_uniqueness_of_matcher_test.rb +147 -0
  85. data/test/matchers/controller/assign_to_matcher_test.rb +55 -0
  86. data/test/matchers/controller/filter_param_matcher_test.rb +40 -0
  87. data/test/matchers/controller/redirect_to_matcher_test.rb +37 -0
  88. data/test/matchers/controller/render_template_matcher_test.rb +37 -0
  89. data/test/matchers/controller/render_with_layout_matcher_test.rb +47 -0
  90. data/test/matchers/controller/respond_with_content_type_matcher_test.rb +32 -0
  91. data/test/matchers/controller/respond_with_matcher_test.rb +96 -0
  92. data/test/matchers/controller/route_matcher_test.rb +75 -0
  93. data/test/matchers/controller/set_session_matcher_test.rb +48 -0
  94. data/test/matchers/controller/set_the_flash_matcher.rb +95 -0
  95. data/test/other/autoload_macro_test.rb +18 -0
  96. data/test/other/context_test.rb +372 -0
  97. data/test/other/convert_to_should_syntax_test.rb +63 -0
  98. data/test/other/helpers_test.rb +317 -0
  99. data/test/other/private_helpers_test.rb +32 -0
  100. data/test/other/should_test.rb +271 -0
  101. data/test/rails2_model_builder.rb +130 -0
  102. data/test/rails2_root/app/controllers/application_controller.rb +22 -0
  103. data/test/rails2_root/app/controllers/posts_controller.rb +87 -0
  104. data/test/rails2_root/app/controllers/users_controller.rb +84 -0
  105. data/test/rails2_root/app/helpers/application_helper.rb +3 -0
  106. data/test/rails2_root/app/helpers/posts_helper.rb +2 -0
  107. data/test/rails2_root/app/helpers/users_helper.rb +2 -0
  108. data/test/rails2_root/app/models/address.rb +7 -0
  109. data/test/rails2_root/app/models/flea.rb +11 -0
  110. data/test/rails2_root/app/models/friendship.rb +4 -0
  111. data/test/rails2_root/app/models/notifier.rb +8 -0
  112. data/test/rails2_root/app/models/pets/cat.rb +7 -0
  113. data/test/rails2_root/app/models/pets/dog.rb +10 -0
  114. data/test/rails2_root/app/models/post.rb +12 -0
  115. data/test/rails2_root/app/models/product.rb +12 -0
  116. data/test/rails2_root/app/models/profile.rb +2 -0
  117. data/test/rails2_root/app/models/registration.rb +2 -0
  118. data/test/rails2_root/app/models/tag.rb +8 -0
  119. data/test/rails2_root/app/models/tagging.rb +4 -0
  120. data/test/rails2_root/app/models/treat.rb +3 -0
  121. data/test/rails2_root/app/models/user.rb +32 -0
  122. data/test/rails2_root/app/views/layouts/posts.rhtml +19 -0
  123. data/test/rails2_root/app/views/layouts/users.rhtml +17 -0
  124. data/test/rails2_root/app/views/layouts/wide.html.erb +1 -0
  125. data/test/rails2_root/app/views/notifier/the_email.html.erb +1 -0
  126. data/test/rails2_root/app/views/posts/edit.rhtml +27 -0
  127. data/test/rails2_root/app/views/posts/index.rhtml +25 -0
  128. data/test/rails2_root/app/views/posts/new.rhtml +26 -0
  129. data/test/rails2_root/app/views/posts/show.rhtml +18 -0
  130. data/test/rails2_root/app/views/users/edit.rhtml +22 -0
  131. data/test/rails2_root/app/views/users/index.rhtml +22 -0
  132. data/test/rails2_root/app/views/users/new.rhtml +21 -0
  133. data/test/rails2_root/app/views/users/show.rhtml +13 -0
  134. data/test/rails2_root/config/boot.rb +110 -0
  135. data/test/rails2_root/config/database.yml +4 -0
  136. data/test/rails2_root/config/environment.rb +17 -0
  137. data/test/rails2_root/config/environments/test.rb +23 -0
  138. data/test/rails2_root/config/initializers/new_rails_defaults.rb +15 -0
  139. data/test/rails2_root/config/initializers/shoulda.rb +8 -0
  140. data/test/rails2_root/config/routes.rb +6 -0
  141. data/test/rails2_root/db/migrate/001_create_users.rb +19 -0
  142. data/test/rails2_root/db/migrate/002_create_posts.rb +13 -0
  143. data/test/rails2_root/db/migrate/003_create_taggings.rb +12 -0
  144. data/test/rails2_root/db/migrate/004_create_tags.rb +11 -0
  145. data/test/rails2_root/db/migrate/005_create_dogs.rb +12 -0
  146. data/test/rails2_root/db/migrate/006_create_addresses.rb +14 -0
  147. data/test/rails2_root/db/migrate/007_create_fleas.rb +11 -0
  148. data/test/rails2_root/db/migrate/008_create_dogs_fleas.rb +12 -0
  149. data/test/rails2_root/db/migrate/009_create_products.rb +17 -0
  150. data/test/rails2_root/db/migrate/010_create_friendships.rb +14 -0
  151. data/test/rails2_root/db/migrate/011_create_treats.rb +12 -0
  152. data/test/rails2_root/db/migrate/20090506203502_create_profiles.rb +12 -0
  153. data/test/rails2_root/db/migrate/20090506203536_create_registrations.rb +14 -0
  154. data/test/rails2_root/db/migrate/20090513104502_create_cats.rb +12 -0
  155. data/test/rails2_root/db/schema.rb +0 -0
  156. data/test/rails2_root/public/404.html +30 -0
  157. data/test/rails2_root/public/422.html +30 -0
  158. data/test/rails2_root/public/500.html +30 -0
  159. data/test/rails2_root/script/console +3 -0
  160. data/test/rails2_root/script/generate +3 -0
  161. data/test/rails2_root/test/shoulda_macros/custom_macro.rb +6 -0
  162. data/test/rails2_root/vendor/gems/gem_with_macro-0.0.1/shoulda_macros/gem_macro.rb +6 -0
  163. data/test/rails2_root/vendor/plugins/plugin_with_macro/shoulda_macros/plugin_macro.rb +6 -0
  164. data/test/rails2_test_helper.rb +6 -0
  165. data/test/rails3_model_builder.rb +118 -0
  166. data/test/rails3_root/Gemfile +28 -0
  167. data/test/rails3_root/README +244 -0
  168. data/test/rails3_root/Rakefile +10 -0
  169. data/test/rails3_root/app/controllers/application_controller.rb +22 -0
  170. data/test/rails3_root/app/controllers/posts_controller.rb +87 -0
  171. data/test/rails3_root/app/controllers/users_controller.rb +82 -0
  172. data/test/rails3_root/app/helpers/application_helper.rb +2 -0
  173. data/test/rails3_root/app/models/address.rb +7 -0
  174. data/test/rails3_root/app/models/flea.rb +11 -0
  175. data/test/rails3_root/app/models/friendship.rb +4 -0
  176. data/test/rails3_root/app/models/notifier.rb +8 -0
  177. data/test/rails3_root/app/models/pets/cat.rb +7 -0
  178. data/test/rails3_root/app/models/pets/dog.rb +10 -0
  179. data/test/rails3_root/app/models/post.rb +12 -0
  180. data/test/rails3_root/app/models/product.rb +12 -0
  181. data/test/rails3_root/app/models/profile.rb +2 -0
  182. data/test/rails3_root/app/models/registration.rb +2 -0
  183. data/test/rails3_root/app/models/tag.rb +8 -0
  184. data/test/rails3_root/app/models/tagging.rb +4 -0
  185. data/test/rails3_root/app/models/treat.rb +3 -0
  186. data/test/rails3_root/app/models/user.rb +32 -0
  187. data/test/rails3_root/app/views/layouts/application.html.erb +14 -0
  188. data/test/rails3_root/app/views/layouts/posts.rhtml +19 -0
  189. data/test/rails3_root/app/views/layouts/users.rhtml +17 -0
  190. data/test/rails3_root/app/views/layouts/wide.html.erb +1 -0
  191. data/test/rails3_root/app/views/notifier/the_email.html.erb +1 -0
  192. data/test/rails3_root/app/views/posts/edit.rhtml +27 -0
  193. data/test/rails3_root/app/views/posts/index.rhtml +25 -0
  194. data/test/rails3_root/app/views/posts/new.rhtml +24 -0
  195. data/test/rails3_root/app/views/posts/show.rhtml +18 -0
  196. data/test/rails3_root/app/views/users/edit.rhtml +22 -0
  197. data/test/rails3_root/app/views/users/index.rhtml +22 -0
  198. data/test/rails3_root/app/views/users/new.rhtml +21 -0
  199. data/test/rails3_root/app/views/users/show.rhtml +13 -0
  200. data/test/rails3_root/config/application.rb +46 -0
  201. data/test/rails3_root/config/boot.rb +6 -0
  202. data/test/rails3_root/config/database.yml +22 -0
  203. data/test/rails3_root/config/environment.rb +5 -0
  204. data/test/rails3_root/config/environments/development.rb +19 -0
  205. data/test/rails3_root/config/environments/production.rb +42 -0
  206. data/test/rails3_root/config/environments/test.rb +32 -0
  207. data/test/rails3_root/config/initializers/backtrace_silencers.rb +7 -0
  208. data/test/rails3_root/config/initializers/inflections.rb +10 -0
  209. data/test/rails3_root/config/initializers/mime_types.rb +5 -0
  210. data/test/rails3_root/config/initializers/secret_token.rb +7 -0
  211. data/test/rails3_root/config/initializers/session_store.rb +8 -0
  212. data/test/rails3_root/config/locales/en.yml +5 -0
  213. data/test/rails3_root/config/routes.rb +4 -0
  214. data/test/rails3_root/config.ru +4 -0
  215. data/test/rails3_root/db/migrate/001_create_users.rb +19 -0
  216. data/test/rails3_root/db/migrate/002_create_posts.rb +13 -0
  217. data/test/rails3_root/db/migrate/003_create_taggings.rb +12 -0
  218. data/test/rails3_root/db/migrate/004_create_tags.rb +11 -0
  219. data/test/rails3_root/db/migrate/005_create_dogs.rb +12 -0
  220. data/test/rails3_root/db/migrate/006_create_addresses.rb +14 -0
  221. data/test/rails3_root/db/migrate/007_create_fleas.rb +11 -0
  222. data/test/rails3_root/db/migrate/008_create_dogs_fleas.rb +12 -0
  223. data/test/rails3_root/db/migrate/009_create_products.rb +17 -0
  224. data/test/rails3_root/db/migrate/010_create_friendships.rb +14 -0
  225. data/test/rails3_root/db/migrate/011_create_treats.rb +12 -0
  226. data/test/rails3_root/db/migrate/20090506203502_create_profiles.rb +12 -0
  227. data/test/rails3_root/db/migrate/20090506203536_create_registrations.rb +14 -0
  228. data/test/rails3_root/db/migrate/20090513104502_create_cats.rb +12 -0
  229. data/test/rails3_root/db/seeds.rb +7 -0
  230. data/test/rails3_root/public/404.html +26 -0
  231. data/test/rails3_root/public/422.html +26 -0
  232. data/test/rails3_root/public/500.html +26 -0
  233. data/test/rails3_root/public/favicon.ico +0 -0
  234. data/test/rails3_root/public/images/rails.png +0 -0
  235. data/test/rails3_root/public/index.html +279 -0
  236. data/test/rails3_root/public/javascripts/application.js +2 -0
  237. data/test/rails3_root/public/javascripts/controls.js +965 -0
  238. data/test/rails3_root/public/javascripts/dragdrop.js +974 -0
  239. data/test/rails3_root/public/javascripts/effects.js +1123 -0
  240. data/test/rails3_root/public/javascripts/prototype.js +4874 -0
  241. data/test/rails3_root/public/javascripts/rails.js +118 -0
  242. data/test/rails3_root/public/robots.txt +5 -0
  243. data/test/rails3_root/script/rails +9 -0
  244. data/test/rails3_root/test/performance/browsing_test.rb +9 -0
  245. data/test/rails3_root/test/test_helper.rb +13 -0
  246. data/test/rails3_test_helper.rb +6 -0
  247. data/test/rspec_test.rb +207 -0
  248. data/test/test_helper.rb +36 -0
  249. data/test/unit/address_test.rb +10 -0
  250. data/test/unit/cat_test.rb +7 -0
  251. data/test/unit/dog_test.rb +9 -0
  252. data/test/unit/flea_test.rb +14 -0
  253. data/test/unit/friendship_test.rb +6 -0
  254. data/test/unit/post_test.rb +15 -0
  255. data/test/unit/product_test.rb +23 -0
  256. data/test/unit/tag_test.rb +11 -0
  257. data/test/unit/tagging_test.rb +6 -0
  258. data/test/unit/user_test.rb +46 -0
  259. metadata +325 -0
@@ -0,0 +1,147 @@
1
+ require 'test_helper'
2
+
3
+ class ValidateUniquenessOfMatcherTest < ActiveSupport::TestCase # :nodoc:
4
+
5
+ context "a unique attribute" do
6
+ setup do
7
+ @model = define_model(:example, :attr => :string,
8
+ :other => :integer) do
9
+ validates_uniqueness_of :attr
10
+ end.new
11
+ end
12
+
13
+ context "with an existing value" do
14
+ setup do
15
+ @existing = Example.create!(:attr => 'value', :other => 1)
16
+ end
17
+
18
+ should "require a unique value for that attribute" do
19
+ assert_accepts validate_uniqueness_of(:attr), @model
20
+ end
21
+
22
+ should "pass when the subject is an existing record" do
23
+ assert_accepts validate_uniqueness_of(:attr), @existing
24
+ end
25
+
26
+ should "fail when a scope is specified" do
27
+ assert_rejects validate_uniqueness_of(:attr).scoped_to(:other), @model
28
+ end
29
+ end
30
+
31
+ context "without an existing value" do
32
+ setup do
33
+ assert_nil Example.find(:first)
34
+ @matcher = validate_uniqueness_of(:attr)
35
+ end
36
+
37
+ should "fail to require a unique value" do
38
+ assert_rejects @matcher, @model
39
+ end
40
+
41
+ should "alert the tester that an existing value is not present" do
42
+ @matcher.matches?(@model)
43
+ assert @matcher.negative_failure_message =~ /^Can't find first .*/
44
+ end
45
+ end
46
+ end
47
+
48
+ context "a unique attribute with a custom error and an existing value" do
49
+ setup do
50
+ @model = define_model(:example, :attr => :string) do
51
+ validates_uniqueness_of :attr, :message => 'Bad value'
52
+ end.new
53
+ Example.create!
54
+ end
55
+
56
+ should "fail when checking the default message" do
57
+ assert_rejects validate_uniqueness_of(:attr), @model
58
+ end
59
+
60
+ should "fail when checking a message that doesn't match" do
61
+ assert_rejects validate_uniqueness_of(:attr).with_message(/abc/i), @model
62
+ end
63
+
64
+ should "pass when checking a message that matches" do
65
+ assert_accepts validate_uniqueness_of(:attr).with_message(/bad/i), @model
66
+ end
67
+ end
68
+
69
+ context "a scoped unique attribute with an existing value" do
70
+ setup do
71
+ @model = define_model(:example, :attr => :string,
72
+ :scope1 => :integer,
73
+ :scope2 => :integer) do
74
+ validates_uniqueness_of :attr, :scope => [:scope1, :scope2]
75
+ end.new
76
+ @existing = Example.create!(:attr => 'value', :scope1 => 1, :scope2 => 2)
77
+ end
78
+
79
+ should "pass when the correct scope is specified" do
80
+ assert_accepts validate_uniqueness_of(:attr).scoped_to(:scope1, :scope2),
81
+ @model
82
+ end
83
+
84
+ should "pass when the subject is an existing record" do
85
+ assert_accepts validate_uniqueness_of(:attr).scoped_to(:scope1, :scope2),
86
+ @existing
87
+ end
88
+
89
+ should "fail when a different scope is specified" do
90
+ assert_rejects validate_uniqueness_of(:attr).scoped_to(:scope1), @model
91
+ end
92
+
93
+ should "fail when no scope is specified" do
94
+ assert_rejects validate_uniqueness_of(:attr), @model
95
+ end
96
+
97
+ should "fail when a non-existent attribute is specified as a scope" do
98
+ assert_rejects validate_uniqueness_of(:attr).scoped_to(:fake), @model
99
+ end
100
+ end
101
+
102
+ context "a non-unique attribute with an existing value" do
103
+ setup do
104
+ @model = define_model(:example, :attr => :string).new
105
+ Example.create!(:attr => 'value')
106
+ end
107
+
108
+ should "not require a unique value for that attribute" do
109
+ assert_rejects validate_uniqueness_of(:attr), @model
110
+ end
111
+ end
112
+
113
+ context "a case sensitive unique attribute with an existing value" do
114
+ setup do
115
+ @model = define_model(:example, :attr => :string) do
116
+ validates_uniqueness_of :attr, :case_sensitive => true
117
+ end.new
118
+ Example.create!(:attr => 'value')
119
+ end
120
+
121
+ should "not require a unique, case-insensitive value for that attribute" do
122
+ assert_rejects validate_uniqueness_of(:attr).case_insensitive, @model
123
+ end
124
+
125
+ should "require a unique, case-sensitive value for that attribute" do
126
+ assert_accepts validate_uniqueness_of(:attr), @model
127
+ end
128
+ end
129
+
130
+ context "a case sensitive unique integer attribute with an existing value" do
131
+ setup do
132
+ @model = define_model(:example, :attr => :integer) do
133
+ validates_uniqueness_of :attr, :case_sensitive => true
134
+ end.new
135
+ Example.create!(:attr => 'value')
136
+ end
137
+
138
+ should "require a unique, case-insensitive value for that attribute" do
139
+ assert_accepts validate_uniqueness_of(:attr).case_insensitive, @model
140
+ end
141
+
142
+ should "require a unique, case-sensitive value for that attribute" do
143
+ assert_accepts validate_uniqueness_of(:attr), @model
144
+ end
145
+ end
146
+
147
+ end
@@ -0,0 +1,55 @@
1
+ require 'test_helper'
2
+
3
+ class AssignToMatcherTest < ActionController::TestCase # :nodoc:
4
+
5
+ context "a controller that assigns to an instance variable" do
6
+ setup do
7
+ @controller = build_response { @var = 'value' }
8
+ end
9
+
10
+ should "accept assigning to that variable" do
11
+ assert_accepts assign_to(:var), @controller
12
+ end
13
+
14
+ should "accept assigning to that variable with the correct class" do
15
+ assert_accepts assign_to(:var).with_kind_of(String), @controller
16
+ end
17
+
18
+ should "reject assigning to that variable with another class" do
19
+ assert_rejects assign_to(:var).with_kind_of(Fixnum), @controller
20
+ end
21
+
22
+ should "accept assigning the correct value to that variable" do
23
+ assert_accepts assign_to(:var).with('value'), @controller
24
+ end
25
+
26
+ should "reject assigning another value to that variable" do
27
+ assert_rejects assign_to(:var).with('other'), @controller
28
+ end
29
+
30
+ should "reject assigning to another variable" do
31
+ assert_rejects assign_to(:other), @controller
32
+ end
33
+
34
+ should "accept assigning to the same value in the test context" do
35
+ @expected = 'value'
36
+ assert_accepts assign_to(:var).with { @expected }, @controller
37
+ end
38
+
39
+ should "reject assigning to the another value in the test context" do
40
+ @expected = 'other'
41
+ assert_rejects assign_to(:var).with { @expected }, @controller
42
+ end
43
+ end
44
+
45
+ context "a controller that assigns a nil value to an instance variable" do
46
+ setup do
47
+ @controller = build_response { @var = nil }
48
+ end
49
+
50
+ should "accept assigning to that variable" do
51
+ assert_accepts assign_to(:var), @controller
52
+ end
53
+ end
54
+
55
+ end
@@ -0,0 +1,40 @@
1
+ require 'test_helper'
2
+
3
+ class FilterParamMatcherTest < ActionController::TestCase # :nodoc:
4
+
5
+ context "a controller that filters no parameters" do
6
+ setup do
7
+ if Rails.respond_to?(:application)
8
+ Rails.application.config.filter_parameters = []
9
+ end
10
+ @controller = define_controller(:examples).new
11
+ end
12
+
13
+ should "reject filtering any parameter" do
14
+ assert_rejects filter_param(:any), @controller
15
+ end
16
+ end
17
+
18
+ context "a controller that filters a parameter" do
19
+ setup do
20
+ if Rails.respond_to?(:application)
21
+ Rails.application.config.filter_parameters = [:password]
22
+ end
23
+ @controller = define_controller :examples do
24
+ unless Rails.respond_to?(:application)
25
+ filter_parameter_logging :password
26
+ end
27
+ end.new
28
+ end
29
+
30
+ should "accept filtering that parameter" do
31
+ assert_accepts filter_param(:password), @controller
32
+ end
33
+
34
+ should "reject filtering another parameter" do
35
+ assert_rejects filter_param(:other), @controller
36
+ end
37
+ end
38
+
39
+ end
40
+
@@ -0,0 +1,37 @@
1
+ require 'test_helper'
2
+
3
+ class RedirectToMatcherTest < ActionController::TestCase # :nodoc:
4
+
5
+ context "a controller that redirects" do
6
+ setup do
7
+ @controller = build_response { redirect_to '/some/url' }
8
+ end
9
+
10
+ should "accept redirecting to that url" do
11
+ assert_accepts redirect_to('/some/url'), @controller
12
+ end
13
+
14
+ should "reject redirecting to a different url" do
15
+ assert_rejects redirect_to('/some/other/url'), @controller
16
+ end
17
+
18
+ should "accept redirecting to that url in a block" do
19
+ assert_accepts redirect_to('somewhere') { '/some/url' }, @controller
20
+ end
21
+
22
+ should "reject redirecting to a different url in a block" do
23
+ assert_rejects redirect_to('somewhere else') { '/some/other/url' }, @controller
24
+ end
25
+ end
26
+
27
+ context "a controller that doesn't redirect" do
28
+ setup do
29
+ @controller = build_response { render :text => 'hello' }
30
+ end
31
+
32
+ should "reject redirecting to a url" do
33
+ assert_rejects redirect_to('/some/url'), @controller
34
+ end
35
+ end
36
+
37
+ end
@@ -0,0 +1,37 @@
1
+ require 'test_helper'
2
+
3
+ class RenderTemplateMatcherTest < ActionController::TestCase # :nodoc:
4
+
5
+ context "a controller that renders a template" do
6
+ setup do
7
+ @controller = build_response(:action => 'show') { render }
8
+ end
9
+
10
+ should "accept rendering that template" do
11
+ assert_accepts render_template(:show), @controller
12
+ end
13
+
14
+ should "reject rendering a different template" do
15
+ assert_rejects render_template(:index), @controller
16
+ end
17
+
18
+ should "accept rendering that template in the given context" do
19
+ assert_accepts self.class.render_template(:show).in_context(self), @controller
20
+ end
21
+
22
+ should "reject rendering a different template in the given context" do
23
+ assert_rejects self.class.render_template(:index).in_context(self), @controller
24
+ end
25
+ end
26
+
27
+ context "a controller that doesn't render a template" do
28
+ setup do
29
+ @controller = build_response { render :nothing => true }
30
+ end
31
+
32
+ should "reject rendering a template" do
33
+ assert_rejects render_template(:show), @controller
34
+ end
35
+ end
36
+
37
+ end
@@ -0,0 +1,47 @@
1
+ require 'test_helper'
2
+
3
+ class RenderWithLayoutMatcherTest < ActionController::TestCase # :nodoc:
4
+
5
+ context "a controller that renders with a layout" do
6
+ setup do
7
+ create_view('layouts/wide.html.erb', 'some content, <%= yield %>')
8
+ @controller = build_response { render :layout => 'wide' }
9
+ end
10
+
11
+ should "accept rendering with any layout" do
12
+ assert_accepts render_with_layout, @controller
13
+ end
14
+
15
+ should "accept rendering with that layout" do
16
+ assert_accepts render_with_layout(:wide), @controller
17
+ end
18
+
19
+ should "reject rendering with another layout" do
20
+ assert_rejects render_with_layout(:other), @controller
21
+ end
22
+ end
23
+
24
+ context "a controller that renders without a layout" do
25
+ setup do
26
+ @controller = build_response { render :layout => false }
27
+ end
28
+
29
+ should "reject rendering with a layout" do
30
+ assert_rejects render_with_layout, @controller
31
+ end
32
+ end
33
+
34
+ context "given a context with layouts" do
35
+ setup do
36
+ @layout = 'happy'
37
+ @controller = build_response { render :layout => false }
38
+ @layouts = Hash.new(0)
39
+ @layouts[@layout] = 1
40
+ end
41
+
42
+ should "accept that layout in that context" do
43
+ assert_accepts render_with_layout(@layout).in_context(self), @controller
44
+ end
45
+ end
46
+
47
+ end
@@ -0,0 +1,32 @@
1
+ require 'test_helper'
2
+
3
+ class RespondWithContentTypeMatcherTest < ActionController::TestCase # :nodoc:
4
+
5
+ context "a controller responding with content type :xml" do
6
+ setup do
7
+ @controller = build_response { render :xml => { :user => "thoughtbot" }.to_xml }
8
+ end
9
+
10
+ should "accept responding with content type :xml" do
11
+ assert_accepts respond_with_content_type(:xml), @controller
12
+ end
13
+
14
+ should "accept responding with content type 'application/xml'" do
15
+ assert_accepts respond_with_content_type('application/xml'), @controller
16
+ end
17
+
18
+ should "accept responding with content type /xml/" do
19
+ assert_accepts respond_with_content_type(/xml/), @controller
20
+ end
21
+
22
+ should "reject responding with another content type" do
23
+ assert_rejects respond_with_content_type(:json), @controller
24
+ end
25
+ end
26
+
27
+ should "generate the correct test name" do
28
+ assert_equal "respond with content type of application/xml",
29
+ respond_with_content_type(:xml).description
30
+ end
31
+
32
+ end
@@ -0,0 +1,96 @@
1
+ require 'test_helper'
2
+
3
+ class RespondWithMatcherTest < ActionController::TestCase # :nodoc:
4
+
5
+ context "a controller responding with success" do
6
+ setup do
7
+ @controller = build_response { render :text => "text", :status => 200 }
8
+ end
9
+
10
+ should "accept responding with 200" do
11
+ assert_accepts respond_with(200), @controller
12
+ end
13
+
14
+ should "accept responding with :success" do
15
+ assert_accepts respond_with(:success), @controller
16
+ end
17
+
18
+ should "reject responding with another status" do
19
+ assert_rejects respond_with(:error), @controller
20
+ end
21
+ end
22
+
23
+ context "a controller responding with redirect" do
24
+ setup do
25
+ @controller = build_response { render :text => "text", :status => 301 }
26
+ end
27
+
28
+ should "accept responding with 301" do
29
+ assert_accepts respond_with(301), @controller
30
+ end
31
+
32
+ should "accept responding with :redirect" do
33
+ assert_accepts respond_with(:redirect), @controller
34
+ end
35
+
36
+ should "reject responding with another status" do
37
+ assert_rejects respond_with(:error), @controller
38
+ end
39
+ end
40
+
41
+ context "a controller responding with missing" do
42
+ setup do
43
+ @controller = build_response { render :text => "text", :status => 404 }
44
+ end
45
+
46
+ should "accept responding with 404" do
47
+ assert_accepts respond_with(404), @controller
48
+ end
49
+
50
+ should "accept responding with :missing" do
51
+ assert_accepts respond_with(:missing), @controller
52
+ end
53
+
54
+ should "reject responding with another status" do
55
+ assert_rejects respond_with(:success), @controller
56
+ end
57
+ end
58
+
59
+ context "a controller responding with error" do
60
+ setup do
61
+ @controller = build_response { render :text => "text", :status => 500 }
62
+ end
63
+
64
+ should "accept responding with 500" do
65
+ assert_accepts respond_with(500), @controller
66
+ end
67
+
68
+ should "accept responding with :error" do
69
+ assert_accepts respond_with(:error), @controller
70
+ end
71
+
72
+ should "reject responding with another status" do
73
+ assert_rejects respond_with(:success), @controller
74
+ end
75
+ end
76
+
77
+ context "a controller responding with not implemented" do
78
+ setup do
79
+ @controller = build_response { render :text => "text", :status => 501 }
80
+ end
81
+
82
+ should "accept responding with 501" do
83
+ assert_accepts respond_with(501), @controller
84
+ end
85
+
86
+ should "accept responding with :not_implemented" do
87
+ assert_accepts respond_with(:not_implemented), @controller
88
+ end
89
+
90
+ should "reject responding with another status" do
91
+ assert_rejects respond_with(:success), @controller
92
+ end
93
+ end
94
+
95
+ end
96
+
@@ -0,0 +1,75 @@
1
+ require 'test_helper'
2
+
3
+ class RouteToMatcherTest < ActionController::TestCase # :nodoc:
4
+
5
+ context "given a controller with a defined glob url" do
6
+ setup do
7
+ @controller = define_controller('Examples').new
8
+ define_routes do |map|
9
+ map.connect 'examples/*id', :controller => 'examples',
10
+ :action => 'example'
11
+ end
12
+ end
13
+
14
+ should "accept glob route" do
15
+ assert_accepts route(:get, '/examples/foo/bar').
16
+ to(:action => 'example', :id => ['foo', 'bar']),
17
+ @controller
18
+ end
19
+
20
+ end
21
+
22
+ context "given a controller with a defined route" do
23
+ setup do
24
+ @controller = define_controller('Examples').new
25
+ define_routes do |map|
26
+ map.connect 'examples/:id', :controller => 'examples',
27
+ :action => 'example'
28
+ end
29
+ end
30
+
31
+ should "accept routing the correct path to the correct parameters" do
32
+ assert_accepts route(:get, '/examples/1').
33
+ to(:action => 'example', :id => '1'),
34
+ @controller
35
+ end
36
+
37
+ should "accept a symbol controller" do
38
+ assert_accepts route(:get, '/examples/1').
39
+ to(:controller => :examples,
40
+ :action => 'example',
41
+ :id => '1'),
42
+ self
43
+ end
44
+
45
+ should "accept a symbol action" do
46
+ assert_accepts route(:get, '/examples/1').
47
+ to(:action => :example, :id => '1'),
48
+ @controller
49
+ end
50
+
51
+ should "accept a non-string parameter" do
52
+ assert_accepts route(:get, '/examples/1').
53
+ to(:action => 'example', :id => 1),
54
+ @controller
55
+ end
56
+
57
+ should "reject an undefined route" do
58
+ assert_rejects route(:get, '/bad_route').to(:var => 'value'), @controller
59
+ end
60
+
61
+ should "reject a route for another controller" do
62
+ @other = define_controller('Other').new
63
+ assert_rejects route(:get, '/examples/1').
64
+ to(:action => 'example', :id => '1'),
65
+ @other
66
+ end
67
+
68
+ should "reject a route for different parameters" do
69
+ assert_rejects route(:get, '/examples/1').
70
+ to(:action => 'other', :id => '1'),
71
+ @controller
72
+ end
73
+ end
74
+
75
+ end
@@ -0,0 +1,48 @@
1
+ require 'test_helper'
2
+
3
+ class SetSessionMatcherTest < ActionController::TestCase # :nodoc:
4
+
5
+ context "a controller that sets a session variable" do
6
+ setup do
7
+ @controller = build_response do
8
+ session[:var] = 'value'
9
+ session[:false_var] = false
10
+ end
11
+ end
12
+
13
+ should "accept assigning to that variable" do
14
+ assert_accepts set_session(:var), @controller
15
+ end
16
+
17
+ should "accept assigning the correct value to that variable" do
18
+ assert_accepts set_session(:var).to('value'), @controller
19
+ end
20
+
21
+ should "reject assigning another value to that variable" do
22
+ assert_rejects set_session(:var).to('other'), @controller
23
+ end
24
+
25
+ should "reject assigning to another variable" do
26
+ assert_rejects set_session(:other), @controller
27
+ end
28
+
29
+ should "accept assigning nil to another variable" do
30
+ assert_accepts set_session(:other).to(nil), @controller
31
+ end
32
+
33
+ should "accept assigning false to that variable" do
34
+ assert_accepts set_session(:false_var).to(false), @controller
35
+ end
36
+
37
+ should "accept assigning to the same value in the test context" do
38
+ @expected = 'value'
39
+ assert_accepts set_session(:var).to { @expected }, @controller
40
+ end
41
+
42
+ should "reject assigning to the another value in the test context" do
43
+ @expected = 'other'
44
+ assert_rejects set_session(:var).to { @expected }, @controller
45
+ end
46
+ end
47
+
48
+ end