Skip to content

Commit 526fa3a

Browse files
begedinjoshsmith
authored andcommitted
Add ProjectUserView and associated tests
1 parent 2fd4c5c commit 526fa3a

File tree

9 files changed

+77
-3
lines changed

9 files changed

+77
-3
lines changed

test/support/factories.ex

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,14 @@ defmodule CodeCorps.Factories do
8282
}
8383
end
8484

85+
def project_user_factory do
86+
%CodeCorps.ProjectUser{
87+
project: build(:project),
88+
user: build(:user),
89+
role: "contributor"
90+
}
91+
end
92+
8593
def project_category_factory do
8694
%CodeCorps.ProjectCategory{
8795
project: build(:project),
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
defmodule CodeCorps.ProjectUserViewTest do
2+
use CodeCorps.ViewCase
3+
4+
test "renders all attributes and relationships properly" do
5+
project = insert(:project)
6+
user = insert(:user)
7+
project_user = insert(:project_user, project: project, user: user)
8+
9+
rendered_json = render(CodeCorps.ProjectUserView, "show.json-api", data: project_user)
10+
11+
expected_json = %{
12+
"data" => %{
13+
"id" => project_user.id |> Integer.to_string,
14+
"type" => "project-user",
15+
"attributes" => %{
16+
"inserted-at" => project_user.inserted_at,
17+
"role" => project_user.role,
18+
"updated-at" => project_user.updated_at
19+
},
20+
"relationships" => %{
21+
"project" => %{
22+
"data" => %{"id" => project_user.project_id |> Integer.to_string, "type" => "project"}
23+
},
24+
"user" => %{
25+
"data" => %{"id" => project_user.user_id |> Integer.to_string, "type" => "user"}
26+
}
27+
}
28+
},
29+
"jsonapi" => %{
30+
"version" => "1.0"
31+
}
32+
}
33+
34+
assert rendered_json == expected_json
35+
end
36+
end

test/views/project_view_test.exs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ defmodule CodeCorps.ProjectViewTest do
99
donation_goal = insert(:donation_goal, project: project)
1010
project_category = insert(:project_category, project: project)
1111
project_skill = insert(:project_skill, project: project)
12+
project_user = insert(:project_user, project: project)
1213
stripe_connect_plan = insert(:stripe_connect_plan, project: project)
1314
task_list = insert(:task_list, project: project)
1415
task = insert(:task, project: project, task_list: task_list)
@@ -70,6 +71,11 @@ defmodule CodeCorps.ProjectViewTest do
7071
}
7172
]
7273
},
74+
"project-users" => %{
75+
"data" => [
76+
%{"id" => project_user.id |> Integer.to_string, "type" => "project-user"}
77+
]
78+
},
7379
"stripe-connect-plan" => %{
7480
"data" => %{
7581
"id" => stripe_connect_plan.id |> Integer.to_string,

test/views/user_view_test.exs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ defmodule CodeCorps.UserViewTest do
1414
user_category = insert(:user_category, user: user)
1515
user_role = insert(:user_role, user: user)
1616
user_skill = insert(:user_skill, user: user)
17+
project_user = insert(:project_user, user: user)
1718

1819
host = Application.get_env(:code_corps, :asset_host)
1920

@@ -46,6 +47,11 @@ defmodule CodeCorps.UserViewTest do
4647
%{"id" => organization_membership.id |> Integer.to_string, "type" => "organization-membership"}
4748
]
4849
},
50+
"project-users" => %{
51+
"data" => [
52+
%{"id" => project_user.id |> Integer.to_string, "type" => "project-user"}
53+
]
54+
},
4955
"slugged-route" => %{
5056
"data" => %{"id" => slugged_route.id |> Integer.to_string, "type" => "slugged-route"}
5157
},

web/models/project.ex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ defmodule CodeCorps.Project do
3333
has_many :donation_goals, CodeCorps.DonationGoal
3434
has_many :project_categories, CodeCorps.ProjectCategory
3535
has_many :project_skills, CodeCorps.ProjectSkill
36+
has_many :project_users, CodeCorps.ProjectUser
3637
has_many :task_lists, CodeCorps.TaskList
3738
has_many :tasks, CodeCorps.Task
3839

web/models/user.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ defmodule CodeCorps.User do
3636

3737
has_one :slugged_route, SluggedRoute
3838

39+
has_many :project_users, CodeCorps.ProjectUser
40+
3941
has_many :stripe_connect_customers, CodeCorps.StripeConnectCustomer
4042
has_many :stripe_connect_subscriptions, CodeCorps.StripeConnectSubscription
4143

web/views/project_user_view.ex

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
defmodule CodeCorps.ProjectUserView do
2+
use CodeCorps.PreloadHelpers, default_preloads: [:project, :user]
3+
use CodeCorps.Web, :view
4+
use JaSerializer.PhoenixView
5+
6+
attributes [:role, :inserted_at, :updated_at]
7+
8+
has_one :project, serializer: CodeCorps.ProjectView
9+
has_one :user, serializer: CodeCorps.UserView
10+
end

web/views/project_view.ex

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ defmodule CodeCorps.ProjectView do
55
use CodeCorps.PreloadHelpers,
66
default_preloads: [
77
:donation_goals, [organization: :stripe_connect_account],
8-
:owner, :project_categories, :project_skills, :stripe_connect_plan, :task_lists, :tasks
8+
:owner, :project_categories, :project_skills, :project_users,
9+
:stripe_connect_plan, :task_lists, :tasks
910
]
1011
use CodeCorps.Web, :view
1112
use JaSerializer.PhoenixView
@@ -23,6 +24,7 @@ defmodule CodeCorps.ProjectView do
2324
has_many :donation_goals, serializer: CodeCorps.DonationGoalView, identifiers: :always
2425
has_many :project_categories, serializer: CodeCorps.ProjectCategoryView, identifiers: :always
2526
has_many :project_skills, serializer: CodeCorps.ProjectSkillView, identifiers: :always
27+
has_many :project_users, serializer: CodeCorps.ProjectUserView, identifiers: :always
2628
has_many :task_lists, serializer: CodeCorps.TaskListView, identifiers: :always
2729
has_many :tasks, serializer: CodeCorps.TaskView, identifiers: :always
2830

web/views/user_view.ex

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,24 @@ defmodule CodeCorps.UserView do
33

44
use CodeCorps.PreloadHelpers,
55
default_preloads: [
6-
:slugged_route, :stripe_connect_subscriptions, :stripe_platform_card, :stripe_platform_customer,
6+
:project_users, :slugged_route, :stripe_connect_subscriptions,
7+
:stripe_platform_card, :stripe_platform_customer,
78
:organization_memberships, :user_categories, :user_roles, :user_skills
89
]
910
use CodeCorps.Web, :view
1011
use JaSerializer.PhoenixView
1112

1213
attributes [
13-
:biography, :cloudinary_public_id, :email, :first_name, :last_name, :name, :photo_large_url, :photo_thumb_url, :state, :state_transition,
14+
:biography, :cloudinary_public_id, :email, :first_name, :last_name, :name,
15+
:photo_large_url, :photo_thumb_url, :state, :state_transition,
1416
:twitter, :username, :website, :inserted_at, :updated_at
1517
]
1618

1719
has_one :slugged_route, serializer: CodeCorps.SluggedRouteView
1820
has_one :stripe_platform_card, serializer: CodeCorps.StripePlatformCardView
1921
has_one :stripe_platform_customer, serializer: CodeCorps.StripePlatformCustomerView
2022

23+
has_many :project_users, serializer: CodeCorps.ProjectUserView, identifiers: :always
2124
has_many :stripe_connect_subscriptions, serializer: CodeCorps.StripeConnectSubscriptionView, identifiers: :always
2225
has_many :organization_memberships, serializer: CodeCorps.OrganizationMembershipView, identifiers: :always
2326
has_many :user_categories, serializer: CodeCorps.UserCategoryView, identifiers: :always

0 commit comments

Comments
 (0)