shoulda-matchers 2.4.0 → 2.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.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +7 -4
  3. data/Appraisals +19 -7
  4. data/Gemfile.lock +1 -1
  5. data/NEWS.md +35 -0
  6. data/README.md +1204 -46
  7. data/features/step_definitions/rails_steps.rb +1 -1
  8. data/gemfiles/3.0.gemfile.lock +1 -1
  9. data/gemfiles/3.1.gemfile.lock +1 -1
  10. data/gemfiles/3.2.gemfile.lock +1 -1
  11. data/gemfiles/{4.0.gemfile → 4.0.0.gemfile} +4 -4
  12. data/gemfiles/{4.0.gemfile.lock → 4.0.0.gemfile.lock} +24 -24
  13. data/gemfiles/4.0.1.gemfile +19 -0
  14. data/gemfiles/4.0.1.gemfile.lock +161 -0
  15. data/lib/shoulda/matchers/action_controller.rb +1 -0
  16. data/lib/shoulda/matchers/action_controller/filter_param_matcher.rb +4 -2
  17. data/lib/shoulda/matchers/action_controller/redirect_to_matcher.rb +6 -3
  18. data/lib/shoulda/matchers/action_controller/render_template_matcher.rb +6 -3
  19. data/lib/shoulda/matchers/action_controller/render_with_layout_matcher.rb +4 -2
  20. data/lib/shoulda/matchers/action_controller/rescue_from_matcher.rb +4 -2
  21. data/lib/shoulda/matchers/action_controller/respond_with_matcher.rb +4 -2
  22. data/lib/shoulda/matchers/action_controller/route_matcher.rb +13 -19
  23. data/lib/shoulda/matchers/action_controller/route_params.rb +47 -0
  24. data/lib/shoulda/matchers/action_controller/set_session_matcher.rb +4 -2
  25. data/lib/shoulda/matchers/action_controller/set_the_flash_matcher.rb +4 -2
  26. data/lib/shoulda/matchers/active_model.rb +4 -3
  27. data/lib/shoulda/matchers/active_model/allow_mass_assignment_of_matcher.rb +9 -6
  28. data/lib/shoulda/matchers/active_model/allow_value_matcher.rb +4 -2
  29. data/lib/shoulda/matchers/active_model/disallow_value_matcher.rb +6 -4
  30. data/lib/shoulda/matchers/active_model/ensure_inclusion_of_matcher.rb +4 -1
  31. data/lib/shoulda/matchers/active_model/ensure_length_of_matcher.rb +8 -1
  32. data/lib/shoulda/matchers/active_model/have_secure_password_matcher.rb +4 -2
  33. data/lib/shoulda/matchers/active_model/numericality_matchers/comparison_matcher.rb +59 -0
  34. data/lib/shoulda/matchers/active_model/numericality_matchers/odd_even_number_matcher.rb +51 -0
  35. data/lib/shoulda/matchers/active_model/numericality_matchers/only_integer_matcher.rb +41 -0
  36. data/lib/shoulda/matchers/active_model/validate_absence_of_matcher.rb +77 -0
  37. data/lib/shoulda/matchers/active_model/validate_numericality_of_matcher.rb +14 -12
  38. data/lib/shoulda/matchers/active_model/validate_uniqueness_of_matcher.rb +6 -6
  39. data/lib/shoulda/matchers/active_model/validation_matcher.rb +10 -7
  40. data/lib/shoulda/matchers/active_record.rb +2 -0
  41. data/lib/shoulda/matchers/active_record/accept_nested_attributes_for_matcher.rb +4 -2
  42. data/lib/shoulda/matchers/active_record/association_matcher.rb +11 -3
  43. data/lib/shoulda/matchers/active_record/association_matchers/model_reflection.rb +80 -0
  44. data/lib/shoulda/matchers/active_record/association_matchers/model_reflector.rb +20 -55
  45. data/lib/shoulda/matchers/active_record/association_matchers/source_matcher.rb +40 -0
  46. data/lib/shoulda/matchers/active_record/have_db_column_matcher.rb +4 -2
  47. data/lib/shoulda/matchers/active_record/have_db_index_matcher.rb +4 -2
  48. data/lib/shoulda/matchers/active_record/have_readonly_attribute_matcher.rb +7 -4
  49. data/lib/shoulda/matchers/active_record/serialize_matcher.rb +4 -2
  50. data/lib/shoulda/matchers/integrations/test_unit.rb +3 -3
  51. data/lib/shoulda/matchers/rails_shim.rb +14 -6
  52. data/lib/shoulda/matchers/version.rb +1 -1
  53. data/spec/shoulda/matchers/action_controller/filter_param_matcher_spec.rb +1 -1
  54. data/spec/shoulda/matchers/action_controller/rescue_from_matcher_spec.rb +2 -2
  55. data/spec/shoulda/matchers/action_controller/route_matcher_spec.rb +5 -0
  56. data/spec/shoulda/matchers/action_controller/route_params_spec.rb +30 -0
  57. data/spec/shoulda/matchers/active_model/allow_mass_assignment_of_matcher_spec.rb +1 -1
  58. data/spec/shoulda/matchers/active_model/allow_value_matcher_spec.rb +1 -1
  59. data/spec/shoulda/matchers/active_model/disallow_value_matcher_spec.rb +2 -2
  60. data/spec/shoulda/matchers/active_model/ensure_inclusion_of_matcher_spec.rb +10 -0
  61. data/spec/shoulda/matchers/active_model/ensure_length_of_matcher_spec.rb +7 -0
  62. data/spec/shoulda/matchers/active_model/{comparison_matcher_spec.rb → numericality_matchers/comparison_matcher_spec.rb} +2 -2
  63. data/spec/shoulda/matchers/active_model/{odd_even_number_matcher_spec.rb → numericality_matchers/odd_even_number_matcher_spec.rb} +4 -4
  64. data/spec/shoulda/matchers/active_model/{only_integer_matcher_spec.rb → numericality_matchers/only_integer_matcher_spec.rb} +3 -3
  65. data/spec/shoulda/matchers/active_model/validate_absence_of_matcher_spec.rb +139 -0
  66. data/spec/shoulda/matchers/active_model/validate_numericality_of_matcher_spec.rb +7 -7
  67. data/spec/shoulda/matchers/active_model/validate_uniqueness_of_matcher_spec.rb +48 -38
  68. data/spec/shoulda/matchers/active_record/accept_nested_attributes_for_matcher_spec.rb +6 -6
  69. data/spec/shoulda/matchers/active_record/association_matcher_spec.rb +21 -8
  70. data/spec/shoulda/matchers/active_record/association_matchers/model_reflection_spec.rb +247 -0
  71. data/spec/shoulda/matchers/active_record/have_readonly_attributes_matcher_spec.rb +1 -1
  72. data/spec/shoulda/matchers/active_record/serialize_matcher_spec.rb +3 -3
  73. data/spec/spec_helper.rb +9 -15
  74. data/spec/support/active_resource_builder.rb +2 -0
  75. data/spec/support/controller_builder.rb +4 -10
  76. data/spec/support/model_builder.rb +6 -2
  77. data/spec/support/rails_versions.rb +18 -0
  78. data/spec/support/shared_examples/numerical_submatcher_spec.rb +4 -4
  79. data/spec/support/test_application.rb +97 -0
  80. metadata +30 -14
  81. data/lib/shoulda/matchers/active_model/comparison_matcher.rb +0 -57
  82. data/lib/shoulda/matchers/active_model/odd_even_number_matcher.rb +0 -47
  83. data/lib/shoulda/matchers/active_model/only_integer_matcher.rb +0 -37
@@ -10,7 +10,7 @@ describe Shoulda::Matchers::ActiveRecord::AcceptNestedAttributesForMatcher do
10
10
 
11
11
  matcher.matches?(rejecting_children).should be_false
12
12
 
13
- matcher.failure_message_for_should.
13
+ matcher.failure_message.
14
14
  should eq 'Expected Parent to accept nested attributes for children (is not declared)'
15
15
  end
16
16
 
@@ -32,7 +32,7 @@ describe Shoulda::Matchers::ActiveRecord::AcceptNestedAttributesForMatcher do
32
32
  matching = accepting_children(:allow_destroy => true)
33
33
 
34
34
  matcher.allow_destroy(false).matches?(matching).should be_false
35
- matcher.failure_message_for_should.should =~ /should not allow destroy/
35
+ matcher.failure_message.should =~ /should not allow destroy/
36
36
  end
37
37
 
38
38
  it 'rejects an invalid falsey value' do
@@ -40,7 +40,7 @@ describe Shoulda::Matchers::ActiveRecord::AcceptNestedAttributesForMatcher do
40
40
  matching = accepting_children(:allow_destroy => false)
41
41
 
42
42
  matcher.allow_destroy(true).matches?(matching).should be_false
43
- matcher.failure_message_for_should.should =~ /should allow destroy/
43
+ matcher.failure_message.should =~ /should allow destroy/
44
44
  end
45
45
  end
46
46
 
@@ -54,7 +54,7 @@ describe Shoulda::Matchers::ActiveRecord::AcceptNestedAttributesForMatcher do
54
54
  rejecting = accepting_children(:limit => 3)
55
55
 
56
56
  matcher.limit(2).matches?(rejecting).should be_false
57
- matcher.failure_message_for_should.should =~ /limit should be 2, got 3/
57
+ matcher.failure_message.should =~ /limit should be 2, got 3/
58
58
  end
59
59
  end
60
60
 
@@ -74,7 +74,7 @@ describe Shoulda::Matchers::ActiveRecord::AcceptNestedAttributesForMatcher do
74
74
  rejecting = accepting_children(:update_only => true)
75
75
 
76
76
  matcher.matches?(rejecting).should be_false
77
- matcher.failure_message_for_should.should =~ /should not be update only/
77
+ matcher.failure_message.should =~ /should not be update only/
78
78
  end
79
79
 
80
80
  it 'rejects an invalid falsey value' do
@@ -82,7 +82,7 @@ describe Shoulda::Matchers::ActiveRecord::AcceptNestedAttributesForMatcher do
82
82
  rejecting = accepting_children(:update_only => false)
83
83
 
84
84
  matcher.matches?(rejecting).should be_false
85
- matcher.failure_message_for_should.should =~ /should be update only/
85
+ matcher.failure_message.should =~ /should be update only/
86
86
  end
87
87
  end
88
88
 
@@ -247,7 +247,7 @@ describe Shoulda::Matchers::ActiveRecord::AssociationMatcher do
247
247
 
248
248
  matcher.matches?(having_many_children).should be_false
249
249
 
250
- matcher.failure_message_for_should.should =~ /does not have any relationship to conceptions/
250
+ matcher.failure_message.should =~ /does not have any relationship to conceptions/
251
251
  end
252
252
 
253
253
  it 'rejects an association that has the wrong :through option' do
@@ -266,7 +266,7 @@ describe Shoulda::Matchers::ActiveRecord::AssociationMatcher do
266
266
 
267
267
  matcher = have_many(:children).through(:relationships)
268
268
  matcher.matches?(Parent.new).should be_false
269
- matcher.failure_message_for_should.should =~ /through relationships, but got it through conceptions/
269
+ matcher.failure_message.should =~ /through relationships, but got it through conceptions/
270
270
  end
271
271
 
272
272
  it 'accepts an association with a valid :dependent option' do
@@ -279,7 +279,20 @@ describe Shoulda::Matchers::ActiveRecord::AssociationMatcher do
279
279
 
280
280
  having_many_children.should_not matcher
281
281
 
282
- matcher.failure_message_for_should.should =~ /children should have destroy dependency/
282
+ matcher.failure_message.should =~ /children should have destroy dependency/
283
+ end
284
+
285
+ it 'accepts an association with a valid :source option' do
286
+ having_many_children(:source => :user).
287
+ should have_many(:children).source(:user)
288
+ end
289
+
290
+ it 'rejects an association with a bad :source option' do
291
+ matcher = have_many(:children).source(:user)
292
+
293
+ having_many_children.should_not matcher
294
+
295
+ matcher.failure_message.should =~ /children should have user as source option/
283
296
  end
284
297
 
285
298
  it 'accepts an association with a valid :order option' do
@@ -292,7 +305,7 @@ describe Shoulda::Matchers::ActiveRecord::AssociationMatcher do
292
305
 
293
306
  having_many_children.should_not matcher
294
307
 
295
- matcher.failure_message_for_should.should =~ /children should be ordered by id/
308
+ matcher.failure_message.should =~ /children should be ordered by id/
296
309
  end
297
310
 
298
311
  it 'accepts an association with a valid :conditions option' do
@@ -437,7 +450,7 @@ describe Shoulda::Matchers::ActiveRecord::AssociationMatcher do
437
450
 
438
451
  having_one_detail.should_not matcher
439
452
 
440
- matcher.failure_message_for_should.should =~ /detail should have destroy dependency/
453
+ matcher.failure_message.should =~ /detail should have destroy dependency/
441
454
  end
442
455
 
443
456
  it 'accepts an association with a valid :order option' do
@@ -449,7 +462,7 @@ describe Shoulda::Matchers::ActiveRecord::AssociationMatcher do
449
462
 
450
463
  having_one_detail.should_not matcher
451
464
 
452
- matcher.failure_message_for_should.should =~ /detail should be ordered by id/
465
+ matcher.failure_message.should =~ /detail should be ordered by id/
453
466
  end
454
467
 
455
468
  it 'accepts an association with a valid :conditions option' do
@@ -652,7 +665,7 @@ describe Shoulda::Matchers::ActiveRecord::AssociationMatcher do
652
665
  def define_association_with_conditions(model, macro, name, conditions, other_options={})
653
666
  args = []
654
667
  options = {}
655
- if Shoulda::Matchers::RailsShim.rails_major_version == 4
668
+ if Shoulda::Matchers::RailsShim.active_record_major_version == 4
656
669
  args << lambda { where(conditions) }
657
670
  else
658
671
  options[:conditions] = conditions
@@ -664,7 +677,7 @@ describe Shoulda::Matchers::ActiveRecord::AssociationMatcher do
664
677
  def define_association_with_order(model, macro, name, order, other_options={})
665
678
  args = []
666
679
  options = {}
667
- if Shoulda::Matchers::RailsShim.rails_major_version == 4
680
+ if Shoulda::Matchers::RailsShim.active_record_major_version == 4
668
681
  args << lambda { order(order) }
669
682
  else
670
683
  options[:order] = order
@@ -0,0 +1,247 @@
1
+ require 'spec_helper'
2
+
3
+ describe Shoulda::Matchers::ActiveRecord::AssociationMatchers::ModelReflection do
4
+ it 'delegates other methods to the given Reflection object' do
5
+ define_model(:country)
6
+ person_model = define_model(:person, country_id: :integer) do
7
+ belongs_to :country
8
+ end
9
+ delegate_reflection = person_model.reflect_on_association(:country)
10
+ delegate_reflection.stubs(foo: 'bar')
11
+ reflection = described_class.new(delegate_reflection)
12
+
13
+ expect(reflection.foo).to eq 'bar'
14
+ end
15
+
16
+ describe '#associated_class' do
17
+ it 'returns the model that the association refers to' do
18
+ define_model(:country)
19
+ person_model = define_model(:person, country_id: :integer) do
20
+ belongs_to :country
21
+ end
22
+ delegate_reflection = person_model.reflect_on_association(:country)
23
+ reflection = described_class.new(delegate_reflection)
24
+
25
+ expect(reflection.associated_class).to be Country
26
+ end
27
+ end
28
+
29
+ describe '#through?' do
30
+ it 'returns true if the reflection is for a has_many :through association' do
31
+ define_model(:city, person_id: :integer)
32
+ define_model(:person, country_id: :integer) do
33
+ has_many :cities
34
+ end
35
+ country_model = define_model(:country) do
36
+ has_many :people
37
+ has_many :cities, through: :people
38
+ end
39
+ delegate_reflection = country_model.reflect_on_association(:cities)
40
+ reflection = described_class.new(delegate_reflection)
41
+
42
+ expect(reflection).to be_through
43
+ end
44
+
45
+ it 'returns false if not' do
46
+ define_model(:person, country_id: :integer)
47
+ country_model = define_model(:country) do
48
+ has_many :people
49
+ end
50
+ delegate_reflection = country_model.reflect_on_association(:people)
51
+ reflection = described_class.new(delegate_reflection)
52
+
53
+ expect(reflection).not_to be_through
54
+ end
55
+ end
56
+
57
+ describe '#join_table' do
58
+ context 'when the association was defined with a :join_table option' do
59
+ it 'returns the value of the option' do
60
+ define_model(:person, country_id: :integer)
61
+ country_model = define_model(:country) do
62
+ has_and_belongs_to_many :people, join_table: 'foos'
63
+ end
64
+ delegate_reflection = country_model.reflect_on_association(:people)
65
+ reflection = described_class.new(delegate_reflection)
66
+
67
+ expect(reflection.join_table).to eq 'foos'
68
+ end
69
+ end
70
+
71
+ context 'when the association was not defined with :join_table' do
72
+ it 'returns the default join_table that ActiveRecord generates' do
73
+ define_model(:person, country_id: :integer)
74
+ country_model = define_model(:country) do
75
+ has_and_belongs_to_many :people
76
+ end
77
+ delegate_reflection = country_model.reflect_on_association(:people)
78
+ reflection = described_class.new(delegate_reflection)
79
+
80
+ expect(reflection.join_table).to eq 'countries_people'
81
+ end
82
+ end
83
+ end
84
+
85
+ describe '#association_relation' do
86
+ if rails_4_x?
87
+ context 'when the reflection object has a #scope method' do
88
+ context 'when the scope is a block' do
89
+ it 'executes the block in the context of an empty scope' do
90
+ define_model(:country, mood: :string)
91
+ person_model = define_model(:person, country_id: :integer) do
92
+ belongs_to :country, -> { where(mood: 'nice') }
93
+ end
94
+ delegate_reflection = person_model.reflect_on_association(:country)
95
+ reflection = described_class.new(delegate_reflection)
96
+
97
+ actual_sql = reflection.association_relation.to_sql
98
+ expected_sql = Country.where(mood: 'nice').to_sql
99
+ expect(actual_sql).to eq expected_sql
100
+ end
101
+ end
102
+
103
+ context 'when the scope is nil' do
104
+ it 'returns an empty scope' do
105
+ define_model(:country)
106
+ person_model = define_model(:person, country_id: :integer) do
107
+ belongs_to :country
108
+ end
109
+ delegate_reflection = person_model.reflect_on_association(:country)
110
+ reflection = described_class.new(delegate_reflection)
111
+
112
+ actual_sql = reflection.association_relation.to_sql
113
+ expected_sql = Country.all.to_sql
114
+ expect(actual_sql).to eq expected_sql
115
+ end
116
+ end
117
+ end
118
+ end
119
+
120
+ if rails_3_x?
121
+ context 'when the reflection object does not have a #scope method' do
122
+ context 'when the reflection options contain :conditions' do
123
+ it 'creates an ActiveRecord::Relation from the conditions' do
124
+ define_model(:country, mood: :string)
125
+ person_model = define_model(:person, country_id: :integer) do
126
+ belongs_to :country, conditions: { mood: 'nice' }
127
+ end
128
+ delegate_reflection = person_model.reflect_on_association(:country)
129
+ reflection = described_class.new(delegate_reflection)
130
+
131
+ actual_sql = reflection.association_relation.to_sql
132
+ expected_sql = Country.where(mood: 'nice').to_sql
133
+ expect(actual_sql).to eq expected_sql
134
+ end
135
+ end
136
+
137
+ context 'when the reflection options contain :order' do
138
+ it 'creates an ActiveRecord::Relation from the order' do
139
+ define_model(:person, country_id: :integer, age: :integer)
140
+ country_model = define_model(:country) do
141
+ has_many :people, order: 'age'
142
+ end
143
+ delegate_reflection = country_model.reflect_on_association(:people)
144
+ reflection = described_class.new(delegate_reflection)
145
+
146
+ actual_sql = reflection.association_relation.to_sql
147
+ expected_sql = Person.order('age').to_sql
148
+ expect(actual_sql).to eq expected_sql
149
+ end
150
+ end
151
+
152
+ context 'when the reflection options contain :include' do
153
+ it 'creates an ActiveRecord::Relation from the include' do
154
+ define_model(:city, country_id: :integer)
155
+ define_model(:country) do
156
+ has_many :cities
157
+ end
158
+ person_model = define_model(:person, country_id: :integer) do
159
+ belongs_to :country, include: :cities
160
+ end
161
+ delegate_reflection = person_model.reflect_on_association(:country)
162
+ reflection = described_class.new(delegate_reflection)
163
+
164
+ actual_includes = reflection.association_relation.includes_values
165
+ expected_includes = Country.includes(:cities).includes_values
166
+ expect(actual_includes).to eq expected_includes
167
+ end
168
+ end
169
+
170
+ context 'when the reflection options contain :group' do
171
+ it 'creates an ActiveRecord::Relation from the group' do
172
+ country_model = define_model(:country, mood: :string) do
173
+ has_many :people, group: 'age'
174
+ end
175
+ define_model(:person, country_id: :integer, age: :integer)
176
+ delegate_reflection = country_model.reflect_on_association(:people)
177
+ reflection = described_class.new(delegate_reflection)
178
+
179
+ actual_sql = reflection.association_relation.to_sql
180
+ expected_sql = Person.group('age').to_sql
181
+ expect(actual_sql).to eq expected_sql
182
+ end
183
+ end
184
+
185
+ context 'when the reflection options contain :having' do
186
+ it 'creates an ActiveRecord::Relation from the having' do
187
+ country_model = define_model(:country) do
188
+ has_many :people, having: 'country_id > 1'
189
+ end
190
+ define_model(:person, country_id: :integer)
191
+ delegate_reflection = country_model.reflect_on_association(:people)
192
+ reflection = described_class.new(delegate_reflection)
193
+
194
+ actual_sql = reflection.association_relation.to_sql
195
+ expected_sql = Person.having('country_id > 1').to_sql
196
+ expect(actual_sql).to eq expected_sql
197
+ end
198
+ end
199
+
200
+ context 'when the reflection options contain :limit' do
201
+ it 'creates an ActiveRecord::Relation from the limit' do
202
+ country_model = define_model(:country) do
203
+ has_many :people, limit: 10
204
+ end
205
+ define_model(:person, country_id: :integer)
206
+ delegate_reflection = country_model.reflect_on_association(:people)
207
+ reflection = described_class.new(delegate_reflection)
208
+
209
+ actual_sql = reflection.association_relation.to_sql
210
+ expected_sql = Person.limit(10).to_sql
211
+ expect(actual_sql).to eq expected_sql
212
+ end
213
+ end
214
+
215
+ context 'when the reflection options contain :offset' do
216
+ it 'creates an ActiveRecord::Relation from the offset' do
217
+ country_model = define_model(:country) do
218
+ has_many :people, offset: 5
219
+ end
220
+ define_model(:person, country_id: :integer)
221
+ delegate_reflection = country_model.reflect_on_association(:people)
222
+ reflection = described_class.new(delegate_reflection)
223
+
224
+ actual_sql = reflection.association_relation.to_sql
225
+ expected_sql = Person.offset(5).to_sql
226
+ expect(actual_sql).to eq expected_sql
227
+ end
228
+ end
229
+
230
+ context 'when the reflection options contain :select' do
231
+ it 'creates an ActiveRecord::Relation from the select' do
232
+ country_model = define_model(:country) do
233
+ has_many :people, select: 'age'
234
+ end
235
+ define_model(:person, country_id: :integer, age: :integer)
236
+ delegate_reflection = country_model.reflect_on_association(:people)
237
+ reflection = described_class.new(delegate_reflection)
238
+
239
+ actual_sql = reflection.association_relation.to_sql
240
+ expected_sql = Person.select('age').to_sql
241
+ expect(actual_sql).to eq expected_sql
242
+ end
243
+ end
244
+ end
245
+ end
246
+ end
247
+ end
@@ -29,7 +29,7 @@ describe Shoulda::Matchers::ActiveRecord::HaveReadonlyAttributeMatcher do
29
29
 
30
30
  matcher.matches?(model)
31
31
 
32
- matcher.failure_message_for_should.should_not be_nil
32
+ matcher.failure_message.should_not be_nil
33
33
  end
34
34
  end
35
35
 
@@ -15,7 +15,7 @@ describe Shoulda::Matchers::ActiveRecord::SerializeMatcher do
15
15
 
16
16
  matcher.matches?(unserialized_model)
17
17
 
18
- matcher.failure_message_for_should.should =~ /to serialize the attribute called :attr/
18
+ matcher.failure_message.should =~ /to serialize the attribute called :attr/
19
19
  end
20
20
 
21
21
  it 'assigns a helpful failure message when using #as' do
@@ -23,7 +23,7 @@ describe Shoulda::Matchers::ActiveRecord::SerializeMatcher do
23
23
 
24
24
  matcher.matches?(unserialized_model)
25
25
 
26
- matcher.failure_message_for_should.should =~ /with a type of Hash/
26
+ matcher.failure_message.should =~ /with a type of Hash/
27
27
  end
28
28
 
29
29
  it 'assigns a helpful failure message when using #as_instance_of' do
@@ -31,7 +31,7 @@ describe Shoulda::Matchers::ActiveRecord::SerializeMatcher do
31
31
 
32
32
  matcher.matches?(unserialized_model)
33
33
 
34
- matcher.failure_message_for_should.should =~ /with an instance of Hash/
34
+ matcher.failure_message.should =~ /with an instance of Hash/
35
35
  end
36
36
 
37
37
  def unserialized_model
data/spec/spec_helper.rb CHANGED
@@ -1,28 +1,22 @@
1
- # Create Rails environment based on the version given from Appraisal
2
- TESTAPP_ROOT = File.join(File.dirname(__FILE__), '..', 'tmp', 'aruba', 'testapp')
3
- FileUtils.rm_rf(TESTAPP_ROOT) if File.exists?(TESTAPP_ROOT)
4
- `rails new #{TESTAPP_ROOT}`
1
+ require File.expand_path('../support/test_application', __FILE__)
5
2
 
3
+ $test_app = TestApplication.new
4
+ $test_app.create
5
+ $test_app.load
6
+
7
+ ENV['BUNDLE_GEMFILE'] ||= app.gemfile_path
6
8
  ENV['RAILS_ENV'] = 'test'
7
- ENV['BUNDLE_GEMFILE'] ||= TESTAPP_ROOT + '/Gemfile'
8
9
 
9
- require "#{TESTAPP_ROOT}/config/environment"
10
10
  require 'bourne'
11
11
  require 'shoulda-matchers'
12
12
  require 'rspec/rails'
13
13
 
14
- PROJECT_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..')).freeze
15
-
14
+ PROJECT_ROOT = File.expand_path('../..', __FILE__)
16
15
  $LOAD_PATH << File.join(PROJECT_ROOT, 'lib')
17
-
18
- Dir[File.join(PROJECT_ROOT, 'spec', 'support', '**', '*.rb')].each { |file| require(file) }
19
-
20
- # Run the migrations
21
- ActiveRecord::Migration.verbose = false
22
- ActiveRecord::Migrator.migrate(Rails.root.join('db/migrate'))
16
+ Dir[ File.join(PROJECT_ROOT, 'spec/support/**/*.rb') ].each { |file| require file }
23
17
 
24
18
  RSpec.configure do |config|
25
19
  config.mock_with :mocha
26
20
  config.include Shoulda::Matchers::ActionController,
27
- :example_group => { :file_path => /action_controller/ }
21
+ example_group: { file_path: /action_controller/ }
28
22
  end