diff --git a/lib/bokken_web/controllers/organizer_controller.ex b/lib/bokken_web/controllers/organizer/organizer_controller.ex similarity index 75% rename from lib/bokken_web/controllers/organizer_controller.ex rename to lib/bokken_web/controllers/organizer/organizer_controller.ex index bfc66a4e..a60411b1 100644 --- a/lib/bokken_web/controllers/organizer_controller.ex +++ b/lib/bokken_web/controllers/organizer/organizer_controller.ex @@ -1,5 +1,5 @@ defmodule BokkenWeb.OrganizerController do - use BokkenWeb, controller: "1.6" + use BokkenWeb, :controller alias Bokken.Accounts alias Bokken.Accounts.Organizer @@ -8,21 +8,21 @@ defmodule BokkenWeb.OrganizerController do def index(conn, _params) do organizers = Accounts.list_organizers() - render(conn, "index.json", organizers: organizers) + render(conn, :index, organizers: organizers) end def create(conn, %{"organizer" => organizer_params}) when is_organizer(conn) do with {:ok, %Organizer{} = organizer} <- Accounts.create_organizer(organizer_params) do conn |> put_status(:created) - |> put_resp_header("location", Routes.organizer_path(conn, :show, organizer)) - |> render("show.json", organizer: organizer) + |> put_resp_header("location", ~p"/api/organizers/#{organizer}") + |> render(:show, organizer: organizer) end end def show(conn, %{"id" => id}) do organizer = Accounts.get_organizer!(id) - render(conn, "show.json", organizer: organizer) + render(conn, :show, organizer: organizer) end def update(conn, %{"id" => id, "organizer" => organizer_params}) @@ -30,7 +30,7 @@ defmodule BokkenWeb.OrganizerController do organizer = Accounts.get_organizer!(id) with {:ok, %Organizer{} = organizer} <- Accounts.update_organizer(organizer, organizer_params) do - render(conn, "show.json", organizer: organizer) + render(conn, :show, organizer: organizer) end end diff --git a/lib/bokken_web/controllers/organizer/organizer_json.ex b/lib/bokken_web/controllers/organizer/organizer_json.ex new file mode 100644 index 00000000..e4737308 --- /dev/null +++ b/lib/bokken_web/controllers/organizer/organizer_json.ex @@ -0,0 +1,18 @@ +defmodule BokkenWeb.OrganizerJSON do + def index(%{organizers: organizers}) do + %{data: for(organizer <- organizers, do: data(organizer))} + end + + def show(%{organizer: organizer}) do + %{data: data(organizer)} + end + + def data(organizer) do + %{ + id: organizer.id, + champion: organizer.champion, + first_name: organizer.first_name, + last_name: organizer.last_name + } + end +end diff --git a/lib/bokken_web/views/auth_view.ex b/lib/bokken_web/views/auth_view.ex index fb8d6535..2731e170 100644 --- a/lib/bokken_web/views/auth_view.ex +++ b/lib/bokken_web/views/auth_view.ex @@ -5,7 +5,7 @@ defmodule BokkenWeb.AuthView do alias BokkenWeb.GuardianView alias BokkenWeb.MentorView alias BokkenWeb.NinjaView - alias BokkenWeb.OrganizerView + alias BokkenWeb.OrganizerJSON def render("me.json", %{user: %{registered: false} = user}) do render_one(user, AuthView, "user.json") @@ -30,7 +30,7 @@ defmodule BokkenWeb.AuthView do end def render("me.json", %{user: %{role: :organizer, organizer: organizer} = user}) do - render_one(organizer, OrganizerView, "organizer.json") + render_one(organizer, OrganizerJSON, "organizer.json") |> Map.merge(render_one(user, AuthView, "user.json", current_user: user)) |> Map.put(:organizer_id, organizer.id) end diff --git a/lib/bokken_web/views/organizer_view.ex b/lib/bokken_web/views/organizer_view.ex deleted file mode 100644 index b13d42b9..00000000 --- a/lib/bokken_web/views/organizer_view.ex +++ /dev/null @@ -1,22 +0,0 @@ -defmodule BokkenWeb.OrganizerView do - use BokkenWeb, :view - - alias BokkenWeb.OrganizerView - - def render("index.json", %{organizers: organizers}) do - %{data: render_many(organizers, OrganizerView, "organizer.json")} - end - - def render("show.json", %{organizer: organizer}) do - %{data: render_one(organizer, OrganizerView, "organizer.json")} - end - - def render("organizer.json", %{organizer: organizer}) do - %{ - id: organizer.id, - champion: organizer.champion, - first_name: organizer.first_name, - last_name: organizer.last_name - } - end -end diff --git a/test/bokken_web/controllers/organizer_json_test.exs b/test/bokken_web/controllers/organizer_json_test.exs new file mode 100644 index 00000000..f6c360eb --- /dev/null +++ b/test/bokken_web/controllers/organizer_json_test.exs @@ -0,0 +1,36 @@ +defmodule Bokken.OrganizerJSONTest do + use Bokken.DataCase + + import Bokken.Factory + alias BokkenWeb.OrganizerJSON + + test "data" do + organizer = build(:organizer) + rendered_organizer = OrganizerJSON.data(organizer) + + assert rendered_organizer == %{ + id: organizer.id, + champion: organizer.champion, + first_name: organizer.first_name, + last_name: organizer.last_name + } + end + + test "show" do + organizer = build(:organizer) + rendered_organizer = OrganizerJSON.show(%{organizer: organizer}) + + assert rendered_organizer == %{ + data: OrganizerJSON.data(organizer) + } + end + + test "index" do + organizers = build_list(5, :organizer) + rendered_organizers = OrganizerJSON.index(%{organizers: organizers}) + + assert rendered_organizers == %{ + data: Enum.map(organizers, &OrganizerJSON.data(&1)) + } + end +end