class RuboCop::Cop::RSpec::RepeatedExampleGroupBody


end
it { is_expected.to respond_to :each }
context Hash do
end
it { is_expected.to respond_to :each }
context Array do
# good
end
it { cool_predicate }
context ‘when case y’ do
end
it { cool_predicate }
context ‘when case x’, :tag do
# good
end
it { another_predicate }
describe ‘another cool feature’ do
end
it { cool_predicate }
describe ‘cool feature’ do
# good
end
it { cool_predicate }
describe ‘cool feature y’ do
end
it { cool_predicate }
describe ‘cool feature x’ do
# bad
@example
Check for repeated describe and context block body.

def add_repeated_lines(groups)

def add_repeated_lines(groups)
  repeated_lines = groups.map(&:first_line)
  groups.map { |group| [group, repeated_lines - [group.first_line]] }
end

def message(group, repeats)

def message(group, repeats)
  format(MSG, group: group.method_name, loc: repeats)
end

def on_begin(node)

def on_begin(node)
  return unless several_example_groups?(node)
  repeated_group_bodies(node).each do |group, repeats|
    add_offense(group, message: message(group, repeats))
  end
end

def repeated_group_bodies(node)

def repeated_group_bodies(node)
  node
    .children
    .select { |child| example_group_with_body?(child) }
    .reject { |child| skip_or_pending_inside_block?(child) }
    .group_by { |group| signature_keys(group) }
    .values
    .reject(&:one?)
    .flat_map { |groups| add_repeated_lines(groups) }
end

def signature_keys(group)

def signature_keys(group)
  [metadata(group), body(group), const_arg(group)]
end