Skip to content

Commit d8433af

Browse files
authored
Merge pull request #1116 from code-corps/fix-issues-with-policies
Fixes create policies and refactors tests to be more explicit
2 parents bd8cd38 + e8e716c commit d8433af

File tree

5 files changed

+87
-23
lines changed

5 files changed

+87
-23
lines changed

lib/code_corps/policy/policy.ex

Lines changed: 59 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,71 +23,127 @@ defmodule CodeCorps.Policy do
2323
end
2424

2525
@spec can?(User.t, atom, struct, map) :: boolean
26+
27+
# Category
2628
defp can?(%User{} = current_user, :create, %Category{}, %{}), do: Policy.Category.create?(current_user)
2729
defp can?(%User{} = current_user, :update, %Category{}, %{}), do: Policy.Category.update?(current_user)
30+
31+
# Comment
2832
defp can?(%User{} = current_user, :create, %Comment{}, %{} = params), do: Policy.Comment.create?(current_user, params)
2933
defp can?(%User{} = current_user, :update, %Comment{} = comment, %{}), do: Policy.Comment.update?(current_user, comment)
34+
35+
# DonationGoal
3036
defp can?(%User{} = current_user, :create, %DonationGoal{}, %{} = params), do: Policy.DonationGoal.create?(current_user, params)
3137
defp can?(%User{} = current_user, :update, %DonationGoal{} = donation_goal, %{}), do: Policy.DonationGoal.update?(current_user, donation_goal)
3238
defp can?(%User{} = current_user, :delete, %DonationGoal{} = donation_goal, %{}), do: Policy.DonationGoal.delete?(current_user, donation_goal)
39+
40+
# GithubAppInstallation
3341
defp can?(%User{} = current_user, :create, %GithubAppInstallation{}, %{} = params), do: Policy.GithubAppInstallation.create?(current_user, params)
42+
43+
# Organization
3444
defp can?(%User{} = current_user, :create, %Organization{}, %{}), do: Policy.Organization.create?(current_user)
3545
defp can?(%User{} = current_user, :update, %Organization{} = organization, %{}), do: Policy.Organization.update?(current_user, organization)
46+
47+
# OrganizationGithubAppInstallation
48+
defp can?(%User{} = current_user, :create, %OrganizationGithubAppInstallation{}, %{} = params), do: Policy.OrganizationGithubAppInstallation.create?(current_user, params)
3649
defp can?(%User{} = current_user, :delete, %OrganizationGithubAppInstallation{} = organization_github_app_installation, %{}),
3750
do: Policy.OrganizationGithubAppInstallation.delete?(current_user, organization_github_app_installation)
38-
defp can?(%User{} = current_user, :create, %OrganizationGithubAppInstallation{}, %{} = params), do: Policy.OrganizationGithubAppInstallation.create?(current_user, params)
51+
52+
# OrganizationInvite
3953
defp can?(%User{} = current_user, :create, %OrganizationInvite{}, %{}), do: Policy.OrganizationInvite.create?(current_user)
4054
defp can?(%User{} = current_user, :update, %OrganizationInvite{}, %{}), do: Policy.OrganizationInvite.update?(current_user)
55+
56+
# Preview
4157
defp can?(%User{} = current_user, :create, %Preview{}, %{} = params), do: Policy.Preview.create?(current_user, params)
58+
59+
# Project
4260
defp can?(%User{} = current_user, :create, %Project{}, %{} = params), do: Policy.Project.create?(current_user, params)
4361
defp can?(%User{} = current_user, :update, %Project{} = project, %{}), do: Policy.Project.update?(current_user, project)
62+
63+
# ProjectCategory
4464
defp can?(%User{} = current_user, :create, %ProjectCategory{}, %{} = params), do: Policy.ProjectCategory.create?(current_user, params)
4565
defp can?(%User{} = current_user, :delete, %ProjectCategory{} = project_category, %{}), do: Policy.ProjectCategory.delete?(current_user, project_category)
66+
67+
# ProjectGithubRepo
4668
defp can?(%User{} = current_user, :create, %ProjectGithubRepo{}, %{} = params), do: Policy.ProjectGithubRepo.create?(current_user, params)
4769
defp can?(%User{} = current_user, :delete, %ProjectGithubRepo{} = project_github_repo, %{}),
4870
do: Policy.ProjectGithubRepo.delete?(current_user, project_github_repo)
71+
72+
# ProjectSkill
4973
defp can?(%User{} = current_user, :create, %ProjectSkill{}, %{} = params), do: Policy.ProjectSkill.create?(current_user, params)
5074
defp can?(%User{} = current_user, :delete, %ProjectSkill{} = project_skill, %{}), do: Policy.ProjectSkill.delete?(current_user, project_skill)
75+
76+
# ProjectUser
5177
defp can?(%User{} = current_user, :create, %ProjectUser{}, %{} = params), do: Policy.ProjectUser.create?(current_user, params)
5278
defp can?(%User{} = current_user, :update, %ProjectUser{} = project_user, %{} = params), do: Policy.ProjectUser.update?(current_user, project_user, params)
5379
defp can?(%User{} = current_user, :delete, %ProjectUser{} = project_user, %{}), do: Policy.ProjectUser.delete?(current_user, project_user)
80+
81+
# Role
5482
defp can?(%User{} = current_user, :create, %Role{}, %{}), do: Policy.Role.create?(current_user)
83+
84+
# RoleSkill
5585
defp can?(%User{} = current_user, :create, %RoleSkill{}, %{}), do: Policy.RoleSkill.create?(current_user)
5686
defp can?(%User{} = current_user, :delete, %RoleSkill{}, %{}), do: Policy.RoleSkill.delete?(current_user)
87+
88+
# Skill
5789
defp can?(%User{} = current_user, :create, %Skill{}, %{}), do: Policy.Skill.create?(current_user)
90+
91+
# StripeConnectAccount
5892
defp can?(%User{} = current_user, :show, %StripeConnectAccount{} = stripe_connect_account, %{}),
5993
do: Policy.StripeConnectAccount.show?(current_user, stripe_connect_account)
6094
defp can?(%User{} = current_user, :create, %StripeConnectAccount{}, %{} = params),
6195
do: Policy.StripeConnectAccount.create?(current_user, params)
6296
defp can?(%User{} = current_user, :update, %StripeConnectAccount{} = stripe_connect_account, %{}),
6397
do: Policy.StripeConnectAccount.update?(current_user, stripe_connect_account)
98+
99+
# StripeConnectPlan
64100
defp can?(%User{} = current_user, :show, %StripeConnectPlan{} = stripe_connect_plan, %{}),
65101
do: Policy.StripeConnectPlan.show?(current_user, stripe_connect_plan)
66102
defp can?(%User{} = current_user, :create, %StripeConnectPlan{}, %{} = params),
67103
do: Policy.StripeConnectPlan.create?(current_user, params)
104+
105+
# StripeConnectSubscription
68106
defp can?(%User{} = current_user, :show, %StripeConnectSubscription{} = stripe_connect_subscription, %{}),
69107
do: Policy.StripeConnectSubscription.show?(current_user, stripe_connect_subscription)
70108
defp can?(%User{} = current_user, :create, %StripeConnectSubscription{}, %{} = params),
71109
do: Policy.StripeConnectSubscription.create?(current_user, params)
110+
111+
# StripePlatformCard
72112
defp can?(%User{} = current_user, :show, %StripePlatformCard{} = stripe_platform_card, %{}),
73113
do: Policy.StripePlatformCard.show?(current_user, stripe_platform_card)
74114
defp can?(%User{} = current_user, :create, %StripePlatformCard{}, %{} = params),
75115
do: Policy.StripePlatformCard.create?(current_user, params)
116+
117+
# StripePlatformCustomer
76118
defp can?(%User{} = current_user, :create, %StripePlatformCustomer{}, %{} = params),
77119
do: Policy.StripePlatformCustomer.create?(current_user, params)
78120
defp can?(%User{} = current_user, :show, %StripePlatformCustomer{} = stripe_platform_customer, %{}),
79121
do: Policy.StripePlatformCustomer.show?(current_user, stripe_platform_customer)
122+
123+
# Task
80124
defp can?(%User{} = current_user, :create, %Task{}, %{} = params), do: Policy.Task.create?(current_user, params)
81125
defp can?(%User{} = current_user, :update, %Task{} = task, %{}), do: Policy.Task.update?(current_user, task)
126+
127+
# TaskSkill
82128
defp can?(%User{} = current_user, :create, %TaskSkill{}, %{} = params), do: Policy.TaskSkill.create?(current_user, params)
83129
defp can?(%User{} = current_user, :delete, %TaskSkill{} = task_skill, %{}), do: Policy.TaskSkill.delete?(current_user, task_skill)
130+
131+
# User
84132
defp can?(%User{} = current_user, :update, %User{} = user, %{}), do: Policy.User.update?(current_user, user)
85-
defp can?(%User{} = current_user, :create, %UserCategory{} = user_category, %{}), do: Policy.UserCategory.create?(current_user, user_category)
133+
134+
# UserCategory
135+
defp can?(%User{} = current_user, :create, %UserCategory{}, %{} = params), do: Policy.UserCategory.create?(current_user, params)
86136
defp can?(%User{} = current_user, :delete, %UserCategory{} = user_category, %{}), do: Policy.UserCategory.delete?(current_user, user_category)
87-
defp can?(%User{} = current_user, :create, %UserRole{} = user_role, %{}), do: Policy.UserRole.create?(current_user, user_role)
137+
138+
# UserRole
139+
defp can?(%User{} = current_user, :create, %UserRole{}, %{} = params), do: Policy.UserRole.create?(current_user, params)
88140
defp can?(%User{} = current_user, :delete, %UserRole{} = user_role, %{}), do: Policy.UserRole.delete?(current_user, user_role)
141+
142+
# UserSkill
89143
defp can?(%User{} = current_user, :create, %UserSkill{}, %{} = params), do: Policy.UserSkill.create?(current_user, params)
90144
defp can?(%User{} = current_user, :delete, %UserSkill{} = user_skill, %{}), do: Policy.UserSkill.delete?(current_user, user_skill)
145+
146+
# UserTask
91147
defp can?(%User{} = current_user, :create, %UserTask{}, %{} = params), do: Policy.UserTask.create?(current_user, params)
92148
defp can?(%User{} = current_user, :update, %UserTask{} = user_task, %{}), do: Policy.UserTask.update?(current_user, user_task)
93149
defp can?(%User{} = current_user, :delete, %UserTask{} = user_task, %{}), do: Policy.UserTask.delete?(current_user, user_task)

priv/repo/structure.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
-- PostgreSQL database dump
33
--
44

5-
-- Dumped from database version 10.0
5+
-- Dumped from database version 9.5.9
66
-- Dumped by pg_dump version 10.0
77

88
SET statement_timeout = 0;

test/lib/code_corps_web/controllers/user_category_controller_test.exs

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,10 @@ defmodule CodeCorpsWeb.UserCategoryControllerTest do
3838
end
3939

4040
describe "create" do
41-
@tag authenticated: :admin
41+
@tag :authenticated
4242
test "creates and renders resource when data is valid", %{conn: conn, current_user: current_user} do
43-
user = insert(:user)
4443
category = insert(:category)
45-
attrs = (%{user: user, category: category})
44+
attrs = (%{user: current_user, category: category})
4645
assert conn |> request_create(attrs) |> json_response(201)
4746

4847
user_id = current_user.id
@@ -53,9 +52,11 @@ defmodule CodeCorpsWeb.UserCategoryControllerTest do
5352
assert_received {:track, ^user_id, "Added User Category", ^tracking_properties}
5453
end
5554

56-
@tag authenticated: :admin
57-
test "renders 422 when data is invalid", %{conn: conn} do
58-
assert conn |> request_create |> json_response(422)
55+
@tag :authenticated
56+
test "renders 422 when data is invalid", %{conn: conn, current_user: current_user} do
57+
category = build(:category)
58+
invalid_attrs = %{category: category, user: current_user}
59+
assert conn |> request_create(invalid_attrs) |> json_response(422)
5960
end
6061

6162
test "renders 401 when unauthenticated", %{conn: conn} do
@@ -64,7 +65,11 @@ defmodule CodeCorpsWeb.UserCategoryControllerTest do
6465

6566
@tag :authenticated
6667
test "renders 403 when not authorized", %{conn: conn} do
67-
assert conn |> request_create |> json_response(403)
68+
category = insert(:category)
69+
user = insert(:user)
70+
attrs = %{category: category, user: user}
71+
72+
assert conn |> request_create(attrs) |> json_response(403)
6873
end
6974
end
7075

test/lib/code_corps_web/controllers/user_role_controller_test.exs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,10 @@ defmodule CodeCorpsWeb.UserRoleControllerTest do
3838
end
3939

4040
describe "create" do
41-
@tag authenticated: :admin
41+
@tag :authenticated
4242
test "creates and renders resource when data is valid", %{conn: conn, current_user: current_user} do
43-
user = insert(:user)
4443
role = insert(:role)
45-
attrs = (%{user: user, role: role})
44+
attrs = (%{user: current_user, role: role})
4645
assert conn |> request_create(attrs) |> json_response(201)
4746

4847
user_id = current_user.id
@@ -53,19 +52,24 @@ defmodule CodeCorpsWeb.UserRoleControllerTest do
5352
assert_received {:track, ^user_id, "Added User Role", ^tracking_properties}
5453
end
5554

56-
@tag authenticated: :admin
57-
test "does not create resource and renders 422 when data is invalid", %{conn: conn} do
58-
invalid_attrs = %{}
55+
@tag :authenticated
56+
test "renders 422 when data is invalid", %{conn: conn, current_user: current_user} do
57+
role = build(:role)
58+
invalid_attrs = %{role: role, user: current_user}
5959
assert conn |> request_create(invalid_attrs) |> json_response(422)
6060
end
6161

62-
test "does not create resource and renders 401 when unauthenticated", %{conn: conn} do
62+
test "renders 401 when unauthenticated", %{conn: conn} do
6363
assert conn |> request_create |> json_response(401)
6464
end
6565

6666
@tag :authenticated
67-
test "does not create resource and renders 403 when not authorized", %{conn: conn} do
68-
assert conn |> request_create |> json_response(403)
67+
test "renders 403 when not authorized", %{conn: conn} do
68+
role = insert(:role)
69+
user = insert(:user)
70+
attrs = %{role: role, user: user}
71+
72+
assert conn |> request_create(attrs) |> json_response(403)
6973
end
7074
end
7175

test/lib/code_corps_web/controllers/user_skill_controller_test.exs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,11 @@ defmodule CodeCorpsWeb.UserSkillControllerTest do
3939
end
4040

4141
describe "create" do
42-
@tag authenticated: :admin
42+
@tag :authenticated
4343
test "creates and renders resource when data is valid", %{conn: conn, current_user: current_user} do
44-
user = insert(:user)
4544
skill = insert(:skill, title: "test-skill")
4645

47-
attrs = %{user: user, skill: skill}
46+
attrs = %{user: current_user, skill: skill}
4847
assert conn |> request_create(attrs) |> json_response(201)
4948

5049
user_id = current_user.id

0 commit comments

Comments
 (0)