shoulda-matchers 3.0.0.rc1 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -3
- data/Gemfile.lock +12 -41
- data/NEWS.md +118 -26
- data/README.md +34 -11
- data/doc_config/yard/templates/default/fulldoc/html/css/bootstrap.css +0 -0
- data/doc_config/yard/templates/default/fulldoc/html/css/style.css +4 -0
- data/gemfiles/4.0.0.gemfile +2 -3
- data/gemfiles/4.0.0.gemfile.lock +47 -77
- data/gemfiles/4.0.1.gemfile +2 -3
- data/gemfiles/4.0.1.gemfile.lock +51 -79
- data/gemfiles/4.1.gemfile +2 -3
- data/gemfiles/4.1.gemfile.lock +73 -103
- data/gemfiles/4.2.gemfile +2 -3
- data/gemfiles/4.2.gemfile.lock +90 -124
- data/lib/shoulda/matchers.rb +1 -0
- data/lib/shoulda/matchers/action_controller/callback_matcher.rb +6 -8
- data/lib/shoulda/matchers/action_controller/filter_param_matcher.rb +1 -3
- data/lib/shoulda/matchers/action_controller/flash_store.rb +1 -8
- data/lib/shoulda/matchers/action_controller/permit_matcher.rb +140 -88
- data/lib/shoulda/matchers/action_controller/redirect_to_matcher.rb +2 -5
- data/lib/shoulda/matchers/action_controller/render_template_matcher.rb +5 -10
- data/lib/shoulda/matchers/action_controller/render_with_layout_matcher.rb +2 -4
- data/lib/shoulda/matchers/action_controller/rescue_from_matcher.rb +1 -3
- data/lib/shoulda/matchers/action_controller/respond_with_matcher.rb +3 -5
- data/lib/shoulda/matchers/action_controller/route_matcher.rb +5 -7
- data/lib/shoulda/matchers/action_controller/set_flash_matcher.rb +35 -9
- data/lib/shoulda/matchers/action_controller/set_session_matcher.rb +3 -3
- data/lib/shoulda/matchers/active_model.rb +57 -1
- data/lib/shoulda/matchers/active_model/allow_mass_assignment_of_matcher.rb +2 -5
- data/lib/shoulda/matchers/active_model/allow_value_matcher.rb +162 -54
- data/lib/shoulda/matchers/active_model/disallow_value_matcher.rb +5 -2
- data/lib/shoulda/matchers/active_model/have_secure_password_matcher.rb +1 -3
- data/lib/shoulda/matchers/active_model/numericality_matchers/comparison_matcher.rb +24 -11
- data/lib/shoulda/matchers/active_model/numericality_matchers/even_number_matcher.rb +4 -3
- data/lib/shoulda/matchers/active_model/numericality_matchers/numeric_type_matcher.rb +0 -2
- data/lib/shoulda/matchers/active_model/numericality_matchers/odd_number_matcher.rb +4 -3
- data/lib/shoulda/matchers/active_model/numericality_matchers/only_integer_matcher.rb +2 -1
- data/lib/shoulda/matchers/active_model/validate_absence_of_matcher.rb +15 -13
- data/lib/shoulda/matchers/active_model/validate_acceptance_of_matcher.rb +3 -3
- data/lib/shoulda/matchers/active_model/validate_confirmation_of_matcher.rb +3 -3
- data/lib/shoulda/matchers/active_model/validate_exclusion_of_matcher.rb +4 -4
- data/lib/shoulda/matchers/active_model/validate_inclusion_of_matcher.rb +8 -8
- data/lib/shoulda/matchers/active_model/validate_length_of_matcher.rb +8 -8
- data/lib/shoulda/matchers/active_model/validate_numericality_of_matcher.rb +12 -14
- data/lib/shoulda/matchers/active_model/validate_presence_of_matcher.rb +10 -4
- data/lib/shoulda/matchers/active_model/validation_matcher.rb +0 -3
- data/lib/shoulda/matchers/active_model/validator.rb +0 -8
- data/lib/shoulda/matchers/active_record/accept_nested_attributes_for_matcher.rb +4 -6
- data/lib/shoulda/matchers/active_record/association_matcher.rb +58 -43
- data/lib/shoulda/matchers/active_record/define_enum_for_matcher.rb +2 -2
- data/lib/shoulda/matchers/active_record/have_db_column_matcher.rb +3 -5
- data/lib/shoulda/matchers/active_record/have_db_index_matcher.rb +3 -5
- data/lib/shoulda/matchers/active_record/have_readonly_attribute_matcher.rb +1 -4
- data/lib/shoulda/matchers/active_record/serialize_matcher.rb +3 -5
- data/lib/shoulda/matchers/active_record/validate_uniqueness_of_matcher.rb +7 -7
- data/lib/shoulda/matchers/doublespeak/double.rb +10 -1
- data/lib/shoulda/matchers/doublespeak/double_collection.rb +13 -5
- data/lib/shoulda/matchers/doublespeak/method_call.rb +10 -1
- data/lib/shoulda/matchers/doublespeak/object_double.rb +2 -1
- data/lib/shoulda/matchers/doublespeak/world.rb +10 -0
- data/lib/shoulda/matchers/error.rb +4 -0
- data/lib/shoulda/matchers/independent/delegate_method_matcher.rb +11 -10
- data/lib/shoulda/matchers/integrations/libraries.rb +1 -0
- data/lib/shoulda/matchers/integrations/libraries/action_controller.rb +1 -1
- data/lib/shoulda/matchers/integrations/libraries/active_model.rb +1 -1
- data/lib/shoulda/matchers/integrations/libraries/active_record.rb +1 -1
- data/lib/shoulda/matchers/integrations/libraries/rails.rb +2 -1
- data/lib/shoulda/matchers/integrations/libraries/routing.rb +27 -0
- data/lib/shoulda/matchers/integrations/test_frameworks/active_support_test_case.rb +1 -1
- data/lib/shoulda/matchers/integrations/test_frameworks/minitest_4.rb +1 -1
- data/lib/shoulda/matchers/integrations/test_frameworks/minitest_5.rb +1 -1
- data/lib/shoulda/matchers/integrations/test_frameworks/missing_test_framework.rb +1 -1
- data/lib/shoulda/matchers/integrations/test_frameworks/rspec.rb +2 -2
- data/lib/shoulda/matchers/integrations/test_frameworks/test_unit.rb +1 -1
- data/lib/shoulda/matchers/routing.rb +10 -0
- data/lib/shoulda/matchers/version.rb +1 -1
- data/script/SUPPORTED_VERSIONS +1 -1
- data/spec/acceptance/independent_matchers_spec.rb +103 -42
- data/spec/doublespeak_spec_helper.rb +5 -1
- data/spec/support/acceptance/adds_shoulda_matchers_to_project.rb +34 -11
- data/spec/support/acceptance/helpers/rspec_helpers.rb +9 -13
- data/spec/support/acceptance/helpers/step_helpers.rb +13 -0
- data/spec/support/acceptance/matchers/have_output.rb +1 -1
- data/spec/support/acceptance/matchers/indicate_number_of_tests_was_run_matcher.rb +1 -1
- data/spec/support/tests/command_runner.rb +5 -1
- data/spec/support/unit/helpers/active_record_versions.rb +0 -4
- data/spec/support/unit/shared_examples/set_session_or_flash.rb +8 -3
- data/spec/unit/shoulda/matchers/action_controller/permit_matcher_spec.rb +198 -39
- data/spec/unit/shoulda/matchers/action_controller/route_matcher_spec.rb +269 -102
- data/spec/unit/shoulda/matchers/action_controller/set_flash_matcher_spec.rb +24 -0
- data/spec/unit/shoulda/matchers/active_model/allow_value_matcher_spec.rb +118 -101
- data/spec/unit/shoulda/matchers/active_model/disallow_value_matcher_spec.rb +0 -82
- data/spec/unit/shoulda/matchers/active_model/numericality_matchers/comparison_matcher_spec.rb +148 -121
- data/spec/unit/shoulda/matchers/active_model/validate_acceptance_of_matcher_spec.rb +20 -8
- data/spec/unit/shoulda/matchers/active_model/validate_numericality_of_matcher_spec.rb +64 -183
- data/spec/unit/shoulda/matchers/active_model/validate_presence_of_matcher_spec.rb +14 -0
- data/spec/unit/shoulda/matchers/doublespeak/double_collection_spec.rb +60 -0
- data/spec/unit/shoulda/matchers/doublespeak/double_spec.rb +23 -7
- data/spec/unit/shoulda/matchers/routing/route_matcher_spec.rb +242 -0
- data/spec/unit_spec_helper.rb +4 -0
- data/tasks/documentation.rb +35 -0
- metadata +9 -8
- data/Guardfile +0 -5
- data/cucumber.yml +0 -1
- data/lib/shoulda/matchers/active_model/validator_with_captured_range_error.rb +0 -12
@@ -16,7 +16,7 @@ module Shoulda
|
|
16
16
|
# it { should validate_numericality_of(:gpa) }
|
17
17
|
# end
|
18
18
|
#
|
19
|
-
# #
|
19
|
+
# # Minitest (Shoulda)
|
20
20
|
# class PersonTest < ActiveSupport::TestCase
|
21
21
|
# should validate_numericality_of(:gpa)
|
22
22
|
# end
|
@@ -42,7 +42,7 @@ module Shoulda
|
|
42
42
|
# end
|
43
43
|
# end
|
44
44
|
#
|
45
|
-
# #
|
45
|
+
# # Minitest (Shoulda)
|
46
46
|
# class PersonTest < ActiveSupport::TestCase
|
47
47
|
# should validate_numericality_of(:number_of_dependents).on(:create)
|
48
48
|
# end
|
@@ -65,7 +65,7 @@ module Shoulda
|
|
65
65
|
# it { should validate_numericality_of(:age).only_integer }
|
66
66
|
# end
|
67
67
|
#
|
68
|
-
# #
|
68
|
+
# # Minitest (Shoulda)
|
69
69
|
# class PersonTest < ActiveSupport::TestCase
|
70
70
|
# should validate_numericality_of(:age).only_integer
|
71
71
|
# end
|
@@ -92,7 +92,7 @@ module Shoulda
|
|
92
92
|
# end
|
93
93
|
# end
|
94
94
|
#
|
95
|
-
# #
|
95
|
+
# # Minitest (Shoulda)
|
96
96
|
# class PersonTest < ActiveSupport::TestCase
|
97
97
|
# should validate_numericality_of(:number_of_cars).
|
98
98
|
# is_less_than(2)
|
@@ -120,7 +120,7 @@ module Shoulda
|
|
120
120
|
# end
|
121
121
|
# end
|
122
122
|
#
|
123
|
-
# #
|
123
|
+
# # Minitest (Shoulda)
|
124
124
|
# class PersonTest < ActiveSupport::TestCase
|
125
125
|
# should validate_numericality_of(:birth_year).
|
126
126
|
# is_less_than_or_equal_to(1987)
|
@@ -144,7 +144,7 @@ module Shoulda
|
|
144
144
|
# it { should validate_numericality_of(:weight).is_equal_to(150) }
|
145
145
|
# end
|
146
146
|
#
|
147
|
-
# #
|
147
|
+
# # Minitest (Shoulda)
|
148
148
|
# class PersonTest < ActiveSupport::TestCase
|
149
149
|
# should validate_numericality_of(:weight).is_equal_to(150)
|
150
150
|
# end
|
@@ -171,7 +171,7 @@ module Shoulda
|
|
171
171
|
# end
|
172
172
|
# end
|
173
173
|
#
|
174
|
-
# #
|
174
|
+
# # Minitest (Shoulda)
|
175
175
|
# class PersonTest < ActiveSupport::TestCase
|
176
176
|
# should validate_numericality_of(:height).
|
177
177
|
# is_greater_than_or_equal_to(55)
|
@@ -198,7 +198,7 @@ module Shoulda
|
|
198
198
|
# end
|
199
199
|
# end
|
200
200
|
#
|
201
|
-
# #
|
201
|
+
# # Minitest (Shoulda)
|
202
202
|
# class PersonTest < ActiveSupport::TestCase
|
203
203
|
# should validate_numericality_of(:legal_age).
|
204
204
|
# is_greater_than(21)
|
@@ -221,7 +221,7 @@ module Shoulda
|
|
221
221
|
# it { should validate_numericality_of(:birth_month).even }
|
222
222
|
# end
|
223
223
|
#
|
224
|
-
# #
|
224
|
+
# # Minitest (Shoulda)
|
225
225
|
# class PersonTest < ActiveSupport::TestCase
|
226
226
|
# should validate_numericality_of(:birth_month).even
|
227
227
|
# end
|
@@ -244,7 +244,7 @@ module Shoulda
|
|
244
244
|
# it { should validate_numericality_of(:birth_day).odd }
|
245
245
|
# end
|
246
246
|
#
|
247
|
-
# #
|
247
|
+
# # Minitest (Shoulda)
|
248
248
|
# class PersonTest < ActiveSupport::TestCase
|
249
249
|
# should validate_numericality_of(:birth_day).odd
|
250
250
|
# end
|
@@ -269,7 +269,7 @@ module Shoulda
|
|
269
269
|
# end
|
270
270
|
# end
|
271
271
|
#
|
272
|
-
# #
|
272
|
+
# # Minitest (Shoulda)
|
273
273
|
# class PersonTest < ActiveSupport::TestCase
|
274
274
|
# should validate_numericality_of(:number_of_dependents).
|
275
275
|
# with_message('Number of dependents must be a number')
|
@@ -291,7 +291,7 @@ module Shoulda
|
|
291
291
|
# it { should validate_numericality_of(:age).allow_nil }
|
292
292
|
# end
|
293
293
|
#
|
294
|
-
# #
|
294
|
+
# # Minitest (Shoulda)
|
295
295
|
# class PostTest < ActiveSupport::TestCase
|
296
296
|
# should validate_numericality_of(:age).allow_nil
|
297
297
|
# end
|
@@ -412,12 +412,10 @@ module Shoulda
|
|
412
412
|
def failure_message
|
413
413
|
first_failing_submatcher.failure_message
|
414
414
|
end
|
415
|
-
alias failure_message_for_should failure_message
|
416
415
|
|
417
416
|
def failure_message_when_negated
|
418
417
|
first_failing_submatcher.failure_message_when_negated
|
419
418
|
end
|
420
|
-
alias failure_message_for_should_not failure_message_when_negated
|
421
419
|
|
422
420
|
private
|
423
421
|
|
@@ -16,7 +16,7 @@ module Shoulda
|
|
16
16
|
# it { should validate_presence_of(:arms) }
|
17
17
|
# end
|
18
18
|
#
|
19
|
-
# #
|
19
|
+
# # Minitest (Shoulda)
|
20
20
|
# class RobotTest < ActiveSupport::TestCase
|
21
21
|
# should validate_presence_of(:arms)
|
22
22
|
# end
|
@@ -73,7 +73,7 @@ module Shoulda
|
|
73
73
|
# it { should validate_presence_of(:arms).on(:create) }
|
74
74
|
# end
|
75
75
|
#
|
76
|
-
# #
|
76
|
+
# # Minitest (Shoulda)
|
77
77
|
# class RobotTest < ActiveSupport::TestCase
|
78
78
|
# should validate_presence_of(:arms).on(:create)
|
79
79
|
# end
|
@@ -97,7 +97,7 @@ module Shoulda
|
|
97
97
|
# end
|
98
98
|
# end
|
99
99
|
#
|
100
|
-
# #
|
100
|
+
# # Minitest (Shoulda)
|
101
101
|
# class RobotTest < ActiveSupport::TestCase
|
102
102
|
# should validate_presence_of(:legs).
|
103
103
|
# with_message('Robot has no legs')
|
@@ -123,7 +123,7 @@ module Shoulda
|
|
123
123
|
if secure_password_being_validated?
|
124
124
|
disallows_and_double_checks_value_of!(blank_value, @expected_message)
|
125
125
|
else
|
126
|
-
|
126
|
+
disallows_original_or_typecast_value?(blank_value, @expected_message)
|
127
127
|
end
|
128
128
|
end
|
129
129
|
|
@@ -145,6 +145,12 @@ module Shoulda
|
|
145
145
|
raise ActiveModel::CouldNotSetPasswordError.create(@subject.class)
|
146
146
|
end
|
147
147
|
|
148
|
+
def disallows_original_or_typecast_value?(value, message)
|
149
|
+
disallows_value_of(blank_value, @expected_message)
|
150
|
+
rescue ActiveModel::AllowValueMatcher::CouldNotSetAttributeError => error
|
151
|
+
error.actual_value.blank?
|
152
|
+
end
|
153
|
+
|
148
154
|
def blank_value
|
149
155
|
if collection?
|
150
156
|
[]
|
@@ -5,8 +5,6 @@ module Shoulda
|
|
5
5
|
class ValidationMatcher
|
6
6
|
attr_reader :failure_message
|
7
7
|
|
8
|
-
alias failure_message_for_should failure_message
|
9
|
-
|
10
8
|
def initialize(attribute)
|
11
9
|
@attribute = attribute
|
12
10
|
@strict = false
|
@@ -27,7 +25,6 @@ module Shoulda
|
|
27
25
|
def failure_message_when_negated
|
28
26
|
@failure_message_when_negated || @failure_message
|
29
27
|
end
|
30
|
-
alias failure_message_for_should_not failure_message_when_negated
|
31
28
|
|
32
29
|
def matches?(subject)
|
33
30
|
@subject = subject
|
@@ -23,11 +23,6 @@ module Shoulda
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
-
def capture_range_error(exception)
|
27
|
-
@captured_range_error = exception
|
28
|
-
extend ValidatorWithCapturedRangeError
|
29
|
-
end
|
30
|
-
|
31
26
|
def allow_description(allowed_values)
|
32
27
|
"allow #{attribute} to be set to #{allowed_values}"
|
33
28
|
end
|
@@ -85,9 +80,6 @@ module Shoulda
|
|
85
80
|
|
86
81
|
def collect_errors_or_exceptions
|
87
82
|
collect_messages
|
88
|
-
rescue RangeError => exception
|
89
|
-
capture_range_error(exception)
|
90
|
-
[]
|
91
83
|
end
|
92
84
|
|
93
85
|
def validation_errors
|
@@ -13,7 +13,7 @@ module Shoulda
|
|
13
13
|
# it { should accept_nested_attributes_for(:doors) }
|
14
14
|
# end
|
15
15
|
#
|
16
|
-
# #
|
16
|
+
# # Minitest (Shoulda) (using Shoulda)
|
17
17
|
# class CarTest < ActiveSupport::TestCase
|
18
18
|
# should accept_nested_attributes_for(:doors)
|
19
19
|
# end
|
@@ -37,7 +37,7 @@ module Shoulda
|
|
37
37
|
# end
|
38
38
|
# end
|
39
39
|
#
|
40
|
-
# #
|
40
|
+
# # Minitest (Shoulda)
|
41
41
|
# class CarTest < ActiveSupport::TestCase
|
42
42
|
# should accept_nested_attributes_for(:mirrors).
|
43
43
|
# allow_destroy(true)
|
@@ -59,7 +59,7 @@ module Shoulda
|
|
59
59
|
# end
|
60
60
|
# end
|
61
61
|
#
|
62
|
-
# #
|
62
|
+
# # Minitest (Shoulda)
|
63
63
|
# class CarTest < ActiveSupport::TestCase
|
64
64
|
# should accept_nested_attributes_for(:windows).
|
65
65
|
# limit(3)
|
@@ -82,7 +82,7 @@ module Shoulda
|
|
82
82
|
# end
|
83
83
|
# end
|
84
84
|
#
|
85
|
-
# #
|
85
|
+
# # Minitest (Shoulda)
|
86
86
|
# class CarTest < ActiveSupport::TestCase
|
87
87
|
# should accept_nested_attributes_for(:engine).
|
88
88
|
# update_only(true)
|
@@ -127,12 +127,10 @@ module Shoulda
|
|
127
127
|
def failure_message
|
128
128
|
"Expected #{expectation} (#{@problem})"
|
129
129
|
end
|
130
|
-
alias failure_message_for_should failure_message
|
131
130
|
|
132
131
|
def failure_message_when_negated
|
133
132
|
"Did not expect #{expectation}"
|
134
133
|
end
|
135
|
-
alias failure_message_for_should_not failure_message_when_negated
|
136
134
|
|
137
135
|
def description
|
138
136
|
description = "accepts_nested_attributes_for :#{@name}"
|
@@ -15,7 +15,7 @@ module Shoulda
|
|
15
15
|
# it { should belong_to(:organization) }
|
16
16
|
# end
|
17
17
|
#
|
18
|
-
# #
|
18
|
+
# # Minitest (Shoulda)
|
19
19
|
# class PersonTest < ActiveSupport::TestCase
|
20
20
|
# should belong_to(:organization)
|
21
21
|
# end
|
@@ -32,7 +32,7 @@ module Shoulda
|
|
32
32
|
# it { should belong_to(:commentable) }
|
33
33
|
# end
|
34
34
|
#
|
35
|
-
# #
|
35
|
+
# # Minitest (Shoulda)
|
36
36
|
# class CommentTest < ActiveSupport::TestCase
|
37
37
|
# should belong_to(:commentable)
|
38
38
|
# end
|
@@ -56,7 +56,7 @@ module Shoulda
|
|
56
56
|
# end
|
57
57
|
# end
|
58
58
|
#
|
59
|
-
# #
|
59
|
+
# # Minitest (Shoulda)
|
60
60
|
# class PersonTest < ActiveSupport::TestCase
|
61
61
|
# should belong_to(:family).
|
62
62
|
# conditions(everyone_is_perfect: false)
|
@@ -76,7 +76,7 @@ module Shoulda
|
|
76
76
|
# it { should belong_to(:previous_company).order('hired_on desc') }
|
77
77
|
# end
|
78
78
|
#
|
79
|
-
# #
|
79
|
+
# # Minitest (Shoulda)
|
80
80
|
# class PersonTest < ActiveSupport::TestCase
|
81
81
|
# should belong_to(:previous_company).order('hired_on desc')
|
82
82
|
# end
|
@@ -95,7 +95,7 @@ module Shoulda
|
|
95
95
|
# it { should belong_to(:ancient_city).class_name('City') }
|
96
96
|
# end
|
97
97
|
#
|
98
|
-
# #
|
98
|
+
# # Minitest (Shoulda)
|
99
99
|
# class PersonTest < ActiveSupport::TestCase
|
100
100
|
# should belong_to(:ancient_city).class_name('City')
|
101
101
|
# end
|
@@ -116,7 +116,7 @@ module Shoulda
|
|
116
116
|
# end
|
117
117
|
# end
|
118
118
|
#
|
119
|
-
# #
|
119
|
+
# # Minitest (Shoulda)
|
120
120
|
# class PersonTest < ActiveSupport::TestCase
|
121
121
|
# should belong_to(:great_country).
|
122
122
|
# with_primary_key('country_id')
|
@@ -138,7 +138,7 @@ module Shoulda
|
|
138
138
|
# end
|
139
139
|
# end
|
140
140
|
#
|
141
|
-
# #
|
141
|
+
# # Minitest (Shoulda)
|
142
142
|
# class PersonTest < ActiveSupport::TestCase
|
143
143
|
# should belong_to(:great_country).
|
144
144
|
# with_foreign_key('country_id')
|
@@ -157,7 +157,7 @@ module Shoulda
|
|
157
157
|
# it { should belong_to(:world).dependent(:destroy) }
|
158
158
|
# end
|
159
159
|
#
|
160
|
-
# #
|
160
|
+
# # Minitest (Shoulda)
|
161
161
|
# class PersonTest < ActiveSupport::TestCase
|
162
162
|
# should belong_to(:world).dependent(:destroy)
|
163
163
|
# end
|
@@ -194,7 +194,7 @@ module Shoulda
|
|
194
194
|
# it { should belong_to(:organization).counter_cache(true) }
|
195
195
|
# end
|
196
196
|
#
|
197
|
-
# #
|
197
|
+
# # Minitest (Shoulda)
|
198
198
|
# class PersonTest < ActiveSupport::TestCase
|
199
199
|
# should belong_to(:organization).counter_cache(true)
|
200
200
|
# end
|
@@ -212,7 +212,7 @@ module Shoulda
|
|
212
212
|
# it { should belong_to(:organization).touch(true) }
|
213
213
|
# end
|
214
214
|
#
|
215
|
-
# #
|
215
|
+
# # Minitest (Shoulda)
|
216
216
|
# class PersonTest < ActiveSupport::TestCase
|
217
217
|
# should belong_to(:organization).touch(true)
|
218
218
|
# end
|
@@ -230,7 +230,7 @@ module Shoulda
|
|
230
230
|
# it { should belong_to(:bank).autosave(true) }
|
231
231
|
# end
|
232
232
|
#
|
233
|
-
# #
|
233
|
+
# # Minitest (Shoulda)
|
234
234
|
# class AccountTest < ActiveSupport::TestCase
|
235
235
|
# should belong_to(:bank).autosave(true)
|
236
236
|
# end
|
@@ -248,7 +248,7 @@ module Shoulda
|
|
248
248
|
# it { should belong_to(:organization).inverse_of(:employees) }
|
249
249
|
# end
|
250
250
|
#
|
251
|
-
# #
|
251
|
+
# # Minitest (Shoulda)
|
252
252
|
# class PersonTest < ActiveSupport::TestCase
|
253
253
|
# should belong_to(:organization).inverse_of(:employees)
|
254
254
|
# end
|
@@ -271,11 +271,28 @@ module Shoulda
|
|
271
271
|
# it { should have_many(:friends) }
|
272
272
|
# end
|
273
273
|
#
|
274
|
-
# #
|
274
|
+
# # Minitest (Shoulda)
|
275
275
|
# class PersonTest < ActiveSupport::TestCase
|
276
276
|
# should have_many(:friends)
|
277
277
|
# end
|
278
278
|
#
|
279
|
+
# Note that polymorphic associations are automatically detected and do not
|
280
|
+
# need any qualifiers:
|
281
|
+
#
|
282
|
+
# class Person < ActiveRecord::Base
|
283
|
+
# has_many :pictures, as: :imageable
|
284
|
+
# end
|
285
|
+
#
|
286
|
+
# # RSpec
|
287
|
+
# describe Person do
|
288
|
+
# it { should have_many(:pictures) }
|
289
|
+
# end
|
290
|
+
#
|
291
|
+
# # Minitest (Shoulda)
|
292
|
+
# class PersonTest < ActiveSupport::TestCase
|
293
|
+
# should have_many(:pictures)
|
294
|
+
# end
|
295
|
+
#
|
279
296
|
# #### Qualifiers
|
280
297
|
#
|
281
298
|
# ##### conditions
|
@@ -292,7 +309,7 @@ module Shoulda
|
|
292
309
|
# it { should have_many(:coins).conditions(quality: 'mint') }
|
293
310
|
# end
|
294
311
|
#
|
295
|
-
# #
|
312
|
+
# # Minitest (Shoulda)
|
296
313
|
# class PersonTest < ActiveSupport::TestCase
|
297
314
|
# should have_many(:coins).conditions(quality: 'mint')
|
298
315
|
# end
|
@@ -311,7 +328,7 @@ module Shoulda
|
|
311
328
|
# it { should have_many(:shirts).order('color') }
|
312
329
|
# end
|
313
330
|
#
|
314
|
-
# #
|
331
|
+
# # Minitest (Shoulda)
|
315
332
|
# class PersonTest < ActiveSupport::TestCase
|
316
333
|
# should have_many(:shirts).order('color')
|
317
334
|
# end
|
@@ -330,7 +347,7 @@ module Shoulda
|
|
330
347
|
# it { should have_many(:hopes).class_name('Dream') }
|
331
348
|
# end
|
332
349
|
#
|
333
|
-
# #
|
350
|
+
# # Minitest (Shoulda)
|
334
351
|
# class PersonTest < ActiveSupport::TestCase
|
335
352
|
# should have_many(:hopes).class_name('Dream')
|
336
353
|
# end
|
@@ -348,7 +365,7 @@ module Shoulda
|
|
348
365
|
# it { should have_many(:worries).with_primary_key('worrier_id') }
|
349
366
|
# end
|
350
367
|
#
|
351
|
-
# #
|
368
|
+
# # Minitest (Shoulda)
|
352
369
|
# class PersonTest < ActiveSupport::TestCase
|
353
370
|
# should have_many(:worries).with_primary_key('worrier_id')
|
354
371
|
# end
|
@@ -366,7 +383,7 @@ module Shoulda
|
|
366
383
|
# it { should have_many(:worries).with_foreign_key('worrier_id') }
|
367
384
|
# end
|
368
385
|
#
|
369
|
-
# #
|
386
|
+
# # Minitest (Shoulda)
|
370
387
|
# class PersonTest < ActiveSupport::TestCase
|
371
388
|
# should have_many(:worries).with_foreign_key('worrier_id')
|
372
389
|
# end
|
@@ -384,7 +401,7 @@ module Shoulda
|
|
384
401
|
# it { should have_many(:secret_documents).dependent(:destroy) }
|
385
402
|
# end
|
386
403
|
#
|
387
|
-
# #
|
404
|
+
# # Minitest (Shoulda)
|
388
405
|
# class PersonTest < ActiveSupport::TestCase
|
389
406
|
# should have_many(:secret_documents).dependent(:destroy)
|
390
407
|
# end
|
@@ -403,7 +420,7 @@ module Shoulda
|
|
403
420
|
# it { should have_many(:acquaintances).through(:friends) }
|
404
421
|
# end
|
405
422
|
#
|
406
|
-
# #
|
423
|
+
# # Minitest (Shoulda)
|
407
424
|
# class PersonTest < ActiveSupport::TestCase
|
408
425
|
# should have_many(:acquaintances).through(:friends)
|
409
426
|
# end
|
@@ -426,7 +443,7 @@ module Shoulda
|
|
426
443
|
# end
|
427
444
|
# end
|
428
445
|
#
|
429
|
-
# #
|
446
|
+
# # Minitest (Shoulda)
|
430
447
|
# class PersonTest < ActiveSupport::TestCase
|
431
448
|
# should have_many(:job_offers).
|
432
449
|
# through(:friends).
|
@@ -446,7 +463,7 @@ module Shoulda
|
|
446
463
|
# it { should have_many(:ideas).validate(false) }
|
447
464
|
# end
|
448
465
|
#
|
449
|
-
# #
|
466
|
+
# # Minitest (Shoulda)
|
450
467
|
# class PersonTest < ActiveSupport::TestCase
|
451
468
|
# should have_many(:ideas).validate(false)
|
452
469
|
# end
|
@@ -464,7 +481,7 @@ module Shoulda
|
|
464
481
|
# it { should have_many(:games).autosave(true) }
|
465
482
|
# end
|
466
483
|
#
|
467
|
-
# #
|
484
|
+
# # Minitest (Shoulda)
|
468
485
|
# class PlayerTest < ActiveSupport::TestCase
|
469
486
|
# should have_many(:games).autosave(true)
|
470
487
|
# end
|
@@ -487,7 +504,7 @@ module Shoulda
|
|
487
504
|
# it { should have_one(:partner) }
|
488
505
|
# end
|
489
506
|
#
|
490
|
-
# #
|
507
|
+
# # Minitest (Shoulda)
|
491
508
|
# class PersonTest < ActiveSupport::TestCase
|
492
509
|
# should have_one(:partner)
|
493
510
|
# end
|
@@ -508,7 +525,7 @@ module Shoulda
|
|
508
525
|
# it { should have_one(:pet).conditions('weight < 80') }
|
509
526
|
# end
|
510
527
|
#
|
511
|
-
# #
|
528
|
+
# # Minitest (Shoulda)
|
512
529
|
# class PersonTest < ActiveSupport::TestCase
|
513
530
|
# should have_one(:pet).conditions('weight < 80')
|
514
531
|
# end
|
@@ -527,7 +544,7 @@ module Shoulda
|
|
527
544
|
# it { should have_one(:focus).order('priority desc') }
|
528
545
|
# end
|
529
546
|
#
|
530
|
-
# #
|
547
|
+
# # Minitest (Shoulda)
|
531
548
|
# class PersonTest < ActiveSupport::TestCase
|
532
549
|
# should have_one(:focus).order('priority desc')
|
533
550
|
# end
|
@@ -546,7 +563,7 @@ module Shoulda
|
|
546
563
|
# it { should have_one(:chance).class_name('Opportunity') }
|
547
564
|
# end
|
548
565
|
#
|
549
|
-
# #
|
566
|
+
# # Minitest (Shoulda)
|
550
567
|
# class PersonTest < ActiveSupport::TestCase
|
551
568
|
# should have_one(:chance).class_name('Opportunity')
|
552
569
|
# end
|
@@ -564,7 +581,7 @@ module Shoulda
|
|
564
581
|
# it { should have_one(:contract).dependent(:nullify) }
|
565
582
|
# end
|
566
583
|
#
|
567
|
-
# #
|
584
|
+
# # Minitest (Shoulda)
|
568
585
|
# class PersonTest < ActiveSupport::TestCase
|
569
586
|
# should have_one(:contract).dependent(:nullify)
|
570
587
|
# end
|
@@ -582,7 +599,7 @@ module Shoulda
|
|
582
599
|
# it { should have_one(:job).with_primary_key('worker_id') }
|
583
600
|
# end
|
584
601
|
#
|
585
|
-
# #
|
602
|
+
# # Minitest (Shoulda)
|
586
603
|
# class PersonTest < ActiveSupport::TestCase
|
587
604
|
# should have_one(:job).with_primary_key('worker_id')
|
588
605
|
# end
|
@@ -600,7 +617,7 @@ module Shoulda
|
|
600
617
|
# it { should have_one(:job).with_foreign_key('worker_id') }
|
601
618
|
# end
|
602
619
|
#
|
603
|
-
# #
|
620
|
+
# # Minitest (Shoulda)
|
604
621
|
# class PersonTest < ActiveSupport::TestCase
|
605
622
|
# should have_one(:job).with_foreign_key('worker_id')
|
606
623
|
# end
|
@@ -619,7 +636,7 @@ module Shoulda
|
|
619
636
|
# it { should have_one(:life).through(:partner) }
|
620
637
|
# end
|
621
638
|
#
|
622
|
-
# #
|
639
|
+
# # Minitest (Shoulda)
|
623
640
|
# class PersonTest < ActiveSupport::TestCase
|
624
641
|
# should have_one(:life).through(:partner)
|
625
642
|
# end
|
@@ -638,7 +655,7 @@ module Shoulda
|
|
638
655
|
# it { should have_one(:car).through(:partner).source(:vehicle) }
|
639
656
|
# end
|
640
657
|
#
|
641
|
-
# #
|
658
|
+
# # Minitest (Shoulda)
|
642
659
|
# class PersonTest < ActiveSupport::TestCase
|
643
660
|
# should have_one(:car).through(:partner).source(:vehicle)
|
644
661
|
# end
|
@@ -656,7 +673,7 @@ module Shoulda
|
|
656
673
|
# it { should have_one(:parking_card).validate(false) }
|
657
674
|
# end
|
658
675
|
#
|
659
|
-
# #
|
676
|
+
# # Minitest (Shoulda)
|
660
677
|
# class PersonTest < ActiveSupport::TestCase
|
661
678
|
# should have_one(:parking_card).validate(false)
|
662
679
|
# end
|
@@ -674,7 +691,7 @@ module Shoulda
|
|
674
691
|
# it { should have_one(:bank).autosave(true) }
|
675
692
|
# end
|
676
693
|
#
|
677
|
-
# #
|
694
|
+
# # Minitest (Shoulda)
|
678
695
|
# class AccountTest < ActiveSupport::TestCase
|
679
696
|
# should have_one(:bank).autosave(true)
|
680
697
|
# end
|
@@ -698,7 +715,7 @@ module Shoulda
|
|
698
715
|
# it { should have_and_belong_to_many(:awards) }
|
699
716
|
# end
|
700
717
|
#
|
701
|
-
# #
|
718
|
+
# # Minitest (Shoulda)
|
702
719
|
# class PersonTest < ActiveSupport::TestCase
|
703
720
|
# should have_and_belong_to_many(:awards)
|
704
721
|
# end
|
@@ -722,7 +739,7 @@ module Shoulda
|
|
722
739
|
# end
|
723
740
|
# end
|
724
741
|
#
|
725
|
-
# #
|
742
|
+
# # Minitest (Shoulda)
|
726
743
|
# class PersonTest < ActiveSupport::TestCase
|
727
744
|
# should have_and_belong_to_many(:issues).
|
728
745
|
# conditions(difficulty: 'hard')
|
@@ -745,7 +762,7 @@ module Shoulda
|
|
745
762
|
# end
|
746
763
|
# end
|
747
764
|
#
|
748
|
-
# #
|
765
|
+
# # Minitest (Shoulda)
|
749
766
|
# class PersonTest < ActiveSupport::TestCase
|
750
767
|
# should have_and_belong_to_many(:projects).
|
751
768
|
# order('time_spent')
|
@@ -768,7 +785,7 @@ module Shoulda
|
|
768
785
|
# end
|
769
786
|
# end
|
770
787
|
#
|
771
|
-
# #
|
788
|
+
# # Minitest (Shoulda)
|
772
789
|
# class PersonTest < ActiveSupport::TestCase
|
773
790
|
# should have_and_belong_to_many(:places_visited).
|
774
791
|
# class_name('City')
|
@@ -791,7 +808,7 @@ module Shoulda
|
|
791
808
|
# end
|
792
809
|
# end
|
793
810
|
#
|
794
|
-
# #
|
811
|
+
# # Minitest (Shoulda)
|
795
812
|
# class PersonTest < ActiveSupport::TestCase
|
796
813
|
# should have_and_belong_to_many(:issues).
|
797
814
|
# join_table('people_tickets')
|
@@ -813,7 +830,7 @@ module Shoulda
|
|
813
830
|
# end
|
814
831
|
# end
|
815
832
|
#
|
816
|
-
# #
|
833
|
+
# # Minitest (Shoulda)
|
817
834
|
# class PersonTest < ActiveSupport::TestCase
|
818
835
|
# should have_and_belong_to_many(:interviews).
|
819
836
|
# validate(false)
|
@@ -832,7 +849,7 @@ module Shoulda
|
|
832
849
|
# it { should have_and_belong_to_many(:advertisers).autosave(true) }
|
833
850
|
# end
|
834
851
|
#
|
835
|
-
# #
|
852
|
+
# # Minitest (Shoulda)
|
836
853
|
# class AccountTest < ActiveSupport::TestCase
|
837
854
|
# should have_and_belong_to_many(:advertisers).autosave(true)
|
838
855
|
# end
|
@@ -944,12 +961,10 @@ module Shoulda
|
|
944
961
|
def failure_message
|
945
962
|
"Expected #{expectation} (#{missing_options})"
|
946
963
|
end
|
947
|
-
alias failure_message_for_should failure_message
|
948
964
|
|
949
965
|
def failure_message_when_negated
|
950
966
|
"Did not expect #{expectation}"
|
951
967
|
end
|
952
|
-
alias failure_message_for_should_not failure_message_when_negated
|
953
968
|
|
954
969
|
def matches?(subject)
|
955
970
|
@subject = subject
|