towerops/lib/towerops/http.ex

45 lines
1.3 KiB
Elixir

defmodule Towerops.HTTP do
@moduledoc false
def request(owner, req_opts) when is_list(req_opts) do
req_opts
|> maybe_attach_test_plug(owner)
# |> maybe_disable_retry() # Temporarily disabled to debug PagerDuty tests
|> Req.request()
rescue
error in RuntimeError ->
if String.contains?(Exception.message(error), "cannot find mock/stub") do
{:error, :no_test_stub}
else
reraise error, __STACKTRACE__
end
end
def get(owner, url_or_opts, opts \\ []) do
simple_request(:get, owner, url_or_opts, opts)
end
def post(owner, url_or_opts, opts \\ []) do
simple_request(:post, owner, url_or_opts, opts)
end
def delete(owner, url_or_opts, opts \\ []) do
simple_request(:delete, owner, url_or_opts, opts)
end
defp simple_request(method, owner, url, opts) when is_binary(url) do
request(owner, [method: method, url: url] ++ opts)
end
defp simple_request(method, owner, req_opts, []) when is_list(req_opts) do
request(owner, Keyword.put_new(req_opts, :method, method))
end
defp maybe_attach_test_plug(req_opts, owner) do
if Application.get_env(:towerops, :env) == :test and !Keyword.has_key?(req_opts, :plug) do
Keyword.put(req_opts, :plug, {Req.Test, owner})
else
req_opts
end
end
end