Current section
Files
Jump to
Current section
Files
lib/mocks/matchers.ex
defmodule Pavlov.Mocks.Matchers do
@moduledoc """
Provides matchers for Mocked modules.
"""
import ExUnit.Assertions
import Pavlov.Mocks.Matchers.Messages
@doc """
Asserts whether a method was called with on a mocked module.
Use in conjunction with `with` to perform assertions on the arguments
passed in to the method.
A negative version `not_to_have_received` is also provided. The same usage
instructions apply.
## Example
expect HTTPotion |> to_have_received :get
"""
def to_have_received(module, tuple) when is_tuple(tuple) do
{method, args} = tuple
args = List.flatten [args]
result = _called(module, method, args)
case result do
false -> flunk message_for_matcher(:have_received, [module, method, args], :assertion)
_ -> assert result
end
end
def to_have_received(module, method) do
result = _called(module, method, [])
case result do
false -> flunk message_for_matcher(:have_received, [module, method], :assertion)
_ -> assert result
end
end
@doc false
def not_to_have_received(module, tuple) when is_tuple(tuple) do
{method, args} = tuple
args = List.flatten [args]
result = _called(module, method, args)
case result do
true -> flunk message_for_matcher(:have_received, [module, method, args], :refutation)
_ -> refute result
end
end
def not_to_have_received(module, method) do
result = _called(module, method, [])
case result do
true -> flunk message_for_matcher(:have_received, [module, method], :refutation)
_ -> refute result
end
end
@doc """
Use in conjunction with `to_have_received` to perform assertions on the
arguments passed in to the given method.
## Example
expect HTTPotion |> to_have_received :get |> with "http://example.com"
"""
def with(method, args) do
{method, args}
end
@doc """
Asserts whether a method was called when using "Asserts" syntax:
## Example
assert called HTTPotion.get("http://example.com")
"""
defmacro called({ {:., _, [ module , f ]} , _, args }) do
quote do
:meck.called unquote(module), unquote(f), unquote(args)
end
end
defp _called(module, f, args) do
:meck.called module, f, args
end
end