lib/patch/case.ex

defmodule Patch.Case do
  defmacro __using__(_) do
    quote do
      setup do
        debug = Application.fetch_env(:patch, :debug)
        start_supervised!(Patch.Supervisor)

        on_exit(fn ->
          Patch.Mock.Code.Freezer.empty()

          case debug do
            {:ok, value} ->
              Application.put_env(:patch, :debug, value)

            :error ->
              Application.delete_env(:patch, :debug)
          end
        end)

        :ok
      end
    end
  end
end