Skip to content

Commit

Permalink
Fix logics for error case with multiple body request
Browse files Browse the repository at this point in the history
  • Loading branch information
parroty committed Jan 25, 2014
1 parent 1f386d3 commit b11d59b
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 16 deletions.
28 changes: 16 additions & 12 deletions lib/exvcr/adapter/hackney.ex
Expand Up @@ -54,21 +54,25 @@ defmodule ExVCR.Adapter.Hackney do

defp handle_body_request(recorder, [client]) do
if body = Store.get(client) do
Store.delete(client)
{:ok, body}
else
{:ok, body} = :meck.passthrough([client])
body = ExVCR.Filter.filter_sensitive_data(body)
{ret, body} = :meck.passthrough([client])
if ret == :ok do
body = ExVCR.Filter.filter_sensitive_data(body)

client_key_in_string = inspect(client)
ExVCR.Recorder.update(recorder,
fn([request: _request, response: response]) ->
response.body == client_key_in_string
end,
fn([request: request, response: response]) ->
[request: request, response: response.body(body)]
end
)
{:ok, body}
client_key_in_string = inspect(client)
ExVCR.Recorder.update(recorder,
fn([request: _request, response: response]) ->
response.body == client_key_in_string
end,
fn([request: request, response: response]) ->
[request: request, response: response.body(body)]
end
)
end

{ret, body}
end
end

Expand Down
8 changes: 8 additions & 0 deletions lib/exvcr/adapter/hackney/store.ex
Expand Up @@ -30,6 +30,14 @@ defmodule ExVCR.Adapter.Hackney.Store do
value
end

@doc """
Set key (client key).
"""
def delete(key) do
start
:ets.delete(table, key)
end

defp table do
"exvcr_hackney#{inspect self}" |> binary_to_atom
end
Expand Down
15 changes: 11 additions & 4 deletions test/adapter_hackney_test.exs
Expand Up @@ -6,23 +6,30 @@ defmodule ExVCR.Adapter.HackneyTest do
HTTPoison.start
end

test "hackney get request" do
test "hackney request" do
use_cassette "hackney_get" do
:hackney.start
{:ok, status_code, headers, client} = :hackney.request(:get, "http://www.example.com", [], [], [])
{:ok, body} = :hackney.body(client)
assert body =~ %r/Example Domain/
end
end

test "single request with error" do
test "hackney request with error" do
use_cassette "error_hackney" do
:hackney.start
{type, body} = :hackney.request(:get, "http://invalid_url", [], [], [])
assert type == :error
end
end

test "hackney body request with invalid reference" do
use_cassette "hackney_invalid_client" do
{:ok, status_code, headers, client} = :hackney.request(:get, "http://www.example.com", [], [], [])
:hackney.body(client)
{ret, body} = :hackney.body(client)
assert ret == :error
end
end

test "get request" do
use_cassette "httpoison_get" do
assert HTTPoison.get("http://example.com").body =~ %r/Example Domain/
Expand Down

0 comments on commit b11d59b

Please sign in to comment.