lib/rubocop/cop/rspec/rails/negation_be_valid.rb in rubocop-rspec-2.27.1 vs lib/rubocop/cop/rspec/rails/negation_be_valid.rb in rubocop-rspec-2.28.0
- old
+ new
@@ -2,101 +2,38 @@
module RuboCop
module Cop
module RSpec
module Rails
- # Enforces use of `be_invalid` or `not_to` for negated be_valid.
- #
- # @safety
- # This cop is unsafe because it cannot guarantee that
- # the test target is an instance of `ActiveModel::Validations``.
- #
- # @example EnforcedStyle: not_to (default)
- # # bad
- # expect(foo).to be_invalid
- #
- # # good
- # expect(foo).not_to be_valid
- #
- # # good (with method chain)
- # expect(foo).to be_invalid.and be_odd
- #
- # @example EnforcedStyle: be_invalid
- # # bad
- # expect(foo).not_to be_valid
- #
- # # good
- # expect(foo).to be_invalid
- #
- # # good (with method chain)
- # expect(foo).to be_invalid.or be_even
- #
- class NegationBeValid < Base
- extend AutoCorrector
- include ConfigurableEnforcedStyle
-
- MSG = 'Use `expect(...).%<runner>s %<matcher>s`.'
- RESTRICT_ON_SEND = %i[be_valid be_invalid].freeze
-
- # @!method not_to?(node)
- def_node_matcher :not_to?, <<~PATTERN
- (send ... :not_to (send nil? :be_valid ...))
- PATTERN
-
- # @!method be_invalid?(node)
- def_node_matcher :be_invalid?, <<~PATTERN
- (send ... :to (send nil? :be_invalid ...))
- PATTERN
-
- def on_send(node)
- return unless offense?(node.parent)
-
- add_offense(offense_range(node),
- message: message(node.method_name)) do |corrector|
- corrector.replace(node.parent.loc.selector, replaced_runner)
- corrector.replace(node.loc.selector, replaced_matcher)
- end
- end
-
- private
-
- def offense?(node)
- case style
- when :not_to
- be_invalid?(node)
- when :be_invalid
- not_to?(node)
- end
- end
-
- def offense_range(node)
- node.parent.loc.selector.with(end_pos: node.loc.selector.end_pos)
- end
-
- def message(_matcher)
- format(MSG,
- runner: replaced_runner,
- matcher: replaced_matcher)
- end
-
- def replaced_runner
- case style
- when :not_to
- 'not_to'
- when :be_invalid
- 'to'
- end
- end
-
- def replaced_matcher
- case style
- when :not_to
- 'be_valid'
- when :be_invalid
- 'be_invalid'
- end
- end
- end
+ # @!parse
+ # # Enforces use of `be_invalid` or `not_to` for negated be_valid.
+ # #
+ # # @safety
+ # # This cop is unsafe because it cannot guarantee that
+ # # the test target is an instance of `ActiveModel::Validations``.
+ # #
+ # # @example EnforcedStyle: not_to (default)
+ # # # bad
+ # # expect(foo).to be_invalid
+ # #
+ # # # good
+ # # expect(foo).not_to be_valid
+ # #
+ # # # good (with method chain)
+ # # expect(foo).to be_invalid.and be_odd
+ # #
+ # # @example EnforcedStyle: be_invalid
+ # # # bad
+ # # expect(foo).not_to be_valid
+ # #
+ # # # good
+ # # expect(foo).to be_invalid
+ # #
+ # # # good (with method chain)
+ # # expect(foo).to be_invalid.or be_even
+ # #
+ # class NegationBeValid < RuboCop::Cop::RSpecRails::Base; end
+ NegationBeValid = ::RuboCop::Cop::RSpecRails::NegationBeValid
end
end
end
end