Skip to content

Commit ab45326

Browse files
committed
Improve code based on @josevalim's feedback
1 parent 8040e7a commit ab45326

File tree

1 file changed

+28
-28
lines changed

1 file changed

+28
-28
lines changed

test/bypass_test.exs

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -455,43 +455,43 @@ defmodule BypassTest do
455455

456456
with {:ok, conn} <- Mint.HTTP.connect(:http, "127.0.0.1", port),
457457
{:ok, conn, ref} = Mint.HTTP.request(conn, method, path, [], "") do
458-
result = receive_responses(conn, ref)
459-
{:ok, _conn} = Mint.HTTP.close(conn)
460-
result
458+
receive_responses(conn, ref, 100, [])
461459
end
462460
end
463461

464-
defp receive_responses(conn, ref, result \\ %{done: false, status: 100, body: []}) do
462+
defp receive_responses(conn, ref, status, body) do
465463
receive do
466464
message ->
467-
with {:ok, conn, responses} <- Mint.HTTP.stream(conn, message),
468-
%{} = result <-
469-
Enum.reduce(responses, result, fn response, result ->
470-
case response do
471-
{:status, ^ref, status} ->
472-
%{result | status: status}
473-
474-
{:headers, ^ref, _headers} ->
475-
result
476-
477-
{:data, ^ref, data} ->
478-
%{result | body: result.body ++ [data]}
479-
480-
{:done, ^ref} ->
481-
%{result | done: true}
482-
483-
{:error, ^ref, _reason} = error ->
484-
error
485-
end
486-
end) do
487-
case result do
488-
%{done: true} -> {:ok, result.status, Enum.join(result.body)}
489-
%{done: false} -> receive_responses(conn, ref, result)
490-
end
465+
with {:ok, conn, responses} <- Mint.HTTP.stream(conn, message) do
466+
receive_responses(responses, conn, ref, status, body)
491467
end
492468
end
493469
end
494470

471+
defp receive_responses([], conn, ref, status, body) do
472+
receive_responses(conn, ref, status, body)
473+
end
474+
475+
defp receive_responses([response | responses], conn, ref, status, body) do
476+
case response do
477+
{:status, ^ref, status} ->
478+
receive_responses(responses, conn, ref, status, body)
479+
480+
{:headers, ^ref, _headers} ->
481+
receive_responses(responses, conn, ref, status, body)
482+
483+
{:data, ^ref, data} ->
484+
receive_responses(responses, conn, ref, status, [data | body])
485+
486+
{:done, ^ref} ->
487+
_ = Mint.HTTP.close(conn)
488+
{:ok, status, body |> Enum.reverse() |> IO.iodata_to_binary()}
489+
490+
{:error, ^ref, _reason} = error ->
491+
error
492+
end
493+
end
494+
495495
test "Bypass.expect/4 can be used to define a specific route and then redefined" do
496496
:expect |> specific_route_redefined
497497
end

0 commit comments

Comments
 (0)