Skip to content

Commit

Permalink
Merge pull request #35 from Nemo157/response_sequence
Browse files Browse the repository at this point in the history
Response sequence
  • Loading branch information
parroty committed Dec 21, 2015
2 parents d4aa919 + 28eb286 commit 86606ae
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 5 deletions.
20 changes: 20 additions & 0 deletions fixture/custom_cassettes/httpoison_get_alternate.json
@@ -0,0 +1,20 @@
[
{
"request": {
"url": "http://example.com"
},
"response": {
"body": "Example Domain 1",
"status_code": 200
}
},
{
"request": {
"url": "http://example.com"
},
"response": {
"body": "Example Domain 2",
"status_code": 200
}
}
]
12 changes: 7 additions & 5 deletions lib/exvcr/handler.ex
Expand Up @@ -20,7 +20,7 @@ defmodule ExVCR.Handler do
recorder_options = Options.get(recorder.options)
adapter = ExVCR.Recorder.options(recorder)[:adapter]
params = adapter.generate_keys_for_request(request)
response = find_response(Recorder.get(recorder), params, recorder_options)
{response, responses} = find_response(Recorder.get(recorder), params, recorder_options)
response = adapter.hook_response_from_cache(response)

case { response, stub_mode?(recorder_options) } do
Expand All @@ -31,6 +31,7 @@ defmodule ExVCR.Handler do
nil
{ response, _ } ->
ExVCR.Checker.add_cache_count(recorder)
Recorder.set(responses, recorder)
adapter.get_response_value_from_cache(response)
end
end
Expand All @@ -49,11 +50,12 @@ defmodule ExVCR.Handler do
Enum.member?(flags, type)
end

defp find_response([], _keys, _recorder_options), do: nil
defp find_response([response|tail], keys, recorder_options) do
defp find_response(responses, keys, recorder_options), do: find_response(responses, keys, recorder_options, [])
defp find_response([], _keys, _recorder_options, acc), do: {nil, nil}
defp find_response([response|tail], keys, recorder_options, acc) do
case match_response(response, keys, recorder_options) do
true -> response[:response]
false -> find_response(tail, keys, recorder_options)
true -> {response[:response], Enum.reverse(acc) ++ tail ++ [response]}
false -> find_response(tail, keys, recorder_options, [response|acc])
end
end

Expand Down
7 changes: 7 additions & 0 deletions test/adapter_hackney_test.exs
Expand Up @@ -42,6 +42,13 @@ defmodule ExVCR.Adapter.HackneyTest do
end
end

test "get request with alternate" do
use_cassette "httpoison_get_alternate", custom: true do
assert %HTTPoison.Response{body: "Example Domain 1", status_code: 200} = HTTPoison.get!("http://example.com")
assert %HTTPoison.Response{body: "Example Domain 2", status_code: 200} = HTTPoison.get!("http://example.com")
end
end

test "get with error" do
use_cassette "httpoison_get_error" do
assert_raise HTTPoison.Error, fn ->
Expand Down

0 comments on commit 86606ae

Please sign in to comment.