shoulda-matchers 1.4.2 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (135) hide show
  1. data/.travis.yml +11 -3
  2. data/Appraisals +3 -3
  3. data/Gemfile +1 -1
  4. data/Gemfile.lock +69 -70
  5. data/MIT-LICENSE +1 -1
  6. data/NEWS.md +22 -4
  7. data/README.md +3 -1
  8. data/Rakefile +9 -5
  9. data/features/step_definitions/rails_steps.rb +7 -7
  10. data/features/support/env.rb +1 -1
  11. data/gemfiles/3.0.gemfile +1 -1
  12. data/gemfiles/3.0.gemfile.lock +25 -22
  13. data/gemfiles/3.1.gemfile +1 -1
  14. data/gemfiles/3.1.gemfile.lock +27 -24
  15. data/gemfiles/3.2.gemfile +1 -1
  16. data/gemfiles/3.2.gemfile.lock +56 -52
  17. data/lib/shoulda/matchers/action_controller.rb +3 -2
  18. data/lib/shoulda/matchers/action_controller/assign_to_matcher.rb +10 -8
  19. data/lib/shoulda/matchers/action_controller/filter_param_matcher.rb +2 -4
  20. data/lib/shoulda/matchers/action_controller/redirect_to_matcher.rb +3 -4
  21. data/lib/shoulda/matchers/action_controller/render_template_matcher.rb +3 -4
  22. data/lib/shoulda/matchers/action_controller/render_with_layout_matcher.rb +6 -6
  23. data/lib/shoulda/matchers/action_controller/respond_with_content_type_matcher.rb +5 -2
  24. data/lib/shoulda/matchers/action_controller/respond_with_matcher.rb +2 -2
  25. data/lib/shoulda/matchers/action_controller/route_matcher.rb +12 -12
  26. data/lib/shoulda/matchers/action_controller/set_session_matcher.rb +3 -4
  27. data/lib/shoulda/matchers/action_controller/set_the_flash_matcher.rb +10 -11
  28. data/lib/shoulda/matchers/action_controller/strong_parameters_matcher.rb +121 -0
  29. data/lib/shoulda/matchers/action_mailer/have_sent_email_matcher.rb +7 -4
  30. data/lib/shoulda/matchers/active_model.rb +1 -1
  31. data/lib/shoulda/matchers/active_model/allow_mass_assignment_of_matcher.rb +8 -8
  32. data/lib/shoulda/matchers/active_model/allow_value_matcher.rb +5 -4
  33. data/lib/shoulda/matchers/active_model/disallow_value_matcher.rb +3 -3
  34. data/lib/shoulda/matchers/active_model/ensure_inclusion_of_matcher.rb +2 -2
  35. data/lib/shoulda/matchers/active_model/exception_message_finder.rb +0 -1
  36. data/lib/shoulda/matchers/active_model/helpers.rb +16 -7
  37. data/lib/shoulda/matchers/active_model/only_integer_matcher.rb +3 -3
  38. data/lib/shoulda/matchers/active_model/validate_confirmation_of_matcher.rb +8 -6
  39. data/lib/shoulda/matchers/active_model/validate_format_of_matcher.rb +19 -10
  40. data/lib/shoulda/matchers/active_model/validate_numericality_of_matcher.rb +4 -4
  41. data/lib/shoulda/matchers/active_model/validate_uniqueness_of_matcher.rb +19 -21
  42. data/lib/shoulda/matchers/active_model/validation_matcher.rb +7 -7
  43. data/lib/shoulda/matchers/active_model/validation_message_finder.rb +1 -1
  44. data/lib/shoulda/matchers/active_record/accept_nested_attributes_for_matcher.rb +5 -5
  45. data/lib/shoulda/matchers/active_record/association_matcher.rb +3 -3
  46. data/lib/shoulda/matchers/active_record/have_db_column_matcher.rb +11 -7
  47. data/lib/shoulda/matchers/active_record/have_db_index_matcher.rb +2 -2
  48. data/lib/shoulda/matchers/active_record/have_readonly_attribute_matcher.rb +5 -5
  49. data/lib/shoulda/matchers/active_record/query_the_database_matcher.rb +5 -2
  50. data/lib/shoulda/matchers/active_record/serialize_matcher.rb +3 -3
  51. data/lib/shoulda/matchers/assertion_error.rb +4 -1
  52. data/lib/shoulda/matchers/independent/delegate_matcher.rb +17 -7
  53. data/lib/shoulda/matchers/integrations/rspec.rb +19 -33
  54. data/lib/shoulda/matchers/version.rb +1 -1
  55. data/shoulda-matchers.gemspec +6 -4
  56. data/spec/shoulda/matchers/action_controller/assign_to_matcher_spec.rb +66 -0
  57. data/spec/shoulda/matchers/action_controller/filter_param_matcher_spec.rb +22 -0
  58. data/spec/shoulda/matchers/action_controller/redirect_to_matcher_spec.rb +42 -0
  59. data/spec/shoulda/matchers/action_controller/render_template_matcher_spec.rb +78 -0
  60. data/spec/shoulda/matchers/action_controller/render_with_layout_matcher_spec.rb +58 -0
  61. data/spec/shoulda/matchers/action_controller/respond_with_content_type_matcher_spec.rb +31 -0
  62. data/spec/shoulda/matchers/action_controller/respond_with_matcher_spec.rb +31 -0
  63. data/spec/shoulda/matchers/action_controller/route_matcher_spec.rb +65 -0
  64. data/spec/shoulda/matchers/action_controller/set_session_matcher_spec.rb +51 -0
  65. data/spec/shoulda/matchers/action_controller/set_the_flash_matcher_spec.rb +153 -0
  66. data/spec/shoulda/matchers/action_controller/strong_parameters_matcher_spec.rb +142 -0
  67. data/spec/shoulda/matchers/action_mailer/have_sent_email_spec.rb +324 -0
  68. data/spec/shoulda/matchers/active_model/allow_mass_assignment_of_matcher_spec.rb +111 -0
  69. data/spec/shoulda/matchers/active_model/allow_value_matcher_spec.rb +124 -0
  70. data/spec/shoulda/matchers/active_model/disallow_value_matcher_spec.rb +43 -0
  71. data/spec/shoulda/matchers/active_model/ensure_exclusion_of_matcher_spec.rb +74 -0
  72. data/spec/shoulda/matchers/active_model/ensure_inclusion_of_matcher_spec.rb +171 -0
  73. data/spec/shoulda/matchers/active_model/ensure_length_of_matcher_spec.rb +113 -0
  74. data/spec/shoulda/{active_model → matchers/active_model}/exception_message_finder_spec.rb +2 -2
  75. data/spec/shoulda/matchers/active_model/helpers_spec.rb +158 -0
  76. data/spec/shoulda/matchers/active_model/only_integer_matcher_spec.rb +52 -0
  77. data/spec/shoulda/matchers/active_model/validate_acceptance_of_matcher_spec.rb +41 -0
  78. data/spec/shoulda/matchers/active_model/validate_confirmation_of_matcher_spec.rb +41 -0
  79. data/spec/shoulda/matchers/active_model/validate_format_of_matcher_spec.rb +75 -0
  80. data/spec/shoulda/matchers/active_model/validate_numericality_of_matcher_spec.rb +73 -0
  81. data/spec/shoulda/matchers/active_model/validate_presence_of_matcher_spec.rb +127 -0
  82. data/spec/shoulda/matchers/active_model/validate_uniqueness_of_matcher_spec.rb +175 -0
  83. data/spec/shoulda/{active_model → matchers/active_model}/validation_message_finder_spec.rb +0 -1
  84. data/spec/shoulda/matchers/active_record/accept_nested_attributes_for_matcher_spec.rb +106 -0
  85. data/spec/shoulda/matchers/active_record/association_matcher_spec.rb +534 -0
  86. data/spec/shoulda/matchers/active_record/have_db_column_matcher_spec.rb +111 -0
  87. data/spec/shoulda/matchers/active_record/have_db_index_matcher_spec.rb +78 -0
  88. data/spec/shoulda/matchers/active_record/have_readonly_attributes_matcher_spec.rb +41 -0
  89. data/spec/shoulda/{active_record → matchers/active_record}/query_the_database_matcher_spec.rb +10 -10
  90. data/spec/shoulda/matchers/active_record/serialize_matcher_spec.rb +86 -0
  91. data/spec/shoulda/{independent → matchers/independent}/delegate_matcher_spec.rb +55 -34
  92. data/spec/spec_helper.rb +1 -2
  93. data/spec/support/active_model_versions.rb +4 -0
  94. data/spec/support/activemodel_helpers.rb +19 -0
  95. data/spec/support/controller_builder.rb +38 -12
  96. data/spec/support/model_builder.rb +8 -2
  97. metadata +106 -98
  98. data/spec/fixtures/addresses.yml +0 -3
  99. data/spec/fixtures/friendships.yml +0 -0
  100. data/spec/fixtures/posts.yml +0 -5
  101. data/spec/fixtures/products.yml +0 -0
  102. data/spec/fixtures/taggings.yml +0 -0
  103. data/spec/fixtures/tags.yml +0 -9
  104. data/spec/fixtures/users.yml +0 -6
  105. data/spec/shoulda/action_controller/assign_to_matcher_spec.rb +0 -63
  106. data/spec/shoulda/action_controller/filter_param_matcher_spec.rb +0 -20
  107. data/spec/shoulda/action_controller/redirect_to_matcher_spec.rb +0 -40
  108. data/spec/shoulda/action_controller/render_template_matcher_spec.rb +0 -69
  109. data/spec/shoulda/action_controller/render_with_layout_matcher_spec.rb +0 -55
  110. data/spec/shoulda/action_controller/respond_with_content_type_matcher_spec.rb +0 -28
  111. data/spec/shoulda/action_controller/respond_with_matcher_spec.rb +0 -83
  112. data/spec/shoulda/action_controller/route_matcher_spec.rb +0 -65
  113. data/spec/shoulda/action_controller/set_session_matcher_spec.rb +0 -46
  114. data/spec/shoulda/action_controller/set_the_flash_matcher_spec.rb +0 -130
  115. data/spec/shoulda/action_mailer/have_sent_email_spec.rb +0 -333
  116. data/spec/shoulda/active_model/allow_mass_assignment_of_matcher_spec.rb +0 -115
  117. data/spec/shoulda/active_model/allow_value_matcher_spec.rb +0 -131
  118. data/spec/shoulda/active_model/disallow_value_matcher_spec.rb +0 -65
  119. data/spec/shoulda/active_model/ensure_exclusion_of_matcher_spec.rb +0 -79
  120. data/spec/shoulda/active_model/ensure_inclusion_of_matcher_spec.rb +0 -181
  121. data/spec/shoulda/active_model/ensure_length_of_matcher_spec.rb +0 -138
  122. data/spec/shoulda/active_model/helpers_spec.rb +0 -129
  123. data/spec/shoulda/active_model/only_integer_matcher_spec.rb +0 -69
  124. data/spec/shoulda/active_model/validate_acceptance_of_matcher_spec.rb +0 -43
  125. data/spec/shoulda/active_model/validate_confirmation_of_matcher_spec.rb +0 -48
  126. data/spec/shoulda/active_model/validate_format_of_matcher_spec.rb +0 -79
  127. data/spec/shoulda/active_model/validate_numericality_of_matcher_spec.rb +0 -112
  128. data/spec/shoulda/active_model/validate_presence_of_matcher_spec.rb +0 -135
  129. data/spec/shoulda/active_model/validate_uniqueness_of_matcher_spec.rb +0 -154
  130. data/spec/shoulda/active_record/accept_nested_attributes_for_matcher_spec.rb +0 -84
  131. data/spec/shoulda/active_record/association_matcher_spec.rb +0 -642
  132. data/spec/shoulda/active_record/have_db_column_matcher_spec.rb +0 -185
  133. data/spec/shoulda/active_record/have_db_index_matcher_spec.rb +0 -105
  134. data/spec/shoulda/active_record/have_readonly_attributes_matcher_spec.rb +0 -46
  135. data/spec/shoulda/active_record/serialize_matcher_spec.rb +0 -81
@@ -1,112 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Shoulda::Matchers::ActiveModel::ValidateNumericalityOfMatcher do
4
- it "should state in its description that it allows only numeric values" do
5
- matcher = Shoulda::Matchers::ActiveModel::ValidateNumericalityOfMatcher.new(:attr)
6
- matcher.description.should == "only allow numeric values for attr"
7
- end
8
-
9
- context "given a numeric attribute" do
10
- before do
11
- define_model :example, :attr => :string do
12
- validates_numericality_of :attr
13
- end
14
- @model = Example.new
15
- end
16
-
17
- it "should only allow numeric values for that attribute" do
18
- matcher = new_matcher(:attr)
19
- matcher.matches?(@model).should be_true
20
- end
21
-
22
- it "should not override the default message with a blank" do
23
- matcher = new_matcher(:attr)
24
- matcher.with_message(nil)
25
- matcher.matches?(@model).should be_true
26
- end
27
-
28
- context "when asked to enforce integer values for that attribute" do
29
- it "should not match" do
30
- matcher = new_matcher(:attr)
31
- matcher.only_integer
32
- matcher.matches?(@model).should be_false
33
- end
34
-
35
- it "should fail with the ActiveRecord :not_an_integer message" do
36
- matcher = new_matcher(:attr)
37
- matcher.only_integer
38
- matcher.matches?(@model)
39
- matcher.failure_message.should include 'Expected errors to include "must be an integer"'
40
- end
41
- end
42
- end
43
-
44
- context "given a numeric attribute which must be integer" do
45
- before do
46
- define_model :example, :attr => :string do
47
- validates_numericality_of :attr, { :only_integer => true }
48
- end
49
- @model = Example.new
50
- end
51
-
52
- it "allows integer values for that attribute" do
53
- matcher = new_matcher(:attr)
54
- matcher.only_integer
55
- matcher.matches?(@model).should be_true
56
- end
57
-
58
- it "does not allow non-integer values for that attribute" do
59
- matcher = new_matcher(:attr)
60
- matcher.only_integer
61
- matcher.matches?(@model).should be_true
62
- end
63
-
64
- it "should state in its description that it allows only integer values" do
65
- matcher = new_matcher(:attr)
66
- matcher.only_integer
67
- matcher.description.should == "only allow numeric, integer values for attr"
68
- end
69
- end
70
-
71
- context "given a numeric attribute with a custom validation message" do
72
- before do
73
- define_model :example, :attr => :string do
74
- validates_numericality_of :attr, :message => 'custom'
75
- end
76
- @model = Example.new
77
- end
78
-
79
- it "should only allow numeric values for that attribute with that message" do
80
- matcher = new_matcher(:attr)
81
- matcher.with_message(/custom/)
82
- matcher.matches?(@model).should be_true
83
- end
84
-
85
- it "should not allow numeric values for that attribute with another message" do
86
- matcher = new_matcher(:attr)
87
- matcher.with_message(/wrong/)
88
- matcher.matches?(@model).should be_false
89
- end
90
- end
91
-
92
- context "given a non-numeric attribute" do
93
- before do
94
- @model = define_model(:example, :attr => :string).new
95
- end
96
-
97
- it "should not only allow numeric values for that attribute" do
98
- matcher = new_matcher(:attr)
99
- matcher.matches?(@model).should be_false
100
- end
101
-
102
- it "should fail with the ActiveRecord :not_a_number message" do
103
- matcher = new_matcher(:attr)
104
- matcher.matches?(@model)
105
- matcher.failure_message.should include 'Expected errors to include "is not a number"'
106
- end
107
- end
108
-
109
- def new_matcher(attr)
110
- Shoulda::Matchers::ActiveModel::ValidateNumericalityOfMatcher.new(attr)
111
- end
112
- end
@@ -1,135 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Shoulda::Matchers::ActiveModel::ValidatePresenceOfMatcher do
4
- context "a required attribute" do
5
- before do
6
- define_model :example, :attr => :string do
7
- validates_presence_of :attr
8
- end
9
- @model = Example.new
10
- end
11
-
12
- it "should require a value" do
13
- @model.should validate_presence_of(:attr)
14
- end
15
-
16
- it "should not override the default message with a blank" do
17
- @model.should validate_presence_of(:attr).with_message(nil)
18
- end
19
- end
20
-
21
- context "a required attribute on a class using ActiveModel::Validations" do
22
- before do
23
- define_active_model_class("Example", :accessors => [:attr]) do
24
- validates_presence_of :attr
25
- end
26
- @model = Example.new
27
- end
28
-
29
- it "should require a value" do
30
- @model.should validate_presence_of(:attr)
31
- end
32
-
33
- it "should not override the default message with a blank" do
34
- @model.should validate_presence_of(:attr).with_message(nil)
35
- end
36
- end
37
-
38
- context "an optional attribute" do
39
- before do
40
- @model = define_model(:example, :attr => :string).new
41
- end
42
-
43
- it "should not require a value" do
44
- @model.should_not validate_presence_of(:attr)
45
- end
46
- end
47
-
48
- context "an optional attribute on a class using ActiveModel::Validations" do
49
- before do
50
- @model = define_active_model_class("Example", :accessors => [:attr]).new
51
- end
52
-
53
- it "should not require a value" do
54
- @model.should_not validate_presence_of(:attr)
55
- end
56
- end
57
-
58
- context "a required has_many association" do
59
- before do
60
- define_model :child
61
- @model = define_model :parent do
62
- has_many :children
63
- validates_presence_of :children
64
- end.new
65
- end
66
-
67
- it "should require the attribute to be set" do
68
- @model.should validate_presence_of(:children)
69
- end
70
- end
71
-
72
- context "an optional has_many association" do
73
- before do
74
- define_model :child
75
- @model = define_model :parent do
76
- has_many :children
77
- end.new
78
- end
79
-
80
- it "should not require the attribute to be set" do
81
- @model.should_not validate_presence_of(:children)
82
- end
83
- end
84
-
85
- context "a required has_and_belongs_to_many association" do
86
- before do
87
- define_model :child
88
- @model = define_model :parent do
89
- has_and_belongs_to_many :children
90
- validates_presence_of :children
91
- end.new
92
- create_table "children_parents", :id => false do |t|
93
- t.integer :child_id
94
- t.integer :parent_id
95
- end
96
- end
97
-
98
- it "should require the attribute to be set" do
99
- @model.should validate_presence_of(:children)
100
- end
101
- end
102
-
103
- context "an optional has_and_belongs_to_many association" do
104
- before do
105
- define_model :child
106
- @model = define_model :parent do
107
- has_and_belongs_to_many :children
108
- end.new
109
- create_table "children_parents", :id => false do |t|
110
- t.integer :child_id
111
- t.integer :parent_id
112
- end
113
- end
114
-
115
- it "should not require the attribute to be set" do
116
- @model.should_not validate_presence_of(:children)
117
- end
118
- end
119
-
120
- if Rails::VERSION::STRING.to_f >= 3.2
121
- context "a strictly required attribute" do
122
- before do
123
- define_model :example, :attr => :string do
124
- validates_presence_of :attr, :strict => true
125
- end
126
- @model = Example.new
127
- end
128
-
129
- it "should require a value" do
130
- @model.should validate_presence_of(:attr).strict
131
- end
132
- end
133
- end
134
-
135
- end
@@ -1,154 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Shoulda::Matchers::ActiveModel::ValidateUniquenessOfMatcher do
4
- context "a unique attribute" do
5
- before do
6
- @model = define_model(:example, :attr => :string,
7
- :other => :integer) do
8
- attr_accessible :attr, :other
9
- validates_uniqueness_of :attr
10
- end.new
11
- end
12
-
13
- context "with an existing value" do
14
- before do
15
- @existing = Example.create!(:attr => 'value', :other => 1)
16
- end
17
-
18
- it "should require a unique value for that attribute" do
19
- @model.should validate_uniqueness_of(:attr)
20
- end
21
-
22
- it "should pass when the subject is an existing record" do
23
- @existing.should validate_uniqueness_of(:attr)
24
- end
25
-
26
- it "should fail when a scope is specified" do
27
- @model.should_not validate_uniqueness_of(:attr).scoped_to(:other)
28
- end
29
- end
30
-
31
- context "without an existing value" do
32
- before do
33
- Example.find(:first).should be_nil
34
- @matcher = validate_uniqueness_of(:attr)
35
- end
36
-
37
- it "does not not require a created instance" do
38
- @model.should @matcher
39
- end
40
- end
41
- end
42
-
43
- context "a unique attribute with a custom error and an existing value" do
44
- before do
45
- @model = define_model(:example, :attr => :string) do
46
- attr_accessible :attr
47
- validates_uniqueness_of :attr, :message => 'Bad value'
48
- end.new
49
- Example.create!(:attr => 'value')
50
- end
51
-
52
- it "should fail when checking the default message" do
53
- @model.should_not validate_uniqueness_of(:attr)
54
- end
55
-
56
- it "should fail when checking a message that doesn't match" do
57
- @model.should_not validate_uniqueness_of(:attr).with_message(/abc/i)
58
- end
59
-
60
- it "should pass when checking a message that matches" do
61
- @model.should validate_uniqueness_of(:attr).with_message(/bad/i)
62
- end
63
- end
64
-
65
- context "a scoped unique attribute with an existing value" do
66
- before do
67
- @model = define_model(:example, :attr => :string,
68
- :scope1 => :integer,
69
- :scope2 => :integer,
70
- :other => :integer) do
71
- attr_accessible :attr, :scope1, :scope2, :other
72
- validates_uniqueness_of :attr, :scope => [:scope1, :scope2]
73
- end.new
74
- @existing = Example.create!(:attr => 'value', :scope1 => 1, :scope2 => 2, :other => 3)
75
- end
76
-
77
- it "should pass when the correct scope is specified" do
78
- @model.should validate_uniqueness_of(:attr).scoped_to(:scope1, :scope2)
79
- end
80
-
81
- it "should pass when the subject is an existing record" do
82
- @existing.should validate_uniqueness_of(:attr).scoped_to(:scope1, :scope2)
83
- end
84
-
85
- it "should fail when too narrow of a scope is specified" do
86
- @model.should_not validate_uniqueness_of(:attr).scoped_to(:scope1, :scope2, :other)
87
- end
88
-
89
- it "should fail when too broad of a scope is specified" do
90
- @model.should_not validate_uniqueness_of(:attr).scoped_to(:scope1)
91
- end
92
-
93
- it "should fail when a different scope is specified" do
94
- @model.should_not validate_uniqueness_of(:attr).scoped_to(:other)
95
- end
96
-
97
- it "should fail when no scope is specified" do
98
- @model.should_not validate_uniqueness_of(:attr)
99
- end
100
-
101
- it "should fail when a non-existent attribute is specified as a scope" do
102
- @model.should_not validate_uniqueness_of(:attr).scoped_to(:fake)
103
- end
104
- end
105
-
106
- context "a non-unique attribute with an existing value" do
107
- before do
108
- @model = define_model(:example, :attr => :string) do
109
- attr_accessible :attr
110
- end.new
111
- Example.create!(:attr => 'value')
112
- end
113
-
114
- it "should not require a unique value for that attribute" do
115
- @model.should_not validate_uniqueness_of(:attr)
116
- end
117
- end
118
-
119
- context "a case sensitive unique attribute with an existing value" do
120
- before do
121
- @model = define_model(:example, :attr => :string) do
122
- attr_accessible :attr
123
- validates_uniqueness_of :attr, :case_sensitive => true
124
- end.new
125
- Example.create!(:attr => 'value')
126
- end
127
-
128
- it "should not require a unique, case-insensitive value for that attribute" do
129
- @model.should_not validate_uniqueness_of(:attr).case_insensitive
130
- end
131
-
132
- it "should require a unique, case-sensitive value for that attribute" do
133
- @model.should validate_uniqueness_of(:attr)
134
- end
135
- end
136
-
137
- context "a case sensitive unique integer attribute with an existing value" do
138
- before do
139
- @model = define_model(:example, :attr => :integer) do
140
- attr_accessible :attr
141
- validates_uniqueness_of :attr, :case_sensitive => true
142
- end.new
143
- Example.create!(:attr => 'value')
144
- end
145
-
146
- it "should require a unique, case-insensitive value for that attribute" do
147
- @model.should validate_uniqueness_of(:attr).case_insensitive
148
- end
149
-
150
- it "should require a unique, case-sensitive value for that attribute" do
151
- @model.should validate_uniqueness_of(:attr)
152
- end
153
- end
154
- end
@@ -1,84 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Shoulda::Matchers::ActiveRecord::AcceptNestedAttributesForMatcher do
4
- before do
5
- define_model :child, :parent_id => :integer
6
- define_model :parent do
7
- has_many :children
8
- end
9
- end
10
-
11
- let(:parent) { Parent.new }
12
- let(:matcher) { accept_nested_attributes_for(:children) }
13
-
14
- it "should accept an existing declaration" do
15
- Parent.accepts_nested_attributes_for :children
16
- matcher.matches?(parent).should be_true
17
- end
18
-
19
- it "should reject a missing declaration" do
20
- matcher.matches?(parent).should be_false
21
- matcher.failure_message.should == "Expected Parent to accept nested attributes for children (is not declared)"
22
- end
23
-
24
- context "allow_destroy" do
25
- it "should accept a valid truthy value" do
26
- Parent.accepts_nested_attributes_for :children, :allow_destroy => true
27
- matcher.allow_destroy(true).matches?(parent).should be_true
28
- end
29
-
30
- it "should accept a valid falsey value" do
31
- Parent.accepts_nested_attributes_for :children, :allow_destroy => false
32
- matcher.allow_destroy(false).matches?(parent).should be_true
33
- end
34
-
35
- it "should reject an invalid truthy value" do
36
- Parent.accepts_nested_attributes_for :children, :allow_destroy => true
37
- matcher.allow_destroy(false).matches?(parent).should be_false
38
- matcher.failure_message.should =~ /should not allow destroy/
39
- end
40
-
41
- it "should reject an invalid falsey value" do
42
- Parent.accepts_nested_attributes_for :children, :allow_destroy => false
43
- matcher.allow_destroy(true).matches?(parent).should be_false
44
- matcher.failure_message.should =~ /should allow destroy/
45
- end
46
- end
47
-
48
- context "limit" do
49
- it "should accept a correct value" do
50
- Parent.accepts_nested_attributes_for :children, :limit => 3
51
- matcher.limit(3).matches?(parent).should be_true
52
- end
53
-
54
- it "should reject a false value" do
55
- Parent.accepts_nested_attributes_for :children, :limit => 3
56
- matcher.limit(2).matches?(parent).should be_false
57
- matcher.failure_message.should =~ /limit should be 2, got 3/
58
- end
59
- end
60
-
61
- context "update_only" do
62
- it "should accept a valid truthy value" do
63
- Parent.accepts_nested_attributes_for :children, :update_only => true
64
- matcher.update_only(true).matches?(parent).should be_true
65
- end
66
-
67
- it "should accept a valid falsey value" do
68
- Parent.accepts_nested_attributes_for :children, :update_only => false
69
- matcher.update_only(false).matches?(parent).should be_true
70
- end
71
-
72
- it "should reject an invalid truthy value" do
73
- Parent.accepts_nested_attributes_for :children, :update_only => true
74
- matcher.update_only(false).matches?(parent).should be_false
75
- matcher.failure_message.should =~ /should not be update only/
76
- end
77
-
78
- it "should reject an invalid falsey value" do
79
- Parent.accepts_nested_attributes_for :children, :update_only => false
80
- matcher.update_only(true).matches?(parent).should be_false
81
- matcher.failure_message.should =~ /should be update only/
82
- end
83
- end
84
- end