lib/application.ex

defmodule MVola.Application do
  use Application

  def start(_type, args) do
    child_spec = case args do
      [env: :prod] -> [
        spec_http_client(),
      ]
      [env: :test] -> [
        spec_http_client(),
        {Plug.Cowboy, scheme: :http, plug: MVola.MockServer, options: [port: 8071]},
      ]
      [env: :dev] -> [spec_http_client(),]
      [_] -> [spec_http_client(),]
    end

    Supervisor.start_link(child_spec, strategy: :one_for_one, name: MVola.Supervisor)
  end

  def http_name() do
    __MODULE__.Finch
  end

  defp spec_http_client() do
    app = Application.get_application(__MODULE__)
    {
      Finch,
      pools: %{
        :default => [
          size: Application.get_env(app, :pool_size, 100),
          count: Application.get_env(app, :pool_count, 1)
        ]
      },
      name: http_name()
    }
  end
end