shoulda-matchers 1.4.2 → 1.5.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/.travis.yml +11 -3
- data/Appraisals +3 -3
- data/Gemfile +1 -1
- data/Gemfile.lock +69 -70
- data/MIT-LICENSE +1 -1
- data/NEWS.md +22 -4
- data/README.md +3 -1
- data/Rakefile +9 -5
- data/features/step_definitions/rails_steps.rb +7 -7
- data/features/support/env.rb +1 -1
- data/gemfiles/3.0.gemfile +1 -1
- data/gemfiles/3.0.gemfile.lock +25 -22
- data/gemfiles/3.1.gemfile +1 -1
- data/gemfiles/3.1.gemfile.lock +27 -24
- data/gemfiles/3.2.gemfile +1 -1
- data/gemfiles/3.2.gemfile.lock +56 -52
- data/lib/shoulda/matchers/action_controller.rb +3 -2
- data/lib/shoulda/matchers/action_controller/assign_to_matcher.rb +10 -8
- data/lib/shoulda/matchers/action_controller/filter_param_matcher.rb +2 -4
- data/lib/shoulda/matchers/action_controller/redirect_to_matcher.rb +3 -4
- data/lib/shoulda/matchers/action_controller/render_template_matcher.rb +3 -4
- data/lib/shoulda/matchers/action_controller/render_with_layout_matcher.rb +6 -6
- data/lib/shoulda/matchers/action_controller/respond_with_content_type_matcher.rb +5 -2
- data/lib/shoulda/matchers/action_controller/respond_with_matcher.rb +2 -2
- data/lib/shoulda/matchers/action_controller/route_matcher.rb +12 -12
- data/lib/shoulda/matchers/action_controller/set_session_matcher.rb +3 -4
- data/lib/shoulda/matchers/action_controller/set_the_flash_matcher.rb +10 -11
- data/lib/shoulda/matchers/action_controller/strong_parameters_matcher.rb +121 -0
- data/lib/shoulda/matchers/action_mailer/have_sent_email_matcher.rb +7 -4
- data/lib/shoulda/matchers/active_model.rb +1 -1
- data/lib/shoulda/matchers/active_model/allow_mass_assignment_of_matcher.rb +8 -8
- data/lib/shoulda/matchers/active_model/allow_value_matcher.rb +5 -4
- data/lib/shoulda/matchers/active_model/disallow_value_matcher.rb +3 -3
- data/lib/shoulda/matchers/active_model/ensure_inclusion_of_matcher.rb +2 -2
- data/lib/shoulda/matchers/active_model/exception_message_finder.rb +0 -1
- data/lib/shoulda/matchers/active_model/helpers.rb +16 -7
- data/lib/shoulda/matchers/active_model/only_integer_matcher.rb +3 -3
- data/lib/shoulda/matchers/active_model/validate_confirmation_of_matcher.rb +8 -6
- data/lib/shoulda/matchers/active_model/validate_format_of_matcher.rb +19 -10
- data/lib/shoulda/matchers/active_model/validate_numericality_of_matcher.rb +4 -4
- data/lib/shoulda/matchers/active_model/validate_uniqueness_of_matcher.rb +19 -21
- data/lib/shoulda/matchers/active_model/validation_matcher.rb +7 -7
- data/lib/shoulda/matchers/active_model/validation_message_finder.rb +1 -1
- data/lib/shoulda/matchers/active_record/accept_nested_attributes_for_matcher.rb +5 -5
- data/lib/shoulda/matchers/active_record/association_matcher.rb +3 -3
- data/lib/shoulda/matchers/active_record/have_db_column_matcher.rb +11 -7
- data/lib/shoulda/matchers/active_record/have_db_index_matcher.rb +2 -2
- data/lib/shoulda/matchers/active_record/have_readonly_attribute_matcher.rb +5 -5
- data/lib/shoulda/matchers/active_record/query_the_database_matcher.rb +5 -2
- data/lib/shoulda/matchers/active_record/serialize_matcher.rb +3 -3
- data/lib/shoulda/matchers/assertion_error.rb +4 -1
- data/lib/shoulda/matchers/independent/delegate_matcher.rb +17 -7
- data/lib/shoulda/matchers/integrations/rspec.rb +19 -33
- data/lib/shoulda/matchers/version.rb +1 -1
- data/shoulda-matchers.gemspec +6 -4
- data/spec/shoulda/matchers/action_controller/assign_to_matcher_spec.rb +66 -0
- data/spec/shoulda/matchers/action_controller/filter_param_matcher_spec.rb +22 -0
- data/spec/shoulda/matchers/action_controller/redirect_to_matcher_spec.rb +42 -0
- data/spec/shoulda/matchers/action_controller/render_template_matcher_spec.rb +78 -0
- data/spec/shoulda/matchers/action_controller/render_with_layout_matcher_spec.rb +58 -0
- data/spec/shoulda/matchers/action_controller/respond_with_content_type_matcher_spec.rb +31 -0
- data/spec/shoulda/matchers/action_controller/respond_with_matcher_spec.rb +31 -0
- data/spec/shoulda/matchers/action_controller/route_matcher_spec.rb +65 -0
- data/spec/shoulda/matchers/action_controller/set_session_matcher_spec.rb +51 -0
- data/spec/shoulda/matchers/action_controller/set_the_flash_matcher_spec.rb +153 -0
- data/spec/shoulda/matchers/action_controller/strong_parameters_matcher_spec.rb +142 -0
- data/spec/shoulda/matchers/action_mailer/have_sent_email_spec.rb +324 -0
- data/spec/shoulda/matchers/active_model/allow_mass_assignment_of_matcher_spec.rb +111 -0
- data/spec/shoulda/matchers/active_model/allow_value_matcher_spec.rb +124 -0
- data/spec/shoulda/matchers/active_model/disallow_value_matcher_spec.rb +43 -0
- data/spec/shoulda/matchers/active_model/ensure_exclusion_of_matcher_spec.rb +74 -0
- data/spec/shoulda/matchers/active_model/ensure_inclusion_of_matcher_spec.rb +171 -0
- data/spec/shoulda/matchers/active_model/ensure_length_of_matcher_spec.rb +113 -0
- data/spec/shoulda/{active_model → matchers/active_model}/exception_message_finder_spec.rb +2 -2
- data/spec/shoulda/matchers/active_model/helpers_spec.rb +158 -0
- data/spec/shoulda/matchers/active_model/only_integer_matcher_spec.rb +52 -0
- data/spec/shoulda/matchers/active_model/validate_acceptance_of_matcher_spec.rb +41 -0
- data/spec/shoulda/matchers/active_model/validate_confirmation_of_matcher_spec.rb +41 -0
- data/spec/shoulda/matchers/active_model/validate_format_of_matcher_spec.rb +75 -0
- data/spec/shoulda/matchers/active_model/validate_numericality_of_matcher_spec.rb +73 -0
- data/spec/shoulda/matchers/active_model/validate_presence_of_matcher_spec.rb +127 -0
- data/spec/shoulda/matchers/active_model/validate_uniqueness_of_matcher_spec.rb +175 -0
- data/spec/shoulda/{active_model → matchers/active_model}/validation_message_finder_spec.rb +0 -1
- data/spec/shoulda/matchers/active_record/accept_nested_attributes_for_matcher_spec.rb +106 -0
- data/spec/shoulda/matchers/active_record/association_matcher_spec.rb +534 -0
- data/spec/shoulda/matchers/active_record/have_db_column_matcher_spec.rb +111 -0
- data/spec/shoulda/matchers/active_record/have_db_index_matcher_spec.rb +78 -0
- data/spec/shoulda/matchers/active_record/have_readonly_attributes_matcher_spec.rb +41 -0
- data/spec/shoulda/{active_record → matchers/active_record}/query_the_database_matcher_spec.rb +10 -10
- data/spec/shoulda/matchers/active_record/serialize_matcher_spec.rb +86 -0
- data/spec/shoulda/{independent → matchers/independent}/delegate_matcher_spec.rb +55 -34
- data/spec/spec_helper.rb +1 -2
- data/spec/support/active_model_versions.rb +4 -0
- data/spec/support/activemodel_helpers.rb +19 -0
- data/spec/support/controller_builder.rb +38 -12
- data/spec/support/model_builder.rb +8 -2
- metadata +106 -98
- data/spec/fixtures/addresses.yml +0 -3
- data/spec/fixtures/friendships.yml +0 -0
- data/spec/fixtures/posts.yml +0 -5
- data/spec/fixtures/products.yml +0 -0
- data/spec/fixtures/taggings.yml +0 -0
- data/spec/fixtures/tags.yml +0 -9
- data/spec/fixtures/users.yml +0 -6
- data/spec/shoulda/action_controller/assign_to_matcher_spec.rb +0 -63
- data/spec/shoulda/action_controller/filter_param_matcher_spec.rb +0 -20
- data/spec/shoulda/action_controller/redirect_to_matcher_spec.rb +0 -40
- data/spec/shoulda/action_controller/render_template_matcher_spec.rb +0 -69
- data/spec/shoulda/action_controller/render_with_layout_matcher_spec.rb +0 -55
- data/spec/shoulda/action_controller/respond_with_content_type_matcher_spec.rb +0 -28
- data/spec/shoulda/action_controller/respond_with_matcher_spec.rb +0 -83
- data/spec/shoulda/action_controller/route_matcher_spec.rb +0 -65
- data/spec/shoulda/action_controller/set_session_matcher_spec.rb +0 -46
- data/spec/shoulda/action_controller/set_the_flash_matcher_spec.rb +0 -130
- data/spec/shoulda/action_mailer/have_sent_email_spec.rb +0 -333
- data/spec/shoulda/active_model/allow_mass_assignment_of_matcher_spec.rb +0 -115
- data/spec/shoulda/active_model/allow_value_matcher_spec.rb +0 -131
- data/spec/shoulda/active_model/disallow_value_matcher_spec.rb +0 -65
- data/spec/shoulda/active_model/ensure_exclusion_of_matcher_spec.rb +0 -79
- data/spec/shoulda/active_model/ensure_inclusion_of_matcher_spec.rb +0 -181
- data/spec/shoulda/active_model/ensure_length_of_matcher_spec.rb +0 -138
- data/spec/shoulda/active_model/helpers_spec.rb +0 -129
- data/spec/shoulda/active_model/only_integer_matcher_spec.rb +0 -69
- data/spec/shoulda/active_model/validate_acceptance_of_matcher_spec.rb +0 -43
- data/spec/shoulda/active_model/validate_confirmation_of_matcher_spec.rb +0 -48
- data/spec/shoulda/active_model/validate_format_of_matcher_spec.rb +0 -79
- data/spec/shoulda/active_model/validate_numericality_of_matcher_spec.rb +0 -112
- data/spec/shoulda/active_model/validate_presence_of_matcher_spec.rb +0 -135
- data/spec/shoulda/active_model/validate_uniqueness_of_matcher_spec.rb +0 -154
- data/spec/shoulda/active_record/accept_nested_attributes_for_matcher_spec.rb +0 -84
- data/spec/shoulda/active_record/association_matcher_spec.rb +0 -642
- data/spec/shoulda/active_record/have_db_column_matcher_spec.rb +0 -185
- data/spec/shoulda/active_record/have_db_index_matcher_spec.rb +0 -105
- data/spec/shoulda/active_record/have_readonly_attributes_matcher_spec.rb +0 -46
- data/spec/shoulda/active_record/serialize_matcher_spec.rb +0 -81
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Shoulda::Matchers::ActionController::FilterParamMatcher do
|
4
|
+
it 'accepts filtering a filtered parameter' do
|
5
|
+
filter(:secret)
|
6
|
+
|
7
|
+
nil.should filter_param(:secret)
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'rejects filtering an unfiltered parameter' do
|
11
|
+
filter(:secret)
|
12
|
+
matcher = filter_param(:other)
|
13
|
+
|
14
|
+
matcher.matches?(nil).should be_false
|
15
|
+
|
16
|
+
matcher.failure_message_for_should.should =~ /Expected other to be filtered.*secret/
|
17
|
+
end
|
18
|
+
|
19
|
+
def filter(param)
|
20
|
+
Rails.application.config.filter_parameters = [param]
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Shoulda::Matchers::ActionController::RedirectToMatcher do
|
4
|
+
context 'a controller that redirects' do
|
5
|
+
it 'accepts redirecting to that url' do
|
6
|
+
controller_redirecting_to('/some/url').should redirect_to('/some/url')
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'rejects redirecting to a different url' do
|
10
|
+
controller_redirecting_to('/some/url').
|
11
|
+
should_not redirect_to('/some/other/url')
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'accepts redirecting to that url in a block' do
|
15
|
+
controller_redirecting_to('/some/url').
|
16
|
+
should redirect_to('somewhere') { '/some/url' }
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'rejects redirecting to a different url in a block' do
|
20
|
+
controller_redirecting_to('/some/url').
|
21
|
+
should_not redirect_to('somewhere else') { '/some/other/url' }
|
22
|
+
end
|
23
|
+
|
24
|
+
def controller_redirecting_to(url)
|
25
|
+
build_response { redirect_to url }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'a controller that does not redirect' do
|
30
|
+
it 'rejects redirecting to a url' do
|
31
|
+
controller = build_response { render :text => 'hello' }
|
32
|
+
|
33
|
+
controller.should_not redirect_to('/some/url')
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'provides the correct description when provided a block' do
|
38
|
+
matcher = redirect_to('somewhere else') { '/some/other/url' }
|
39
|
+
|
40
|
+
matcher.description.should == 'redirect to somewhere else'
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Shoulda::Matchers::ActionController::RenderTemplateMatcher do
|
4
|
+
include ActionController::TemplateAssertions
|
5
|
+
|
6
|
+
context 'a controller that renders a template' do
|
7
|
+
it 'accepts rendering that template' do
|
8
|
+
controller_with_show.should render_template(:show)
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'rejects rendering a different template' do
|
12
|
+
controller_with_show.should_not render_template(:index)
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'accepts rendering that template in the given context' do
|
16
|
+
controller_with_show.should render_template(:show).in_context(self)
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'rejects rendering a different template in the given context' do
|
20
|
+
controller_with_show.should_not render_template(:index).in_context(self)
|
21
|
+
end
|
22
|
+
|
23
|
+
def controller_with_show
|
24
|
+
build_response(:action => 'show') { render }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'a controller that renders a partial' do
|
29
|
+
it 'accepts rendering that partial' do
|
30
|
+
controller_with_customer_partial.
|
31
|
+
should render_template(:partial => '_customer')
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'rejects rendering a different template' do
|
35
|
+
controller_with_customer_partial.
|
36
|
+
should_not render_template(:partial => '_client')
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'accepts rendering that template in the given context' do
|
40
|
+
controller_with_customer_partial.
|
41
|
+
should render_template(:partial => '_customer').in_context(self)
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'rejects rendering a different template in the given context' do
|
45
|
+
controller_with_customer_partial.
|
46
|
+
should_not render_template(:partial => '_client').in_context(self)
|
47
|
+
end
|
48
|
+
|
49
|
+
def controller_with_customer_partial
|
50
|
+
build_response(:partial => '_customer') { render :partial => 'customer' }
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
context 'a controller that does not render partials' do
|
55
|
+
it 'accepts not rendering a partial' do
|
56
|
+
controller = build_response(:action => 'show') { render }
|
57
|
+
|
58
|
+
controller.should render_template(:partial => false)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
context 'a controller that renders a partial several times' do
|
63
|
+
it 'accepts rendering that partial twice' do
|
64
|
+
controller = build_response(:partial => '_customer') do
|
65
|
+
render :partial => 'customer', :collection => [1,2]
|
66
|
+
end
|
67
|
+
|
68
|
+
controller.should render_template(:partial => '_customer', :count => 2)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
context 'a controller that does not render a template' do
|
73
|
+
it 'rejects rendering a template' do
|
74
|
+
build_response { render :nothing => true }.
|
75
|
+
should_not render_template(:show)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Shoulda::Matchers::ActionController::RenderWithLayoutMatcher do
|
4
|
+
include ActionController::TemplateAssertions
|
5
|
+
|
6
|
+
context 'a controller that renders with a layout' do
|
7
|
+
it 'accepts rendering with any layout' do
|
8
|
+
controller_with_wide_layout.should render_with_layout
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'accepts rendering with that layout' do
|
12
|
+
controller_with_wide_layout.should render_with_layout(:wide)
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'rejects rendering with another layout' do
|
16
|
+
controller_with_wide_layout.should_not render_with_layout(:other)
|
17
|
+
end
|
18
|
+
|
19
|
+
def controller_with_wide_layout
|
20
|
+
create_view('layouts/wide.html.erb', 'some content, <%= yield %>')
|
21
|
+
build_response { render :layout => 'wide' }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'a controller that renders without a layout' do
|
26
|
+
|
27
|
+
it 'rejects rendering with a layout' do
|
28
|
+
controller_without_layout = build_response { render :layout => false }
|
29
|
+
|
30
|
+
controller_without_layout.should_not render_with_layout
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'a controller that renders a partial' do
|
35
|
+
it 'rejects rendering with a layout' do
|
36
|
+
controller_with_partial = build_response { render :partial => 'partial' }
|
37
|
+
|
38
|
+
controller_with_partial.should_not render_with_layout
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context 'given a context with layouts' do
|
43
|
+
it 'accepts that layout in that context' do
|
44
|
+
set_in_context_layout('happy')
|
45
|
+
|
46
|
+
controller_without_layout.should render_with_layout('happy').in_context(self)
|
47
|
+
end
|
48
|
+
|
49
|
+
def set_in_context_layout(layout)
|
50
|
+
@layouts = Hash.new(0)
|
51
|
+
@layouts[layout] = 1
|
52
|
+
end
|
53
|
+
|
54
|
+
def controller_without_layout
|
55
|
+
build_response { render :layout => false }
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Shoulda::Matchers::ActionController::RespondWithContentTypeMatcher do
|
4
|
+
it 'generates the correct description' do
|
5
|
+
expected = 'respond with content type of application/xml'
|
6
|
+
|
7
|
+
respond_with_content_type(:xml).description.should == expected
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'accepts responding with content type as symbol' do
|
11
|
+
xml_controller.should respond_with_content_type(:xml)
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'accepts responding with qualified MIME-style content type' do
|
15
|
+
xml_controller.should respond_with_content_type('application/xml')
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'accepts responding with a regex matching the content type' do
|
19
|
+
xml_controller.should respond_with_content_type(/xml/)
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'rejects responding with another content type' do
|
23
|
+
xml_controller.should_not respond_with_content_type(:json)
|
24
|
+
end
|
25
|
+
|
26
|
+
def xml_controller
|
27
|
+
build_response do
|
28
|
+
render :xml => { :user => 'thoughtbot' }.to_xml
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Shoulda::Matchers::ActionController::RespondWithMatcher do
|
4
|
+
statuses = { :success => 200, :redirect => 301, :missing => 404, :error => 500,
|
5
|
+
:not_implemented => 501 }
|
6
|
+
|
7
|
+
statuses.each do |human_name, numeric_code|
|
8
|
+
context "a controller responding with #{human_name}" do
|
9
|
+
it 'accepts responding with a numeric response code' do
|
10
|
+
controller_with_status(numeric_code).should respond_with(numeric_code)
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'accepts responding with a symbol response code' do
|
14
|
+
controller_with_status(numeric_code).should respond_with(human_name)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'rejects responding with another status' do
|
18
|
+
another_status = statuses.except(human_name).keys.first
|
19
|
+
|
20
|
+
controller_with_status(numeric_code).
|
21
|
+
should_not respond_with(another_status)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def controller_with_status(status)
|
27
|
+
build_response do
|
28
|
+
render :text => 'text', :status => status
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Shoulda::Matchers::ActionController::RouteMatcher do
|
4
|
+
context 'given a controller with a defined glob url' do
|
5
|
+
it 'accepts glob route' do
|
6
|
+
controller = define_controller('Examples').new
|
7
|
+
|
8
|
+
define_routes do
|
9
|
+
match 'examples/*id', :to => 'examples#example'
|
10
|
+
end
|
11
|
+
|
12
|
+
controller.should route(:get, '/examples/foo/bar').
|
13
|
+
to(:action => 'example', :id => 'foo/bar')
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'given a controller with a defined route' do
|
18
|
+
|
19
|
+
it 'accepts routing the correct path to the correct parameters' do
|
20
|
+
route_examples_to_examples.should route(:get, '/examples/1').
|
21
|
+
to(:action => 'example', :id => '1')
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'accepts a symbol controller' do
|
25
|
+
route_examples_to_examples
|
26
|
+
Object.new.should route(:get, '/examples/1').
|
27
|
+
to(:controller => :examples, :action => 'example', :id => '1')
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'accepts a symbol action' do
|
31
|
+
route_examples_to_examples.should route(:get, '/examples/1').
|
32
|
+
to(:action => :example, :id => '1')
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'accepts a non-string parameter' do
|
36
|
+
route_examples_to_examples.should route(:get, '/examples/1').
|
37
|
+
to(:action => 'example', :id => 1)
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'rejects an undefined route' do
|
41
|
+
route_examples_to_examples.
|
42
|
+
should_not route(:get, '/bad_route').to(:var => 'value')
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'rejects a route for another controller' do
|
46
|
+
route_examples_to_examples
|
47
|
+
other = define_controller('Other').new
|
48
|
+
other.should_not route(:get, '/examples/1').
|
49
|
+
to(:action => 'example', :id => '1')
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'rejects a route for different parameters' do
|
53
|
+
route_examples_to_examples.should_not route(:get, '/examples/1').
|
54
|
+
to(:action => 'other', :id => '1')
|
55
|
+
end
|
56
|
+
|
57
|
+
def route_examples_to_examples
|
58
|
+
define_routes do
|
59
|
+
get 'examples/:id', :to => 'examples#example'
|
60
|
+
end
|
61
|
+
|
62
|
+
define_controller('Examples').new
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Shoulda::Matchers::ActionController::SetSessionMatcher do
|
4
|
+
context 'a controller that sets a session variable' do
|
5
|
+
it 'accepts assigning to that variable' do
|
6
|
+
controller_with_session(:var => 'hi').should set_session(:var)
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'accepts assigning the correct value to that variable' do
|
10
|
+
controller_with_session(:var => 'hi').should set_session(:var).to('hi')
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'rejects assigning another value to that variable' do
|
14
|
+
controller_with_session(:var => 'hi').should_not set_session(:var).to('other')
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'rejects assigning to another variable' do
|
18
|
+
controller_with_session(:var => 'hi').should_not set_session(:other)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'accepts assigning nil to another variable' do
|
22
|
+
controller_with_session(:var => 'hi').should set_session(:other).to(nil)
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'accepts assigning false to that variable' do
|
26
|
+
controller_with_session(:var => false).should set_session(:var).to(false)
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'accepts assigning to the same value in the test context' do
|
30
|
+
expected = 'value'
|
31
|
+
|
32
|
+
controller_with_session(:var => expected).
|
33
|
+
should set_session(:var).in_context(self).to { expected }
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'rejects assigning to the another value in the test context' do
|
37
|
+
expected = 'other'
|
38
|
+
|
39
|
+
controller_with_session(:var => 'unexpected').
|
40
|
+
should_not set_session(:var).in_context(self).to { expected }
|
41
|
+
end
|
42
|
+
|
43
|
+
def controller_with_session(session_hash)
|
44
|
+
build_response do
|
45
|
+
session_hash.each do |key, value|
|
46
|
+
session[key] = value
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,153 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Shoulda::Matchers::ActionController::SetTheFlashMatcher do
|
4
|
+
it 'fails with unmatchable #to' do
|
5
|
+
expect { set_the_flash.to(1) }.to raise_error('cannot match against 1')
|
6
|
+
end
|
7
|
+
|
8
|
+
context 'a controller that sets a flash message' do
|
9
|
+
it 'accepts setting any flash message' do
|
10
|
+
controller_with_flash(:notice => 'hi').should set_the_flash
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'accepts setting the exact flash message' do
|
14
|
+
controller_with_flash(:notice => 'hi').should set_the_flash.to('hi')
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'accepts setting a matched flash message' do
|
18
|
+
controller_with_flash(:notice => 'hello').should set_the_flash.to(/he/)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'rejects setting a different flash message' do
|
22
|
+
controller_with_flash(:notice => 'hi').
|
23
|
+
should_not set_the_flash.to('other')
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'rejects setting a different pattern' do
|
27
|
+
controller_with_flash(:notice => 'hi').
|
28
|
+
should_not set_the_flash.to(/other/)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'a controller that sets a flash.now message' do
|
33
|
+
it 'rejects setting any flash message' do
|
34
|
+
controller_with_flash_now.should_not set_the_flash
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'accepts setting any flash.now message' do
|
38
|
+
controller_with_flash_now.should set_the_flash.now
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'accepts setting the exact flash.now message' do
|
42
|
+
controller_with_flash_now(:notice => 'hi').
|
43
|
+
should set_the_flash.now.to('hi')
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'accepts setting a matched flash.now message' do
|
47
|
+
controller_with_flash_now(:notice => 'flasher').
|
48
|
+
should set_the_flash.now.to(/lash/)
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'rejects setting a different flash.now message' do
|
52
|
+
controller_with_flash_now(:notice => 'hi').
|
53
|
+
should_not set_the_flash.now.to('other')
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'rejects setting a different flash.now pattern' do
|
57
|
+
controller_with_flash_now(:notice => 'hi').
|
58
|
+
should_not set_the_flash.now.to(/other/)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
context 'a controller that sets flash messages for multiple keys' do
|
63
|
+
it 'accepts flash message for either key' do
|
64
|
+
controller = controller_with_flash(:notice => 'one', :alert => 'two')
|
65
|
+
|
66
|
+
controller.should set_the_flash[:notice]
|
67
|
+
controller.should set_the_flash[:alert]
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'rejects a flash message that is not one of the set keys' do
|
71
|
+
controller_with_flash(:notice => 'one', :alert => 'two').
|
72
|
+
should_not set_the_flash[:warning]
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'accepts exact flash message of notice' do
|
76
|
+
controller_with_flash(:notice => 'one', :alert => 'two').
|
77
|
+
should set_the_flash[:notice].to('one')
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'accepts setting a matched flash message of notice' do
|
81
|
+
controller_with_flash(:notice => 'one', :alert => 'two').
|
82
|
+
should set_the_flash[:notice].to(/on/)
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'rejects setting a different flash message of notice' do
|
86
|
+
controller_with_flash(:notice => 'one', :alert => 'two').
|
87
|
+
should_not set_the_flash[:notice].to('other')
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'rejects setting a different pattern' do
|
91
|
+
controller_with_flash(:notice => 'one', :alert => 'two').
|
92
|
+
should_not set_the_flash[:notice].to(/other/)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
context 'a controller that sets flash and flash.now' do
|
97
|
+
it 'accepts setting any flash.now message' do
|
98
|
+
controller = build_response do
|
99
|
+
flash.now[:notice] = 'value'
|
100
|
+
flash[:success] = 'great job'
|
101
|
+
end
|
102
|
+
|
103
|
+
controller.should set_the_flash.now
|
104
|
+
controller.should set_the_flash
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'accepts setting a matched flash.now message' do
|
108
|
+
controller = build_response do
|
109
|
+
flash.now[:notice] = 'value'
|
110
|
+
flash[:success] = 'great job'
|
111
|
+
end
|
112
|
+
|
113
|
+
controller.should set_the_flash.now.to(/value/)
|
114
|
+
controller.should set_the_flash.to(/great/)
|
115
|
+
end
|
116
|
+
|
117
|
+
it 'rejects setting a different flash.now message' do
|
118
|
+
controller = build_response do
|
119
|
+
flash.now[:notice] = 'value'
|
120
|
+
flash[:success] = 'great job'
|
121
|
+
end
|
122
|
+
|
123
|
+
controller.should_not set_the_flash.now.to('other')
|
124
|
+
controller.should_not set_the_flash.to('other')
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
context 'a controller that does not set a flash message' do
|
129
|
+
it 'rejects setting any flash message' do
|
130
|
+
controller_with_no_flashes.should_not set_the_flash
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
def controller_with_no_flashes
|
135
|
+
build_response
|
136
|
+
end
|
137
|
+
|
138
|
+
def controller_with_flash(flash_hash)
|
139
|
+
build_response do
|
140
|
+
flash_hash.each do |key, value|
|
141
|
+
flash[key] = value
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
def controller_with_flash_now(flash_hash = { :notice => 'hi' })
|
147
|
+
build_response do
|
148
|
+
flash_hash.each do |key, value|
|
149
|
+
flash.now[key] = value
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|