shoulda-matchers 3.0.0.rc1 → 3.0.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.
- 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
@@ -3,28 +3,28 @@ require 'unit_spec_helper'
|
|
3
3
|
describe Shoulda::Matchers::ActiveModel::ValidateAcceptanceOfMatcher, type: :model do
|
4
4
|
context 'a model with an acceptance validation' do
|
5
5
|
it 'accepts when the attributes match' do
|
6
|
-
expect(
|
6
|
+
expect(record_validating_acceptance).to matcher
|
7
7
|
end
|
8
8
|
|
9
9
|
it 'does not overwrite the default message with nil' do
|
10
|
-
expect(
|
10
|
+
expect(record_validating_acceptance).to matcher.with_message(nil)
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
14
|
context 'a model without an acceptance validation' do
|
15
15
|
it 'rejects' do
|
16
|
-
expect(
|
16
|
+
expect(record_validating_nothing).not_to matcher
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
20
|
context 'an attribute which must be accepted with a custom message' do
|
21
21
|
it 'accepts when the message matches' do
|
22
|
-
expect(
|
22
|
+
expect(record_validating_acceptance(message: 'custom')).
|
23
23
|
to matcher.with_message(/custom/)
|
24
24
|
end
|
25
25
|
|
26
26
|
it 'rejects when the message does not match' do
|
27
|
-
expect(
|
27
|
+
expect(record_validating_acceptance(message: 'custom')).
|
28
28
|
not_to matcher.with_message(/wrong/)
|
29
29
|
end
|
30
30
|
end
|
@@ -33,9 +33,21 @@ describe Shoulda::Matchers::ActiveModel::ValidateAcceptanceOfMatcher, type: :mod
|
|
33
33
|
validate_acceptance_of(:attr)
|
34
34
|
end
|
35
35
|
|
36
|
-
def
|
37
|
-
|
36
|
+
def model_validating_nothing(&block)
|
37
|
+
define_active_model_class(:example, accessors: [:attr], &block)
|
38
|
+
end
|
39
|
+
|
40
|
+
def record_validating_nothing
|
41
|
+
model_validating_nothing.new
|
42
|
+
end
|
43
|
+
|
44
|
+
def model_validating_acceptance(options = {})
|
45
|
+
model_validating_nothing do
|
38
46
|
validates_acceptance_of :attr, options
|
39
|
-
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def record_validating_acceptance(options = {})
|
51
|
+
model_validating_acceptance(options).new
|
40
52
|
end
|
41
53
|
end
|
@@ -229,20 +229,6 @@ describe Shoulda::Matchers::ActiveModel::ValidateNumericalityOfMatcher, type: :m
|
|
229
229
|
)
|
230
230
|
expect(record).to validate_numericality.is_less_than_or_equal_to(18)
|
231
231
|
end
|
232
|
-
|
233
|
-
context 'if the given value is right at the allowed max value for the column' do
|
234
|
-
it 'does not raise an error' do
|
235
|
-
record = build_record_with_integer_column_of_limit(2,
|
236
|
-
less_than_or_equal_to: 32767
|
237
|
-
)
|
238
|
-
assertion = lambda do
|
239
|
-
expect(record).
|
240
|
-
to validate_numericality.
|
241
|
-
is_less_than_or_equal_to(32767)
|
242
|
-
end
|
243
|
-
expect(&assertion).not_to raise_error
|
244
|
-
end
|
245
|
-
end
|
246
232
|
end
|
247
233
|
|
248
234
|
context 'and not validating with less_than_or_equal_to' do
|
@@ -268,16 +254,6 @@ describe Shoulda::Matchers::ActiveModel::ValidateNumericalityOfMatcher, type: :m
|
|
268
254
|
to validate_numericality.
|
269
255
|
is_less_than(18)
|
270
256
|
end
|
271
|
-
|
272
|
-
context 'if the given value is right at the allowed max value for the column' do
|
273
|
-
it 'does not raise an error' do
|
274
|
-
record = build_record_with_integer_column_of_limit(2, less_than: 32767)
|
275
|
-
assertion = lambda do
|
276
|
-
expect(record).to validate_numericality.is_less_than(32767)
|
277
|
-
end
|
278
|
-
expect(&assertion).not_to raise_error
|
279
|
-
end
|
280
|
-
end
|
281
257
|
end
|
282
258
|
|
283
259
|
context 'and not validating with less_than' do
|
@@ -301,26 +277,6 @@ describe Shoulda::Matchers::ActiveModel::ValidateNumericalityOfMatcher, type: :m
|
|
301
277
|
record = build_record_validating_numericality(equal_to: 18)
|
302
278
|
expect(record).to validate_numericality.is_equal_to(18)
|
303
279
|
end
|
304
|
-
|
305
|
-
context 'if the given value is right at the allowed min value for the column' do
|
306
|
-
it 'does not raise an error' do
|
307
|
-
record = build_record_with_integer_column_of_limit(2, equal_to: -32768)
|
308
|
-
assertion = lambda do
|
309
|
-
expect(record).to validate_numericality.is_equal_to(-32768)
|
310
|
-
end
|
311
|
-
expect(&assertion).not_to raise_error
|
312
|
-
end
|
313
|
-
end
|
314
|
-
|
315
|
-
context 'if the given value is right at the allowed max value for the column' do
|
316
|
-
it 'does not raise an error' do
|
317
|
-
record = build_record_with_integer_column_of_limit(2, equal_to: 32767)
|
318
|
-
assertion = lambda do
|
319
|
-
expect(record).to validate_numericality.is_equal_to(32767)
|
320
|
-
end
|
321
|
-
expect(&assertion).not_to raise_error
|
322
|
-
end
|
323
|
-
end
|
324
280
|
end
|
325
281
|
|
326
282
|
context 'and not validating with equal_to' do
|
@@ -346,20 +302,6 @@ describe Shoulda::Matchers::ActiveModel::ValidateNumericalityOfMatcher, type: :m
|
|
346
302
|
to validate_numericality.
|
347
303
|
is_greater_than_or_equal_to(18)
|
348
304
|
end
|
349
|
-
|
350
|
-
context 'if the given value is right at the allowed min value for the column' do
|
351
|
-
it 'does not raise an error' do
|
352
|
-
record = build_record_with_integer_column_of_limit(2,
|
353
|
-
greater_than_or_equal_to: -32768
|
354
|
-
)
|
355
|
-
assertion = lambda do
|
356
|
-
expect(record).
|
357
|
-
to validate_numericality_of(:attr).
|
358
|
-
is_greater_than_or_equal_to(-32768)
|
359
|
-
end
|
360
|
-
expect(&assertion).not_to raise_error
|
361
|
-
end
|
362
|
-
end
|
363
305
|
end
|
364
306
|
|
365
307
|
context 'not validating with greater_than_or_equal_to' do
|
@@ -385,20 +327,6 @@ describe Shoulda::Matchers::ActiveModel::ValidateNumericalityOfMatcher, type: :m
|
|
385
327
|
to validate_numericality.
|
386
328
|
is_greater_than(18)
|
387
329
|
end
|
388
|
-
|
389
|
-
context 'if the given value is right at the allowed min value for the column' do
|
390
|
-
it 'does not raise an error' do
|
391
|
-
record = build_record_with_integer_column_of_limit(2,
|
392
|
-
greater_than: -32768
|
393
|
-
)
|
394
|
-
assertion = lambda do
|
395
|
-
expect(record).
|
396
|
-
to validate_numericality_of(:attr).
|
397
|
-
is_greater_than(-32768)
|
398
|
-
end
|
399
|
-
expect(&assertion).not_to raise_error
|
400
|
-
end
|
401
|
-
end
|
402
330
|
end
|
403
331
|
|
404
332
|
context 'and not validating with greater_than' do
|
@@ -511,13 +439,11 @@ describe Shoulda::Matchers::ActiveModel::ValidateNumericalityOfMatcher, type: :m
|
|
511
439
|
only_integer.
|
512
440
|
is_greater_than(18)
|
513
441
|
end
|
514
|
-
message =
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
MESSAGE
|
520
|
-
)
|
442
|
+
message = <<-MESSAGE.strip_heredoc
|
443
|
+
Expected errors to include "must be an integer" when attr is set to "0.1",
|
444
|
+
got errors:
|
445
|
+
* "must be greater than 18" (attribute: attr, value: "0.1")
|
446
|
+
MESSAGE
|
521
447
|
expect(&assertion).to fail_with_message(message)
|
522
448
|
end
|
523
449
|
|
@@ -529,13 +455,11 @@ describe Shoulda::Matchers::ActiveModel::ValidateNumericalityOfMatcher, type: :m
|
|
529
455
|
only_integer.
|
530
456
|
is_greater_than(18)
|
531
457
|
end
|
532
|
-
message =
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
MESSAGE
|
538
|
-
)
|
458
|
+
message = <<-MESSAGE.strip_heredoc
|
459
|
+
Expected errors to include "must be an integer" when attr is set to "0.1",
|
460
|
+
got errors:
|
461
|
+
* "must be greater than 18" (attribute: attr, value: "0.1")
|
462
|
+
MESSAGE
|
539
463
|
expect(&assertion).to fail_with_message(message)
|
540
464
|
end
|
541
465
|
|
@@ -550,12 +474,10 @@ describe Shoulda::Matchers::ActiveModel::ValidateNumericalityOfMatcher, type: :m
|
|
550
474
|
even.
|
551
475
|
is_greater_than(18)
|
552
476
|
end
|
553
|
-
message =
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
MESSAGE
|
558
|
-
)
|
477
|
+
message = <<-MESSAGE.strip_heredoc
|
478
|
+
Expected errors to include "must be greater than 18" when attr is set to "18",
|
479
|
+
got no errors
|
480
|
+
MESSAGE
|
559
481
|
expect(&assertion).to fail_with_message(message)
|
560
482
|
end
|
561
483
|
|
@@ -570,13 +492,11 @@ describe Shoulda::Matchers::ActiveModel::ValidateNumericalityOfMatcher, type: :m
|
|
570
492
|
even.
|
571
493
|
is_greater_than(18)
|
572
494
|
end
|
573
|
-
message =
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
MESSAGE
|
579
|
-
)
|
495
|
+
message = <<-MESSAGE.strip_heredoc
|
496
|
+
Expected errors to include "must be even" when attr is set to "1",
|
497
|
+
got errors:
|
498
|
+
* "must be greater than 18" (attribute: attr, value: "1")
|
499
|
+
MESSAGE
|
580
500
|
expect(&assertion).to fail_with_message(message)
|
581
501
|
end
|
582
502
|
|
@@ -591,12 +511,10 @@ describe Shoulda::Matchers::ActiveModel::ValidateNumericalityOfMatcher, type: :m
|
|
591
511
|
odd.
|
592
512
|
is_less_than_or_equal_to(99)
|
593
513
|
end
|
594
|
-
message =
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
MESSAGE
|
599
|
-
)
|
514
|
+
message = <<-MESSAGE.strip_heredoc
|
515
|
+
Expected errors to include "must be less than or equal to 99" when attr is set to "101",
|
516
|
+
got no errors
|
517
|
+
MESSAGE
|
600
518
|
expect(&assertion).to fail_with_message(message)
|
601
519
|
end
|
602
520
|
|
@@ -613,12 +531,10 @@ describe Shoulda::Matchers::ActiveModel::ValidateNumericalityOfMatcher, type: :m
|
|
613
531
|
is_greater_than(18).
|
614
532
|
is_less_than(99)
|
615
533
|
end
|
616
|
-
message =
|
617
|
-
|
618
|
-
|
619
|
-
|
620
|
-
MESSAGE
|
621
|
-
)
|
534
|
+
message = <<-MESSAGE.strip_heredoc
|
535
|
+
Expected errors to include "must be greater than 18" when attr is set to "18",
|
536
|
+
got no errors
|
537
|
+
MESSAGE
|
622
538
|
expect(&assertion).to fail_with_message(message)
|
623
539
|
end
|
624
540
|
end
|
@@ -635,13 +551,11 @@ describe Shoulda::Matchers::ActiveModel::ValidateNumericalityOfMatcher, type: :m
|
|
635
551
|
only_integer.
|
636
552
|
is_greater_than(18)
|
637
553
|
end
|
638
|
-
message =
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
MESSAGE
|
644
|
-
)
|
554
|
+
message = <<-MESSAGE.strip_heredoc
|
555
|
+
Expected errors to include "must be greater than 18" when attr is set to "18",
|
556
|
+
got errors:
|
557
|
+
* "must be greater than 19" (attribute: attr, value: "19")
|
558
|
+
MESSAGE
|
645
559
|
expect(&assertion).to fail_with_message(message)
|
646
560
|
end
|
647
561
|
|
@@ -656,12 +570,10 @@ describe Shoulda::Matchers::ActiveModel::ValidateNumericalityOfMatcher, type: :m
|
|
656
570
|
only_integer.
|
657
571
|
is_greater_than(18)
|
658
572
|
end
|
659
|
-
message =
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
MESSAGE
|
664
|
-
)
|
573
|
+
message = <<-MESSAGE.strip_heredoc
|
574
|
+
Expected errors to include "must be greater than 18" when attr is set to "18",
|
575
|
+
got no errors
|
576
|
+
MESSAGE
|
665
577
|
expect(&assertion).to fail_with_message(message)
|
666
578
|
end
|
667
579
|
|
@@ -676,13 +588,11 @@ describe Shoulda::Matchers::ActiveModel::ValidateNumericalityOfMatcher, type: :m
|
|
676
588
|
even.
|
677
589
|
is_greater_than(18)
|
678
590
|
end
|
679
|
-
message =
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
MESSAGE
|
685
|
-
)
|
591
|
+
message = <<-MESSAGE.strip_heredoc
|
592
|
+
Expected errors to include "must be greater than 18" when attr is set to "18",
|
593
|
+
got errors:
|
594
|
+
* "must be greater than 20" (attribute: attr, value: "20")
|
595
|
+
MESSAGE
|
686
596
|
expect(&assertion).to fail_with_message(message)
|
687
597
|
end
|
688
598
|
|
@@ -697,12 +607,10 @@ describe Shoulda::Matchers::ActiveModel::ValidateNumericalityOfMatcher, type: :m
|
|
697
607
|
even.
|
698
608
|
is_greater_than(18)
|
699
609
|
end
|
700
|
-
message =
|
701
|
-
|
702
|
-
|
703
|
-
|
704
|
-
MESSAGE
|
705
|
-
)
|
610
|
+
message = <<-MESSAGE.strip_heredoc
|
611
|
+
Expected errors to include "must be greater than 18" when attr is set to "18",
|
612
|
+
got no errors
|
613
|
+
MESSAGE
|
706
614
|
expect(&assertion).to fail_with_message(message)
|
707
615
|
end
|
708
616
|
|
@@ -717,12 +625,10 @@ describe Shoulda::Matchers::ActiveModel::ValidateNumericalityOfMatcher, type: :m
|
|
717
625
|
odd.
|
718
626
|
is_less_than_or_equal_to(99)
|
719
627
|
end
|
720
|
-
message =
|
721
|
-
|
722
|
-
|
723
|
-
|
724
|
-
MESSAGE
|
725
|
-
)
|
628
|
+
message = <<-MESSAGE.strip_heredoc
|
629
|
+
Expected errors to include "must be less than or equal to 99" when attr is set to "101",
|
630
|
+
got no errors
|
631
|
+
MESSAGE
|
726
632
|
expect(&assertion).to fail_with_message(message)
|
727
633
|
end
|
728
634
|
|
@@ -737,13 +643,11 @@ describe Shoulda::Matchers::ActiveModel::ValidateNumericalityOfMatcher, type: :m
|
|
737
643
|
odd.
|
738
644
|
is_less_than_or_equal_to(99)
|
739
645
|
end
|
740
|
-
message =
|
741
|
-
|
742
|
-
|
743
|
-
|
744
|
-
|
745
|
-
MESSAGE
|
746
|
-
)
|
646
|
+
message = <<-MESSAGE.strip_heredoc
|
647
|
+
Expected errors to include "must be less than or equal to 99" when attr is set to "101",
|
648
|
+
got errors:
|
649
|
+
* "must be less than or equal to 97" (attribute: attr, value: "101")
|
650
|
+
MESSAGE
|
747
651
|
expect(&assertion).to fail_with_message(message)
|
748
652
|
end
|
749
653
|
|
@@ -760,13 +664,11 @@ describe Shoulda::Matchers::ActiveModel::ValidateNumericalityOfMatcher, type: :m
|
|
760
664
|
is_greater_than(18).
|
761
665
|
is_less_than(99)
|
762
666
|
end
|
763
|
-
message =
|
764
|
-
|
765
|
-
|
766
|
-
|
767
|
-
|
768
|
-
MESSAGE
|
769
|
-
)
|
667
|
+
message = <<-MESSAGE.strip_heredoc
|
668
|
+
Expected errors to include "must be greater than 18" when attr is set to "18",
|
669
|
+
got errors:
|
670
|
+
* "must be greater than 19" (attribute: attr, value: "19")
|
671
|
+
MESSAGE
|
770
672
|
expect(&assertion).to fail_with_message(message)
|
771
673
|
end
|
772
674
|
|
@@ -783,13 +685,11 @@ describe Shoulda::Matchers::ActiveModel::ValidateNumericalityOfMatcher, type: :m
|
|
783
685
|
is_greater_than(18).
|
784
686
|
is_less_than(99)
|
785
687
|
end
|
786
|
-
message =
|
787
|
-
|
788
|
-
|
789
|
-
|
790
|
-
|
791
|
-
MESSAGE
|
792
|
-
)
|
688
|
+
message = <<-MESSAGE.strip_heredoc
|
689
|
+
Expected errors to include "must be less than 99" when attr is set to "100",
|
690
|
+
got errors:
|
691
|
+
* "must be less than 100" (attribute: attr, value: "100")
|
692
|
+
MESSAGE
|
793
693
|
expect(&assertion).to fail_with_message(message)
|
794
694
|
end
|
795
695
|
end
|
@@ -970,23 +870,4 @@ describe Shoulda::Matchers::ActiveModel::ValidateNumericalityOfMatcher, type: :m
|
|
970
870
|
def attribute_name
|
971
871
|
:attr
|
972
872
|
end
|
973
|
-
|
974
|
-
def define_model_with_integer_column_of_limit(limit, validation_options = {})
|
975
|
-
column_options = { type: :integer, options: { limit: limit } }
|
976
|
-
define_model :example, attribute_name => column_options do |model|
|
977
|
-
model.validates_numericality_of(attribute_name, validation_options)
|
978
|
-
end
|
979
|
-
end
|
980
|
-
|
981
|
-
def build_record_with_integer_column_of_limit(limit, validation_options = {})
|
982
|
-
define_model_with_integer_column_of_limit(limit, validation_options).new
|
983
|
-
end
|
984
|
-
|
985
|
-
def format_message_according_to_rails_version(message)
|
986
|
-
if rails_gte_4_2?
|
987
|
-
message
|
988
|
-
else
|
989
|
-
message.gsub(/"((?:\d+)(?:\.\d+)?)"/, '\1')
|
990
|
-
end
|
991
|
-
end
|
992
873
|
end
|
@@ -163,6 +163,20 @@ describe Shoulda::Matchers::ActiveModel::ValidatePresenceOfMatcher, type: :model
|
|
163
163
|
end
|
164
164
|
end
|
165
165
|
|
166
|
+
context 'when the attribute typecasts nil to an empty array' do
|
167
|
+
it 'accepts' do
|
168
|
+
model = define_active_model_class :example do
|
169
|
+
attr_reader :foo
|
170
|
+
|
171
|
+
def foo=(value)
|
172
|
+
@foo = Array.wrap(value)
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
expect(model.new).to validate_presence_of(:foo)
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
166
180
|
def matcher
|
167
181
|
validate_presence_of(:attr)
|
168
182
|
end
|