I would like to create a mocked HTTP request for mix test
of App.Controller.sign_up/2
. How to match %Plug.Conn{adapter: {Plug.Adapters.Test.Conn ...
in protocol's for:
?
Caller
defmodule App.Controller do
use App.Web, :controller
def sign_up(conn, params) do
case App.AppHelper.verify(conn, params) do
{:ok, _} ->
...
end
...
Helper
defmodule App.AppHelper do
def verify(%Plug.Conn{adapter: {adapter, _}} = conn, params) do
App.AppRequest.request adapter, params
end
end
Protocol and Implementations
defprotocol App.AppRequest do
@fallback_to_any true
def request(adapter, params)
end
defimpl App.AppRequest, for: Plug.Adapters.Cowboy.Conn do
def request(_, params) do
#returns http request result
end
end
defimpl App.AppRequest, for: Plug.Adapters.Test.Conn do
def request(_, params) do
#returns mocked result
end
end
Ps. edited to my current state with help of @Dogbert
Resulted with
** (Protocol.UndefinedError) protocol App.AppRequest not implemented for Plug.Adapters.Test.Conn