Packages
ex_gram
0.23.0
0.67.0
0.66.0
0.65.0
0.64.0
0.63.0
0.62.0
0.61.0
0.60.0
0.58.0
0.57.0
0.56.1
0.56.0
0.55.1
0.55.0
0.54.0
0.53.0
0.52.2
0.52.1
0.52.0
0.51.1
0.51.0
0.50.2
0.50.1
0.50.0
0.41.0
0.40.0
0.34.0
0.33.0
0.32.0
0.31.0
0.30.0
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.1
0.24.0
0.23.0
0.22.0
0.21.0
0.20.0
0.15.0
0.14.0
0.13.0
0.12.0
0.11.0
0.10.0
0.9.0
0.8.1
0.8.0
0.7.1
0.7.0
0.6.2
0.6.1
0.6.0
0.5.0
0.5.0-rc6
0.5.0-rc5
0.5.0-rc4
0.5.0-rc3
0.5.0-rc2
Telegram Bot API low level and framework
Current section
Files
Jump to
Current section
Files
lib/ex_gram/adapter/test.ex
defmodule ExGram.Adapter.Test do
@moduledoc """
HTTP Adapter for testing, it allows you to setup request responses and errors
"""
@behaviour ExGram.Adapter
@name __MODULE__
defstruct calls: [], responses: %{}, errors: %{}
def start_link(opts) do
opts = Keyword.put_new(opts, :name, @name)
GenServer.start_link(__MODULE__, :ok, opts)
end
def init(:ok) do
{:ok, %__MODULE__{}}
end
@impl ExGram.Adapter
def request(verb, path, body, name \\ @name) do
GenServer.call(name, {:request, verb, path, body})
end
def backdoor_request(path, response, name \\ @name) do
GenServer.call(name, {:backdoor, path, response})
end
def backdoor_error(path, error, name \\ @name) do
GenServer.call(name, {:backdoor_error, path, error})
end
def clean(name \\ @name) do
GenServer.call(name, {:clean})
end
def handle_call({:request, verb, path, body}, _, state) do
state = add_call(state, {verb, path, body})
reply = get_response(state, path)
{:reply, reply, state}
end
def handle_call({:backdoor, path, response}, _, %{responses: responses} = state) do
path = clean_path(path)
responses = Map.put(responses, path, response)
{:reply, :ok, %{state | responses: responses}}
end
def handle_call({:backdoor_error, path, error}, _, %{errors: errors} = state) do
path = clean_path(path)
errors = Map.put(errors, path, error)
{:reply, :ok, %{state | errors: errors}}
end
def handle_call({:clean}, _, _) do
{:reply, :ok, %__MODULE__{}}
end
defp add_call(%{calls: calls} = state, data), do: %{state | calls: calls ++ [data]}
defp get_response(%{responses: responses, errors: errors}, path) do
path = clean_path(path)
with {:error, :error} <- {:error, Map.fetch(errors, path)},
{:ok, value} <- Map.fetch(responses, path) do
{:ok, value}
else
{:error, {:ok, value}} -> {:error, value}
_ -> {:error, %ExGram.Error{code: 404}}
end
end
defp clean_path("/bot" <> _ = path),
do: "/" <> (path |> String.split("/") |> Enum.drop(2) |> Enum.join("/"))
defp clean_path(path), do: path
end