Link - Dual
Setup
defmodule Foo do
use(Mazurka.Resource)
param(foo)
mediatype(Hyper) do
action() do
%{"foo" => foo}
end
end
end
defmodule Bar do
use(Mazurka.Resource)
param(bar)
mediatype(Hyper) do
action() do
link = Foo
%{"bar" => bar, "foo" => link_to(Foo, %{"foo" => bar <> bar}), "baz" => link_to(link, %{"foo" => bar})}
end
end
end
Foo.action
{body, content_type, _} = Foo.action([], %{"foo" => "123"}, %{}, %{}, Router)
%{"foo" => "123", "href" => "/foo/123"} == body
{"application", "json", %{}} = content_type
Foo.affordance
{body, content_type} = Foo.affordance([], %{"foo" => "123"}, %{}, %{}, Router)
%{"href" => "/foo/123"} == body
{"application", "json", %{}} == content_type
Bar.action
{body, content_type, _} = Bar.action([], %{"bar" => "123"}, %{}, %{}, Router)
%{"bar" => "123", "foo" => %{"href" => "/foo/123123"}, "baz" => %{"href" => "/foo/123"}, "href" => "/bar/123"} == body
{"application", "json", %{}} == content_type
Bar.affordance
{body, content_type} = Bar.affordance([], %{"bar" => "123"}, %{}, %{}, Router)
%{"action" => "/bar/123", "method" => "POST", "input" => %{}} = body
{"application", "json", %{}} == content_type
Bar.action missing router
assert_raise(Mazurka.MissingRouterException, fn -> Bar.action([], %{"bar" => "123"}, %{}, %{}) end)
Bar.affordance missing router
assert_raise(Mazurka.MissingRouterException, fn -> Bar.affordance([], %{"bar" => "123"}, %{}, %{}) end)