Skip to content

Commit

Permalink
Aplly suggested changes
Browse files Browse the repository at this point in the history
  • Loading branch information
danielsp45 committed Jul 2, 2023
1 parent 860c9ac commit d422afc
Show file tree
Hide file tree
Showing 10 changed files with 109 additions and 51 deletions.
22 changes: 10 additions & 12 deletions lib/bokken/events.ex
Original file line number Diff line number Diff line change
Expand Up @@ -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}
Expand All @@ -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.
Expand All @@ -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})
Expand All @@ -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
Expand Down Expand Up @@ -724,7 +721,7 @@ defmodule Bokken.Events do
end

@doc """
Creates an enrollment as a guardian.
Deletes an enrollment as a guardian.
## Examples
Expand All @@ -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
Expand Down
6 changes: 5 additions & 1 deletion lib/bokken/events/enrollment.ex
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ defmodule Bokken.Events.Enrollment do
"""
use Bokken.Schema

import BokkenWeb.Gettext

alias Bokken.Accounts.Ninja
alias Bokken.Events.Event

Expand Down Expand Up @@ -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
Expand Down
10 changes: 9 additions & 1 deletion lib/bokken/guards.ex
Original file line number Diff line number Diff line change
Expand Up @@ -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
7 changes: 3 additions & 4 deletions lib/bokken_web/controllers/enrollment_controller.ex
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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")
Expand Down
21 changes: 0 additions & 21 deletions lib/bokken_web/controllers/fallback_controller.ex
Original file line number Diff line number Diff line change
Expand Up @@ -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
22 changes: 21 additions & 1 deletion priv/gettext/default.pot
Original file line number Diff line number Diff line change
Expand Up @@ -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 ""
22 changes: 21 additions & 1 deletion priv/gettext/en/LC_MESSAGES/default.po
Original file line number Diff line number Diff line change
Expand Up @@ -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 ""
22 changes: 21 additions & 1 deletion priv/gettext/pt/LC_MESSAGES/default.po
Original file line number Diff line number Diff line change
Expand Up @@ -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 ""
27 changes: 19 additions & 8 deletions test/bokken/events_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 0 additions & 1 deletion test/bokken_web/controllers/enrollment_controller_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit d422afc

Please sign in to comment.