Sha256: efe58ca0b963b905acff0487caeaf09a656ba5f2ab7ef3bf99b0db5c0f4f1cc6

Contents?: true

Size: 1.47 KB

Versions: 6

Compression:

Stored size: 1.47 KB

Contents

# frozen_string_literal: true

module RuboCop
  module Cop
    module RSpec
      module Rails
        # Checks that tests use `have_http_status` instead of equality matchers.
        #
        # @example
        #   # bad
        #   expect(response.status).to be(200)
        #
        #   # good
        #   expect(response).to have_http_status(200)
        #
        class HaveHttpStatus < ::RuboCop::Cop::Base
          extend AutoCorrector

          MSG =
            'Prefer `expect(response).%<to>s have_http_status(%<status>i)` ' \
            'over `expect(response.status).%<to>s %<match>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) :status)
              )
              $RUNNERS
              $(send nil? {:be :eq :eql :equal} (int $_))
            )
          PATTERN

          def on_send(node)
            match_status(node) do |response_status, to, match, status|
              message = format(MSG, to: to, match: match.source, status: status)
              add_offense(node, message: message) do |corrector|
                corrector.replace(response_status.source_range, 'response')
                corrector.replace(match.loc.selector, 'have_http_status')
              end
            end
          end
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
rubocop-rspec-2.19.0 lib/rubocop/cop/rspec/rails/have_http_status.rb
rubocop-rspec-2.18.1 lib/rubocop/cop/rspec/rails/have_http_status.rb
rubocop-rspec-2.18.0 lib/rubocop/cop/rspec/rails/have_http_status.rb
rubocop-rspec-2.17.1 lib/rubocop/cop/rspec/rails/have_http_status.rb
rubocop-rspec-2.17.0 lib/rubocop/cop/rspec/rails/have_http_status.rb
rubocop-rspec-2.16.0 lib/rubocop/cop/rspec/rails/have_http_status.rb