lib/espec/assertions/enum/have_any.ex

defmodule ESpec.Assertions.Enum.HaveAny do
  @moduledoc """
  Defines 'have_any' assertion.

  it do: expect(collection).to have_any(func)
  """
  use ESpec.Assertions.Interface

  defp match(enum, func) do
    result = Enum.any?(enum, func)
    {result, result}
  end

  defp success_message(enum, func, _result, positive) do
    if positive do
      "`#{inspect(func)}` returns `true` for at least one element in `#{inspect(enum)}`."
    else
      "`#{inspect(func)}` doesn't return `true` for any element in `#{inspect(enum)}`."
    end
  end

  defp error_message(enum, func, result, positive) do
    to = if positive, do: "to", else: "not to"

    "Expected `#{inspect(func)}` #{to} return `true` for at least one element in `#{inspect(enum)}` but it returns `#{result}` for all."
  end
end