Skip to content

Commit

Permalink
Add item controller test for lists
Browse files Browse the repository at this point in the history
- Add test for item controller managing lists
- Fix #168
  • Loading branch information
SimonLab committed Oct 8, 2022
1 parent a3269b7 commit 68f5562
Show file tree
Hide file tree
Showing 7 changed files with 47 additions and 36 deletions.
3 changes: 0 additions & 3 deletions lib/app/item.ex
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ defmodule App.Item do
end

def changeset_with_lists(item, list_ids) do
# get list based on ids
lists = Repo.all(from l in L, where: l.id in ^list_ids)

item
Expand Down Expand Up @@ -182,10 +181,8 @@ defmodule App.Item do
accumulate_item_timers(values)
|> Enum.map(fn t ->
Map.put(t, :tags, items_tags[t.id].tags)
# Map.put(t, :lists, items_tags[t.id].lists)
end)
|> Enum.map(fn t ->
# Map.put(t, :tags, items_tags[t.id].tags)
Map.put(t, :lists, items_tags[t.id].lists)
end)
end
Expand Down
15 changes: 4 additions & 11 deletions lib/app_web/controllers/item_controller.ex
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ defmodule AppWeb.ItemController do
end

def update(conn, %{"id" => id} = params) do
person_id = conn.assigns[:person][:id] || 0
item = Item.get_item!(id)

list_ids =
Expand All @@ -29,16 +28,10 @@ defmodule AppWeb.ItemController do
ids -> ids
end

case Item.update_item_with_lists(item, list_ids) do
{:ok, _item} ->
conn
|> put_flash(:info, "Item's list updated successfully.")
|> redirect(to: "/")

{:error, %Ecto.Changeset{} = changeset} ->
lists = List.list_person_lists(person_id) |> Enum.map(&{&1.name, &1.id})
{:ok, _item} = Item.update_item_with_lists(item, list_ids)

render(conn, "edit.html", item: item, lists: lists, changeset: changeset)
end
conn
|> put_flash(:info, "Item's list updated successfully.")
|> redirect(to: "/")
end
end
3 changes: 1 addition & 2 deletions lib/app_web/router.ex
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
defmodule AppWeb.Router do
use AppWeb, :router
alias App.{Person, Repo}
alias App.Person

pipeline :browser do
plug :accepts, ["html"]
Expand Down Expand Up @@ -52,7 +52,6 @@ defmodule AppWeb.Router do
# add name to their profile for sharing items feature
defp profile_name(conn, _opts) do
person_id = conn.assigns[:person][:id] || 0
# person = Person.get_person!(person_id)

person = Person.get_or_insert(person_id)

Expand Down
2 changes: 1 addition & 1 deletion priv/repo/migrations/20221005142257_add_list.exs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ defmodule App.Repo.Migrations.AddList do

create table(:lists_items, primary_key: false) do
add(:item_id, references(:items, on_delete: :delete_all))
add(:list_id, references(:tags, on_delete: :delete_all))
add(:list_id, references(:lists, on_delete: :delete_all))

timestamps()
end
Expand Down
1 change: 0 additions & 1 deletion test/app/item_test.exs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
defmodule App.ItemTest do
use App.DataCase, async: false
alias App.{Item, Person, Timer}
alias App.List, as: L

setup [:create_person]

Expand Down
4 changes: 2 additions & 2 deletions test/app/list_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@ defmodule App.ListTest do
end

test "get lists from ids" do
{:ok, _list} = List.create_list(@valid_attrs)
assert lists = List.get_lists_from_ids([1, 2, 3])
{:ok, list} = List.create_list(@valid_attrs)
assert lists = List.get_lists_from_ids([list.id])
assert length(lists) == 1
end

Expand Down
55 changes: 39 additions & 16 deletions test/app_web/controllers/item_controller_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -18,35 +18,58 @@ defmodule AppWeb.ItemControllerTest do
item
end

describe "edit item" do
describe "edit item's list" do
setup [:create_item, :create_list]

test "renders form for editing chosen item's lists", %{
test "renders form for editing item's lists", %{
conn: conn,
list: list,
item: item
} do
conn =
conn
|> assign(:person, %{id: 1})
|> get(Routes.item_path(conn, :edit, item))

assert html_response(conn, 200) =~ "Edit Item's lists"
assert html_response(conn, 200) =~ "Edit Item"
end
end

# describe "update item's list" do
# setup [:create_item, :create_list]
#
# test "redirects to index when data is valid", %{conn: conn, list: list} do
# conn =
# conn
# |> assign(:person, %{id: 1})
# |> put(Routes.list_path(conn, :update, list), list: @update_attrs)
#
# assert redirected_to(conn) == Routes.list_path(conn, :index)
# end
# end
describe "update item's list" do
setup [:create_item, :create_list]

test "Add a list to an item", %{
conn: conn,
list: list,
item: item
} do
update_params = %{item_lists: [list.id]}

conn =
conn
|> assign(:person, %{id: 1})
|> put(Routes.item_path(conn, :update, item), item: update_params)

assert length(Item.get_item!(item.id).lists) == 1

assert redirected_to(conn) == "/"
end

test "Remove list from item", %{
conn: conn,
item: item
} do
update_params = %{item_lists: ""}

conn =
conn
|> assign(:person, %{id: 1})
|> put(Routes.item_path(conn, :update, item), item: update_params)

assert length(Item.get_item!(item.id).lists) == 0

assert redirected_to(conn) == "/"
end
end

defp create_list(_) do
list = fixture(:list)
Expand Down

0 comments on commit 68f5562

Please sign in to comment.