test/support/test_helpers.ex

defmodule ExshomeTest.TestHelpers do
  @moduledoc """
  Helpers to work with tests.
  """

  defmacro assert_receive_dependency(message, timeout \\ nil) do
    quote do
      ExUnit.Assertions.assert_receive(
        {Exshome.Dependency, unquote(message)},
        unquote(timeout)
      )
    end
  end

  defmacro assert_receive_app_page_dependency(message, timeout \\ nil) do
    quote do
      ExUnit.Assertions.assert_receive(
        {ExshomeTest.Hooks.AppPage, Exshome.Dependency, unquote(message)},
        unquote(timeout)
      )
    end
  end

  defmacro assert_receive_event(event, timeout \\ nil) do
    quote do
      ExUnit.Assertions.assert_receive(
        {Exshome.Event, unquote(event)},
        unquote(timeout)
      )
    end
  end

  defmacro refute_receive_dependency(message, timeout \\ nil) do
    quote do
      ExUnit.Assertions.refute_receive(
        {Exshome.Dependency, unquote(message)},
        unquote(timeout)
      )
    end
  end

  def flush_messages do
    receive do
      _ -> flush_messages()
    after
      0 -> nil
    end
  end
end