shoulda 2.10.3 → 2.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +8 -27
- data/lib/shoulda.rb +1 -3
- data/lib/shoulda/action_controller.rb +8 -0
- data/lib/shoulda/action_controller/macros.rb +54 -73
- data/lib/shoulda/action_controller/matchers.rb +2 -0
- data/lib/shoulda/action_controller/matchers/assign_to_matcher.rb +9 -6
- data/lib/shoulda/action_controller/matchers/filter_param_matcher.rb +18 -1
- data/lib/shoulda/action_controller/matchers/redirect_to_matcher.rb +62 -0
- data/lib/shoulda/action_controller/matchers/render_template_matcher.rb +54 -0
- data/lib/shoulda/action_controller/matchers/render_with_layout_matcher.rb +33 -15
- data/lib/shoulda/action_controller/matchers/respond_with_content_type_matcher.rb +1 -1
- data/lib/shoulda/action_controller/matchers/respond_with_matcher.rb +5 -1
- data/lib/shoulda/action_controller/matchers/route_matcher.rb +1 -1
- data/lib/shoulda/action_controller/matchers/set_session_matcher.rb +13 -2
- data/lib/shoulda/action_controller/matchers/set_the_flash_matcher.rb +1 -1
- data/lib/shoulda/action_mailer.rb +3 -0
- data/lib/shoulda/action_mailer/assertions.rb +4 -0
- data/lib/shoulda/action_mailer/matchers.rb +22 -0
- data/lib/shoulda/action_mailer/matchers/have_sent_email.rb +119 -0
- data/lib/shoulda/active_record/helpers.rb +6 -1
- data/lib/shoulda/active_record/macros.rb +86 -141
- data/lib/shoulda/active_record/matchers.rb +0 -1
- data/lib/shoulda/active_record/matchers/allow_mass_assignment_of_matcher.rb +1 -1
- data/lib/shoulda/active_record/matchers/allow_value_matcher.rb +10 -2
- data/lib/shoulda/assertions.rb +8 -0
- data/lib/shoulda/context.rb +52 -32
- data/lib/shoulda/macros.rb +16 -18
- data/lib/shoulda/rails.rb +0 -5
- data/lib/shoulda/rspec.rb +2 -0
- data/lib/shoulda/version.rb +4 -0
- data/rails/init.rb +1 -0
- data/test/fail_macros.rb +20 -4
- data/test/functional/posts_controller_test.rb +7 -7
- data/test/functional/users_controller_test.rb +1 -1
- data/test/matchers/action_mailer/have_sent_email_test.rb +53 -0
- data/test/matchers/active_record/allow_mass_assignment_of_matcher_test.rb +7 -1
- data/test/matchers/active_record/allow_value_matcher_test.rb +1 -1
- data/test/matchers/active_record/association_matcher_test.rb +16 -16
- data/test/matchers/active_record/ensure_inclusion_of_matcher_test.rb +3 -2
- data/test/matchers/active_record/ensure_length_of_matcher_test.rb +1 -1
- data/test/matchers/active_record/have_db_column_matcher_test.rb +1 -1
- data/test/matchers/active_record/have_db_index_matcher_test.rb +1 -1
- data/test/matchers/active_record/have_readonly_attributes_matcher_test.rb +1 -1
- data/test/matchers/active_record/validate_acceptance_of_matcher_test.rb +1 -1
- data/test/matchers/active_record/validate_format_of_matcher_test.rb +1 -1
- data/test/matchers/active_record/validate_numericality_of_matcher_test.rb +1 -1
- data/test/matchers/active_record/validate_presence_of_matcher_test.rb +1 -1
- data/test/matchers/active_record/validate_uniqueness_of_matcher_test.rb +1 -1
- data/test/matchers/controller/assign_to_matcher_test.rb +11 -1
- data/test/matchers/controller/filter_param_matcher_test.rb +10 -2
- data/test/matchers/controller/redirect_to_matcher_test.rb +37 -0
- data/test/matchers/controller/render_template_matcher_test.rb +37 -0
- data/test/matchers/controller/render_with_layout_matcher_test.rb +15 -1
- data/test/matchers/controller/respond_with_content_type_matcher_test.rb +1 -1
- data/test/matchers/controller/respond_with_matcher_test.rb +1 -11
- data/test/matchers/controller/route_matcher_test.rb +1 -1
- data/test/matchers/controller/set_session_matcher_test.rb +11 -1
- data/test/matchers/controller/set_the_flash_matcher.rb +1 -1
- data/test/other/autoload_macro_test.rb +1 -1
- data/test/other/context_test.rb +177 -8
- data/test/other/helpers_test.rb +13 -36
- data/test/other/private_helpers_test.rb +1 -1
- data/test/other/should_test.rb +1 -1
- data/test/{model_builder.rb → rails2_model_builder.rb} +28 -4
- data/test/{rails_root → rails2_root}/app/controllers/application_controller.rb +0 -3
- data/test/{rails_root → rails2_root}/app/controllers/posts_controller.rb +0 -0
- data/test/{rails_root → rails2_root}/app/controllers/users_controller.rb +0 -0
- data/test/{rails_root → rails2_root}/app/helpers/application_helper.rb +0 -0
- data/test/{rails_root → rails2_root}/app/helpers/posts_helper.rb +0 -0
- data/test/{rails_root → rails2_root}/app/helpers/users_helper.rb +0 -0
- data/test/{rails_root → rails2_root}/app/models/address.rb +0 -0
- data/test/rails2_root/app/models/flea.rb +11 -0
- data/test/{rails_root → rails2_root}/app/models/friendship.rb +0 -0
- data/test/rails2_root/app/models/notifier.rb +8 -0
- data/test/{rails_root → rails2_root}/app/models/pets/cat.rb +0 -0
- data/test/{rails_root → rails2_root}/app/models/pets/dog.rb +0 -0
- data/test/{rails_root → rails2_root}/app/models/post.rb +0 -0
- data/test/{rails_root → rails2_root}/app/models/product.rb +0 -0
- data/test/{rails_root → rails2_root}/app/models/profile.rb +0 -0
- data/test/{rails_root → rails2_root}/app/models/registration.rb +0 -0
- data/test/{rails_root → rails2_root}/app/models/tag.rb +0 -0
- data/test/{rails_root → rails2_root}/app/models/tagging.rb +0 -0
- data/test/{rails_root → rails2_root}/app/models/treat.rb +0 -0
- data/test/{rails_root → rails2_root}/app/models/user.rb +0 -0
- data/test/{rails_root → rails2_root}/app/views/layouts/posts.rhtml +0 -0
- data/test/{rails_root → rails2_root}/app/views/layouts/users.rhtml +0 -0
- data/test/{rails_root → rails2_root}/app/views/layouts/wide.html.erb +0 -0
- data/test/rails2_root/app/views/notifier/the_email.html.erb +1 -0
- data/test/{rails_root → rails2_root}/app/views/posts/edit.rhtml +0 -0
- data/test/{rails_root → rails2_root}/app/views/posts/index.rhtml +0 -0
- data/test/{rails_root → rails2_root}/app/views/posts/new.rhtml +0 -0
- data/test/{rails_root → rails2_root}/app/views/posts/show.rhtml +0 -0
- data/test/{rails_root → rails2_root}/app/views/users/edit.rhtml +0 -0
- data/test/{rails_root → rails2_root}/app/views/users/index.rhtml +0 -0
- data/test/{rails_root → rails2_root}/app/views/users/new.rhtml +0 -0
- data/test/{rails_root → rails2_root}/app/views/users/show.rhtml +0 -0
- data/test/{rails_root → rails2_root}/config/boot.rb +0 -0
- data/test/{rails_root → rails2_root}/config/database.yml +1 -1
- data/test/{rails_root → rails2_root}/config/environment.rb +0 -1
- data/test/rails2_root/config/environments/test.rb +23 -0
- data/test/{rails_root → rails2_root}/config/initializers/new_rails_defaults.rb +0 -0
- data/test/{rails_root → rails2_root}/config/initializers/shoulda.rb +0 -0
- data/test/{rails_root → rails2_root}/config/routes.rb +0 -0
- data/test/{rails_root → rails2_root}/db/migrate/001_create_users.rb +0 -0
- data/test/{rails_root → rails2_root}/db/migrate/002_create_posts.rb +0 -0
- data/test/{rails_root → rails2_root}/db/migrate/003_create_taggings.rb +0 -0
- data/test/{rails_root → rails2_root}/db/migrate/004_create_tags.rb +0 -0
- data/test/{rails_root → rails2_root}/db/migrate/005_create_dogs.rb +0 -0
- data/test/{rails_root → rails2_root}/db/migrate/006_create_addresses.rb +0 -0
- data/test/{rails_root → rails2_root}/db/migrate/007_create_fleas.rb +0 -0
- data/test/{rails_root → rails2_root}/db/migrate/008_create_dogs_fleas.rb +0 -0
- data/test/{rails_root → rails2_root}/db/migrate/009_create_products.rb +0 -0
- data/test/{rails_root → rails2_root}/db/migrate/010_create_friendships.rb +0 -0
- data/test/{rails_root → rails2_root}/db/migrate/011_create_treats.rb +0 -0
- data/test/{rails_root → rails2_root}/db/migrate/20090506203502_create_profiles.rb +0 -0
- data/test/{rails_root → rails2_root}/db/migrate/20090506203536_create_registrations.rb +0 -0
- data/test/{rails_root → rails2_root}/db/migrate/20090513104502_create_cats.rb +0 -0
- data/test/{rails_root → rails2_root}/db/schema.rb +0 -0
- data/test/rails2_root/log/test.log +121771 -0
- data/test/{rails_root → rails2_root}/public/404.html +0 -0
- data/test/{rails_root → rails2_root}/public/422.html +0 -0
- data/test/{rails_root → rails2_root}/public/500.html +0 -0
- data/test/{rails_root → rails2_root}/script/console +0 -0
- data/test/{rails_root → rails2_root}/script/generate +0 -0
- data/test/{rails_root → rails2_root}/test/shoulda_macros/custom_macro.rb +0 -0
- data/test/{rails_root → rails2_root}/vendor/gems/gem_with_macro-0.0.1/shoulda_macros/gem_macro.rb +0 -0
- data/test/{rails_root → rails2_root}/vendor/plugins/plugin_with_macro/shoulda_macros/plugin_macro.rb +0 -0
- data/test/rails2_test_helper.rb +6 -0
- data/test/rails3_model_builder.rb +118 -0
- data/test/rails3_root/Gemfile +28 -0
- data/test/rails3_root/README +244 -0
- data/test/rails3_root/Rakefile +10 -0
- data/test/rails3_root/app/controllers/application_controller.rb +22 -0
- data/test/rails3_root/app/controllers/posts_controller.rb +87 -0
- data/test/rails3_root/app/controllers/users_controller.rb +82 -0
- data/test/rails3_root/app/helpers/application_helper.rb +2 -0
- data/test/rails3_root/app/models/address.rb +7 -0
- data/test/rails3_root/app/models/flea.rb +11 -0
- data/test/rails3_root/app/models/friendship.rb +4 -0
- data/test/rails3_root/app/models/notifier.rb +8 -0
- data/test/rails3_root/app/models/pets/cat.rb +7 -0
- data/test/rails3_root/app/models/pets/dog.rb +10 -0
- data/test/rails3_root/app/models/post.rb +12 -0
- data/test/rails3_root/app/models/product.rb +12 -0
- data/test/rails3_root/app/models/profile.rb +2 -0
- data/test/rails3_root/app/models/registration.rb +2 -0
- data/test/rails3_root/app/models/tag.rb +8 -0
- data/test/rails3_root/app/models/tagging.rb +4 -0
- data/test/rails3_root/app/models/treat.rb +3 -0
- data/test/rails3_root/app/models/user.rb +32 -0
- data/test/rails3_root/app/views/layouts/application.html.erb +14 -0
- data/test/rails3_root/app/views/layouts/posts.rhtml +19 -0
- data/test/rails3_root/app/views/layouts/users.rhtml +17 -0
- data/test/rails3_root/app/views/layouts/wide.html.erb +1 -0
- data/test/rails3_root/app/views/notifier/the_email.html.erb +1 -0
- data/test/rails3_root/app/views/posts/edit.rhtml +27 -0
- data/test/rails3_root/app/views/posts/index.rhtml +25 -0
- data/test/rails3_root/app/views/posts/new.rhtml +24 -0
- data/test/rails3_root/app/views/posts/show.rhtml +18 -0
- data/test/rails3_root/app/views/users/edit.rhtml +22 -0
- data/test/rails3_root/app/views/users/index.rhtml +22 -0
- data/test/rails3_root/app/views/users/new.rhtml +21 -0
- data/test/rails3_root/app/views/users/show.rhtml +13 -0
- data/test/rails3_root/config.ru +4 -0
- data/test/rails3_root/config/application.rb +46 -0
- data/test/rails3_root/config/boot.rb +6 -0
- data/test/rails3_root/config/database.yml +22 -0
- data/test/rails3_root/config/environment.rb +5 -0
- data/test/rails3_root/config/environments/development.rb +19 -0
- data/test/rails3_root/config/environments/production.rb +42 -0
- data/test/rails3_root/config/environments/test.rb +32 -0
- data/test/rails3_root/config/initializers/backtrace_silencers.rb +7 -0
- data/test/rails3_root/config/initializers/inflections.rb +10 -0
- data/test/rails3_root/config/initializers/mime_types.rb +5 -0
- data/test/rails3_root/config/initializers/secret_token.rb +7 -0
- data/test/rails3_root/config/initializers/session_store.rb +8 -0
- data/test/rails3_root/config/locales/en.yml +5 -0
- data/test/rails3_root/config/routes.rb +4 -0
- data/test/rails3_root/db/migrate/001_create_users.rb +19 -0
- data/test/rails3_root/db/migrate/002_create_posts.rb +13 -0
- data/test/rails3_root/db/migrate/003_create_taggings.rb +12 -0
- data/test/rails3_root/db/migrate/004_create_tags.rb +11 -0
- data/test/rails3_root/db/migrate/005_create_dogs.rb +12 -0
- data/test/rails3_root/db/migrate/006_create_addresses.rb +14 -0
- data/test/rails3_root/db/migrate/007_create_fleas.rb +11 -0
- data/test/rails3_root/db/migrate/008_create_dogs_fleas.rb +12 -0
- data/test/rails3_root/db/migrate/009_create_products.rb +17 -0
- data/test/rails3_root/db/migrate/010_create_friendships.rb +14 -0
- data/test/rails3_root/db/migrate/011_create_treats.rb +12 -0
- data/test/rails3_root/db/migrate/20090506203502_create_profiles.rb +12 -0
- data/test/rails3_root/db/migrate/20090506203536_create_registrations.rb +14 -0
- data/test/rails3_root/db/migrate/20090513104502_create_cats.rb +12 -0
- data/test/rails3_root/db/seeds.rb +7 -0
- data/test/rails3_root/db/test.sqlite3 +0 -0
- data/test/rails3_root/doc/README_FOR_APP +2 -0
- data/test/{rails_root/config/environments/test.rb → rails3_root/log/development.log} +0 -0
- data/test/rails3_root/log/production.log +0 -0
- data/test/rails3_root/log/server.log +0 -0
- data/test/rails3_root/log/test.log +63274 -0
- data/test/rails3_root/public/404.html +26 -0
- data/test/rails3_root/public/422.html +26 -0
- data/test/rails3_root/public/500.html +26 -0
- data/test/rails3_root/public/favicon.ico +0 -0
- data/test/rails3_root/public/images/rails.png +0 -0
- data/test/rails3_root/public/index.html +279 -0
- data/test/rails3_root/public/javascripts/application.js +2 -0
- data/test/rails3_root/public/javascripts/controls.js +965 -0
- data/test/rails3_root/public/javascripts/dragdrop.js +974 -0
- data/test/rails3_root/public/javascripts/effects.js +1123 -0
- data/test/rails3_root/public/javascripts/prototype.js +4874 -0
- data/test/rails3_root/public/javascripts/rails.js +118 -0
- data/test/rails3_root/public/robots.txt +5 -0
- data/test/rails3_root/script/rails +9 -0
- data/test/rails3_root/test/performance/browsing_test.rb +9 -0
- data/test/rails3_root/test/test_helper.rb +13 -0
- data/test/rails3_test_helper.rb +6 -0
- data/test/test_helper.rb +16 -8
- data/test/unit/address_test.rb +1 -1
- data/test/unit/cat_test.rb +1 -1
- data/test/unit/dog_test.rb +1 -1
- data/test/unit/flea_test.rb +9 -1
- data/test/unit/friendship_test.rb +1 -1
- data/test/unit/post_test.rb +1 -5
- data/test/unit/product_test.rb +1 -1
- data/test/unit/tag_test.rb +1 -5
- data/test/unit/tagging_test.rb +1 -1
- data/test/unit/user_test.rb +3 -37
- metadata +180 -73
- data/lib/shoulda/action_view.rb +0 -10
- data/lib/shoulda/action_view/macros.rb +0 -61
- data/lib/shoulda/active_record/matchers/have_named_scope_matcher.rb +0 -128
- data/test/matchers/active_record/have_named_scope_matcher_test.rb +0 -65
- data/test/rails_root/app/models/flea.rb +0 -3
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'test_helper'
|
2
2
|
|
3
3
|
class AllowMassAssignmentOfMatcherTest < ActiveSupport::TestCase # :nodoc:
|
4
4
|
|
@@ -63,6 +63,12 @@ class AllowMassAssignmentOfMatcherTest < ActiveSupport::TestCase # :nodoc:
|
|
63
63
|
should "accept being mass-assignable" do
|
64
64
|
assert_accepts allow_mass_assignment_of(:attr), @model
|
65
65
|
end
|
66
|
+
|
67
|
+
should "assign a negative failure message" do
|
68
|
+
matcher = allow_mass_assignment_of(:attr)
|
69
|
+
matcher.matches?(@model)
|
70
|
+
assert_not_nil matcher.negative_failure_message
|
71
|
+
end
|
66
72
|
end
|
67
73
|
|
68
74
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'test_helper'
|
2
2
|
|
3
3
|
class AssociationMatcherTest < ActiveSupport::TestCase # :nodoc:
|
4
4
|
|
@@ -166,55 +166,55 @@ class AssociationMatcherTest < ActiveSupport::TestCase # :nodoc:
|
|
166
166
|
|
167
167
|
context "have_one" do
|
168
168
|
setup do
|
169
|
-
@matcher = have_one(:
|
169
|
+
@matcher = have_one(:detail)
|
170
170
|
end
|
171
171
|
|
172
172
|
should "accept a valid association without any options" do
|
173
|
-
define_model :
|
173
|
+
define_model :detail, :person_id => :integer
|
174
174
|
define_model :person do
|
175
|
-
has_one :
|
175
|
+
has_one :detail
|
176
176
|
end
|
177
177
|
assert_accepts @matcher, Person.new
|
178
178
|
end
|
179
179
|
|
180
180
|
should "accept a valid association with an :as option" do
|
181
|
-
define_model :
|
182
|
-
:
|
181
|
+
define_model :detail, :detailable_id => :integer,
|
182
|
+
:detailable_type => :string
|
183
183
|
define_model :person do
|
184
|
-
has_one :
|
184
|
+
has_one :detail, :as => :detailable
|
185
185
|
end
|
186
186
|
assert_accepts @matcher, Person.new
|
187
187
|
end
|
188
188
|
|
189
189
|
should "reject an association that has a nonexistent foreign key" do
|
190
|
-
define_model :
|
190
|
+
define_model :detail
|
191
191
|
define_model :person do
|
192
|
-
has_one :
|
192
|
+
has_one :detail
|
193
193
|
end
|
194
194
|
assert_rejects @matcher, Person.new
|
195
195
|
end
|
196
196
|
|
197
197
|
should "reject an association with a bad :as option" do
|
198
|
-
define_model :
|
199
|
-
:
|
198
|
+
define_model :detail, :detailable_id => :integer,
|
199
|
+
:detailable_type => :string
|
200
200
|
define_model :person do
|
201
|
-
has_one :
|
201
|
+
has_one :detail, :as => :describable
|
202
202
|
end
|
203
203
|
assert_rejects @matcher, Person.new
|
204
204
|
end
|
205
205
|
|
206
206
|
should "accept an association with a valid :dependent option" do
|
207
|
-
define_model :
|
207
|
+
define_model :detail, :person_id => :integer
|
208
208
|
define_model :person do
|
209
|
-
has_one :
|
209
|
+
has_one :detail, :dependent => :destroy
|
210
210
|
end
|
211
211
|
assert_accepts @matcher.dependent(:destroy), Person.new
|
212
212
|
end
|
213
213
|
|
214
214
|
should "reject an association with a bad :dependent option" do
|
215
|
-
define_model :
|
215
|
+
define_model :detail, :person_id => :integer
|
216
216
|
define_model :person do
|
217
|
-
has_one :
|
217
|
+
has_one :detail
|
218
218
|
end
|
219
219
|
assert_rejects @matcher.dependent(:destroy), Person.new
|
220
220
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'test_helper'
|
2
2
|
|
3
3
|
class EnsureInclusionOfMatcherTest < ActiveSupport::TestCase # :nodoc:
|
4
4
|
|
@@ -56,7 +56,8 @@ class EnsureInclusionOfMatcherTest < ActiveSupport::TestCase # :nodoc:
|
|
56
56
|
context "an attribute with custom range validations" do
|
57
57
|
setup do
|
58
58
|
define_model :example, :attr => :integer do
|
59
|
-
|
59
|
+
validate :custom_validation
|
60
|
+
def custom_validation
|
60
61
|
if attr < 2
|
61
62
|
errors.add(:attr, 'too low')
|
62
63
|
elsif attr > 5
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'test_helper'
|
2
2
|
|
3
3
|
class AssignToMatcherTest < ActionController::TestCase # :nodoc:
|
4
4
|
|
@@ -30,6 +30,16 @@ class AssignToMatcherTest < ActionController::TestCase # :nodoc:
|
|
30
30
|
should "reject assigning to another variable" do
|
31
31
|
assert_rejects assign_to(:other), @controller
|
32
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
|
33
43
|
end
|
34
44
|
|
35
45
|
end
|
@@ -1,9 +1,12 @@
|
|
1
|
-
require
|
1
|
+
require 'test_helper'
|
2
2
|
|
3
3
|
class FilterParamMatcherTest < ActionController::TestCase # :nodoc:
|
4
4
|
|
5
5
|
context "a controller that filters no parameters" do
|
6
6
|
setup do
|
7
|
+
if Rails.respond_to?(:application)
|
8
|
+
Rails.application.config.filter_parameters = []
|
9
|
+
end
|
7
10
|
@controller = define_controller(:examples).new
|
8
11
|
end
|
9
12
|
|
@@ -14,8 +17,13 @@ class FilterParamMatcherTest < ActionController::TestCase # :nodoc:
|
|
14
17
|
|
15
18
|
context "a controller that filters a parameter" do
|
16
19
|
setup do
|
20
|
+
if Rails.respond_to?(:application)
|
21
|
+
Rails.application.config.filter_parameters = [:password]
|
22
|
+
end
|
17
23
|
@controller = define_controller :examples do
|
18
|
-
|
24
|
+
unless Rails.respond_to?(:application)
|
25
|
+
filter_parameter_logging :password
|
26
|
+
end
|
19
27
|
end.new
|
20
28
|
end
|
21
29
|
|
@@ -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
|
@@ -1,9 +1,10 @@
|
|
1
|
-
require
|
1
|
+
require 'test_helper'
|
2
2
|
|
3
3
|
class RenderWithLayoutMatcherTest < ActionController::TestCase # :nodoc:
|
4
4
|
|
5
5
|
context "a controller that renders with a layout" do
|
6
6
|
setup do
|
7
|
+
create_view('layouts/wide.html.erb', 'some content, <%= yield %>')
|
7
8
|
@controller = build_response { render :layout => 'wide' }
|
8
9
|
end
|
9
10
|
|
@@ -30,4 +31,17 @@ class RenderWithLayoutMatcherTest < ActionController::TestCase # :nodoc:
|
|
30
31
|
end
|
31
32
|
end
|
32
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
|
+
|
33
47
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'test_helper'
|
2
2
|
|
3
3
|
class RespondWithMatcherTest < ActionController::TestCase # :nodoc:
|
4
4
|
|
@@ -91,16 +91,6 @@ class RespondWithMatcherTest < ActionController::TestCase # :nodoc:
|
|
91
91
|
assert_rejects respond_with(:success), @controller
|
92
92
|
end
|
93
93
|
end
|
94
|
-
|
95
|
-
context "a controller raising an error" do
|
96
|
-
setup do
|
97
|
-
@controller = build_response { raise RailsError }
|
98
|
-
end
|
99
|
-
|
100
|
-
should "reject responding with any status" do
|
101
|
-
assert_rejects respond_with(:success), @controller
|
102
|
-
end
|
103
|
-
end
|
104
94
|
|
105
95
|
end
|
106
96
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'test_helper'
|
2
2
|
|
3
3
|
class SetSessionMatcherTest < ActionController::TestCase # :nodoc:
|
4
4
|
|
@@ -33,6 +33,16 @@ class SetSessionMatcherTest < ActionController::TestCase # :nodoc:
|
|
33
33
|
should "accept assigning false to that variable" do
|
34
34
|
assert_accepts set_session(:false_var).to(false), @controller
|
35
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
|
36
46
|
end
|
37
47
|
|
38
48
|
end
|
data/test/other/context_test.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'test_helper'
|
2
2
|
|
3
3
|
class ContextTest < ActiveSupport::TestCase # :nodoc:
|
4
4
|
|
@@ -158,11 +158,6 @@ class ContextTest < ActiveSupport::TestCase # :nodoc:
|
|
158
158
|
assert_kind_of SomeModel, subject
|
159
159
|
end
|
160
160
|
|
161
|
-
should "return an existing instance of the described type as the subject" do
|
162
|
-
@some_model = SomeModel.new
|
163
|
-
assert_equal @some_model, subject
|
164
|
-
end
|
165
|
-
|
166
161
|
context "with an explicit subject block" do
|
167
162
|
setup { @expected = SomeModel.new }
|
168
163
|
subject { @expected }
|
@@ -179,6 +174,163 @@ class ContextTest < ActiveSupport::TestCase # :nodoc:
|
|
179
174
|
end
|
180
175
|
end
|
181
176
|
|
177
|
+
class ShouldMatcherTest < Test::Unit::TestCase
|
178
|
+
class FakeMatcher
|
179
|
+
attr_reader :subject
|
180
|
+
attr_accessor :fail
|
181
|
+
|
182
|
+
def description
|
183
|
+
"do something"
|
184
|
+
end
|
185
|
+
|
186
|
+
def matches?(subject)
|
187
|
+
@subject = subject
|
188
|
+
!@fail
|
189
|
+
end
|
190
|
+
|
191
|
+
def failure_message
|
192
|
+
"a failure message"
|
193
|
+
end
|
194
|
+
|
195
|
+
def negative_failure_message
|
196
|
+
"not a failure message"
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
def run_test
|
201
|
+
@test_suite.run(@test_result) { |event, name |}
|
202
|
+
end
|
203
|
+
|
204
|
+
def setup
|
205
|
+
@matcher = FakeMatcher.new
|
206
|
+
@test_result = Test::Unit::TestResult.new
|
207
|
+
class << @test_result
|
208
|
+
def failure_messages
|
209
|
+
@failures.map { |failure| failure.message }
|
210
|
+
end
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
def create_test_suite(&definition)
|
215
|
+
test_class = Class.new(Test::Unit::TestCase, &definition)
|
216
|
+
test_class.suite
|
217
|
+
end
|
218
|
+
|
219
|
+
def assert_failed_with(message, test_result)
|
220
|
+
assert_equal 1, test_result.failure_count
|
221
|
+
assert_equal [message], test_result.failure_messages
|
222
|
+
end
|
223
|
+
|
224
|
+
def assert_passed(test_result)
|
225
|
+
assert_equal 0, test_result.failure_count
|
226
|
+
end
|
227
|
+
|
228
|
+
def assert_test_named(expected_name, test_suite)
|
229
|
+
name = test_suite.tests.map { |test| test.method_name }.first
|
230
|
+
assert name.include?(expected_name), "Expected #{name} to include #{expected_name}"
|
231
|
+
end
|
232
|
+
|
233
|
+
def self.should_use_positive_matcher
|
234
|
+
should "generate a test using the matcher's description" do
|
235
|
+
assert_test_named "should #{@matcher.description}", @test_suite
|
236
|
+
end
|
237
|
+
|
238
|
+
should "pass with a passing matcher" do
|
239
|
+
@matcher.fail = false
|
240
|
+
run_test
|
241
|
+
assert_passed @test_result
|
242
|
+
end
|
243
|
+
|
244
|
+
should "fail with a failing matcher" do
|
245
|
+
@matcher.fail = true
|
246
|
+
run_test
|
247
|
+
assert_failed_with @matcher.failure_message, @test_result
|
248
|
+
end
|
249
|
+
|
250
|
+
should "provide the subject" do
|
251
|
+
@matcher.fail = false
|
252
|
+
run_test
|
253
|
+
assert_equal 'a subject', @matcher.subject
|
254
|
+
end
|
255
|
+
end
|
256
|
+
|
257
|
+
def self.should_use_negative_matcher
|
258
|
+
should "generate a test using the matcher's description" do
|
259
|
+
assert_test_named "should not #{@matcher.description}", @test_suite
|
260
|
+
end
|
261
|
+
|
262
|
+
should "pass with a failing matcher" do
|
263
|
+
@matcher.fail = true
|
264
|
+
run_test
|
265
|
+
assert_passed @test_result
|
266
|
+
end
|
267
|
+
|
268
|
+
should "fail with a passing matcher" do
|
269
|
+
@matcher.fail = false
|
270
|
+
run_test
|
271
|
+
assert_failed_with @matcher.negative_failure_message, @test_result
|
272
|
+
end
|
273
|
+
|
274
|
+
should "provide the subject" do
|
275
|
+
@matcher.fail = false
|
276
|
+
run_test
|
277
|
+
assert_equal 'a subject', @matcher.subject
|
278
|
+
end
|
279
|
+
end
|
280
|
+
|
281
|
+
context "a should block with a matcher" do
|
282
|
+
setup do
|
283
|
+
matcher = @matcher
|
284
|
+
@test_suite = create_test_suite do
|
285
|
+
subject { 'a subject' }
|
286
|
+
should matcher
|
287
|
+
end
|
288
|
+
end
|
289
|
+
|
290
|
+
should_use_positive_matcher
|
291
|
+
end
|
292
|
+
|
293
|
+
context "a should block with a matcher within a context" do
|
294
|
+
setup do
|
295
|
+
matcher = @matcher
|
296
|
+
@test_suite = create_test_suite do
|
297
|
+
context "in context" do
|
298
|
+
subject { 'a subject' }
|
299
|
+
should matcher
|
300
|
+
end
|
301
|
+
end
|
302
|
+
end
|
303
|
+
|
304
|
+
should_use_positive_matcher
|
305
|
+
end
|
306
|
+
|
307
|
+
context "a should_not block with a matcher" do
|
308
|
+
setup do
|
309
|
+
matcher = @matcher
|
310
|
+
@test_suite = create_test_suite do
|
311
|
+
subject { 'a subject' }
|
312
|
+
should_not matcher
|
313
|
+
end
|
314
|
+
end
|
315
|
+
|
316
|
+
should_use_negative_matcher
|
317
|
+
end
|
318
|
+
|
319
|
+
context "a should_not block with a matcher within a context" do
|
320
|
+
setup do
|
321
|
+
matcher = @matcher
|
322
|
+
@test_suite = create_test_suite do
|
323
|
+
context "in context" do
|
324
|
+
subject { 'a subject' }
|
325
|
+
should_not matcher
|
326
|
+
end
|
327
|
+
end
|
328
|
+
end
|
329
|
+
|
330
|
+
should_use_negative_matcher
|
331
|
+
end
|
332
|
+
end
|
333
|
+
|
182
334
|
class Subject; end
|
183
335
|
|
184
336
|
class SubjectTest < ActiveSupport::TestCase
|
@@ -196,8 +348,25 @@ end
|
|
196
348
|
|
197
349
|
class SubjectLazinessTest < ActiveSupport::TestCase
|
198
350
|
subject { Subject.new }
|
199
|
-
|
351
|
+
|
200
352
|
should "only build the subject once" do
|
201
353
|
assert_equal subject, subject
|
202
354
|
end
|
203
|
-
end
|
355
|
+
end
|
356
|
+
|
357
|
+
class SomeController < ActionController::Base
|
358
|
+
end
|
359
|
+
|
360
|
+
class ControllerSubjectTest < ActionController::TestCase
|
361
|
+
tests SomeController
|
362
|
+
|
363
|
+
should "use the controller as the subject outside a context" do
|
364
|
+
assert_equal @controller, subject
|
365
|
+
end
|
366
|
+
|
367
|
+
context "in a context" do
|
368
|
+
should "use the controller as the subject" do
|
369
|
+
assert_equal @controller, subject
|
370
|
+
end
|
371
|
+
end
|
372
|
+
end
|