Page MenuHomePhorge

No OneTemporary

Size
2 KB
Referenced Files
None
Subscribers
None
diff --git a/test/tesla/middleware/retry_test.exs b/test/tesla/middleware/retry_test.exs
index 4b95053..dc8c000 100644
--- a/test/tesla/middleware/retry_test.exs
+++ b/test/tesla/middleware/retry_test.exs
@@ -1,58 +1,87 @@
defmodule Tesla.Middleware.RetryTest do
use ExUnit.Case, async: false
defmodule LaggyAdapter do
def start_link, do: Agent.start_link(fn -> 0 end, name: __MODULE__)
def call(env, _opts) do
Agent.get_and_update(__MODULE__, fn retries ->
response =
case env.url do
"/ok" -> {:ok, env}
"/maybe" when retries < 5 -> {:error, :econnrefused}
"/maybe" -> {:ok, env}
"/nope" -> {:error, :econnrefused}
+ "/retry_status" -> {:ok, %{status: 500}}
end
{response, retries + 1}
end)
end
end
defmodule Client do
use Tesla
- plug Tesla.Middleware.Retry, delay: 10, max_retries: 10
+ plug Tesla.Middleware.Retry,
+ delay: 10,
+ max_retries: 10
adapter LaggyAdapter
end
+ defmodule ClientWithShouldRetryFunction do
+ use Tesla
+
+ plug Tesla.Middleware.Retry,
+ delay: 10,
+ max_retries: 10,
+ should_retry: fn
+ {:ok, %{status: status}} when status in [400, 500] ->
+ assert true
+ true
+ {:ok, _} ->
+ assert false
+ false
+ {:error, _} ->
+ assert false
+ true
+ end
+
+ adapter LaggyAdapter
+ end
+
+
setup do
{:ok, _} = LaggyAdapter.start_link()
:ok
end
test "pass on successful request" do
assert {:ok, %Tesla.Env{url: "/ok", method: :get}} = Client.get("/ok")
end
test "finally pass on laggy request" do
assert {:ok, %Tesla.Env{url: "/maybe", method: :get}} = Client.get("/maybe")
end
test "raise if max_retries is exceeded" do
assert {:error, :econnrefused} = Client.get("/nope")
end
+ test "use custom retry determination function" do
+ assert {:ok, %{status: 500}} = ClientWithShouldRetryFunction.get("/retry_status")
+ end
+
defmodule DefunctClient do
use Tesla
plug Tesla.Middleware.Retry
adapter fn _ -> raise "runtime-error" end
end
test "raise in case or unexpected error" do
assert_raise RuntimeError, fn -> DefunctClient.get("/blow") end
end
end

File Metadata

Mime Type
text/x-diff
Expires
Sat, Sep 19, 10:40 AM (1 d, 23 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1766802
Default Alt Text
(2 KB)

Event Timeline