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.
- data/CONTRIBUTION_GUIDELINES.rdoc +10 -0
- data/MIT-LICENSE +22 -0
- data/README.rdoc +154 -0
- data/Rakefile +74 -0
- data/bin/convert_to_should_syntax +42 -0
- data/lib/shoulda/action_controller/macros.rb +221 -0
- data/lib/shoulda/action_controller/matchers/assign_to_matcher.rb +114 -0
- data/lib/shoulda/action_controller/matchers/filter_param_matcher.rb +74 -0
- 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 +99 -0
- data/lib/shoulda/action_controller/matchers/respond_with_content_type_matcher.rb +74 -0
- data/lib/shoulda/action_controller/matchers/respond_with_matcher.rb +85 -0
- data/lib/shoulda/action_controller/matchers/route_matcher.rb +93 -0
- data/lib/shoulda/action_controller/matchers/set_session_matcher.rb +98 -0
- data/lib/shoulda/action_controller/matchers/set_the_flash_matcher.rb +100 -0
- data/lib/shoulda/action_controller/matchers.rb +39 -0
- data/lib/shoulda/action_controller.rb +34 -0
- data/lib/shoulda/action_mailer/assertions.rb +42 -0
- data/lib/shoulda/action_mailer/matchers/have_sent_email.rb +110 -0
- data/lib/shoulda/action_mailer/matchers.rb +22 -0
- data/lib/shoulda/action_mailer.rb +13 -0
- data/lib/shoulda/active_record/assertions.rb +69 -0
- data/lib/shoulda/active_record/helpers.rb +32 -0
- data/lib/shoulda/active_record/macros.rb +457 -0
- data/lib/shoulda/active_record/matchers/allow_mass_assignment_of_matcher.rb +83 -0
- data/lib/shoulda/active_record/matchers/allow_value_matcher.rb +110 -0
- data/lib/shoulda/active_record/matchers/association_matcher.rb +226 -0
- data/lib/shoulda/active_record/matchers/ensure_inclusion_of_matcher.rb +87 -0
- data/lib/shoulda/active_record/matchers/ensure_length_of_matcher.rb +141 -0
- data/lib/shoulda/active_record/matchers/have_db_column_matcher.rb +169 -0
- data/lib/shoulda/active_record/matchers/have_db_index_matcher.rb +112 -0
- data/lib/shoulda/active_record/matchers/have_readonly_attribute_matcher.rb +59 -0
- data/lib/shoulda/active_record/matchers/validate_acceptance_of_matcher.rb +41 -0
- data/lib/shoulda/active_record/matchers/validate_format_of_matcher.rb +65 -0
- data/lib/shoulda/active_record/matchers/validate_numericality_of_matcher.rb +39 -0
- data/lib/shoulda/active_record/matchers/validate_presence_of_matcher.rb +60 -0
- data/lib/shoulda/active_record/matchers/validate_uniqueness_of_matcher.rb +148 -0
- data/lib/shoulda/active_record/matchers/validation_matcher.rb +56 -0
- data/lib/shoulda/active_record/matchers.rb +42 -0
- data/lib/shoulda/active_record.rb +16 -0
- data/lib/shoulda/assertions.rb +79 -0
- data/lib/shoulda/autoload_macros.rb +46 -0
- data/lib/shoulda/context.rb +537 -0
- data/lib/shoulda/helpers.rb +8 -0
- data/lib/shoulda/integrations/rspec.rb +13 -0
- data/lib/shoulda/integrations/rspec2.rb +22 -0
- data/lib/shoulda/integrations/test_unit.rb +22 -0
- data/lib/shoulda/macros.rb +161 -0
- data/lib/shoulda/private_helpers.rb +13 -0
- data/lib/shoulda/proc_extensions.rb +14 -0
- data/lib/shoulda/rails.rb +8 -0
- data/lib/shoulda/tasks/list_tests.rake +29 -0
- data/lib/shoulda/tasks/yaml_to_shoulda.rake +28 -0
- data/lib/shoulda/tasks.rb +3 -0
- data/lib/shoulda/version.rb +4 -0
- data/lib/shoulda.rb +9 -0
- data/rails/init.rb +8 -0
- data/test/README +36 -0
- data/test/fail_macros.rb +55 -0
- data/test/fixtures/addresses.yml +3 -0
- data/test/fixtures/friendships.yml +0 -0
- data/test/fixtures/posts.yml +5 -0
- data/test/fixtures/products.yml +0 -0
- data/test/fixtures/taggings.yml +0 -0
- data/test/fixtures/tags.yml +9 -0
- data/test/fixtures/users.yml +6 -0
- data/test/functional/posts_controller_test.rb +121 -0
- data/test/functional/users_controller_test.rb +19 -0
- data/test/hello_should.rb +37 -0
- data/test/matchers/action_mailer/have_sent_email_test.rb +76 -0
- data/test/matchers/active_record/allow_mass_assignment_of_matcher_test.rb +74 -0
- data/test/matchers/active_record/allow_value_matcher_test.rb +64 -0
- data/test/matchers/active_record/association_matcher_test.rb +263 -0
- data/test/matchers/active_record/ensure_inclusion_of_matcher_test.rb +81 -0
- data/test/matchers/active_record/ensure_length_of_matcher_test.rb +158 -0
- data/test/matchers/active_record/have_db_column_matcher_test.rb +169 -0
- data/test/matchers/active_record/have_db_index_matcher_test.rb +91 -0
- data/test/matchers/active_record/have_readonly_attributes_matcher_test.rb +29 -0
- data/test/matchers/active_record/validate_acceptance_of_matcher_test.rb +44 -0
- data/test/matchers/active_record/validate_format_of_matcher_test.rb +39 -0
- data/test/matchers/active_record/validate_numericality_of_matcher_test.rb +52 -0
- data/test/matchers/active_record/validate_presence_of_matcher_test.rb +86 -0
- data/test/matchers/active_record/validate_uniqueness_of_matcher_test.rb +147 -0
- data/test/matchers/controller/assign_to_matcher_test.rb +55 -0
- data/test/matchers/controller/filter_param_matcher_test.rb +40 -0
- 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 +47 -0
- data/test/matchers/controller/respond_with_content_type_matcher_test.rb +32 -0
- data/test/matchers/controller/respond_with_matcher_test.rb +96 -0
- data/test/matchers/controller/route_matcher_test.rb +75 -0
- data/test/matchers/controller/set_session_matcher_test.rb +48 -0
- data/test/matchers/controller/set_the_flash_matcher.rb +95 -0
- data/test/other/autoload_macro_test.rb +18 -0
- data/test/other/context_test.rb +372 -0
- data/test/other/convert_to_should_syntax_test.rb +63 -0
- data/test/other/helpers_test.rb +317 -0
- data/test/other/private_helpers_test.rb +32 -0
- data/test/other/should_test.rb +271 -0
- data/test/rails2_model_builder.rb +130 -0
- data/test/rails2_root/app/controllers/application_controller.rb +22 -0
- data/test/rails2_root/app/controllers/posts_controller.rb +87 -0
- data/test/rails2_root/app/controllers/users_controller.rb +84 -0
- data/test/rails2_root/app/helpers/application_helper.rb +3 -0
- data/test/rails2_root/app/helpers/posts_helper.rb +2 -0
- data/test/rails2_root/app/helpers/users_helper.rb +2 -0
- data/test/rails2_root/app/models/address.rb +7 -0
- data/test/rails2_root/app/models/flea.rb +11 -0
- data/test/rails2_root/app/models/friendship.rb +4 -0
- data/test/rails2_root/app/models/notifier.rb +8 -0
- data/test/rails2_root/app/models/pets/cat.rb +7 -0
- data/test/rails2_root/app/models/pets/dog.rb +10 -0
- data/test/rails2_root/app/models/post.rb +12 -0
- data/test/rails2_root/app/models/product.rb +12 -0
- data/test/rails2_root/app/models/profile.rb +2 -0
- data/test/rails2_root/app/models/registration.rb +2 -0
- data/test/rails2_root/app/models/tag.rb +8 -0
- data/test/rails2_root/app/models/tagging.rb +4 -0
- data/test/rails2_root/app/models/treat.rb +3 -0
- data/test/rails2_root/app/models/user.rb +32 -0
- data/test/rails2_root/app/views/layouts/posts.rhtml +19 -0
- data/test/rails2_root/app/views/layouts/users.rhtml +17 -0
- data/test/rails2_root/app/views/layouts/wide.html.erb +1 -0
- data/test/rails2_root/app/views/notifier/the_email.html.erb +1 -0
- data/test/rails2_root/app/views/posts/edit.rhtml +27 -0
- data/test/rails2_root/app/views/posts/index.rhtml +25 -0
- data/test/rails2_root/app/views/posts/new.rhtml +26 -0
- data/test/rails2_root/app/views/posts/show.rhtml +18 -0
- data/test/rails2_root/app/views/users/edit.rhtml +22 -0
- data/test/rails2_root/app/views/users/index.rhtml +22 -0
- data/test/rails2_root/app/views/users/new.rhtml +21 -0
- data/test/rails2_root/app/views/users/show.rhtml +13 -0
- data/test/rails2_root/config/boot.rb +110 -0
- data/test/rails2_root/config/database.yml +4 -0
- data/test/rails2_root/config/environment.rb +17 -0
- data/test/rails2_root/config/environments/test.rb +23 -0
- data/test/rails2_root/config/initializers/new_rails_defaults.rb +15 -0
- data/test/rails2_root/config/initializers/shoulda.rb +8 -0
- data/test/rails2_root/config/routes.rb +6 -0
- data/test/rails2_root/db/migrate/001_create_users.rb +19 -0
- data/test/rails2_root/db/migrate/002_create_posts.rb +13 -0
- data/test/rails2_root/db/migrate/003_create_taggings.rb +12 -0
- data/test/rails2_root/db/migrate/004_create_tags.rb +11 -0
- data/test/rails2_root/db/migrate/005_create_dogs.rb +12 -0
- data/test/rails2_root/db/migrate/006_create_addresses.rb +14 -0
- data/test/rails2_root/db/migrate/007_create_fleas.rb +11 -0
- data/test/rails2_root/db/migrate/008_create_dogs_fleas.rb +12 -0
- data/test/rails2_root/db/migrate/009_create_products.rb +17 -0
- data/test/rails2_root/db/migrate/010_create_friendships.rb +14 -0
- data/test/rails2_root/db/migrate/011_create_treats.rb +12 -0
- data/test/rails2_root/db/migrate/20090506203502_create_profiles.rb +12 -0
- data/test/rails2_root/db/migrate/20090506203536_create_registrations.rb +14 -0
- data/test/rails2_root/db/migrate/20090513104502_create_cats.rb +12 -0
- data/test/rails2_root/db/schema.rb +0 -0
- data/test/rails2_root/public/404.html +30 -0
- data/test/rails2_root/public/422.html +30 -0
- data/test/rails2_root/public/500.html +30 -0
- data/test/rails2_root/script/console +3 -0
- data/test/rails2_root/script/generate +3 -0
- data/test/rails2_root/test/shoulda_macros/custom_macro.rb +6 -0
- data/test/rails2_root/vendor/gems/gem_with_macro-0.0.1/shoulda_macros/gem_macro.rb +6 -0
- data/test/rails2_root/vendor/plugins/plugin_with_macro/shoulda_macros/plugin_macro.rb +6 -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/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/config.ru +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/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/rspec_test.rb +207 -0
- data/test/test_helper.rb +36 -0
- data/test/unit/address_test.rb +10 -0
- data/test/unit/cat_test.rb +7 -0
- data/test/unit/dog_test.rb +9 -0
- data/test/unit/flea_test.rb +14 -0
- data/test/unit/friendship_test.rb +6 -0
- data/test/unit/post_test.rb +15 -0
- data/test/unit/product_test.rb +23 -0
- data/test/unit/tag_test.rb +11 -0
- data/test/unit/tagging_test.rb +6 -0
- data/test/unit/user_test.rb +46 -0
- 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
|