tpitale-shoulda 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/CONTRIBUTION_GUIDELINES.rdoc +10 -0
- data/MIT-LICENSE +22 -0
- data/README.rdoc +171 -0
- data/Rakefile +71 -0
- data/bin/convert_to_should_syntax +42 -0
- data/lib/shoulda.rb +11 -0
- data/lib/shoulda/action_controller.rb +26 -0
- data/lib/shoulda/action_controller/macros.rb +240 -0
- data/lib/shoulda/action_controller/matchers.rb +37 -0
- data/lib/shoulda/action_controller/matchers/assign_to_matcher.rb +109 -0
- data/lib/shoulda/action_controller/matchers/filter_param_matcher.rb +57 -0
- data/lib/shoulda/action_controller/matchers/render_with_layout_matcher.rb +81 -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 +81 -0
- data/lib/shoulda/action_controller/matchers/route_matcher.rb +93 -0
- data/lib/shoulda/action_controller/matchers/set_session_matcher.rb +87 -0
- data/lib/shoulda/action_controller/matchers/set_the_flash_matcher.rb +85 -0
- data/lib/shoulda/action_mailer.rb +10 -0
- data/lib/shoulda/action_mailer/assertions.rb +38 -0
- data/lib/shoulda/action_view.rb +10 -0
- data/lib/shoulda/action_view/macros.rb +61 -0
- data/lib/shoulda/active_record.rb +16 -0
- data/lib/shoulda/active_record/assertions.rb +69 -0
- data/lib/shoulda/active_record/helpers.rb +27 -0
- data/lib/shoulda/active_record/macros.rb +512 -0
- data/lib/shoulda/active_record/matchers.rb +43 -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 +102 -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_named_scope_matcher.rb +128 -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 +67 -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 +57 -0
- data/lib/shoulda/assertions.rb +71 -0
- data/lib/shoulda/autoload_macros.rb +46 -0
- data/lib/shoulda/context.rb +413 -0
- data/lib/shoulda/helpers.rb +8 -0
- data/lib/shoulda/macros.rb +133 -0
- data/lib/shoulda/minitest.rb +24 -0
- data/lib/shoulda/private_helpers.rb +13 -0
- data/lib/shoulda/proc_extensions.rb +14 -0
- data/lib/shoulda/rails.rb +13 -0
- data/lib/shoulda/rspec.rb +11 -0
- data/lib/shoulda/tasks.rb +3 -0
- data/lib/shoulda/tasks/list_tests.rake +29 -0
- data/lib/shoulda/tasks/yaml_to_shoulda.rake +28 -0
- data/lib/shoulda/test_unit.rb +22 -0
- data/rails/init.rb +7 -0
- data/test/README +36 -0
- data/test/fail_macros.rb +39 -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/matchers/active_record/allow_mass_assignment_of_matcher_test.rb +68 -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 +80 -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_named_scope_matcher_test.rb +65 -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 +35 -0
- data/test/matchers/controller/filter_param_matcher_test.rb +32 -0
- data/test/matchers/controller/render_with_layout_matcher_test.rb +33 -0
- data/test/matchers/controller/respond_with_content_type_matcher_test.rb +32 -0
- data/test/matchers/controller/respond_with_matcher_test.rb +106 -0
- data/test/matchers/controller/route_matcher_test.rb +58 -0
- data/test/matchers/controller/set_session_matcher_test.rb +38 -0
- data/test/matchers/controller/set_the_flash_matcher.rb +41 -0
- data/test/model_builder.rb +106 -0
- data/test/other/autoload_macro_test.rb +18 -0
- data/test/other/context_test.rb +203 -0
- data/test/other/convert_to_should_syntax_test.rb +63 -0
- data/test/other/helpers_test.rb +340 -0
- data/test/other/private_helpers_test.rb +32 -0
- data/test/other/should_test.rb +271 -0
- data/test/rails_root/app/controllers/application_controller.rb +25 -0
- data/test/rails_root/app/controllers/posts_controller.rb +87 -0
- data/test/rails_root/app/controllers/users_controller.rb +84 -0
- data/test/rails_root/app/helpers/application_helper.rb +3 -0
- data/test/rails_root/app/helpers/posts_helper.rb +2 -0
- data/test/rails_root/app/helpers/users_helper.rb +2 -0
- data/test/rails_root/app/models/address.rb +7 -0
- data/test/rails_root/app/models/flea.rb +3 -0
- data/test/rails_root/app/models/friendship.rb +4 -0
- data/test/rails_root/app/models/pets/cat.rb +7 -0
- data/test/rails_root/app/models/pets/dog.rb +10 -0
- data/test/rails_root/app/models/post.rb +12 -0
- data/test/rails_root/app/models/product.rb +12 -0
- data/test/rails_root/app/models/profile.rb +2 -0
- data/test/rails_root/app/models/registration.rb +2 -0
- data/test/rails_root/app/models/tag.rb +8 -0
- data/test/rails_root/app/models/tagging.rb +4 -0
- data/test/rails_root/app/models/treat.rb +3 -0
- data/test/rails_root/app/models/user.rb +32 -0
- data/test/rails_root/app/views/layouts/posts.rhtml +19 -0
- data/test/rails_root/app/views/layouts/users.rhtml +17 -0
- data/test/rails_root/app/views/layouts/wide.html.erb +1 -0
- data/test/rails_root/app/views/posts/edit.rhtml +27 -0
- data/test/rails_root/app/views/posts/index.rhtml +25 -0
- data/test/rails_root/app/views/posts/new.rhtml +26 -0
- data/test/rails_root/app/views/posts/show.rhtml +18 -0
- data/test/rails_root/app/views/users/edit.rhtml +22 -0
- data/test/rails_root/app/views/users/index.rhtml +22 -0
- data/test/rails_root/app/views/users/new.rhtml +21 -0
- data/test/rails_root/app/views/users/show.rhtml +13 -0
- data/test/rails_root/config/boot.rb +110 -0
- data/test/rails_root/config/database.yml +4 -0
- data/test/rails_root/config/environment.rb +18 -0
- data/test/rails_root/config/environments/test.rb +0 -0
- data/test/rails_root/config/initializers/new_rails_defaults.rb +15 -0
- data/test/rails_root/config/initializers/shoulda.rb +8 -0
- data/test/rails_root/config/routes.rb +6 -0
- data/test/rails_root/db/migrate/001_create_users.rb +19 -0
- data/test/rails_root/db/migrate/002_create_posts.rb +13 -0
- data/test/rails_root/db/migrate/003_create_taggings.rb +12 -0
- data/test/rails_root/db/migrate/004_create_tags.rb +11 -0
- data/test/rails_root/db/migrate/005_create_dogs.rb +12 -0
- data/test/rails_root/db/migrate/006_create_addresses.rb +14 -0
- data/test/rails_root/db/migrate/007_create_fleas.rb +11 -0
- data/test/rails_root/db/migrate/008_create_dogs_fleas.rb +12 -0
- data/test/rails_root/db/migrate/009_create_products.rb +17 -0
- data/test/rails_root/db/migrate/010_create_friendships.rb +14 -0
- data/test/rails_root/db/migrate/011_create_treats.rb +12 -0
- data/test/rails_root/db/migrate/20090506203502_create_profiles.rb +12 -0
- data/test/rails_root/db/migrate/20090506203536_create_registrations.rb +14 -0
- data/test/rails_root/db/migrate/20090513104502_create_cats.rb +12 -0
- data/test/rails_root/db/schema.rb +0 -0
- data/test/rails_root/log/test.log +1 -0
- data/test/rails_root/public/404.html +30 -0
- data/test/rails_root/public/422.html +30 -0
- data/test/rails_root/public/500.html +30 -0
- data/test/rails_root/script/console +3 -0
- data/test/rails_root/script/generate +3 -0
- data/test/rails_root/test/shoulda_macros/custom_macro.rb +6 -0
- data/test/rails_root/vendor/gems/gem_with_macro-0.0.1/shoulda_macros/gem_macro.rb +6 -0
- data/test/rails_root/vendor/plugins/plugin_with_macro/shoulda_macros/plugin_macro.rb +6 -0
- data/test/rspec_test.rb +207 -0
- data/test/test_helper.rb +28 -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 +6 -0
- data/test/unit/friendship_test.rb +6 -0
- data/test/unit/post_test.rb +19 -0
- data/test/unit/product_test.rb +23 -0
- data/test/unit/tag_test.rb +15 -0
- data/test/unit/tagging_test.rb +6 -0
- data/test/unit/user_test.rb +80 -0
- metadata +226 -0
@@ -0,0 +1,35 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', '..', '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
|
+
end
|
34
|
+
|
35
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
|
2
|
+
|
3
|
+
class FilterParamMatcherTest < ActionController::TestCase # :nodoc:
|
4
|
+
|
5
|
+
context "a controller that filters no parameters" do
|
6
|
+
setup do
|
7
|
+
@controller = define_controller(:examples).new
|
8
|
+
end
|
9
|
+
|
10
|
+
should "reject filtering any parameter" do
|
11
|
+
assert_rejects filter_param(:any), @controller
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context "a controller that filters a parameter" do
|
16
|
+
setup do
|
17
|
+
@controller = define_controller :examples do
|
18
|
+
filter_parameter_logging :password
|
19
|
+
end.new
|
20
|
+
end
|
21
|
+
|
22
|
+
should "accept filtering that parameter" do
|
23
|
+
assert_accepts filter_param(:password), @controller
|
24
|
+
end
|
25
|
+
|
26
|
+
should "reject filtering another parameter" do
|
27
|
+
assert_rejects filter_param(:other), @controller
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
|
2
|
+
|
3
|
+
class RenderWithLayoutMatcherTest < ActionController::TestCase # :nodoc:
|
4
|
+
|
5
|
+
context "a controller that renders with a layout" do
|
6
|
+
setup do
|
7
|
+
@controller = build_response { render :layout => 'wide' }
|
8
|
+
end
|
9
|
+
|
10
|
+
should "accept rendering with any layout" do
|
11
|
+
assert_accepts render_with_layout, @controller
|
12
|
+
end
|
13
|
+
|
14
|
+
should "accept rendering with that layout" do
|
15
|
+
assert_accepts render_with_layout(:wide), @controller
|
16
|
+
end
|
17
|
+
|
18
|
+
should "reject rendering with another layout" do
|
19
|
+
assert_rejects render_with_layout(:other), @controller
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "a controller that renders without a layout" do
|
24
|
+
setup do
|
25
|
+
@controller = build_response { render :layout => false }
|
26
|
+
end
|
27
|
+
|
28
|
+
should "reject rendering with a layout" do
|
29
|
+
assert_rejects render_with_layout, @controller
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', '..', '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,106 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', '..', '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
|
+
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
|
+
|
105
|
+
end
|
106
|
+
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
|
2
|
+
|
3
|
+
class RouteToMatcherTest < ActionController::TestCase # :nodoc:
|
4
|
+
|
5
|
+
context "given a controller with a defined route" 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 routing the correct path to the correct parameters" do
|
15
|
+
assert_accepts route(:get, '/examples/1').
|
16
|
+
to(:action => 'example', :id => '1'),
|
17
|
+
@controller
|
18
|
+
end
|
19
|
+
|
20
|
+
should "accept a symbol controller" do
|
21
|
+
assert_accepts route(:get, '/examples/1').
|
22
|
+
to(:controller => :examples,
|
23
|
+
:action => 'example',
|
24
|
+
:id => '1'),
|
25
|
+
self
|
26
|
+
end
|
27
|
+
|
28
|
+
should "accept a symbol action" do
|
29
|
+
assert_accepts route(:get, '/examples/1').
|
30
|
+
to(:action => :example, :id => '1'),
|
31
|
+
@controller
|
32
|
+
end
|
33
|
+
|
34
|
+
should "accept a non-string parameter" do
|
35
|
+
assert_accepts route(:get, '/examples/1').
|
36
|
+
to(:action => 'example', :id => 1),
|
37
|
+
@controller
|
38
|
+
end
|
39
|
+
|
40
|
+
should "reject an undefined route" do
|
41
|
+
assert_rejects route(:get, '/bad_route').to(:var => 'value'), @controller
|
42
|
+
end
|
43
|
+
|
44
|
+
should "reject a route for another controller" do
|
45
|
+
@other = define_controller('Other').new
|
46
|
+
assert_rejects route(:get, '/examples/1').
|
47
|
+
to(:action => 'example', :id => '1'),
|
48
|
+
@other
|
49
|
+
end
|
50
|
+
|
51
|
+
should "reject a route for different parameters" do
|
52
|
+
assert_rejects route(:get, '/examples/1').
|
53
|
+
to(:action => 'other', :id => '1'),
|
54
|
+
@controller
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', '..', '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
|
+
end
|
37
|
+
|
38
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
|
2
|
+
|
3
|
+
class SetTheFlashMatcherTest < ActionController::TestCase # :nodoc:
|
4
|
+
|
5
|
+
context "a controller that sets a flash message" do
|
6
|
+
setup do
|
7
|
+
@controller = build_response { flash[:notice] = 'value' }
|
8
|
+
end
|
9
|
+
|
10
|
+
should "accept setting any flash message" do
|
11
|
+
assert_accepts set_the_flash, @controller
|
12
|
+
end
|
13
|
+
|
14
|
+
should "accept setting the exact flash message" do
|
15
|
+
assert_accepts set_the_flash.to('value'), @controller
|
16
|
+
end
|
17
|
+
|
18
|
+
should "accept setting a matched flash message" do
|
19
|
+
assert_accepts set_the_flash.to(/value/), @controller
|
20
|
+
end
|
21
|
+
|
22
|
+
should "reject setting a different flash message" do
|
23
|
+
assert_rejects set_the_flash.to('other'), @controller
|
24
|
+
end
|
25
|
+
|
26
|
+
should "reject setting a different pattern" do
|
27
|
+
assert_rejects set_the_flash.to(/other/), @controller
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context "a controller that doesn't set a flash message" do
|
32
|
+
setup do
|
33
|
+
@controller = build_response
|
34
|
+
end
|
35
|
+
|
36
|
+
should "reject setting any flash message" do
|
37
|
+
assert_rejects set_the_flash, @controller
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
class ActiveSupport::TestCase
|
2
|
+
def create_table(table_name, &block)
|
3
|
+
connection = ActiveRecord::Base.connection
|
4
|
+
|
5
|
+
begin
|
6
|
+
connection.execute("DROP TABLE IF EXISTS #{table_name}")
|
7
|
+
connection.create_table(table_name, &block)
|
8
|
+
@created_tables ||= []
|
9
|
+
@created_tables << table_name
|
10
|
+
connection
|
11
|
+
rescue Exception => e
|
12
|
+
connection.execute("DROP TABLE IF EXISTS #{table_name}")
|
13
|
+
raise e
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def define_constant(class_name, base, &block)
|
18
|
+
class_name = class_name.to_s.camelize
|
19
|
+
|
20
|
+
klass = Class.new(base)
|
21
|
+
Object.const_set(class_name, klass)
|
22
|
+
|
23
|
+
klass.class_eval(&block) if block_given?
|
24
|
+
|
25
|
+
@defined_constants ||= []
|
26
|
+
@defined_constants << class_name
|
27
|
+
|
28
|
+
klass
|
29
|
+
end
|
30
|
+
|
31
|
+
def define_model_class(class_name, &block)
|
32
|
+
define_constant(class_name, ActiveRecord::Base, &block)
|
33
|
+
end
|
34
|
+
|
35
|
+
def define_model(name, columns = {}, &block)
|
36
|
+
class_name = name.to_s.pluralize.classify
|
37
|
+
table_name = class_name.tableize
|
38
|
+
|
39
|
+
create_table(table_name) do |table|
|
40
|
+
columns.each do |name, type|
|
41
|
+
table.column name, type
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
define_model_class(class_name, &block)
|
46
|
+
end
|
47
|
+
|
48
|
+
def define_controller(class_name, &block)
|
49
|
+
class_name = class_name.to_s
|
50
|
+
class_name << 'Controller' unless class_name =~ /Controller$/
|
51
|
+
define_constant(class_name, ActionController::Base, &block)
|
52
|
+
end
|
53
|
+
|
54
|
+
def define_routes(&block)
|
55
|
+
@replaced_routes = ActionController::Routing::Routes
|
56
|
+
new_routes = ActionController::Routing::RouteSet.new
|
57
|
+
silence_warnings do
|
58
|
+
ActionController::Routing.const_set('Routes', new_routes)
|
59
|
+
end
|
60
|
+
new_routes.draw(&block)
|
61
|
+
end
|
62
|
+
|
63
|
+
def build_response(&block)
|
64
|
+
klass = define_controller('Examples')
|
65
|
+
block ||= lambda { render :nothing => true }
|
66
|
+
klass.class_eval { define_method(:example, &block) }
|
67
|
+
define_routes do |map|
|
68
|
+
map.connect 'examples', :controller => 'examples', :action => 'example'
|
69
|
+
end
|
70
|
+
|
71
|
+
@controller = klass.new
|
72
|
+
@request = ActionController::TestRequest.new
|
73
|
+
@response = ActionController::TestResponse.new
|
74
|
+
get :example
|
75
|
+
|
76
|
+
@controller
|
77
|
+
end
|
78
|
+
|
79
|
+
def teardown_with_models
|
80
|
+
if @defined_constants
|
81
|
+
@defined_constants.each do |class_name|
|
82
|
+
Object.send(:remove_const, class_name)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
if @created_tables
|
87
|
+
@created_tables.each do |table_name|
|
88
|
+
ActiveRecord::Base.
|
89
|
+
connection.
|
90
|
+
execute("DROP TABLE IF EXISTS #{table_name}")
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
if @replaced_routes
|
95
|
+
ActionController::Routing::Routes.clear!
|
96
|
+
silence_warnings do
|
97
|
+
ActionController::Routing.const_set('Routes', @replaced_routes)
|
98
|
+
end
|
99
|
+
@replaced_routes.reload!
|
100
|
+
end
|
101
|
+
|
102
|
+
teardown_without_models
|
103
|
+
end
|
104
|
+
alias_method :teardown_without_models, :teardown
|
105
|
+
alias_method :teardown, :teardown_with_models
|
106
|
+
end
|