shoulda-matchers 3.0.1 → 3.1.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/.gitignore +1 -0
- data/.travis.yml +3 -3
- data/CONTRIBUTING.md +60 -28
- data/Gemfile +1 -0
- data/Gemfile.lock +15 -12
- data/NEWS.md +111 -0
- data/README.md +94 -6
- data/Rakefile +10 -8
- data/custom_plan.rb +88 -0
- data/gemfiles/4.0.0.gemfile +1 -0
- data/gemfiles/4.0.0.gemfile.lock +21 -18
- data/gemfiles/4.0.1.gemfile +1 -0
- data/gemfiles/4.0.1.gemfile.lock +21 -18
- data/gemfiles/4.1.gemfile +1 -0
- data/gemfiles/4.1.gemfile.lock +21 -18
- data/gemfiles/4.2.gemfile +1 -0
- data/gemfiles/4.2.gemfile.lock +24 -21
- data/lib/shoulda/matchers/action_controller/permit_matcher.rb +6 -11
- data/lib/shoulda/matchers/active_model.rb +10 -1
- data/lib/shoulda/matchers/active_model/allow_value_matcher.rb +258 -180
- data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_changed_value_error.rb +45 -0
- data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_does_not_exist_error.rb +23 -0
- data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_setter.rb +236 -0
- data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_setter_and_validator.rb +62 -0
- data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_setters.rb +40 -0
- data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_setters_and_validators.rb +48 -0
- data/lib/shoulda/matchers/active_model/allow_value_matcher/successful_check.rb +14 -0
- data/lib/shoulda/matchers/active_model/allow_value_matcher/successful_setting.rb +14 -0
- data/lib/shoulda/matchers/active_model/disallow_value_matcher.rb +34 -14
- data/lib/shoulda/matchers/active_model/helpers.rb +9 -17
- data/lib/shoulda/matchers/active_model/numericality_matchers/comparison_matcher.rb +13 -6
- data/lib/shoulda/matchers/active_model/numericality_matchers/even_number_matcher.rb +13 -2
- data/lib/shoulda/matchers/active_model/numericality_matchers/numeric_type_matcher.rb +19 -35
- data/lib/shoulda/matchers/active_model/numericality_matchers/odd_number_matcher.rb +13 -2
- data/lib/shoulda/matchers/active_model/numericality_matchers/only_integer_matcher.rb +12 -2
- data/lib/shoulda/matchers/active_model/qualifiers.rb +12 -0
- data/lib/shoulda/matchers/active_model/qualifiers/ignore_interference_by_writer.rb +101 -0
- data/lib/shoulda/matchers/active_model/qualifiers/ignoring_interference_by_writer.rb +21 -0
- data/lib/shoulda/matchers/active_model/validate_absence_of_matcher.rb +30 -32
- data/lib/shoulda/matchers/active_model/validate_acceptance_of_matcher.rb +5 -8
- data/lib/shoulda/matchers/active_model/validate_confirmation_of_matcher.rb +22 -22
- data/lib/shoulda/matchers/active_model/validate_exclusion_of_matcher.rb +27 -16
- data/lib/shoulda/matchers/active_model/validate_inclusion_of_matcher.rb +58 -15
- data/lib/shoulda/matchers/active_model/validate_length_of_matcher.rb +22 -12
- data/lib/shoulda/matchers/active_model/validate_numericality_of_matcher.rb +165 -87
- data/lib/shoulda/matchers/active_model/validate_presence_of_matcher.rb +7 -9
- data/lib/shoulda/matchers/active_model/validation_matcher.rb +111 -49
- data/lib/shoulda/matchers/active_model/validation_matcher/build_description.rb +60 -0
- data/lib/shoulda/matchers/active_model/validator.rb +71 -52
- data/lib/shoulda/matchers/active_record/define_enum_for_matcher.rb +19 -5
- data/lib/shoulda/matchers/active_record/validate_uniqueness_of_matcher.rb +450 -124
- data/lib/shoulda/matchers/util.rb +43 -0
- data/lib/shoulda/matchers/util/word_wrap.rb +59 -31
- data/lib/shoulda/matchers/version.rb +1 -1
- data/script/update_gem_in_all_appraisals +1 -1
- data/script/update_gems_in_all_appraisals +1 -1
- data/spec/acceptance/multiple_libraries_integration_spec.rb +5 -2
- data/spec/acceptance/rails_integration_spec.rb +6 -2
- data/spec/spec_helper.rb +1 -3
- data/spec/support/acceptance/helpers/step_helpers.rb +4 -1
- data/spec/support/tests/current_bundle.rb +21 -7
- data/spec/support/unit/active_record/create_table.rb +54 -0
- data/spec/support/unit/attribute.rb +47 -0
- data/spec/support/unit/capture.rb +6 -0
- data/spec/support/unit/change_value.rb +111 -0
- data/spec/support/unit/create_model_arguments/basic.rb +135 -0
- data/spec/support/unit/create_model_arguments/has_many.rb +15 -0
- data/spec/support/unit/create_model_arguments/uniqueness_matcher.rb +74 -0
- data/spec/support/unit/helpers/active_record_versions.rb +1 -1
- data/spec/support/unit/helpers/class_builder.rb +61 -47
- data/spec/support/unit/helpers/database_helpers.rb +5 -3
- data/spec/support/unit/helpers/model_builder.rb +77 -97
- data/spec/support/unit/helpers/validation_matcher_scenario_helpers.rb +44 -0
- data/spec/support/unit/load_environment.rb +12 -0
- data/spec/support/unit/matchers/fail_with_message_including_matcher.rb +2 -2
- data/spec/support/unit/matchers/fail_with_message_matcher.rb +12 -1
- data/spec/support/unit/model_creation_strategies/active_model.rb +111 -0
- data/spec/support/unit/model_creation_strategies/active_record.rb +77 -0
- data/spec/support/unit/model_creators.rb +19 -0
- data/spec/support/unit/model_creators/active_model.rb +39 -0
- data/spec/support/unit/model_creators/active_record.rb +43 -0
- data/spec/support/unit/model_creators/active_record/has_and_belongs_to_many.rb +95 -0
- data/spec/support/unit/model_creators/active_record/has_many.rb +67 -0
- data/spec/support/unit/model_creators/active_record/uniqueness_matcher.rb +42 -0
- data/spec/support/unit/model_creators/basic.rb +97 -0
- data/spec/support/unit/rails_application.rb +1 -1
- data/spec/support/unit/record_validating_confirmation_builder.rb +3 -7
- data/spec/support/unit/shared_examples/ignoring_interference_by_writer.rb +79 -0
- data/spec/support/unit/validation_matcher_scenario.rb +62 -0
- data/spec/unit/shoulda/matchers/active_model/allow_mass_assignment_of_matcher_spec.rb +4 -0
- data/spec/unit/shoulda/matchers/active_model/allow_value_matcher_spec.rb +575 -140
- data/spec/unit/shoulda/matchers/active_model/validate_absence_of_matcher_spec.rb +115 -15
- data/spec/unit/shoulda/matchers/active_model/validate_acceptance_of_matcher_spec.rb +42 -4
- data/spec/unit/shoulda/matchers/active_model/validate_confirmation_of_matcher_spec.rb +92 -6
- data/spec/unit/shoulda/matchers/active_model/validate_exclusion_of_matcher_spec.rb +122 -10
- data/spec/unit/shoulda/matchers/active_model/validate_inclusion_of_matcher_spec.rb +306 -58
- data/spec/unit/shoulda/matchers/active_model/validate_length_of_matcher_spec.rb +122 -3
- data/spec/unit/shoulda/matchers/active_model/validate_numericality_of_matcher_spec.rb +805 -131
- data/spec/unit/shoulda/matchers/active_model/validate_presence_of_matcher_spec.rb +196 -29
- data/spec/unit/shoulda/matchers/active_record/define_enum_for_matcher_spec.rb +82 -40
- data/spec/unit/shoulda/matchers/active_record/validate_uniqueness_of_matcher_spec.rb +600 -101
- data/spec/unit/shoulda/matchers/util/word_wrap_spec.rb +88 -33
- data/spec/unit_spec_helper.rb +10 -22
- data/zeus.json +11 -0
- metadata +64 -23
- data/lib/shoulda/matchers/active_model/strict_validator.rb +0 -51
- data/spec/support/unit/shared_examples/numerical_type_submatcher.rb +0 -15
- data/spec/unit/shoulda/matchers/active_model/numericality_matchers/comparison_matcher_spec.rb +0 -288
- data/spec/unit/shoulda/matchers/active_model/numericality_matchers/even_number_matcher_spec.rb +0 -100
- data/spec/unit/shoulda/matchers/active_model/numericality_matchers/odd_number_matcher_spec.rb +0 -100
- data/spec/unit/shoulda/matchers/active_model/numericality_matchers/only_integer_matcher_spec.rb +0 -100
data/spec/unit/shoulda/matchers/active_model/numericality_matchers/odd_number_matcher_spec.rb
DELETED
@@ -1,100 +0,0 @@
|
|
1
|
-
require 'unit_spec_helper'
|
2
|
-
|
3
|
-
describe Shoulda::Matchers::ActiveModel::NumericalityMatchers::OddNumberMatcher do
|
4
|
-
subject { described_class.new(numericality_matcher, :attr) }
|
5
|
-
|
6
|
-
it_behaves_like 'a numerical submatcher'
|
7
|
-
it_behaves_like 'a numerical type submatcher'
|
8
|
-
|
9
|
-
it 'allows odd number' do
|
10
|
-
expect(subject.allowed_type).to eq 'odd numbers'
|
11
|
-
end
|
12
|
-
|
13
|
-
describe '#diff_to_compare' do
|
14
|
-
it { expect(subject.diff_to_compare).to eq 2 }
|
15
|
-
end
|
16
|
-
|
17
|
-
context 'when the model has an odd validation' do
|
18
|
-
it 'matches' do
|
19
|
-
match = subject
|
20
|
-
expect(validating_odd_number).to match
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
context 'when the model does not have an odd validation' do
|
25
|
-
it 'does not match' do
|
26
|
-
match = subject
|
27
|
-
expect(not_validating_odd_number).not_to match
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'fails with the ActiveRecord :odd message' do
|
31
|
-
match = subject
|
32
|
-
expect {
|
33
|
-
expect(not_validating_odd_number).to match
|
34
|
-
}.to fail_with_message_including('Expected errors to include "must be odd"')
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
context 'with custom validation message' do
|
39
|
-
it 'only accepts odd number values for that attribute with that message' do
|
40
|
-
expect(validating_odd_number(message: 'custom')).to subject.with_message(/custom/)
|
41
|
-
end
|
42
|
-
|
43
|
-
it 'fails odd number values for that attribute with another message' do
|
44
|
-
expect(validating_odd_number(message: 'custom')).not_to subject.with_message(/wrong/)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
context 'asserting strict validation when validating strictly' do
|
49
|
-
it 'accepts' do
|
50
|
-
expect(validating_odd_number(strict: true)).to subject.strict
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
context 'asserting non-strict validation when validating strictly' do
|
55
|
-
it 'rejects' do
|
56
|
-
pending 'This needs to be fixed'
|
57
|
-
expect(validating_odd_number(strict: true)).not_to subject
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
context 'asserting strict validation when not validating strictly' do
|
62
|
-
it 'rejects' do
|
63
|
-
expect(validating_odd_number).not_to subject.strict
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
context 'qualified with on and validating with on' do
|
68
|
-
it 'accepts' do
|
69
|
-
expect(validating_odd_number(on: :customizable)).
|
70
|
-
to subject.on(:customizable)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
context 'qualified with on but not validating with on' do
|
75
|
-
it 'accepts since the validation never considers a context' do
|
76
|
-
expect(validating_odd_number).to subject.on(:customizable)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
context 'not qualified with on but validating with on' do
|
81
|
-
it 'rejects since the validation never runs' do
|
82
|
-
expect(validating_odd_number(on: :customizable)).
|
83
|
-
not_to subject
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
def numericality_matcher
|
88
|
-
double(:numericality_matcher, given_numeric_column?: nil)
|
89
|
-
end
|
90
|
-
|
91
|
-
def validating_odd_number(options = {})
|
92
|
-
define_model :example, attr: :string do
|
93
|
-
validates_numericality_of :attr, { odd: true }.merge(options)
|
94
|
-
end.new
|
95
|
-
end
|
96
|
-
|
97
|
-
def not_validating_odd_number
|
98
|
-
define_model(:example, attr: :string).new
|
99
|
-
end
|
100
|
-
end
|
data/spec/unit/shoulda/matchers/active_model/numericality_matchers/only_integer_matcher_spec.rb
DELETED
@@ -1,100 +0,0 @@
|
|
1
|
-
require 'unit_spec_helper'
|
2
|
-
|
3
|
-
describe Shoulda::Matchers::ActiveModel::NumericalityMatchers::OnlyIntegerMatcher do
|
4
|
-
subject { described_class.new(numericality_matcher, :attr) }
|
5
|
-
|
6
|
-
it_behaves_like 'a numerical submatcher'
|
7
|
-
it_behaves_like 'a numerical type submatcher'
|
8
|
-
|
9
|
-
it 'allows integer types' do
|
10
|
-
expect(subject.allowed_type).to eq 'integers'
|
11
|
-
end
|
12
|
-
|
13
|
-
describe '#diff_to_compare' do
|
14
|
-
it { expect(subject.diff_to_compare).to eq 1 }
|
15
|
-
end
|
16
|
-
|
17
|
-
context 'given an attribute that only allows integer values' do
|
18
|
-
it 'matches' do
|
19
|
-
match = subject
|
20
|
-
expect(validating_only_integer).to match
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
context 'given an attribute that only allows integer values with a custom validation message' do
|
25
|
-
it 'only accepts integer values for that attribute with that message' do
|
26
|
-
expect(validating_only_integer(message: 'custom')).to subject.with_message(/custom/)
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'rejects integer values for that attribute with another message' do
|
30
|
-
expect(validating_only_integer(message: 'custom')).not_to subject.with_message(/wrong/)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
context 'when the model does not have an only_integer validation' do
|
35
|
-
it 'does not match' do
|
36
|
-
match = subject
|
37
|
-
expect(not_validating_only_integer).not_to match
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'fails with the ActiveRecord :not_an_integer message' do
|
41
|
-
match = subject
|
42
|
-
expect {
|
43
|
-
expect(not_validating_only_integer).to match
|
44
|
-
}.to fail_with_message_including('Expected errors to include "must be an integer"')
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
context 'asserting strict validation when validating strictly' do
|
49
|
-
it 'accepts' do
|
50
|
-
expect(validating_only_integer(strict: true)).to subject.strict
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
context 'asserting non-strict validation when validating strictly' do
|
55
|
-
it 'rejects' do
|
56
|
-
pending 'This needs to be fixed'
|
57
|
-
expect(validating_only_integer(strict: true)).not_to subject
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
context 'asserting strict validation when not validating strictly' do
|
62
|
-
it 'rejects' do
|
63
|
-
expect(validating_only_integer).not_to subject.strict
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
context 'qualified with on and validating with on' do
|
68
|
-
it 'accepts' do
|
69
|
-
expect(validating_only_integer(on: :customizable)).
|
70
|
-
to subject.on(:customizable)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
context 'qualified with on but not validating with on' do
|
75
|
-
it 'accepts since the validation never considers a context' do
|
76
|
-
expect(validating_only_integer).to subject.on(:customizable)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
context 'not qualified with on but validating with on' do
|
81
|
-
it 'rejects since the validation never runs' do
|
82
|
-
expect(validating_only_integer(on: :customizable)).
|
83
|
-
not_to subject
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
def numericality_matcher
|
88
|
-
double(:numericality_matcher, given_numeric_column?: nil)
|
89
|
-
end
|
90
|
-
|
91
|
-
def validating_only_integer(options = {})
|
92
|
-
define_model :example, attr: :string do
|
93
|
-
validates_numericality_of :attr, { only_integer: true }.merge(options)
|
94
|
-
end.new
|
95
|
-
end
|
96
|
-
|
97
|
-
def not_validating_only_integer
|
98
|
-
define_model(:example, attr: :string).new
|
99
|
-
end
|
100
|
-
end
|