module SemanticLogger::Test::Minitest

def assert_semantic_logger_event(event, level: nil, name: nil, message: nil, message_includes: nil,

Verify a single log event has all the required attributes.
def assert_semantic_logger_event(event, level: nil, name: nil, message: nil, message_includes: nil,
                                 payload: nil, payload_includes: nil,
                                 exception: nil, exception_includes: nil, backtrace: nil,
                                 thread_name: nil, tags: nil, named_tags: nil, context: nil,
                                 level_index: nil, duration: nil, time: nil,
                                 metric: nil, metric_amount: nil, dimensions: nil)
  assert event, "No log event occurred"
  assert_semantic_logger_entry(event, :message, message)
  assert_semantic_logger_entry(event, :name, name)
  assert_semantic_logger_entry(event, :level, level)
  assert_semantic_logger_entry(event, :thread_name, thread_name)
  assert_semantic_logger_entry(event, :tags, tags)
  assert_semantic_logger_entry(event, :named_tags, named_tags)
  assert_semantic_logger_entry(event, :context, context)
  assert_semantic_logger_entry(event, :metric, metric)
  assert_semantic_logger_entry(event, :metric_amount, metric_amount)
  assert_semantic_logger_entry(event, :dimensions, dimensions)
  assert_semantic_logger_entry(event, :level_index, level_index)
  assert_semantic_logger_entry(event, :duration, duration)
  assert_semantic_logger_entry(event, :time, time)
  assert_semantic_logger_entry(event, :exception, exception)
  assert_semantic_logger_entry(event, :backtrace, backtrace)
  assert_semantic_logger_entry(event, :payload, payload)
  if message_includes
    assert_includes(
      event.message,
      message_includes,
      -> { "Expected message to include '#{message_includes}' in log event #{event.inspect}" }
    )
  end
  if payload_includes
    payload_includes.each_pair do |key, expected|
      actual = event.payload[key]
      assert_semantic_logger_entry(event, "payload #{name}", expected, actual)
    end
  end
  return unless exception_includes
  payload_includes.each_pair do |key, expected|
    actual = event.exception.send(key)
    assert_semantic_logger_entry(event, "Exception #{name}", expected, actual)
  end
end