Packages
timber
3.1.2
3.1.2
3.1.1
3.1.0
3.0.0
3.0.0-alpha.3
3.0.0-alpha.2
3.0.0-alpha.1
2.8.4
2.8.3
2.8.2
2.8.1
2.8.0
2.7.0
2.6.1
2.6.0
2.5.6
2.5.5
2.5.4
2.5.3
2.5.2
2.5.1
2.5.0
2.4.5
2.4.4
2.4.3
2.4.2
2.4.1
2.4.0
2.3.4
2.3.3
2.3.1
2.3.0
2.2.1
2.2.0
2.1.8
2.1.7
2.1.6
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.2
2.0.1
2.0.0
2.0.0-rc7
2.0.0-rc6
2.0.0-rc5
2.0.0-rc4
2.0.0-rc3
2.0.0-rc2
2.0.0-rc1
1.1.18
1.1.17
1.1.16
1.1.15
1.1.14
1.1.13
1.1.12
1.1.11
1.1.10
1.1.9
1.1.8
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.16
1.0.15
1.0.14
1.0.13
1.0.12
1.0.11
1.0.10
1.0.9
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
🌲 Great Elixir Logging Made Easy. Official Timber.io Integration.
Current section
Files
Jump to
Current section
Files
lib/timber/http_clients/fake.ex
defmodule Timber.HTTPClients.Fake do
@moduledoc """
Provides a fake HTTP client for testing
"""
@behaviour Timber.HTTPClient
def start_link do
Agent.start_link(fn -> %{} end, name: __MODULE__)
end
def reset do
Agent.update(__MODULE__, fn _ -> %{} end)
end
defp add_function_call(name, args) do
calls = get_function_calls(name)
Agent.update(__MODULE__, &Map.put(&1, name, calls ++ [args]))
end
def get_function_calls(name) do
Agent.get(__MODULE__, &Map.get(&1, name, []))
end
def stub(name, stub) do
Agent.update(__MODULE__, &Map.put(&1, String.to_atom("#{name}_stub"), stub))
end
def get_stub(name) do
Agent.get(__MODULE__, &Map.get(&1, String.to_atom("#{name}_stub")))
end
def get_stub!(name) do
get_stub(name) || raise("No stub found for #{__MODULE__}.#{name}")
end
def async_request(method, url, headers, body) do
# Track the function call
add_function_call(:async_request, {method, url, headers, body})
stub = get_stub(:async_request)
if stub do
stub.(method, url, headers, body)
else
stream_reference = make_ref()
# Send the response message so the client isn't waiting indefinitely
Process.send(self(), {:hackney_response, stream_reference, :done}, [])
# Return back with the same stream reference
{:ok, stream_reference}
end
end
def handle_async_response(_ref, _msg) do
:pass
end
def wait_on_response(_ref, _timeout) do
{:ok, 200}
end
def request(method, url, headers, body) do
add_function_call(:request, {method, url, headers, body})
stub = get_stub(:request)
stub.(method, url, headers, body)
end
def wait_on_request(ref) do
receive do
{:hackney_response, ^ref, :done} -> :ok
_else -> wait_on_request(ref)
end
end
def get_async_request_calls do
get_function_calls(:async_request)
end
end