Skip to content

Instantly share code, notes, and snippets.

@Ambrosia
Last active August 31, 2015 16:37
Show Gist options
  • Save Ambrosia/213c18825080b41d9bed to your computer and use it in GitHub Desktop.
Save Ambrosia/213c18825080b41d9bed to your computer and use it in GitHub Desktop.
9) test creates and renders resource when data is valid (Lookiee.UserControllerTest)
test/controllers/user_controller_test.exs:15
** (RuntimeError) expected content-type for json, got: "application/vnd.api+json; charset=utf-8"
stacktrace:
(phoenix) lib/phoenix/test/conn_test.ex:273: Phoenix.ConnTest.response_content_type/2
(phoenix) lib/phoenix/test/conn_test.ex:363: Phoenix.ConnTest.json_response/2
test/controllers/user_controller_test.exs:17
defmodule Lookiee.UserController do
use Lookiee.Web, :controller
alias Lookiee.User
plug :scrub_params, "user" when action in [:create, :update]
def create(conn, %{"user" => user_params}) do
changeset = User.changeset(%User{}, user_params)
case Repo.insert(changeset) do
{:ok, user} ->
render(conn, "show.json", data: user)
{:error, changeset} ->
conn
|> put_status(:unprocessable_entity)
|> render(Lookiee.ChangesetView, "error.json", changeset: changeset)
end
end
def update(conn, %{"id" => id, "user" => user_params}) do
user = Repo.get!(User, id)
changeset = User.changeset(user, user_params)
case Repo.update(changeset) do
{:ok, user} ->
render(conn, "show.json", data: user)
{:error, changeset} ->
conn
|> put_status(:unprocessable_entity)
|> render(Lookiee.ChangesetView, "error.json", changeset: changeset)
end
end
def delete(conn, %{"id" => id}) do
user = Repo.get!(User, id)
# Here we use delete! (with a bang) because we expect
# it to always work (and if it does not, it will raise).
Repo.delete!(user)
send_resp(conn, :no_content, "")
end
end
defmodule Lookiee.UserControllerTest do
use Lookiee.ConnCase
alias Lookiee.User
@valid_attrs %{email: "email@email.com", password: "some password"}
@invalid_attrs %{email: "haha"}
setup do
conn = conn()
|> put_req_header("accept", "application/vnd.api+json")
|> put_req_header("content-type", "application/vnd.api+json")
{:ok, conn: conn}
end
test "creates and renders resource when data is valid", %{conn: conn} do
conn = post conn, user_path(conn, :create), user: @valid_attrs
assert json_response(conn, 200)["data"]["id"]
assert Repo.get_by(User, %{email: @valid_attrs.email})
end
test "does not create resource and renders errors when data is invalid", %{conn: conn} do
conn = post conn, user_path(conn, :create), user: @invalid_attrs
assert json_response(conn, 422)["errors"] != %{}
end
test "updates and renders chosen resource when data is valid", %{conn: conn} do
user = Repo.insert! %User{}
conn = put conn, user_path(conn, :update, user), user: @valid_attrs
assert json_response(conn, 200)["data"]["id"]
assert Repo.get_by(User, %{email: @valid_attrs.email})
end
test "does not update chosen resource and renders errors when data is invalid", %{conn: conn} do
user = Repo.insert! %User{}
conn = put conn, user_path(conn, :update, user), user: @invalid_attrs
assert json_response(conn, 422)["errors"] != %{}
end
test "deletes chosen resource", %{conn: conn} do
user = Repo.insert! %User{}
conn = delete conn, user_path(conn, :delete, user)
assert response(conn, 204)
refute Repo.get(User, user.id)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment