shoulda-matchers 3.1.1 → 3.1.2
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.
- checksums.yaml +4 -4
- data/.hound.yml +1 -1
- data/.hound/ruby.yml +1042 -0
- data/{.hound_config/ruby.yml → .rubocop.yml} +7 -6
- data/Gemfile +1 -1
- data/Gemfile.lock +26 -32
- data/NEWS.md +18 -0
- data/README.md +32 -6
- data/docs/errors/NonCaseSwappableValueError.md +2 -2
- data/lib/shoulda/matchers/action_controller/callback_matcher.rb +6 -6
- data/lib/shoulda/matchers/action_controller/filter_param_matcher.rb +1 -1
- data/lib/shoulda/matchers/action_controller/permit_matcher.rb +7 -8
- data/lib/shoulda/matchers/action_controller/redirect_to_matcher.rb +1 -1
- data/lib/shoulda/matchers/action_controller/render_template_matcher.rb +1 -1
- data/lib/shoulda/matchers/action_controller/render_with_layout_matcher.rb +2 -2
- data/lib/shoulda/matchers/action_controller/rescue_from_matcher.rb +1 -1
- data/lib/shoulda/matchers/action_controller/respond_with_matcher.rb +3 -3
- data/lib/shoulda/matchers/action_controller/route_matcher.rb +2 -2
- data/lib/shoulda/matchers/action_controller/set_flash_matcher.rb +4 -4
- data/lib/shoulda/matchers/action_controller/set_session_matcher.rb +3 -3
- data/lib/shoulda/matchers/active_model.rb +1 -1
- data/lib/shoulda/matchers/active_model/allow_mass_assignment_of_matcher.rb +3 -3
- data/lib/shoulda/matchers/active_model/allow_value_matcher.rb +10 -10
- data/lib/shoulda/matchers/active_model/have_secure_password_matcher.rb +1 -1
- data/lib/shoulda/matchers/active_model/validate_absence_of_matcher.rb +3 -3
- 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 -12
- data/lib/shoulda/matchers/active_model/validate_presence_of_matcher.rb +4 -4
- data/lib/shoulda/matchers/active_record/accept_nested_attributes_for_matcher.rb +4 -4
- data/lib/shoulda/matchers/active_record/association_matcher.rb +61 -43
- data/lib/shoulda/matchers/active_record/define_enum_for_matcher.rb +2 -3
- data/lib/shoulda/matchers/active_record/have_db_column_matcher.rb +3 -3
- data/lib/shoulda/matchers/active_record/have_db_index_matcher.rb +3 -3
- data/lib/shoulda/matchers/active_record/have_readonly_attribute_matcher.rb +1 -1
- data/lib/shoulda/matchers/active_record/serialize_matcher.rb +3 -3
- data/lib/shoulda/matchers/active_record/validate_uniqueness_of_matcher.rb +11 -11
- data/lib/shoulda/matchers/version.rb +1 -1
- data/spec/unit/shoulda/matchers/action_controller/permit_matcher_spec.rb +9 -0
- metadata +5 -5
@@ -12,7 +12,7 @@ module Shoulda
|
|
12
12
|
# end
|
13
13
|
#
|
14
14
|
# # RSpec
|
15
|
-
# describe Robot do
|
15
|
+
# RSpec.describe Robot, type: :model do
|
16
16
|
# it { should validate_presence_of(:arms) }
|
17
17
|
# end
|
18
18
|
#
|
@@ -36,7 +36,7 @@ module Shoulda
|
|
36
36
|
# validates_presence_of :password
|
37
37
|
# end
|
38
38
|
#
|
39
|
-
# describe User do
|
39
|
+
# RSpec.describe User, type: :model do
|
40
40
|
# subject { User.new(password: '123456') }
|
41
41
|
#
|
42
42
|
# it { should validate_presence_of(:password) }
|
@@ -69,7 +69,7 @@ module Shoulda
|
|
69
69
|
# end
|
70
70
|
#
|
71
71
|
# # RSpec
|
72
|
-
# describe Robot do
|
72
|
+
# RSpec.describe Robot, type: :model do
|
73
73
|
# it { should validate_presence_of(:arms).on(:create) }
|
74
74
|
# end
|
75
75
|
#
|
@@ -90,7 +90,7 @@ module Shoulda
|
|
90
90
|
# end
|
91
91
|
#
|
92
92
|
# # RSpec
|
93
|
-
# describe Robot do
|
93
|
+
# RSpec.describe Robot, type: :model do
|
94
94
|
# it do
|
95
95
|
# should validate_presence_of(:legs).
|
96
96
|
# with_message('Robot has no legs')
|
@@ -9,7 +9,7 @@ module Shoulda
|
|
9
9
|
# end
|
10
10
|
#
|
11
11
|
# # RSpec
|
12
|
-
# describe Car do
|
12
|
+
# RSpec.describe Car, type: :model do
|
13
13
|
# it { should accept_nested_attributes_for(:doors) }
|
14
14
|
# end
|
15
15
|
#
|
@@ -30,7 +30,7 @@ module Shoulda
|
|
30
30
|
# end
|
31
31
|
#
|
32
32
|
# # RSpec
|
33
|
-
# describe Car do
|
33
|
+
# RSpec.describe Car, type: :model do
|
34
34
|
# it do
|
35
35
|
# should accept_nested_attributes_for(:mirrors).
|
36
36
|
# allow_destroy(true)
|
@@ -52,7 +52,7 @@ module Shoulda
|
|
52
52
|
# end
|
53
53
|
#
|
54
54
|
# # RSpec
|
55
|
-
# describe Car do
|
55
|
+
# RSpec.describe Car, type: :model do
|
56
56
|
# it do
|
57
57
|
# should accept_nested_attributes_for(:windows).
|
58
58
|
# limit(3)
|
@@ -75,7 +75,7 @@ module Shoulda
|
|
75
75
|
# end
|
76
76
|
#
|
77
77
|
# # RSpec
|
78
|
-
# describe Car do
|
78
|
+
# RSpec.describe Car, type: :model do
|
79
79
|
# it do
|
80
80
|
# should accept_nested_attributes_for(:engine).
|
81
81
|
# update_only(true)
|
@@ -11,7 +11,7 @@ module Shoulda
|
|
11
11
|
# end
|
12
12
|
#
|
13
13
|
# # RSpec
|
14
|
-
# describe Person do
|
14
|
+
# RSpec.describe Person, type: :model do
|
15
15
|
# it { should belong_to(:organization) }
|
16
16
|
# end
|
17
17
|
#
|
@@ -28,7 +28,7 @@ module Shoulda
|
|
28
28
|
# end
|
29
29
|
#
|
30
30
|
# # RSpec
|
31
|
-
# describe Comment do
|
31
|
+
# RSpec.describe Comment, type: :model do
|
32
32
|
# it { should belong_to(:commentable) }
|
33
33
|
# end
|
34
34
|
#
|
@@ -49,7 +49,7 @@ module Shoulda
|
|
49
49
|
# end
|
50
50
|
#
|
51
51
|
# # RSpec
|
52
|
-
# describe Person do
|
52
|
+
# RSpec.describe Person, type: :model do
|
53
53
|
# it do
|
54
54
|
# should belong_to(:family).
|
55
55
|
# conditions(everyone_is_perfect: false)
|
@@ -72,7 +72,7 @@ module Shoulda
|
|
72
72
|
# end
|
73
73
|
#
|
74
74
|
# # RSpec
|
75
|
-
# describe Person do
|
75
|
+
# RSpec.describe Person, type: :model do
|
76
76
|
# it { should belong_to(:previous_company).order('hired_on desc') }
|
77
77
|
# end
|
78
78
|
#
|
@@ -91,7 +91,7 @@ module Shoulda
|
|
91
91
|
# end
|
92
92
|
#
|
93
93
|
# # RSpec
|
94
|
-
# describe Person do
|
94
|
+
# RSpec.describe Person, type: :model do
|
95
95
|
# it { should belong_to(:ancient_city).class_name('City') }
|
96
96
|
# end
|
97
97
|
#
|
@@ -109,7 +109,7 @@ module Shoulda
|
|
109
109
|
# end
|
110
110
|
#
|
111
111
|
# # RSpec
|
112
|
-
# describe Person do
|
112
|
+
# RSpec.describe Person, type: :model do
|
113
113
|
# it do
|
114
114
|
# should belong_to(:great_country).
|
115
115
|
# with_primary_key('country_id')
|
@@ -131,7 +131,7 @@ module Shoulda
|
|
131
131
|
# end
|
132
132
|
#
|
133
133
|
# # RSpec
|
134
|
-
# describe Person do
|
134
|
+
# RSpec.describe Person, type: :model do
|
135
135
|
# it do
|
136
136
|
# should belong_to(:great_country).
|
137
137
|
# with_foreign_key('country_id')
|
@@ -153,7 +153,7 @@ module Shoulda
|
|
153
153
|
# end
|
154
154
|
#
|
155
155
|
# # RSpec
|
156
|
-
# describe Person do
|
156
|
+
# RSpec.describe Person, type: :model do
|
157
157
|
# it { should belong_to(:world).dependent(:destroy) }
|
158
158
|
# end
|
159
159
|
#
|
@@ -165,7 +165,7 @@ module Shoulda
|
|
165
165
|
# To assert that *any* `:dependent` option was specified, use `true`:
|
166
166
|
#
|
167
167
|
# # RSpec
|
168
|
-
# describe Person do
|
168
|
+
# RSpec.describe Person, type: :model do
|
169
169
|
# it { should belong_to(:world).dependent(true) }
|
170
170
|
# end
|
171
171
|
#
|
@@ -176,7 +176,7 @@ module Shoulda
|
|
176
176
|
# end
|
177
177
|
#
|
178
178
|
# # RSpec
|
179
|
-
# describe Person do
|
179
|
+
# RSpec.describe Person, type: :model do
|
180
180
|
# it { should belong_to(:company).dependent(false) }
|
181
181
|
# end
|
182
182
|
#
|
@@ -190,7 +190,7 @@ module Shoulda
|
|
190
190
|
# end
|
191
191
|
#
|
192
192
|
# # RSpec
|
193
|
-
# describe Person do
|
193
|
+
# RSpec.describe Person, type: :model do
|
194
194
|
# it { should belong_to(:organization).counter_cache(true) }
|
195
195
|
# end
|
196
196
|
#
|
@@ -208,7 +208,7 @@ module Shoulda
|
|
208
208
|
# end
|
209
209
|
#
|
210
210
|
# # RSpec
|
211
|
-
# describe Person do
|
211
|
+
# RSpec.describe Person, type: :model do
|
212
212
|
# it { should belong_to(:organization).touch(true) }
|
213
213
|
# end
|
214
214
|
#
|
@@ -226,7 +226,7 @@ module Shoulda
|
|
226
226
|
# end
|
227
227
|
#
|
228
228
|
# # RSpec
|
229
|
-
# describe Account do
|
229
|
+
# RSpec.describe Account, type: :model do
|
230
230
|
# it { should belong_to(:bank).autosave(true) }
|
231
231
|
# end
|
232
232
|
#
|
@@ -267,7 +267,7 @@ module Shoulda
|
|
267
267
|
# end
|
268
268
|
#
|
269
269
|
# # RSpec
|
270
|
-
# describe Person do
|
270
|
+
# RSpec.describe Person, type: :model do
|
271
271
|
# it { should have_many(:friends) }
|
272
272
|
# end
|
273
273
|
#
|
@@ -284,7 +284,7 @@ module Shoulda
|
|
284
284
|
# end
|
285
285
|
#
|
286
286
|
# # RSpec
|
287
|
-
# describe Person do
|
287
|
+
# RSpec.describe Person, type: :model do
|
288
288
|
# it { should have_many(:pictures) }
|
289
289
|
# end
|
290
290
|
#
|
@@ -305,7 +305,7 @@ module Shoulda
|
|
305
305
|
# end
|
306
306
|
#
|
307
307
|
# # RSpec
|
308
|
-
# describe Person do
|
308
|
+
# RSpec.describe Person, type: :model do
|
309
309
|
# it { should have_many(:coins).conditions(quality: 'mint') }
|
310
310
|
# end
|
311
311
|
#
|
@@ -324,7 +324,7 @@ module Shoulda
|
|
324
324
|
# end
|
325
325
|
#
|
326
326
|
# # RSpec
|
327
|
-
# describe Person do
|
327
|
+
# RSpec.describe Person, type: :model do
|
328
328
|
# it { should have_many(:shirts).order('color') }
|
329
329
|
# end
|
330
330
|
#
|
@@ -343,7 +343,7 @@ module Shoulda
|
|
343
343
|
# end
|
344
344
|
#
|
345
345
|
# # RSpec
|
346
|
-
# describe Person do
|
346
|
+
# RSpec.describe Person, type: :model do
|
347
347
|
# it { should have_many(:hopes).class_name('Dream') }
|
348
348
|
# end
|
349
349
|
#
|
@@ -361,7 +361,7 @@ module Shoulda
|
|
361
361
|
# end
|
362
362
|
#
|
363
363
|
# # RSpec
|
364
|
-
# describe Person do
|
364
|
+
# RSpec.describe Person, type: :model do
|
365
365
|
# it { should have_many(:worries).with_primary_key('worrier_id') }
|
366
366
|
# end
|
367
367
|
#
|
@@ -379,7 +379,7 @@ module Shoulda
|
|
379
379
|
# end
|
380
380
|
#
|
381
381
|
# # RSpec
|
382
|
-
# describe Person do
|
382
|
+
# RSpec.describe Person, type: :model do
|
383
383
|
# it { should have_many(:worries).with_foreign_key('worrier_id') }
|
384
384
|
# end
|
385
385
|
#
|
@@ -397,7 +397,7 @@ module Shoulda
|
|
397
397
|
# end
|
398
398
|
#
|
399
399
|
# # RSpec
|
400
|
-
# describe Person do
|
400
|
+
# RSpec.describe Person, type: :model do
|
401
401
|
# it { should have_many(:secret_documents).dependent(:destroy) }
|
402
402
|
# end
|
403
403
|
#
|
@@ -416,7 +416,7 @@ module Shoulda
|
|
416
416
|
# end
|
417
417
|
#
|
418
418
|
# # RSpec
|
419
|
-
# describe Person do
|
419
|
+
# RSpec.describe Person, type: :model do
|
420
420
|
# it { should have_many(:acquaintances).through(:friends) }
|
421
421
|
# end
|
422
422
|
#
|
@@ -435,7 +435,7 @@ module Shoulda
|
|
435
435
|
# end
|
436
436
|
#
|
437
437
|
# # RSpec
|
438
|
-
# describe Person do
|
438
|
+
# RSpec.describe Person, type: :model do
|
439
439
|
# it do
|
440
440
|
# should have_many(:job_offers).
|
441
441
|
# through(:friends).
|
@@ -459,7 +459,7 @@ module Shoulda
|
|
459
459
|
# end
|
460
460
|
#
|
461
461
|
# # RSpec
|
462
|
-
# describe Person do
|
462
|
+
# RSpec.describe Person, type: :model do
|
463
463
|
# it { should have_many(:ideas).validate(false) }
|
464
464
|
# end
|
465
465
|
#
|
@@ -477,7 +477,7 @@ module Shoulda
|
|
477
477
|
# end
|
478
478
|
#
|
479
479
|
# # RSpec
|
480
|
-
# describe Player do
|
480
|
+
# RSpec.describe Player, type: :model do
|
481
481
|
# it { should have_many(:games).autosave(true) }
|
482
482
|
# end
|
483
483
|
#
|
@@ -486,6 +486,24 @@ module Shoulda
|
|
486
486
|
# should have_many(:games).autosave(true)
|
487
487
|
# end
|
488
488
|
#
|
489
|
+
# ##### inverse_of
|
490
|
+
#
|
491
|
+
# Use `inverse_of` to assert that the `:inverse_of` option was specified.
|
492
|
+
#
|
493
|
+
# class Organization < ActiveRecord::Base
|
494
|
+
# has_many :employees, inverse_of: :company
|
495
|
+
# end
|
496
|
+
#
|
497
|
+
# # RSpec
|
498
|
+
# describe Organization
|
499
|
+
# it { should have_many(:employees).inverse_of(:company) }
|
500
|
+
# end
|
501
|
+
#
|
502
|
+
# # Minitest (Shoulda)
|
503
|
+
# class OrganizationTest < ActiveSupport::TestCase
|
504
|
+
# should have_many(:employees).inverse_of(:company)
|
505
|
+
# end
|
506
|
+
#
|
489
507
|
# @return [AssociationMatcher]
|
490
508
|
#
|
491
509
|
def have_many(name)
|
@@ -500,7 +518,7 @@ module Shoulda
|
|
500
518
|
# end
|
501
519
|
#
|
502
520
|
# # RSpec
|
503
|
-
# describe Person do
|
521
|
+
# RSpec.describe Person, type: :model do
|
504
522
|
# it { should have_one(:partner) }
|
505
523
|
# end
|
506
524
|
#
|
@@ -521,7 +539,7 @@ module Shoulda
|
|
521
539
|
# end
|
522
540
|
#
|
523
541
|
# # RSpec
|
524
|
-
# describe Person do
|
542
|
+
# RSpec.describe Person, type: :model do
|
525
543
|
# it { should have_one(:pet).conditions('weight < 80') }
|
526
544
|
# end
|
527
545
|
#
|
@@ -540,7 +558,7 @@ module Shoulda
|
|
540
558
|
# end
|
541
559
|
#
|
542
560
|
# # RSpec
|
543
|
-
# describe Person do
|
561
|
+
# RSpec.describe Person, type: :model do
|
544
562
|
# it { should have_one(:focus).order('priority desc') }
|
545
563
|
# end
|
546
564
|
#
|
@@ -559,7 +577,7 @@ module Shoulda
|
|
559
577
|
# end
|
560
578
|
#
|
561
579
|
# # RSpec
|
562
|
-
# describe Person do
|
580
|
+
# RSpec.describe Person, type: :model do
|
563
581
|
# it { should have_one(:chance).class_name('Opportunity') }
|
564
582
|
# end
|
565
583
|
#
|
@@ -577,7 +595,7 @@ module Shoulda
|
|
577
595
|
# end
|
578
596
|
#
|
579
597
|
# # RSpec
|
580
|
-
# describe Person do
|
598
|
+
# RSpec.describe Person, type: :model do
|
581
599
|
# it { should have_one(:contract).dependent(:nullify) }
|
582
600
|
# end
|
583
601
|
#
|
@@ -595,7 +613,7 @@ module Shoulda
|
|
595
613
|
# end
|
596
614
|
#
|
597
615
|
# # RSpec
|
598
|
-
# describe Person do
|
616
|
+
# RSpec.describe Person, type: :model do
|
599
617
|
# it { should have_one(:job).with_primary_key('worker_id') }
|
600
618
|
# end
|
601
619
|
#
|
@@ -613,7 +631,7 @@ module Shoulda
|
|
613
631
|
# end
|
614
632
|
#
|
615
633
|
# # RSpec
|
616
|
-
# describe Person do
|
634
|
+
# RSpec.describe Person, type: :model do
|
617
635
|
# it { should have_one(:job).with_foreign_key('worker_id') }
|
618
636
|
# end
|
619
637
|
#
|
@@ -632,7 +650,7 @@ module Shoulda
|
|
632
650
|
# end
|
633
651
|
#
|
634
652
|
# # RSpec
|
635
|
-
# describe Person do
|
653
|
+
# RSpec.describe Person, type: :model do
|
636
654
|
# it { should have_one(:life).through(:partner) }
|
637
655
|
# end
|
638
656
|
#
|
@@ -651,7 +669,7 @@ module Shoulda
|
|
651
669
|
# end
|
652
670
|
#
|
653
671
|
# # RSpec
|
654
|
-
# describe Person do
|
672
|
+
# RSpec.describe Person, type: :model do
|
655
673
|
# it { should have_one(:car).through(:partner).source(:vehicle) }
|
656
674
|
# end
|
657
675
|
#
|
@@ -669,7 +687,7 @@ module Shoulda
|
|
669
687
|
# end
|
670
688
|
#
|
671
689
|
# # RSpec
|
672
|
-
# describe Person do
|
690
|
+
# RSpec.describe Person, type: :model do
|
673
691
|
# it { should have_one(:parking_card).validate(false) }
|
674
692
|
# end
|
675
693
|
#
|
@@ -687,7 +705,7 @@ module Shoulda
|
|
687
705
|
# end
|
688
706
|
#
|
689
707
|
# # RSpec
|
690
|
-
# describe Account do
|
708
|
+
# RSpec.describe Account, type: :model do
|
691
709
|
# it { should have_one(:bank).autosave(true) }
|
692
710
|
# end
|
693
711
|
#
|
@@ -711,7 +729,7 @@ module Shoulda
|
|
711
729
|
# end
|
712
730
|
#
|
713
731
|
# # RSpec
|
714
|
-
# describe Person do
|
732
|
+
# RSpec.describe Person, type: :model do
|
715
733
|
# it { should have_and_belong_to_many(:awards) }
|
716
734
|
# end
|
717
735
|
#
|
@@ -732,7 +750,7 @@ module Shoulda
|
|
732
750
|
# end
|
733
751
|
#
|
734
752
|
# # RSpec
|
735
|
-
# describe Person do
|
753
|
+
# RSpec.describe Person, type: :model do
|
736
754
|
# it do
|
737
755
|
# should have_and_belong_to_many(:issues).
|
738
756
|
# conditions(difficulty: 'hard')
|
@@ -755,7 +773,7 @@ module Shoulda
|
|
755
773
|
# end
|
756
774
|
#
|
757
775
|
# # RSpec
|
758
|
-
# describe Person do
|
776
|
+
# RSpec.describe Person, type: :model do
|
759
777
|
# it do
|
760
778
|
# should have_and_belong_to_many(:projects).
|
761
779
|
# order('time_spent')
|
@@ -778,7 +796,7 @@ module Shoulda
|
|
778
796
|
# end
|
779
797
|
#
|
780
798
|
# # RSpec
|
781
|
-
# describe Person do
|
799
|
+
# RSpec.describe Person, type: :model do
|
782
800
|
# it do
|
783
801
|
# should have_and_belong_to_many(:places_visited).
|
784
802
|
# class_name('City')
|
@@ -801,7 +819,7 @@ module Shoulda
|
|
801
819
|
# end
|
802
820
|
#
|
803
821
|
# # RSpec
|
804
|
-
# describe Person do
|
822
|
+
# RSpec.describe Person, type: :model do
|
805
823
|
# it do
|
806
824
|
# should have_and_belong_to_many(:issues).
|
807
825
|
# join_table('people_tickets')
|
@@ -823,7 +841,7 @@ module Shoulda
|
|
823
841
|
# end
|
824
842
|
#
|
825
843
|
# # RSpec
|
826
|
-
# describe Person do
|
844
|
+
# RSpec.describe Person, type: :model do
|
827
845
|
# it do
|
828
846
|
# should have_and_belong_to_many(:interviews).
|
829
847
|
# validate(false)
|
@@ -845,7 +863,7 @@ module Shoulda
|
|
845
863
|
# end
|
846
864
|
#
|
847
865
|
# # RSpec
|
848
|
-
# describe Publisher do
|
866
|
+
# RSpec.describe Publisher, type: :model do
|
849
867
|
# it { should have_and_belong_to_many(:advertisers).autosave(true) }
|
850
868
|
# end
|
851
869
|
#
|