defmodule GitHub.Plugin.TestClient do
alias GitHub.Error
alias GitHub.Operation
alias GitHub.Testing
@spec request(Operation.t(), keyword) :: {:ok, Operation.t()} | {:error, Error.t()}
def request(%Operation{} = operation, _opts) do
Testing.put_call(operation)
case Testing.get_mock(operation) do
fun when is_function(fun, 0) ->
case fun.() do
{:ok, code, data} ->
{:ok, %Operation{operation | response_body: data, response_code: code}}
{:error, reason} ->
message = "Error during test request"
step = {__MODULE__, :request}
{:error,
Error.new(message: message, operation: operation, source: reason, step: step)}
end
{:ok, code, data} ->
{:ok, %Operation{operation | response_body: data, response_code: code}}
{:error, reason} ->
message = "Error during test request"
step = {__MODULE__, :request}
{:error, Error.new(message: message, operation: operation, source: reason, step: step)}
end
end
end