Current section
Files
Jump to
Current section
Files
lib/assertions/have_relationships.ex
defmodule EspecJsonapi.Assertions.HaveRelationships do
use ESpec.Assertions.Interface
def match(%{ "relationships" => relationships }, expected_relationships) do
keys = Map.keys(relationships)
missing_keys = match_keys(keys, expected_relationships)
{
Enum.empty?(missing_keys),
missing_keys
}
end
def match(subject, _attribute), do: { false, subject }
def success_message(subject, relationships, _result, positive) do
to = if positive, do: "has", else: "does not have"
"`#{inspect subject}` #{to} relationships #{relationships}."
end
def error_message(subject, _relationships, result, positive) do
to = if positive, do: "to", else: "not to"
"Expected `#{inspect subject}` #{to} have relationships #{inspect result}."
end
def match_keys(keys, expected_keys, missing_keys \\ [])
def match_keys(keys, [head|tail] = _expected_keys, missing_keys) do
if Enum.member?(keys, head) do
match_keys(keys, tail, missing_keys)
else
match_keys(keys, tail, missing_keys ++ [head])
end
end
def match_keys(_keys, [], missing_keys), do: missing_keys
end