Class: RuboCop::Cop::Discourse::NoMixingMultisiteAndStandardSpecs

Inherits:
RuboCop::Cop
  • Object
show all
Defined in:
lib/rubocop/cop/discourse/no_mixing_multisite_and_standard_specs.rb

Overview

Use ‘type: :multisite` only on a top-level `describe`. Mixing multisite and standard specs can lead to errors, e.g. when using `fab!` helper.

Examples:

# bad
describe "x" do
end

describe "x", type: :multisite do
end

# good
# x_spec.rb
describe "x" do
end

# x_multisite_spec.rb
describe "x", type: :multisite do
end

Constant Summary collapse

MSG =
"Do not mix multisite and standard specs. Consider moving multisite describes to a separate file."

Instance Method Summary collapse

Constructor Details

#initialize(config = nil, options = nil) ⇒ NoMixingMultisiteAndStandardSpecs

Returns a new instance of NoMixingMultisiteAndStandardSpecs.



30
31
32
33
# File 'lib/rubocop/cop/discourse/no_mixing_multisite_and_standard_specs.rb', line 30

def initialize(config = nil, options = nil)
  super
  @describes = nil
end

Instance Method Details

#on_block(node) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/rubocop/cop/discourse/no_mixing_multisite_and_standard_specs.rb', line 35

def on_block(node)
  return if !top_level?(node)
  return if !describe?(node.children.first)

  type = !!multisite_describe?(node.children.first)

  if !@describes.nil? && @describes != type
    add_offense(node, message: MSG)
  else
    @describes = type
  end
end