class RuboCop::Cop::Minitest::MultipleAssertions


end
end
assert_empty(array)
def test_another_asserts_once
end
assert_equal(42, do_something)
def test_asserts_once
class FooTest < Minitest::Test
# good
end
end
assert_empty(array)
assert_equal(42, do_something)
def test_asserts_twice
class FooTest < Minitest::Test
# bad
@example Max: 1
The maximum allowed assertion calls is configurable.
is used, the branch with maximum assertions is counted.
Checks if test cases contain too many assertion calls. If conditional code with assertions

def assertions_count(node)

def assertions_count(node)
  return 0 unless node.is_a?(RuboCop::AST::Node)
  assertions = assertions_count_based_on_type(node)
  assertions += 1 if assertion_method?(node)
  assertions
end

def assertions_count_based_on_type(node)

def assertions_count_based_on_type(node)
  case node.type
  when :if, :case, :case_match
    assertions_count_in_branches(node.branches)
  when :rescue
    assertions_count(node.body) + assertions_count_in_branches(node.branches)
  when :block, :numblock
    assertions_count(node.body)
  when *RuboCop::AST::Node::ASSIGNMENTS
    assertions_count_in_assignment(node)
  else
    node.each_child_node.sum { |child| assertions_count(child) }
  end
end

def assertions_count_in_assignment(node)

def assertions_count_in_assignment(node)
  unless node.masgn_type?
    return 0 unless node.expression # for-style loop
    return assertions_count_based_on_type(node.expression)
  end
  rhs = node.children.last
  case rhs.type
  when :array
    rhs.children.sum { |child| assertions_count_based_on_type(child) }
  when :send
    assertion_method?(rhs) ? 1 : 0
  else
    # Play it safe and bail if we don't have any explicit handling for whatever
    # the RHS type is, since at this point we're already probably dealing with
    # a pretty exotic situation that's unlikely in the real world.
    0
  end
end

def assertions_count_in_branches(branches)

def assertions_count_in_branches(branches)
  branches.map { |branch| assertions_count(branch) }.max
end

def max_assertions

def max_assertions
  Integer(cop_config.fetch('Max', 3))
end

def on_class(class_node)

def on_class(class_node)
  return unless test_class?(class_node)
  test_cases(class_node).each do |node|
    assertions_count = assertions_count(node.body)
    next unless assertions_count > max_assertions
    self.max = assertions_count
    message = format(MSG, total: assertions_count, max: max_assertions)
    add_offense(node, message: message)
  end
end