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
@@ -1,115 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Shoulda::Matchers::ActiveModel::AllowMassAssignmentOfMatcher do
|
4
|
-
describe "#description" do
|
5
|
-
context 'without a role' do
|
6
|
-
it 'includes the attribute name' do
|
7
|
-
matcher = Shoulda::Matchers::ActiveModel::AllowMassAssignmentOfMatcher.new(:attr)
|
8
|
-
matcher.description.should eq("allow mass assignment of attr")
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
if active_model_3_1?
|
13
|
-
context 'with a role' do
|
14
|
-
it 'includes the attribute name and the role' do
|
15
|
-
matcher = Shoulda::Matchers::ActiveModel::AllowMassAssignmentOfMatcher.new(:attr).as(:admin)
|
16
|
-
matcher.description.should eq("allow mass assignment of attr as admin")
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
context "an attribute that is blacklisted from mass-assignment" do
|
23
|
-
let(:model) do
|
24
|
-
define_model(:example, :attr => :string) do
|
25
|
-
attr_protected :attr
|
26
|
-
end.new
|
27
|
-
end
|
28
|
-
|
29
|
-
it "should reject being mass-assignable" do
|
30
|
-
model.should_not allow_mass_assignment_of(:attr)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
context "an attribute that is not whitelisted for mass-assignment" do
|
35
|
-
let(:model) do
|
36
|
-
define_model(:example, :attr => :string, :other => :string) do
|
37
|
-
attr_accessible :other
|
38
|
-
end.new
|
39
|
-
end
|
40
|
-
|
41
|
-
it "should reject being mass-assignable" do
|
42
|
-
model.should_not allow_mass_assignment_of(:attr)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
context "an attribute that is whitelisted for mass-assignment" do
|
47
|
-
let(:model) do
|
48
|
-
define_model(:example, :attr => :string) do
|
49
|
-
attr_accessible :attr
|
50
|
-
end.new
|
51
|
-
end
|
52
|
-
|
53
|
-
it "should accept being mass-assignable" do
|
54
|
-
model.should allow_mass_assignment_of(:attr)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
context "an attribute not included in the mass-assignment blacklist" do
|
59
|
-
let(:model) do
|
60
|
-
define_model(:example, :attr => :string, :other => :string) do
|
61
|
-
attr_protected :other
|
62
|
-
end.new
|
63
|
-
end
|
64
|
-
|
65
|
-
it "should accept being mass-assignable" do
|
66
|
-
model.should allow_mass_assignment_of(:attr)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
unless active_model_3_2?
|
71
|
-
context "an attribute on a class with no protected attributes" do
|
72
|
-
let(:model) { define_model(:example, :attr => :string).new }
|
73
|
-
|
74
|
-
it "should accept being mass-assignable" do
|
75
|
-
model.should allow_mass_assignment_of(:attr)
|
76
|
-
end
|
77
|
-
|
78
|
-
it "should assign a negative failure message" do
|
79
|
-
matcher = allow_mass_assignment_of(:attr)
|
80
|
-
matcher.matches?(model).should == true
|
81
|
-
matcher.negative_failure_message.should_not be_nil
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
context "an attribute on a class with all protected attributes" do
|
87
|
-
let(:model) do
|
88
|
-
define_model(:example, :attr => :string) do
|
89
|
-
attr_accessible
|
90
|
-
end.new
|
91
|
-
end
|
92
|
-
|
93
|
-
it "should reject being mass-assignable" do
|
94
|
-
model.should_not allow_mass_assignment_of(:attr)
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
if active_model_3_1?
|
99
|
-
context "an attribute included in the mass-assignment whitelist for admin role only" do
|
100
|
-
let(:model) do
|
101
|
-
define_model(:example, :attr => :string) do
|
102
|
-
attr_accessible :attr, :as => :admin
|
103
|
-
end.new
|
104
|
-
end
|
105
|
-
|
106
|
-
it "should reject being mass-assignable" do
|
107
|
-
model.should_not allow_mass_assignment_of(:attr)
|
108
|
-
end
|
109
|
-
|
110
|
-
it "should accept being mass-assignable for admin" do
|
111
|
-
model.should allow_mass_assignment_of(:attr).as(:admin)
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
@@ -1,131 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Shoulda::Matchers::ActiveModel::AllowValueMatcher do
|
4
|
-
context "an attribute with a format validation" do
|
5
|
-
let(:model) do
|
6
|
-
define_model :example, :attr => :string do
|
7
|
-
validates_format_of :attr, :with => /abc/
|
8
|
-
end.new
|
9
|
-
end
|
10
|
-
|
11
|
-
it "allows a good value" do
|
12
|
-
model.should allow_value("abcde").for(:attr)
|
13
|
-
end
|
14
|
-
|
15
|
-
it "rejects a bad value" do
|
16
|
-
model.should_not allow_value("xyz").for(:attr)
|
17
|
-
end
|
18
|
-
|
19
|
-
it "allows several good values" do
|
20
|
-
model.should allow_value("abcde", "deabc").for(:attr)
|
21
|
-
end
|
22
|
-
|
23
|
-
it "rejects several bad values" do
|
24
|
-
model.should_not allow_value("xyz", "zyx", nil, []).for(:attr)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
context "an attribute with a format validation and a custom message" do
|
29
|
-
let(:model) do
|
30
|
-
define_model :example, :attr => :string do
|
31
|
-
validates_format_of :attr, :with => /abc/, :message => 'bad value'
|
32
|
-
end.new
|
33
|
-
end
|
34
|
-
|
35
|
-
it "allows a good value" do
|
36
|
-
model.should allow_value('abcde').for(:attr).with_message(/bad/)
|
37
|
-
end
|
38
|
-
|
39
|
-
it "rejects a bad value" do
|
40
|
-
model.should_not allow_value('xyz').for(:attr).with_message(/bad/)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
context "an attribute with several validations" do
|
45
|
-
let(:model) do
|
46
|
-
define_model :example, :attr => :string do
|
47
|
-
validates_presence_of :attr
|
48
|
-
validates_length_of :attr, :within => 1..5
|
49
|
-
validates_numericality_of :attr, :greater_than_or_equal_to => 1,
|
50
|
-
:less_than_or_equal_to => 50000
|
51
|
-
end.new
|
52
|
-
end
|
53
|
-
bad_values = [nil, "", "abc", "0", "50001", "123456", []]
|
54
|
-
|
55
|
-
it "allows a good value" do
|
56
|
-
model.should allow_value("12345").for(:attr)
|
57
|
-
end
|
58
|
-
|
59
|
-
bad_values.each do |bad_value|
|
60
|
-
it "rejects a bad value (#{bad_value.inspect})" do
|
61
|
-
model.should_not allow_value(bad_value).for(:attr)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
it "rejects bad values (#{bad_values.map(&:inspect).join(', ')})" do
|
66
|
-
model.should_not allow_value(*bad_values).for(:attr)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
context "an AllowValueMatcher with multiple values" do
|
71
|
-
it "should describe itself" do
|
72
|
-
matcher = allow_value("foo", "bar").for(:baz)
|
73
|
-
matcher.description.should == 'allow baz to be set to any of ["foo", "bar"]'
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
context "an AllowValueMatcher with a single value" do
|
78
|
-
it "should describe itself" do
|
79
|
-
matcher = allow_value("foo").for(:baz)
|
80
|
-
matcher.description.should eq('allow baz to be set to "foo"')
|
81
|
-
end
|
82
|
-
|
83
|
-
it "allows you to call description before calling matches?" do
|
84
|
-
model = define_model(:example, :attr => :string).new
|
85
|
-
matcher = Shoulda::Matchers::ActiveModel::AllowValueMatcher.new("foo").for(:attr)
|
86
|
-
matcher.description
|
87
|
-
|
88
|
-
expect { matcher.matches?(model) }.not_to raise_error
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
context "an AllowValueMatcher with no values" do
|
93
|
-
it "raises an error" do
|
94
|
-
lambda do
|
95
|
-
allow_value.for(:baz)
|
96
|
-
end.should raise_error(ArgumentError, /at least one argument/)
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
if Rails::VERSION::STRING.to_f >= 3.2
|
101
|
-
context "an attribute with a strict format validation" do
|
102
|
-
let(:model) do
|
103
|
-
define_model :example, :attr => :string do
|
104
|
-
validates_format_of :attr, :with => /abc/, :strict => true
|
105
|
-
end.new
|
106
|
-
end
|
107
|
-
|
108
|
-
it "strictly rejects a bad value" do
|
109
|
-
model.should_not allow_value("xyz").for(:attr).strict
|
110
|
-
end
|
111
|
-
|
112
|
-
it "strictly allows a bad value with a different message" do
|
113
|
-
model.should allow_value("xyz").for(:attr).with_message(/abc/).strict
|
114
|
-
end
|
115
|
-
|
116
|
-
it "describes itself" do
|
117
|
-
allow_value("xyz").for(:attr).strict.description.
|
118
|
-
should == %{doesn't raise when attr is set to "xyz"}
|
119
|
-
end
|
120
|
-
|
121
|
-
it "provides a useful negative failure message" do
|
122
|
-
matcher = allow_value("xyz").for(:attr).strict.with_message(/abc/)
|
123
|
-
matcher.matches?(model)
|
124
|
-
matcher.negative_failure_message.
|
125
|
-
should == 'Expected exception to include /abc/ ' +
|
126
|
-
'when attr is set to "xyz", got Attr is invalid'
|
127
|
-
end
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
end
|
@@ -1,65 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Shoulda::Matchers::ActiveModel::DisallowValueMatcher do
|
4
|
-
it "does not allow any types" do
|
5
|
-
matcher = Shoulda::Matchers::ActiveModel::DisallowValueMatcher.new("abcde")
|
6
|
-
matcher.allowed_types.should == ""
|
7
|
-
end
|
8
|
-
|
9
|
-
context "an attribute with a format validation" do
|
10
|
-
before do
|
11
|
-
define_model :example, :attr => :string do
|
12
|
-
validates_format_of :attr, :with => /abc/
|
13
|
-
end
|
14
|
-
@model = Example.new
|
15
|
-
end
|
16
|
-
|
17
|
-
it "does not match if the value is allowed" do
|
18
|
-
matcher = new_matcher("abcde")
|
19
|
-
matcher.for(:attr)
|
20
|
-
matcher.matches?(@model).should be_false
|
21
|
-
end
|
22
|
-
|
23
|
-
it "matches if the value is not allowed" do
|
24
|
-
matcher = new_matcher("xyz")
|
25
|
-
matcher.for(:attr)
|
26
|
-
matcher.matches?(@model).should be_true
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
context "an attribute with a format validation and a custom message" do
|
31
|
-
before do
|
32
|
-
define_model :example, :attr => :string do
|
33
|
-
validates_format_of :attr, :with => /abc/, :message => 'good message'
|
34
|
-
end
|
35
|
-
@model = Example.new
|
36
|
-
end
|
37
|
-
|
38
|
-
it "does not match if the value and message are both correct" do
|
39
|
-
matcher = new_matcher("abcde")
|
40
|
-
matcher.for(:attr).with_message('good message')
|
41
|
-
matcher.matches?(@model).should be_false
|
42
|
-
end
|
43
|
-
|
44
|
-
it "delegates its failure message to its allow matcher's negative failure message" do
|
45
|
-
allow_matcher = stub_everything(:negative_failure_message => "allow matcher failure")
|
46
|
-
Shoulda::Matchers::ActiveModel::AllowValueMatcher.stubs(:new).returns(allow_matcher)
|
47
|
-
|
48
|
-
matcher = new_matcher("abcde")
|
49
|
-
matcher.for(:attr).with_message('good message')
|
50
|
-
matcher.matches?(@model)
|
51
|
-
|
52
|
-
matcher.failure_message.should == "allow matcher failure"
|
53
|
-
end
|
54
|
-
|
55
|
-
it "matches if the message is correct but the value is not" do
|
56
|
-
matcher = new_matcher("xyz")
|
57
|
-
matcher.for(:attr).with_message('good message')
|
58
|
-
matcher.matches?(@model).should be_true
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def new_matcher(value)
|
63
|
-
matcher = Shoulda::Matchers::ActiveModel::DisallowValueMatcher.new(value)
|
64
|
-
end
|
65
|
-
end
|
@@ -1,79 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Shoulda::Matchers::ActiveModel::EnsureExclusionOfMatcher do
|
4
|
-
|
5
|
-
context "an attribute which must be excluded of a range" do
|
6
|
-
before do
|
7
|
-
@model = define_model(:example, :attr => :integer) do
|
8
|
-
validates_exclusion_of :attr, :in => 2..5
|
9
|
-
end.new
|
10
|
-
end
|
11
|
-
|
12
|
-
it "should accept ensuring the correct range" do
|
13
|
-
@model.should ensure_exclusion_of(:attr).in_range(2..5)
|
14
|
-
end
|
15
|
-
|
16
|
-
it "should reject ensuring excluded value" do
|
17
|
-
@model.should_not ensure_exclusion_of(:attr).in_range(2..6)
|
18
|
-
end
|
19
|
-
|
20
|
-
it "should not override the default message with a blank" do
|
21
|
-
@model.should ensure_exclusion_of(:attr).in_range(2..5).with_message(nil)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
context "an attribute with a custom ranged value validation" do
|
26
|
-
before do
|
27
|
-
@model = define_model(:example, :attr => :string) do
|
28
|
-
validates_exclusion_of :attr, :in => 2..4, :message => 'not good'
|
29
|
-
|
30
|
-
end.new
|
31
|
-
end
|
32
|
-
|
33
|
-
it "should accept ensuring the correct range" do
|
34
|
-
@model.should ensure_exclusion_of(:attr).in_range(2..4).with_message(/not good/)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
context "an attribute with custom range validations" do
|
39
|
-
before do
|
40
|
-
define_model :example, :attr => :integer do
|
41
|
-
validate :custom_validation
|
42
|
-
def custom_validation
|
43
|
-
if attr >= 2 && attr <= 5
|
44
|
-
errors.add(:attr, 'shoud be out of this range')
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
@model = Example.new
|
49
|
-
end
|
50
|
-
|
51
|
-
it "should accept ensuring the correct range and messages" do
|
52
|
-
@model.should ensure_exclusion_of(:attr).in_range(2..5).with_message(/shoud be out of this range/)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
context "an attribute which must be excluded in an array" do
|
57
|
-
before do
|
58
|
-
@model = define_model(:example, :attr => :string) do
|
59
|
-
validates_exclusion_of :attr, :in => %w(one two)
|
60
|
-
end.new
|
61
|
-
end
|
62
|
-
|
63
|
-
it "accepts with correct array" do
|
64
|
-
@model.should ensure_exclusion_of(:attr).in_array(%w(one two))
|
65
|
-
end
|
66
|
-
|
67
|
-
it "rejects when only part of array matches" do
|
68
|
-
@model.should_not ensure_exclusion_of(:attr).in_array(%w(one wrong_value))
|
69
|
-
end
|
70
|
-
|
71
|
-
it "rejects when array doesn't match at all" do
|
72
|
-
@model.should_not ensure_exclusion_of(:attr).in_array(%w(cat dog))
|
73
|
-
end
|
74
|
-
|
75
|
-
it "has correct description" do
|
76
|
-
ensure_exclusion_of(:attr).in_array([true, 'dog']).description.should == 'ensure exclusion of attr in [true, "dog"]'
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
@@ -1,181 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Shoulda::Matchers::ActiveModel::EnsureInclusionOfMatcher do
|
4
|
-
context "with no validations" do
|
5
|
-
before do
|
6
|
-
@model = define_model(:example, :attr => :string) do
|
7
|
-
end.new
|
8
|
-
end
|
9
|
-
|
10
|
-
it "should reject an array which does not have a validator defined" do
|
11
|
-
@model.should_not ensure_inclusion_of(:attr).in_array(%w(Yes No))
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
context "with true/false values" do
|
16
|
-
it "can verify outside values to ensure the negative case" do
|
17
|
-
model = define_model(:example, :attr => :string).new
|
18
|
-
|
19
|
-
model.should_not ensure_inclusion_of(:attr).in_array([true, false])
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
context "where we cannot determine a value outside the array" do
|
24
|
-
it "should raise a custom exception" do
|
25
|
-
model = define_model(:example, :attr => :string).new
|
26
|
-
|
27
|
-
arbitrary_string = Shoulda::Matchers::ActiveModel::EnsureInclusionOfMatcher::ARBITRARY_OUTSIDE_STRING
|
28
|
-
expect { model.should ensure_inclusion_of(:attr).in_array([arbitrary_string]) }.to raise_error Shoulda::Matchers::ActiveModel::CouldNotDetermineValueOutsideOfArray
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
context "an attribute which must be included in a range" do
|
33
|
-
before do
|
34
|
-
@model = define_model(:example, :attr => :integer) do
|
35
|
-
validates_inclusion_of :attr, :in => 2..5
|
36
|
-
end.new
|
37
|
-
end
|
38
|
-
|
39
|
-
it "should accept ensuring the correct range" do
|
40
|
-
@model.should ensure_inclusion_of(:attr).in_range(2..5)
|
41
|
-
end
|
42
|
-
|
43
|
-
it "should reject ensuring a lower minimum value" do
|
44
|
-
@model.should_not ensure_inclusion_of(:attr).in_range(1..5)
|
45
|
-
end
|
46
|
-
|
47
|
-
it "should reject ensuring a higher minimum value" do
|
48
|
-
@model.should_not ensure_inclusion_of(:attr).in_range(3..5)
|
49
|
-
end
|
50
|
-
|
51
|
-
it "should reject ensuring a lower maximum value" do
|
52
|
-
@model.should_not ensure_inclusion_of(:attr).in_range(2..4)
|
53
|
-
end
|
54
|
-
|
55
|
-
it "should reject ensuring a higher maximum value" do
|
56
|
-
@model.should_not ensure_inclusion_of(:attr).in_range(2..6)
|
57
|
-
end
|
58
|
-
|
59
|
-
it "should not override the default message with a blank" do
|
60
|
-
@model.should ensure_inclusion_of(:attr).in_range(2..5).with_message(nil)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
context "an attribute with a custom ranged value validation" do
|
65
|
-
before do
|
66
|
-
@model = define_model(:example, :attr => :string) do
|
67
|
-
validates_inclusion_of :attr, :in => 2..4, :message => 'not good'
|
68
|
-
|
69
|
-
end.new
|
70
|
-
end
|
71
|
-
|
72
|
-
it "should accept ensuring the correct range" do
|
73
|
-
@model.should ensure_inclusion_of(:attr).in_range(2..4).with_message(/not good/)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
context "an attribute with custom range validations" do
|
78
|
-
before do
|
79
|
-
define_model :example, :attr => :integer do
|
80
|
-
validate :custom_validation
|
81
|
-
def custom_validation
|
82
|
-
if attr < 2
|
83
|
-
errors.add(:attr, 'too low')
|
84
|
-
elsif attr > 5
|
85
|
-
errors.add(:attr, 'too high')
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
@model = Example.new
|
90
|
-
end
|
91
|
-
|
92
|
-
it "should accept ensuring the correct range and messages" do
|
93
|
-
@model.should ensure_inclusion_of(:attr).in_range(2..5).with_low_message(/low/).with_high_message(/high/)
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
context "an attribute which must be included in an array" do
|
98
|
-
before do
|
99
|
-
@model = define_model(:example, :attr => :string) do
|
100
|
-
validates_inclusion_of :attr, :in => %w(one two)
|
101
|
-
end.new
|
102
|
-
end
|
103
|
-
|
104
|
-
it "accepts with correct array" do
|
105
|
-
@model.should ensure_inclusion_of(:attr).in_array(%w(one two))
|
106
|
-
end
|
107
|
-
|
108
|
-
it "rejects when only part of array matches" do
|
109
|
-
@model.should_not ensure_inclusion_of(:attr).in_array(%w(one wrong_value))
|
110
|
-
end
|
111
|
-
|
112
|
-
it "rejects when array doesn't match at all" do
|
113
|
-
@model.should_not ensure_inclusion_of(:attr).in_array(%w(cat dog))
|
114
|
-
end
|
115
|
-
|
116
|
-
it "has correct description" do
|
117
|
-
ensure_inclusion_of(:attr).in_array([true, 'dog']).description.should == 'ensure inclusion of attr in [true, "dog"]'
|
118
|
-
end
|
119
|
-
|
120
|
-
it "rejects allow_blank" do
|
121
|
-
@model.should_not ensure_inclusion_of(:attr).in_array(['one', 'two']).allow_blank(true)
|
122
|
-
@model.should ensure_inclusion_of(:attr).in_array(['one', 'two']).allow_blank(false)
|
123
|
-
end
|
124
|
-
|
125
|
-
it "rejects allow_nil" do
|
126
|
-
@model.should_not ensure_inclusion_of(:attr).in_array(['one', 'two']).allow_nil(true)
|
127
|
-
@model.should ensure_inclusion_of(:attr).in_array(['one', 'two']).allow_nil(false)
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
context "allowed blank and allowed nil" do
|
132
|
-
before do
|
133
|
-
@model = define_model(:example, :attr => :string) do
|
134
|
-
validates_inclusion_of :attr, :in => %w(one two), :allow_blank => true, :allow_nil => true
|
135
|
-
end.new
|
136
|
-
end
|
137
|
-
|
138
|
-
it "allows allow_blank" do
|
139
|
-
@model.should ensure_inclusion_of(:attr).in_array(['one', 'two']).allow_blank(true)
|
140
|
-
@model.should ensure_inclusion_of(:attr).in_array(['one', 'two']).allow_blank()
|
141
|
-
@model.should_not ensure_inclusion_of(:attr).in_array(['one', 'two']).allow_blank(false)
|
142
|
-
end
|
143
|
-
|
144
|
-
it "allows allow_nil" do
|
145
|
-
@model.should ensure_inclusion_of(:attr).in_array(['one', 'two']).allow_nil(true)
|
146
|
-
@model.should ensure_inclusion_of(:attr).in_array(['one', 'two']).allow_nil()
|
147
|
-
@model.should_not ensure_inclusion_of(:attr).in_array(['one', 'two']).allow_nil(false)
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
context "an attribute allowing some blank values but not others" do
|
152
|
-
before do
|
153
|
-
@model = define_model(:example, :attr => :string) do
|
154
|
-
validates_inclusion_of :attr, :in => ['one', 'two', '']
|
155
|
-
end.new
|
156
|
-
end
|
157
|
-
|
158
|
-
it "rejects allow_blank" do
|
159
|
-
@model.should_not ensure_inclusion_of(:attr).in_array(['one', 'two', '']).allow_blank(true)
|
160
|
-
@model.should ensure_inclusion_of(:attr).in_array(['one', 'two', '']).allow_blank(false)
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
if Rails::VERSION::STRING.to_f >= 3.2
|
165
|
-
context "a strict attribute which must be included in a range" do
|
166
|
-
before do
|
167
|
-
@model = define_model(:example, :attr => :integer) do
|
168
|
-
validates_inclusion_of :attr, :in => 2..5, :strict => true
|
169
|
-
end.new
|
170
|
-
end
|
171
|
-
|
172
|
-
it "should accept ensuring the correct range" do
|
173
|
-
@model.should ensure_inclusion_of(:attr).in_range(2..5).strict
|
174
|
-
end
|
175
|
-
|
176
|
-
it "should not accept ensuring another range" do
|
177
|
-
@model.should_not ensure_inclusion_of(:attr).in_range(2..6).strict
|
178
|
-
end
|
179
|
-
end
|
180
|
-
end
|
181
|
-
end
|