Packages
A serialization library implementing the jsonapi.org 1.0 spec suitable for use building JSON APIs in Phoenix and any other Plug based framework or app.
Current section
Files
Jump to
Current section
Files
priv/templates/ja_serializer.gen.phoenix_api/controller_test.exs
defmodule <%= module %>ControllerTest do
use <%= base %>.ConnCase
alias <%= module %>
alias <%= base %>.Repo
@valid_attrs <%= inspect params %>
@invalid_attrs %{}
setup do
conn = build_conn()
|> put_req_header("accept", "application/vnd.api+json")
|> put_req_header("content-type", "application/vnd.api+json")
{:ok, conn: conn}
end
<%= if Enum.count(refs) != 0 do %>
defp relationships do <%= for ref <- refs do %>
<%= ref %> = Repo.insert!(%<%= base %>.<%= Phoenix.Naming.camelize(ref) %>{})<% end %>
%{<%= for ref <- refs do %>
"<%= ref %>" => %{
"data" => %{
"type" => "<%= ref %>",
"id" => <%= ref %>.id
}
},<% end %>
}
end<% end %><%= if Enum.count(refs) == 0 do %>
defp relationships do
%{}
end<% end %>
test "lists all entries on index", %{conn: conn} do
conn = get conn, <%= singular %>_path(conn, :index)
assert json_response(conn, 200)["data"] == []
end
test "shows chosen resource", %{conn: conn} do
<%= singular %> = Repo.insert! %<%= alias %>{}
conn = get conn, <%= singular %>_path(conn, :show, <%= singular %>)
data = json_response(conn, 200)["data"]
assert data["id"] == "#{<%= singular %>.id}"
assert data["type"] == "<%= singular %>"<%= for {k, _} <- attrs do %>
assert data["attributes"]["<%= k %>"] == <%= singular %>.<%= k %><% end %>
end
test "does not show resource and instead throw error when id is nonexistent", %{conn: conn} do
assert_error_sent 404, fn ->
get conn, <%= singular %>_path(conn, :show, <%= if binary_id do %>"11111111-1111-1111-1111-111111111111"<% else %>-1<% end %>)
end
end
test "creates and renders resource when data is valid", %{conn: conn} do
conn = post conn, <%= singular %>_path(conn, :create), %{
"meta" => %{},
"data" => %{
"type" => "<%= singular %>",
"attributes" => @valid_attrs,
"relationships" => relationships
}
}
assert json_response(conn, 201)["data"]["id"]
assert Repo.get_by(<%= alias %>, @valid_attrs)
end
test "does not create resource and renders errors when data is invalid", %{conn: conn} do
conn = post conn, <%= singular %>_path(conn, :create), %{
"meta" => %{},
"data" => %{
"type" => "<%= singular %>",
"attributes" => @invalid_attrs,
"relationships" => relationships
}
}
assert json_response(conn, 422)["errors"] != %{}
end
test "updates and renders chosen resource when data is valid", %{conn: conn} do
<%= singular %> = Repo.insert! %<%= alias %>{}
conn = put conn, <%= singular %>_path(conn, :update, <%= singular %>), %{
"meta" => %{},
"data" => %{
"type" => "<%= singular %>",
"id" => <%= singular %>.id,
"attributes" => @valid_attrs,
"relationships" => relationships
}
}
assert json_response(conn, 200)["data"]["id"]
assert Repo.get_by(<%= alias %>, @valid_attrs)
end
test "does not update chosen resource and renders errors when data is invalid", %{conn: conn} do
<%= singular %> = Repo.insert! %<%= alias %>{}
conn = put conn, <%= singular %>_path(conn, :update, <%= singular %>), %{
"meta" => %{},
"data" => %{
"type" => "<%= singular %>",
"id" => <%= singular %>.id,
"attributes" => @invalid_attrs,
"relationships" => relationships
}
}
assert json_response(conn, 422)["errors"] != %{}
end
test "deletes chosen resource", %{conn: conn} do
<%= singular %> = Repo.insert! %<%= alias %>{}
conn = delete conn, <%= singular %>_path(conn, :delete, <%= singular %>)
assert response(conn, 204)
refute Repo.get(<%= alias %>, <%= singular %>.id)
end
end