File tree Expand file tree Collapse file tree 5 files changed +65
-1
lines changed
code_corps_web/controllers
code_corps_web/controllers Expand file tree Collapse file tree 5 files changed +65
-1
lines changed Original file line number Diff line number Diff line change 1+ defmodule CodeCorps.Accounts.Users do
2+ alias CodeCorps.ProjectUser
3+
4+ import Ecto.Query
5+
6+ def project_filter ( query , % { "project_id" => project_id } ) do
7+ from user in query ,
8+ join: pu in ProjectUser , on: pu . user_id == user . id and pu . project_id == ^ project_id
9+ end
10+ def project_filter ( query , _ ) , do: query
11+ end
Original file line number Diff line number Diff line change @@ -7,7 +7,8 @@ defmodule CodeCorpsWeb.UserController do
77 GitHub ,
88 Helpers.Query ,
99 Services.UserService ,
10- User
10+ User ,
11+ Accounts
1112 }
1213
1314 action_fallback CodeCorpsWeb.FallbackController
@@ -20,6 +21,7 @@ defmodule CodeCorpsWeb.UserController do
2021 |> Query . id_filter ( params )
2122 |> Query . limit_filter ( params )
2223 |> Query . user_filter ( params )
24+ |> Accounts.Users . project_filter ( params )
2325 |> Repo . all ( )
2426 |> preload ( )
2527
Original file line number Diff line number Diff line change 1+ defmodule CodeCorps.Accounts.UsersTest do
2+ @ moduledoc false
3+
4+ use CodeCorps.DbAccessCase
5+ import CodeCorps.TestHelpers , only: [ assert_ids_from_query: 2 ]
6+
7+ alias CodeCorps . { Accounts , User }
8+
9+ describe "project_filter/2" do
10+ test "filters users by project filter" do
11+ user_1 = insert ( :user )
12+ user_2 = insert ( :user )
13+
14+ project = insert ( :project )
15+
16+ insert ( :project_user , user: user_1 , project: project )
17+ insert ( :project_user , user: user_2 , project: project )
18+ insert ( :project_user )
19+
20+ result =
21+ User
22+ |> Accounts.Users . project_filter ( % { "project_id" => project . id } )
23+ |> Repo . all ( )
24+
25+ assert_ids_from_query ( result , [ user_1 . id , user_2 . id ] )
26+ end
27+ end
28+ end
Original file line number Diff line number Diff line change @@ -62,6 +62,25 @@ defmodule CodeCorpsWeb.UserControllerTest do
6262 |> assert_ids_from_response ( [ user_1 . id , user_2 . id , user_3 . id ] )
6363 end
6464
65+ test "returns search result on project filter" , % { conn: conn } do
66+ user_1 = insert ( :user )
67+ user_2 = insert ( :user )
68+
69+ project = insert ( :project )
70+
71+ insert ( :project_user , user: user_1 , project: project )
72+ insert ( :project_user , user: user_2 , project: project )
73+ insert ( :project_user )
74+
75+ params = % { "project_id" => project . id }
76+ path = conn |> user_path ( :index , params )
77+
78+ conn
79+ |> get ( path )
80+ |> json_response ( 200 )
81+ |> assert_ids_from_response ( [ user_1 . id , user_2 . id ] )
82+ end
83+
6584 test "limit filter limits results on index" , % { conn: conn } do
6685 insert_list ( 6 , :user )
6786
Original file line number Diff line number Diff line change @@ -8,6 +8,10 @@ defmodule CodeCorps.TestHelpers do
88 end
99 end
1010
11+ def assert_ids_from_query ( query , ids ) do
12+ assert query |> Enum . map ( & Map . get ( & 1 , :id ) ) |> Enum . sort == ids |> Enum . sort ( )
13+ end
14+
1115 def assert_id_from_response ( response , id ) do
1216 assert String . to_integer ( response [ "data" ] [ "id" ] ) == id
1317 response
You can’t perform that action at this time.
0 commit comments