diff --git a/lib/code_corps/helpers/query.ex b/lib/code_corps/helpers/query.ex index 2c387e054..eb090171a 100644 --- a/lib/code_corps/helpers/query.ex +++ b/lib/code_corps/helpers/query.ex @@ -65,6 +65,21 @@ defmodule CodeCorps.Helpers.Query do # end comment queries + # user queries + + def user_filter(query, %{"query" => query_string}) do + query + |> where( + [object], + ilike(object.first_name, ^"%#{query_string}%") or + ilike(object.last_name, ^"%#{query_string}%") or + ilike(object.username, ^"%#{query_string}%") + ) + end + def user_filter(query, _), do: query + + # end user queries + # sorting def sort_by_newest_first(query), do: query |> order_by([desc: :inserted_at]) diff --git a/test/controllers/user_controller_test.exs b/test/controllers/user_controller_test.exs index 3f66b49c6..da7f70e6e 100644 --- a/test/controllers/user_controller_test.exs +++ b/test/controllers/user_controller_test.exs @@ -44,6 +44,32 @@ defmodule CodeCorps.UserControllerTest do |> json_response(200) |> assert_ids_from_response([user_1.id, user_2.id]) end + + test "returns search results on index", %{conn: conn} do + user_1 = insert(:user, first_name: "Joe") + user_2 = insert(:user, username: "joecoder") + user_3 = insert(:user, last_name: "Jacko") + insert(:user, first_name: "Max") + + params = %{"query" => "j"} + path = conn |> user_path(:index, params) + + conn + |> get(path) + |> json_response(200) + |> assert_ids_from_response([user_1.id, user_2.id, user_3.id]) + end + + test "limit filter limits results on index", %{conn: conn} do + insert_list(6, :user) + + params = %{"limit" => 5} + path = conn |> user_path(:index, params) + json = conn |> get(path) |> json_response(200) + + returned_users_length = json["data"] |> length + assert returned_users_length == 5 + end end describe "show" do diff --git a/web/controllers/user_controller.ex b/web/controllers/user_controller.ex index d8c127660..5fc11b968 100644 --- a/web/controllers/user_controller.ex +++ b/web/controllers/user_controller.ex @@ -2,7 +2,7 @@ defmodule CodeCorps.UserController do use CodeCorps.Web, :controller use JaResource - import CodeCorps.Helpers.Query, only: [id_filter: 2] + import CodeCorps.Helpers.Query, only: [id_filter: 2, user_filter: 2, limit_filter: 2] alias CodeCorps.User alias CodeCorps.Services.UserService @@ -15,6 +15,12 @@ defmodule CodeCorps.UserController do query |> id_filter(id_list) end + def handle_index(_conn, params) do + User + |> user_filter(params) + |> limit_filter(params) + end + def handle_create(_conn, attributes) do %User{} |> User.registration_changeset(attributes) end