45 lines
1.3 KiB
Elixir
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
|