Current section
Files
Jump to
Current section
Files
lib/github/testing/store/process.ex
defmodule GitHub.Testing.Store.Process do
@moduledoc false
alias GitHub.Testing.Call
alias GitHub.Testing.Mock
@behaviour GitHub.Testing.Store
#
# Calls
#
@pd_call_key :oapi_github_test_call
@impl true
def clear_calls() do
Process.get_keys()
|> Enum.each(fn
{@pd_call_key, module, function} -> clear_calls(module, function)
_else -> :ok
end)
end
@impl true
def clear_calls(module, function) do
call_key(module, function)
|> Process.put([])
:ok
end
@impl true
def get_calls(module, function) do
call_key(module, function)
|> Process.get([])
end
@impl true
def put_call(call) do
%Call{function: function, module: module} = call
key = call_key(module, function)
calls = [call | Process.get(key, [])]
Process.put(key, calls)
:ok
end
#
# Mocks
#
@pd_mock_key :oapi_github_test_mock
@impl true
def clear_mocks() do
Process.get_keys()
|> Enum.each(fn
{@pd_mock_key, module, function} -> clear_mocks(module, function)
_else -> :ok
end)
end
@impl true
def clear_mocks(module, function) do
mock_key(module, function)
|> Process.put([])
:ok
end
@impl true
def get_mocks(module, function) do
mock_key(module, function)
|> Process.get([])
end
@impl true
def put_mock(mock) do
%Mock{function: function, module: module} = mock
key = mock_key(module, function)
mocks = [mock | Process.get(key, [])]
Process.put(key, mocks)
:ok
end
#
# Helpers
#
@spec call_key(module, atom) :: tuple
defp call_key(module, function) do
{@pd_call_key, module, function}
end
@spec mock_key(module, atom) :: tuple
defp mock_key(module, function) do
{@pd_mock_key, module, function}
end
end