lib/rubocop/cop/rspec/rails/have_http_status.rb in rubocop-rspec-2.27.1 vs lib/rubocop/cop/rspec/rails/have_http_status.rb in rubocop-rspec-2.28.0
- old
+ new
@@ -2,78 +2,34 @@
module RuboCop
module Cop
module RSpec
module Rails
- # Checks that tests use `have_http_status` instead of equality matchers.
- #
- # @example ResponseMethods: ['response', 'last_response'] (default)
- # # bad
- # expect(response.status).to be(200)
- # expect(last_response.code).to eq("200")
- #
- # # good
- # expect(response).to have_http_status(200)
- # expect(last_response).to have_http_status(200)
- #
- # @example ResponseMethods: ['foo_response']
- # # bad
- # expect(foo_response.status).to be(200)
- #
- # # good
- # expect(foo_response).to have_http_status(200)
- #
- # # also good
- # expect(response).to have_http_status(200)
- # expect(last_response).to have_http_status(200)
- #
- class HaveHttpStatus < ::RuboCop::Cop::Base
- extend AutoCorrector
-
- MSG =
- 'Prefer `expect(%<response>s).%<to>s ' \
- 'have_http_status(%<status>s)` over `%<bad_code>s`.'
-
- RUNNERS = %i[to to_not not_to].to_set
- RESTRICT_ON_SEND = RUNNERS
-
- # @!method match_status(node)
- def_node_matcher :match_status, <<~PATTERN
- (send
- (send nil? :expect
- $(send $(send nil? #response_methods?) {:status :code})
- )
- $RUNNERS
- $(send nil? {:be :eq :eql :equal} ({int str} $_))
- )
- PATTERN
-
- def on_send(node) # rubocop:disable Metrics/MethodLength
- match_status(node) do
- |response_status, response_method, to, match, status|
- return unless status.to_s.match?(/\A\d+\z/)
-
- message = format(MSG, response: response_method.method_name,
- to: to, status: status,
- bad_code: node.source)
- add_offense(node, message: message) do |corrector|
- corrector.replace(response_status, response_method.method_name)
- corrector.replace(match.loc.selector, 'have_http_status')
- corrector.replace(match.first_argument, status.to_s)
- end
- end
- end
-
- private
-
- def response_methods?(name)
- response_methods.include?(name.to_s)
- end
-
- def response_methods
- cop_config.fetch('ResponseMethods', [])
- end
- end
+ # @!parse
+ # # Checks that tests use `have_http_status` instead of equality matchers.
+ # #
+ # # @example ResponseMethods: ['response', 'last_response'] (default)
+ # # # bad
+ # # expect(response.status).to be(200)
+ # # expect(last_response.code).to eq("200")
+ # #
+ # # # good
+ # # expect(response).to have_http_status(200)
+ # # expect(last_response).to have_http_status(200)
+ # #
+ # # @example ResponseMethods: ['foo_response']
+ # # # bad
+ # # expect(foo_response.status).to be(200)
+ # #
+ # # # good
+ # # expect(foo_response).to have_http_status(200)
+ # #
+ # # # also good
+ # # expect(response).to have_http_status(200)
+ # # expect(last_response).to have_http_status(200)
+ # #
+ # class HaveHttpStatus < ::RuboCop::Cop::Base; end
+ HaveHttpStatus = ::RuboCop::Cop::RSpecRails::HaveHttpStatus
end
end
end
end