diff --git a/lib/bokken/events.ex b/lib/bokken/events.ex index 0b7f2764..fe2c3756 100644 --- a/lib/bokken/events.ex +++ b/lib/bokken/events.ex @@ -625,15 +625,7 @@ defmodule Bokken.Events do if is_ninja_enrolled?(ninja_id, event.id) do {:error, :ninja_already_enrolled} else - case role do - :admin -> - insert_enrollment(:admin, attrs) - - :guardian -> - insert_enrollment(:guardian, attrs) - _ -> - {:error, :invalid_role} - end + insert_enrollment(role, attrs) end else {:error, :enrollments_closed} @@ -658,6 +650,10 @@ defmodule Bokken.Events do |> Repo.insert() end + defp insert_enrollment(_, _attrs) do + {:error, :invalid_role} + end + @doc """ Creates an enrollment as a guardian. @@ -666,7 +662,7 @@ defmodule Bokken.Events do iex> guardian_create_enrollment(event, guardian_id, ninja_id, %{field: value}) {:ok, %Enrollment{}} - iex> guardian_create_enrollment(%{field: bad_value}) + iex> guardian_create_enrollment(event, guardian_id, ninja_id, %{field: bad_value}) {:error, %Ecto.Changeset{}} iex> guardian_create_enrollment(event, guardian_id, ninja_id, %{field: value}) @@ -675,6 +671,7 @@ defmodule Bokken.Events do """ def guardian_create_enrollment(event, guardian_id, ninja_id, attrs \\ %{}) do ninja = Accounts.get_ninja!(ninja_id, [:guardian]) + if ninja.guardian.id == guardian_id do create_enrollment(event, :guardian, attrs) else @@ -724,7 +721,7 @@ defmodule Bokken.Events do end @doc """ - Creates an enrollment as a guardian. + Deletes an enrollment as a guardian. ## Examples @@ -738,8 +735,9 @@ defmodule Bokken.Events do {:error, :not_ninja_guardian} """ - def guardian_delete_enrollment(enrollment, guardian_id, ninja_id, attrs \\ %{}) do + def guardian_delete_enrollment(enrollment, guardian_id, ninja_id) do ninja = Accounts.get_ninja!(ninja_id, [:guardian]) + if ninja.guardian.id == guardian_id do delete_enrollment(enrollment) else diff --git a/lib/bokken/events/enrollment.ex b/lib/bokken/events/enrollment.ex index 6560325f..066f382d 100644 --- a/lib/bokken/events/enrollment.ex +++ b/lib/bokken/events/enrollment.ex @@ -4,6 +4,8 @@ defmodule Bokken.Events.Enrollment do """ use Bokken.Schema + import BokkenWeb.Gettext + alias Bokken.Accounts.Ninja alias Bokken.Events.Event @@ -33,7 +35,9 @@ defmodule Bokken.Events.Enrollment do enrollment |> cast(attrs, @required_fields ++ @optional_fields) |> validate_required(@required_fields) - |> validate_inclusion(:accepted, [false], message: "Guardian cannot submit an accepted enrollment") + |> validate_inclusion(:accepted, [false], + message: gettext("Guardian cannot submit an accepted enrollment") + ) |> assoc_constraint(:event) |> assoc_constraint(:ninja) end diff --git a/lib/bokken/guards.ex b/lib/bokken/guards.ex index 40c3faaf..7d5a060d 100644 --- a/lib/bokken/guards.ex +++ b/lib/bokken/guards.ex @@ -29,5 +29,13 @@ defmodule Bokken.Guards do """ defguard is_404(reason) when reason in [:not_found, :not_registered, :invalid_credentials] defguard is_401(reason) when reason in [:token_expired] - defguard is_403(reason) when reason in [:not_authorized, :not_allowed] + + defguard is_403(reason) + when reason in [ + :not_authorized, + :not_allowed, + :ninja_already_enrolled, + :enrollments_closed, + :not_ninja_guardian + ] end diff --git a/lib/bokken_web/controllers/enrollment_controller.ex b/lib/bokken_web/controllers/enrollment_controller.ex index c3dfa757..bb1d121a 100644 --- a/lib/bokken_web/controllers/enrollment_controller.ex +++ b/lib/bokken_web/controllers/enrollment_controller.ex @@ -39,9 +39,7 @@ defmodule BokkenWeb.EnrollmentController do def create( conn, %{ - "enrollment" => - %{"ninja_id" => ninja_id, "accepted" => _accepted, "event_id" => event_id} = - enrollment_params + "enrollment" => %{"ninja_id" => ninja_id, "event_id" => event_id} = enrollment_params } ) when is_guardian(conn) do @@ -66,7 +64,8 @@ defmodule BokkenWeb.EnrollmentController do |> put_status(:not_found) |> render("error.json", reason: "No such enrollment") else - with {:ok, %Enrollment{}} <- Events.guardian_delete_enrollment(enrollment, guardian.id, ninja.id) do + with {:ok, %Enrollment{}} <- + Events.guardian_delete_enrollment(enrollment, guardian.id, ninja.id) do conn |> put_status(:ok) |> render("success.json", message: "Enrollment deleted successfully") diff --git a/lib/bokken_web/controllers/fallback_controller.ex b/lib/bokken_web/controllers/fallback_controller.ex index c3f0cc9b..209e69b4 100644 --- a/lib/bokken_web/controllers/fallback_controller.ex +++ b/lib/bokken_web/controllers/fallback_controller.ex @@ -34,25 +34,4 @@ defmodule BokkenWeb.FallbackController do |> put_view(BokkenWeb.ErrorView) |> render(:"401") end - - def call(conn, {:error, :ninja_already_enrolled}) do - conn - |> put_status(:forbidden) - |> put_view(BokkenWeb.ErrorView) - |> render(:"403") - end - - def call(conn, {:error, :enrollments_closed}) do - conn - |> put_status(:forbidden) - |> put_view(BokkenWeb.ErrorView) - |> render(:"403") - end - - def call(conn, {:error, :not_ninja_guardian}) do - conn - |> put_status(:forbidden) - |> put_view(BokkenWeb.ErrorView) - |> render(:"403") - end end diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot index cbd8f4c6..107bb67c 100644 --- a/priv/gettext/default.pot +++ b/priv/gettext/default.pot @@ -11,7 +11,27 @@ msgid "" msgstr "" -#: lib/bokken/ecto/pt_mobile.ex:60 +#: lib/bokken/ecto/pt_mobile.ex:61 #, elixir-autogen, elixir-format msgid "invalid PT phone number" msgstr "" + +#: lib/bokken/events/enrollment.ex:39 +#, elixir-autogen, elixir-format +msgid "Guardian cannot submit an accepted enrollment" +msgstr "" + +#: lib/bokken/events/event.ex:60 +#, elixir-autogen, elixir-format +msgid "must be greater than enrollments_open" +msgstr "" + +#: lib/bokken/events/event.ex:56 +#, elixir-autogen, elixir-format +msgid "must be greater than start_time" +msgstr "" + +#: lib/bokken/events/event.ex:62 +#, elixir-autogen, elixir-format +msgid "must be smaller than start_time" +msgstr "" diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po index f096499c..c8deeeb5 100644 --- a/priv/gettext/en/LC_MESSAGES/default.po +++ b/priv/gettext/en/LC_MESSAGES/default.po @@ -11,7 +11,27 @@ msgstr "" "Language: en\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: lib/bokken/ecto/pt_mobile.ex:60 +#: lib/bokken/ecto/pt_mobile.ex:61 #, elixir-autogen, elixir-format msgid "invalid PT phone number" msgstr "" + +#: lib/bokken/events/enrollment.ex:39 +#, elixir-autogen, elixir-format +msgid "Guardian cannot submit an accepted enrollment" +msgstr "" + +#: lib/bokken/events/event.ex:60 +#, elixir-autogen, elixir-format +msgid "must be greater than enrollments_open" +msgstr "" + +#: lib/bokken/events/event.ex:56 +#, elixir-autogen, elixir-format +msgid "must be greater than start_time" +msgstr "" + +#: lib/bokken/events/event.ex:62 +#, elixir-autogen, elixir-format +msgid "must be smaller than start_time" +msgstr "" diff --git a/priv/gettext/pt/LC_MESSAGES/default.po b/priv/gettext/pt/LC_MESSAGES/default.po index 28af117c..2fdcaf1e 100644 --- a/priv/gettext/pt/LC_MESSAGES/default.po +++ b/priv/gettext/pt/LC_MESSAGES/default.po @@ -11,7 +11,27 @@ msgstr "" "Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: lib/bokken/ecto/pt_mobile.ex:60 +#: lib/bokken/ecto/pt_mobile.ex:61 #, elixir-autogen, elixir-format msgid "invalid PT phone number" msgstr "número de telemóvel PT inválido" + +#: lib/bokken/events/enrollment.ex:39 +#, elixir-autogen, elixir-format +msgid "Guardian cannot submit an accepted enrollment" +msgstr "" + +#: lib/bokken/events/event.ex:60 +#, elixir-autogen, elixir-format +msgid "must be greater than enrollments_open" +msgstr "" + +#: lib/bokken/events/event.ex:56 +#, elixir-autogen, elixir-format +msgid "must be greater than start_time" +msgstr "" + +#: lib/bokken/events/event.ex:62 +#, elixir-autogen, elixir-format +msgid "must be smaller than start_time" +msgstr "" diff --git a/test/bokken/events_test.exs b/test/bokken/events_test.exs index 9be0523a..265c99f1 100644 --- a/test/bokken/events_test.exs +++ b/test/bokken/events_test.exs @@ -52,20 +52,31 @@ defmodule Bokken.EventsTest do assert elem(Events.create_enrollment(event, valid_attrs), 0) == :error end - # test "guardian_create_enrollment/4 creates a new enrollment" do - # guardian = insert(:guardian) - # ninja = insert(:ninja) - # valid_attrs = insert(:enrollment, %{ninja_id: ninja.id}) - # event = Events.get_event!(valid_attrs.event_id) + test "guardian_create_enrollment/4 creates a new enrollment" do + event = insert(:event) + ninja = insert(:ninja) + guardian_id = ninja.guardian_id + + valid_attrs = + params_for(:enrollment, %{event_id: event.id, ninja_id: ninja.id, accepted: false}) - # assert elem(Events.guardian_create_enrollment(event, guardian.id, ninja.id, valid_attrs), 0) == :ok - # end + assert elem(Events.guardian_create_enrollment(event, guardian_id, ninja.id, valid_attrs), 0) == + :ok + end test "guardian_create_enrollment/4 returns error if it's not the ninja guaridan" do valid_attrs = insert(:enrollment) event = Events.get_event!(valid_attrs.event_id) - assert elem(Events.guardian_create_enrollment(event, Ecto.UUID.generate(), valid_attrs.ninja_id, valid_attrs), 0) == :error + assert elem( + Events.guardian_create_enrollment( + event, + Ecto.UUID.generate(), + valid_attrs.ninja_id, + valid_attrs + ), + 0 + ) == :error end test "update_enrollment/2 updates existing enrollment" do diff --git a/test/bokken_web/controllers/enrollment_controller_test.exs b/test/bokken_web/controllers/enrollment_controller_test.exs index 2f509b91..358f1159 100644 --- a/test/bokken_web/controllers/enrollment_controller_test.exs +++ b/test/bokken_web/controllers/enrollment_controller_test.exs @@ -25,7 +25,6 @@ defmodule BokkenWeb.EnrollmentControllerTest do conn = post(conn, Routes.event_enrollment_path(conn, :create, event.id), enrollment_attrs) assert %{"id" => enrollment_id} = json_response(conn, 201)["data"] - conn = get(conn, Routes.event_enrollment_path(conn, :show, event.id, enrollment_id)) assert json_response(conn, 200) end