Skip to content

Commit 44503a8

Browse files
vishaldeepakbegedin
authored andcommitted
Added filter to Tasks using Archived field (#1029)
1 parent 5a1b812 commit 44503a8

2 files changed

Lines changed: 57 additions & 11 deletions

File tree

lib/code_corps/task/query.ex

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,34 +19,44 @@ defmodule CodeCorps.Task.Query do
1919
@spec list(map) :: list(Project.t)
2020
def list(%{} = params) do
2121
Task
22-
|> do_list(params)
22+
|> apply_archived_status(params)
23+
|> apply_optional_filters(params)
2324
|> order_by([asc: :order])
2425
|> Repo.all
2526
end
2627

27-
@spec do_list(Queryable.t, map) :: Queryable.t
28-
defp do_list(queryable, %{"filter" => %{} = params}) do
29-
queryable |> do_list(params)
28+
@spec apply_optional_filters(Queryable.t, map) :: Queryable.t
29+
defp apply_optional_filters(queryable, %{"filter" => %{} = params}) do
30+
queryable |> apply_optional_filters(params)
3031
end
31-
defp do_list(queryable, %{"project_id" => project_id} = params) do
32+
defp apply_optional_filters(queryable, %{"project_id" => project_id} = params) do
3233
queryable
3334
|> where(project_id: ^project_id)
34-
|> do_list(params |> Map.delete("project_id"))
35+
|> apply_optional_filters(params |> Map.delete("project_id"))
3536
end
36-
defp do_list(queryable, %{"task_list_ids" => task_list_ids} = params) do
37+
defp apply_optional_filters(queryable, %{"task_list_ids" => task_list_ids} = params) do
3738
task_list_ids = task_list_ids |> Helpers.String.coalesce_id_string
3839

3940
queryable
4041
|> where([r], r.task_list_id in ^task_list_ids)
41-
|> do_list(params |> Map.delete("task_list_ids"))
42+
|> apply_optional_filters(params |> Map.delete("task_list_ids"))
4243
end
43-
defp do_list(queryable, %{"status" => status} = params) do
44+
defp apply_optional_filters(queryable, %{"status" => status} = params) do
4445
queryable
4546
|> where(status: ^status)
46-
|> do_list(params |> Map.delete("status"))
47+
|> apply_optional_filters(params |> Map.delete("status"))
4748
end
48-
defp do_list(queryable, %{}), do: queryable
49+
defp apply_optional_filters(queryable, %{}), do: queryable
4950

51+
@spec apply_archived_status(Queryable.t, map) :: Queryable.t
52+
defp apply_archived_status(queryable, %{"archived" => archived}) do
53+
queryable
54+
|> where(archived: ^archived)
55+
end
56+
defp apply_archived_status(queryable, %{}) do
57+
queryable
58+
|> where(archived: false)
59+
end
5060
@doc ~S"""
5161
Returns a `Task` record retrived using a set of parameters.
5262

test/lib/code_corps/task/query_test.exs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,23 @@ defmodule CodeCorps.Task.QueryTest do
8080
list_sorted_ids(%{"status" => "closed"})
8181
end
8282

83+
test "filter by archived" do
84+
tasks = insert_list(3, :task)
85+
task_ids = tasks |> get_sorted_ids()
86+
87+
archived_tasks = insert_list(3, :task, archived: true)
88+
archived_task_ids = archived_tasks |> get_sorted_ids()
89+
90+
assert task_ids ==
91+
list_sorted_ids(%{})
92+
93+
assert task_ids ==
94+
list_sorted_ids(%{"archived" => false})
95+
96+
assert archived_task_ids ==
97+
list_sorted_ids(%{"archived" => true})
98+
end
99+
83100
test "works with multiple filters" do
84101
project_1 = insert(:project)
85102
project_2 = insert(:project)
@@ -97,6 +114,10 @@ defmodule CodeCorps.Task.QueryTest do
97114
task_7 = insert(:task, status: "open", project: project_2, task_list: list_2)
98115
task_8 = insert(:task, status: "closed", project: project_2, task_list: list_2)
99116

117+
task_9 = insert(:task, status: "open", project: project_1, task_list: list_2, archived: true)
118+
task_10 = insert(:task, status: "closed", project: project_1, task_list: list_1, archived: true)
119+
task_11 = insert(:task, status: "open", project: project_2, task_list: list_1, archived: true)
120+
100121
assert [task_1.id] ==
101122
list_sorted_ids(%{"status" => "open", "project_id" => project_1.id, "task_list_ids" => "#{list_1.id}"})
102123

@@ -117,6 +138,21 @@ defmodule CodeCorps.Task.QueryTest do
117138

118139
assert [task_1, task_3] |> get_sorted_ids() ==
119140
list_sorted_ids(%{"status" => "open", "project_id" => project_1.id})
141+
142+
assert [task_9, task_10] |> get_sorted_ids() ==
143+
list_sorted_ids(%{"archived" => true, "project_id" => project_1.id})
144+
145+
assert [task_10, task_11] |> get_sorted_ids() ==
146+
list_sorted_ids(%{"archived" => true, "task_list_ids" => "#{list_1.id}"})
147+
148+
assert [task_9, task_11] |> get_sorted_ids() ==
149+
list_sorted_ids(%{"archived" => true, "status" => "open"})
150+
151+
assert [task_11] |> get_sorted_ids() ==
152+
list_sorted_ids(%{"archived" => true,
153+
"project_id" => project_2.id,
154+
"status" => "open",
155+
"task_list_ids" => "#{list_1.id}"})
120156
end
121157
end
122158

0 commit comments

Comments
 (0)