defmodule MicrowavepropWeb.Api.FallbackControllerTest do use ExUnit.Case, async: true import Plug.Test alias Microwaveprop.Accounts.User alias MicrowavepropWeb.Api.FallbackController # Force the module to be (re-)loaded so cover-tracked module-load lines # are counted even when only routed tests would otherwise reach this code. setup_all do Code.ensure_loaded(FallbackController) :ok end defp build_conn do :get |> conn("/") |> Plug.Conn.put_private(:phoenix_endpoint, MicrowavepropWeb.Endpoint) end test "renders changeset errors as 422" do cs = User.registration_changeset(%User{}, %{}, validate_unique: false) conn = FallbackController.call(build_conn(), {:error, cs}) assert conn.status == 422 end test "renders :not_found as 404" do conn = FallbackController.call(build_conn(), {:error, :not_found}) assert conn.status == 404 end test "renders :forbidden as 403" do conn = FallbackController.call(build_conn(), {:error, :forbidden}) assert conn.status == 403 end test "renders :unauthorized as 401" do conn = FallbackController.call(build_conn(), {:error, :unauthorized}) assert conn.status == 401 end test "renders :bad_request with detail as 400" do conn = FallbackController.call(build_conn(), {:error, :bad_request, "missing thing"}) assert conn.status == 400 assert %{"detail" => "missing thing"} = Jason.decode!(conn.resp_body) end test "renders :duplicate as 409" do conn = FallbackController.call(build_conn(), {:error, :duplicate, %{}}) assert conn.status == 409 end end