Skip to content

Commit 455b8f2

Browse files
landongrindheimbegedin
authored andcommitted
Remove JaReource from ProjectCategoryController (#1062)
1 parent 800f4ec commit 455b8f2

File tree

4 files changed

+48
-32
lines changed

4 files changed

+48
-32
lines changed

lib/code_corps/policy/policy.ex

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ defmodule CodeCorps.Policy do
4949
%OrganizationGithubAppInstallation{} = organization_github_app_installation, %{}),
5050
do: Policy.OrganizationGithubAppInstallation.delete?(user, organization_github_app_installation)
5151
defp can?(%User{} = user, :create, %OrganizationGithubAppInstallation{}, %{} = params), do: Policy.OrganizationGithubAppInstallation.create?(user, params)
52+
defp can?(%User{} = current_user, :create, %ProjectCategory{}, %{} = params), do: Policy.ProjectCategory.create?(current_user, params)
53+
defp can?(%User{} = current_user, :delete, %ProjectCategory{} = project_category, %{}), do: Policy.ProjectCategory.delete?(current_user, project_category)
5254
defp can?(%User{} = current_user, :create, %ProjectGithubRepo{}, %{} = params), do: Policy.ProjectGithubRepo.create?(current_user, params)
5355
defp can?(%User{} = current_user, :delete, %ProjectGithubRepo{} = project_github_repo, %{}),
5456
do: Policy.ProjectGithubRepo.delete?(current_user, project_github_repo)
@@ -105,9 +107,6 @@ defmodule CodeCorps.Policy do
105107

106108
def can?(%User{} = user, :create, %Changeset{data: %Preview{}} = changeset), do: Policy.Preview.create?(user, changeset)
107109

108-
def can?(%User{} = user, :create, %Changeset{data: %ProjectCategory{}} = changeset), do: Policy.ProjectCategory.create?(user, changeset)
109-
def can?(%User{} = user, :delete, %ProjectCategory{} = project_category), do: Policy.ProjectCategory.delete?(user, project_category)
110-
111110
def can?(%User{} = user, :create, Role), do: Policy.Role.create?(user)
112111
end
113112
end

lib/code_corps/policy/project_category.ex

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@ defmodule CodeCorps.Policy.ProjectCategory do
22
import CodeCorps.Policy.Helpers, only: [get_project: 1, administered_by?: 2]
33

44
alias CodeCorps.{ProjectCategory, User}
5-
alias Ecto.Changeset
65

7-
def create?(%User{} = user, %Changeset{} = changeset) do
8-
changeset |> get_project |> administered_by?(user)
6+
@spec create?(User.t, map) :: boolean
7+
def create?(%User{} = user, %{} = params) do
8+
params |> get_project |> administered_by?(user)
99
end
1010

11+
@spec delete?(User.t, ProjectCategory.t) :: boolean
1112
def delete?(%User{} = user, %ProjectCategory{} = project_category) do
1213
project_category |> get_project |> administered_by?(user)
1314
end
Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,43 @@
11
defmodule CodeCorpsWeb.ProjectCategoryController do
22
use CodeCorpsWeb, :controller
3-
use JaResource
43

5-
alias CodeCorps.ProjectCategory
4+
alias CodeCorps.{ProjectCategory, User, Helpers.Query}
65

7-
import CodeCorps.Helpers.Query, only: [id_filter: 2]
6+
action_fallback CodeCorpsWeb.FallbackController
7+
plug CodeCorpsWeb.Plug.DataToAttributes
8+
plug CodeCorpsWeb.Plug.IdsToIntegers
89

9-
plug :load_resource, model: ProjectCategory, only: [:show], preload: [:project, :category]
10-
plug :load_and_authorize_changeset, model: ProjectCategory, only: [:create]
11-
plug :load_and_authorize_resource, model: ProjectCategory, only: [:delete]
12-
plug JaResource
10+
@spec index(Conn.t, map) :: Conn.t
11+
def index(%Conn{} = conn, %{} = params) do
12+
with project_categories <- ProjectCategory |> Query.id_filter(params) |> Repo.all do
13+
conn |> render("index.json-api", data: project_categories)
14+
end
15+
end
1316

14-
@spec model :: module
15-
def model, do: CodeCorps.ProjectCategory
17+
@spec show(Conn.t, map) :: Conn.t
18+
def show(%Conn{} = conn, %{"id" => id}) do
19+
with %ProjectCategory{} = project_category <- ProjectCategory |> Repo.get(id) do
20+
conn |> render("show.json-api", data: project_category)
21+
end
22+
end
1623

17-
def filter(_conn, query, "id", id_list) do
18-
query |> id_filter(id_list)
24+
@spec create(Plug.Conn.t, map) :: Conn.t
25+
def create(%Conn{} = conn, %{} = params) do
26+
with %User{} = current_user <- conn |> Guardian.Plug.current_resource,
27+
{:ok, :authorized} <- current_user |> Policy.authorize(:create, %ProjectCategory{}, params),
28+
{:ok, %ProjectCategory{} = project_category} <- %ProjectCategory{} |> ProjectCategory.create_changeset(params) |> Repo.insert do
29+
conn |> put_status(:created) |> render("show.json-api", data: project_category)
30+
end
1931
end
2032

21-
def handle_create(_conn, attributes) do
22-
%ProjectCategory{} |> ProjectCategory.create_changeset(attributes)
33+
@spec delete(Conn.t, map) :: Conn.t
34+
def delete(%Conn{} = conn, %{"id" => id} = _params) do
35+
with %ProjectCategory{} = project_category <- ProjectCategory |> Repo.get(id),
36+
%User{} = current_user <- conn |> Guardian.Plug.current_resource,
37+
{:ok, :authorized} <- current_user |> Policy.authorize(:delete, project_category),
38+
{:ok, %ProjectCategory{} = _project_category} <- project_category |> Repo.delete
39+
do
40+
conn |> Conn.assign(:project_category, project_category) |> send_resp(:no_content, "")
41+
end
2342
end
2443
end

test/lib/code_corps/policy/project_category_test.exs

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,45 +2,42 @@ defmodule CodeCorps.Policy.ProjectCategoryTest do
22
use CodeCorps.PolicyCase
33

44
import CodeCorps.Policy.ProjectCategory, only: [create?: 2, delete?: 2]
5-
import CodeCorps.ProjectCategory, only: [create_changeset: 2]
6-
7-
alias CodeCorps.ProjectCategory
85

96
describe "create?" do
107
test "returns false when user is not a project member" do
118
user = insert(:user)
129
project = insert(:project)
1310

14-
changeset = %ProjectCategory{} |> create_changeset(%{project_id: project.id})
15-
refute create?(user, changeset)
11+
params = %{"project_id" => project.id}
12+
refute create?(user, params)
1613
end
1714

1815
test "returns false when user is a pending project member" do
1916
%{project: project, user: user} = insert(:project_user, role: "pending")
2017

21-
changeset = %ProjectCategory{} |> create_changeset(%{project_id: project.id})
22-
refute create?(user, changeset)
18+
params = %{"project_id" => project.id}
19+
refute create?(user, params)
2320
end
2421

2522
test "returns false when user is a project contributor" do
2623
%{project: project, user: user} = insert(:project_user, role: "contributor")
2724

28-
changeset = %ProjectCategory{} |> create_changeset(%{project_id: project.id})
29-
refute create?(user, changeset)
25+
params = %{"project_id" => project.id}
26+
refute create?(user, params)
3027
end
3128

3229
test "returns true when user is a project admin" do
3330
%{project: project, user: user} = insert(:project_user, role: "admin")
3431

35-
changeset = %ProjectCategory{} |> create_changeset(%{project_id: project.id})
36-
assert create?(user, changeset)
32+
params = %{"project_id" => project.id}
33+
assert create?(user, params)
3734
end
3835

3936
test "returns true when user is project owner" do
4037
%{project: project, user: user} = insert(:project_user, role: "owner")
4138

42-
changeset = %ProjectCategory{} |> create_changeset(%{project_id: project.id})
43-
assert create?(user, changeset)
39+
params = %{"project_id" => project.id}
40+
assert create?(user, params)
4441
end
4542
end
4643

0 commit comments

Comments
 (0)