From 2448aae69ca1a0719292353b33ada245b17f2b91 Mon Sep 17 00:00:00 2001 From: Daniel Levenson Date: Sat, 7 Jan 2017 18:30:46 -0500 Subject: [PATCH 1/4] Add failing test for expected task lists ordering on project creation Starts on #592 --- test/models/project_test.exs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/test/models/project_test.exs b/test/models/project_test.exs index cb3b1d8bd..5475651af 100644 --- a/test/models/project_test.exs +++ b/test/models/project_test.exs @@ -62,6 +62,17 @@ defmodule CodeCorps.ProjectTest do changeset = Project.create_changeset(%Project{}, %{organization_id: 1}) assert {:ok, 1} == changeset |> fetch_change(:organization_id) end + + test "associates the default task lists to the project" do + organization = insert(:organization) + changeset = Project.create_changeset(%Project{}, %{organization_id: organization.id, title: "Title"}) + + {_, project} = Repo.insert(changeset) + + orders = for task_list <- project.task_lists do; task_list.order; end + + assert orders == [1, 2, 3, 4] + end end describe "update_changeset/2" do From c66af717835d27d634d1bcfdf29beb7f539a19d3 Mon Sep 17 00:00:00 2001 From: Daniel Levenson Date: Sat, 7 Jan 2017 23:25:01 -0500 Subject: [PATCH 2/4] Manually set the order of the default task lists for a project --- web/models/task_list.ex | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/web/models/task_list.ex b/web/models/task_list.ex index 4a1abd48e..24ec74c75 100644 --- a/web/models/task_list.ex +++ b/web/models/task_list.ex @@ -17,16 +17,20 @@ defmodule CodeCorps.TaskList do [ %{ name: "Inbox", - position: 1 + position: 1, + order: 1 }, %{ name: "Backlog", - position: 2 + position: 2, + order: 2 }, %{ name: "In Progress", - position: 3 + position: 3, + order: 3 }, %{ name: "Done", - position: 4 + position: 4, + order: 4 } ] end From d4508b6104e351a4e53284b975bace7948a924b3 Mon Sep 17 00:00:00 2001 From: Daniel Levenson Date: Sun, 8 Jan 2017 00:13:44 -0500 Subject: [PATCH 3/4] Set order of the default task lists through TaskList.changeset/2 * Removes manual and clunky setting of `order` and `position` with `TaskList.default_task_lists/0` * Small style refactorings in Project test Finishes #592 --- test/models/project_test.exs | 12 ++++++++---- web/models/task_list.ex | 20 +++++++++++--------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/test/models/project_test.exs b/test/models/project_test.exs index 5475651af..d108d7f00 100644 --- a/test/models/project_test.exs +++ b/test/models/project_test.exs @@ -63,15 +63,19 @@ defmodule CodeCorps.ProjectTest do assert {:ok, 1} == changeset |> fetch_change(:organization_id) end - test "associates the default task lists to the project" do + test "associates the ordered default task lists to the project" do organization = insert(:organization) - changeset = Project.create_changeset(%Project{}, %{organization_id: organization.id, title: "Title"}) + changeset = Project.create_changeset( + %Project{}, + %{organization_id: organization.id, title: "Title"} + ) {_, project} = Repo.insert(changeset) - orders = for task_list <- project.task_lists do; task_list.order; end + task_list_orders = for task_list <- project.task_lists, do: task_list.order - assert orders == [1, 2, 3, 4] + assert Enum.all?(task_list_orders), "some of the orders are not set (nil)" + assert task_list_orders == Enum.sort(task_list_orders), "task lists order does not correspond to their position" end end diff --git a/web/models/task_list.ex b/web/models/task_list.ex index 24ec74c75..990bfa07a 100644 --- a/web/models/task_list.ex +++ b/web/models/task_list.ex @@ -2,6 +2,8 @@ defmodule CodeCorps.TaskList do use CodeCorps.Web, :model import EctoOrdered + alias CodeCorps.TaskList + schema "task_lists" do field :name, :string field :position, :integer, virtual: true @@ -14,25 +16,25 @@ defmodule CodeCorps.TaskList do end def default_task_lists() do - [ + task_list_data = [ %{ name: "Inbox", - position: 1, - order: 1 + position: 1 }, %{ name: "Backlog", - position: 2, - order: 2 + position: 2 }, %{ name: "In Progress", - position: 3, - order: 3 + position: 3 }, %{ name: "Done", - position: 4, - order: 4 + position: 4 } ] + + for task_list <- task_list_data do + TaskList.changeset(%TaskList{}, task_list) + end end @doc """ From de0985276bd6d80c3f82ab9cf2b4b61a2883ef83 Mon Sep 17 00:00:00 2001 From: Daniel Levenson Date: Sun, 8 Jan 2017 16:02:24 -0500 Subject: [PATCH 4/4] Refactor `TaskList.default_task_lists/0` to use `Enum.map` Per @begedin's suggestion [in this comment](https://github.com/code-corps/code-corps-api/pull/622?utm_campaign=build-fixed&utm_medium=email&utm_source=notification#discussion_r95074678) --- web/models/task_list.ex | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/web/models/task_list.ex b/web/models/task_list.ex index 990bfa07a..eb00669fd 100644 --- a/web/models/task_list.ex +++ b/web/models/task_list.ex @@ -16,7 +16,7 @@ defmodule CodeCorps.TaskList do end def default_task_lists() do - task_list_data = [ + [ %{ name: "Inbox", position: 1 @@ -30,11 +30,7 @@ defmodule CodeCorps.TaskList do name: "Done", position: 4 } - ] - - for task_list <- task_list_data do - TaskList.changeset(%TaskList{}, task_list) - end + ] |> Enum.map(fn (params) -> changeset(%TaskList{}, params) end) end @doc """