Sha256: 32b14d34eb5063eebe4f2f2b8c7385589b2266012c47ed8c536069292dcfd5a1

Contents?: true

Size: 1.45 KB

Versions: 5

Compression:

Stored size: 1.45 KB

Contents

# frozen_string_literal: true

module RuboCop
  module Cop
    module RSpec
      # Check that the first argument to the top level describe is a constant.
      #
      # @example
      #   # bad
      #   describe 'Do something' do
      #   end
      #
      #   # good
      #   describe TestedClass do
      #   end
      #
      #   describe "A feature example", type: :feature do
      #   end
      class DescribeClass < Cop
        include RuboCop::RSpec::TopLevelDescribe

        MSG = 'The first argument to describe should be '\
              'the class or module being tested.'

        def_node_matcher :valid_describe?, <<-PATTERN
          {
            (send #{RSPEC} :describe const ...)
            (send #{RSPEC} :describe)
          }
        PATTERN

        def_node_matcher :describe_with_rails_metadata?, <<-PATTERN
          (send #{RSPEC} :describe !const ...
            (hash <#rails_metadata? ...>)
          )
        PATTERN

        def_node_matcher :rails_metadata?, <<-PATTERN
          (pair
            (sym :type)
            (sym {:request :feature :system :routing :view})
          )
        PATTERN

        def_node_matcher :shared_group?, SharedGroups::ALL.block_pattern

        def on_top_level_describe(node, args)
          return if shared_group?(root_node)
          return if valid_describe?(node)
          return if describe_with_rails_metadata?(node)

          add_offense(args.first)
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
rubocop-rspec-1.38.1 lib/rubocop/cop/rspec/describe_class.rb
rubocop-rspec-1.38.0 lib/rubocop/cop/rspec/describe_class.rb
rubocop-rspec-1.37.1 lib/rubocop/cop/rspec/describe_class.rb
rubocop-rspec-1.37.0 lib/rubocop/cop/rspec/describe_class.rb
rubocop-rspec-1.36.0 lib/rubocop/cop/rspec/describe_class.rb