Streamline test suite

record_set_live/index_test.exs — Removed 3 describe blocks ("Delete set", "Remove record from set", "Drag-and-drop reorder") that were duplicated in ShowTest. Removed 3 tests.

record_set_live/show_test.exs — Replaced context-level assertion in "Remove record" with UI assertion (refute has_element?). Removed redundant assert_raise from "Delete set" (kept assert_redirect).

scrobble_rules_live/index_test.exs — Removed "Form validation" describe block (2 tests duplicated in "saves new scrobble_rule" and changeset tests). Kept the "updates form labels" test, moved into "Index"
  block. Replaced ScrobbleRules.get_scrobble_rule! assertions in toggle test with UI assertions checking button text.
online_store_template_live/index_test.exs — Replaced context-level assertions with UI assertions in Create, Edit, Delete, and Toggle tests. Removed OnlineStoreTemplates alias.

scrobbled_tracks_live/index_test.exs — Collapsed 3 search tests into 1. Removed 2 tests.
This commit is contained in:
Claudio Ortolina
2026-03-09 18:55:07 +00:00
parent 3ddb287187
commit f86800368d
5 changed files with 42 additions and 157 deletions
@@ -4,8 +4,6 @@ defmodule MusicLibraryWeb.OnlineStoreTemplateLive.IndexTest do
import MusicLibrary.Fixtures.OnlineStoreTemplates import MusicLibrary.Fixtures.OnlineStoreTemplates
import Phoenix.LiveViewTest import Phoenix.LiveViewTest
alias MusicLibrary.OnlineStoreTemplates
describe "Index" do describe "Index" do
test "lists all templates", %{conn: conn} do test "lists all templates", %{conn: conn} do
online_store_template(%{name: "Amazon UK"}) online_store_template(%{name: "Amazon UK"})
@@ -32,8 +30,7 @@ defmodule MusicLibraryWeb.OnlineStoreTemplateLive.IndexTest do
) )
|> render_submit() |> render_submit()
templates = OnlineStoreTemplates.list_templates() assert has_element?(view, "p", "New Store")
assert Enum.any?(templates, &(&1.name == "New Store"))
end end
test "shows validation errors", %{conn: conn} do test "shows validation errors", %{conn: conn} do
@@ -62,8 +59,7 @@ defmodule MusicLibraryWeb.OnlineStoreTemplateLive.IndexTest do
) )
|> render_submit() |> render_submit()
updated = OnlineStoreTemplates.get_template!(template.id) assert has_element?(view, "p", "Updated Name")
assert updated.name == "Updated Name"
end end
end end
@@ -78,7 +74,6 @@ defmodule MusicLibraryWeb.OnlineStoreTemplateLive.IndexTest do
|> render_click() |> render_click()
refute has_element?(view, "p", "To Delete") refute has_element?(view, "p", "To Delete")
assert_raise Ecto.NoResultsError, fn -> OnlineStoreTemplates.get_template!(template.id) end
end end
end end
@@ -89,20 +84,20 @@ defmodule MusicLibraryWeb.OnlineStoreTemplateLive.IndexTest do
{:ok, view, _html} = live(conn, ~p"/online-store-templates") {:ok, view, _html} = live(conn, ~p"/online-store-templates")
# Toggle to disabled # Toggle to disabled
view html =
|> element("button[phx-click='toggle-enabled'][phx-value-id='#{template.id}']") view
|> render_click() |> element("button[phx-click='toggle-enabled'][phx-value-id='#{template.id}']")
|> render_click()
updated = OnlineStoreTemplates.get_template!(template.id) assert html =~ "Enable template"
refute updated.enabled
# Toggle back to enabled # Toggle back to enabled
view html =
|> element("button[phx-click='toggle-enabled'][phx-value-id='#{template.id}']") view
|> render_click() |> element("button[phx-click='toggle-enabled'][phx-value-id='#{template.id}']")
|> render_click()
updated = OnlineStoreTemplates.get_template!(template.id) assert html =~ "Disable template"
assert updated.enabled
end end
end end
end end
@@ -86,53 +86,4 @@ defmodule MusicLibraryWeb.RecordSetLive.IndexTest do
assert updated.name == "Updated Name" assert updated.name == "Updated Name"
end end
end end
describe "Delete set" do
test "deletes a set from the listing", %{conn: conn} do
set = record_set(%{name: "To Delete"})
{:ok, view, _html} = live(conn, ~p"/record-sets")
view
|> element("button[phx-click='delete_set'][phx-value-id='#{set.id}']")
|> render_click()
refute has_element?(view, "h2", "To Delete")
assert_raise Ecto.NoResultsError, fn -> RecordSets.get_record_set!(set.id) end
end
end
describe "Remove record from set" do
test "removes a record from the set", %{conn: conn} do
{set, [r1 | _]} = record_set_with_records(2)
{:ok, view, _html} = live(conn, ~p"/record-sets")
view
|> element(
"button[phx-click='remove_record'][phx-value-set-id='#{set.id}'][phx-value-record-id='#{r1.id}']"
)
|> render_click()
updated = RecordSets.get_record_set!(set.id)
refute Enum.any?(updated.items, &(&1.record.id == r1.id))
end
end
describe "Drag-and-drop reorder" do
test "reorders records via reorder event", %{conn: conn} do
{set, [r1, r2, r3]} = record_set_with_records(3)
{:ok, view, _html} = live(conn, ~p"/record-sets")
render_hook(view, "reorder", %{
"set_id" => set.id,
"record_ids" => [r3.id, r1.id, r2.id]
})
updated = RecordSets.get_record_set!(set.id)
ids_in_order = Enum.map(updated.items, & &1.record.id)
assert ids_in_order == [r3.id, r1.id, r2.id]
end
end
end end
@@ -59,8 +59,10 @@ defmodule MusicLibraryWeb.RecordSetLive.ShowTest do
|> element("button[phx-click='remove_record'][phx-value-record-id='#{r1.id}']") |> element("button[phx-click='remove_record'][phx-value-record-id='#{r1.id}']")
|> render_click() |> render_click()
updated = RecordSets.get_record_set!(set.id) refute has_element?(
refute Enum.any?(updated.items, &(&1.record.id == r1.id)) view,
"button[phx-click='remove_record'][phx-value-record-id='#{r1.id}']"
)
end end
end end
@@ -89,7 +91,6 @@ defmodule MusicLibraryWeb.RecordSetLive.ShowTest do
|> render_click() |> render_click()
assert_redirect(view, ~p"/record-sets") assert_redirect(view, ~p"/record-sets")
assert_raise Ecto.NoResultsError, fn -> RecordSets.get_record_set!(set.id) end
end end
end end
@@ -4,8 +4,6 @@ defmodule MusicLibraryWeb.ScrobbleRulesLiveTest do
import MusicLibrary.ScrobbleRulesFixtures import MusicLibrary.ScrobbleRulesFixtures
import Phoenix.LiveViewTest import Phoenix.LiveViewTest
alias MusicLibrary.ScrobbleRules
# Test data # Test data
@invalid_attrs %{type: "", match_value: "", target_musicbrainz_id: ""} @invalid_attrs %{type: "", match_value: "", target_musicbrainz_id: ""}
@valid_attrs %{ @valid_attrs %{
@@ -95,22 +93,20 @@ defmodule MusicLibraryWeb.ScrobbleRulesLiveTest do
{:ok, index_live, _html} = live(conn, ~p"/scrobble-rules") {:ok, index_live, _html} = live(conn, ~p"/scrobble-rules")
# Toggle to disabled # Toggle to disabled
assert index_live html =
|> element("#scrobble_rules-#{scrobble_rule.id} button[phx-click='toggle_enabled']") index_live
|> render_click() |> element("#scrobble_rules-#{scrobble_rule.id} button[phx-click='toggle_enabled']")
|> render_click()
# Check that the rule was disabled assert html =~ "Enable rule"
updated_rule = ScrobbleRules.get_scrobble_rule!(scrobble_rule.id)
refute updated_rule.enabled
# Toggle back to enabled # Toggle back to enabled
assert index_live html =
|> element("#scrobble_rules-#{scrobble_rule.id} button[phx-click='toggle_enabled']") index_live
|> render_click() |> element("#scrobble_rules-#{scrobble_rule.id} button[phx-click='toggle_enabled']")
|> render_click()
# Check that the rule was enabled again assert html =~ "Disable rule"
updated_rule = ScrobbleRules.get_scrobble_rule!(scrobble_rule.id)
assert updated_rule.enabled
end end
test "applies individual rule", %{conn: conn, scrobble_rule: scrobble_rule} do test "applies individual rule", %{conn: conn, scrobble_rule: scrobble_rule} do
@@ -136,55 +132,25 @@ defmodule MusicLibraryWeb.ScrobbleRulesLiveTest do
end end
end end
describe "Form validation" do test "updates form labels based on rule type", %{conn: conn} do
test "shows validation errors for missing required fields", %{conn: conn} do {:ok, index_live, _html} = live(conn, ~p"/scrobble-rules")
{:ok, index_live, _html} = live(conn, ~p"/scrobble-rules")
assert index_live |> element("a", "Add") |> render_click() assert index_live |> element("a", "Add") |> render_click()
assert index_live # Select album type
|> form("#scrobble_rule-form", html =
scrobble_rule: %{type: "", match_value: "", target_musicbrainz_id: ""} index_live
) |> form("#scrobble_rule-form", scrobble_rule: %{type: :album})
|> render_change() =~ "can't be blank" |> render_change()
end
test "shows validation errors for invalid MusicBrainz ID", %{conn: conn} do assert html =~ "Album Title"
{:ok, index_live, _html} = live(conn, ~p"/scrobble-rules")
assert index_live |> element("a", "Add") |> render_click() # Select artist type
html =
index_live
|> form("#scrobble_rule-form", scrobble_rule: %{type: :artist})
|> render_change()
assert index_live assert html =~ "Artist Name"
|> form("#scrobble_rule-form",
scrobble_rule: %{
type: :album,
match_value: "Test Album",
target_musicbrainz_id: "invalid-uuid"
}
)
|> render_change() =~ "is invalid"
end
test "updates form labels based on rule type", %{conn: conn} do
{:ok, index_live, _html} = live(conn, ~p"/scrobble-rules")
assert index_live |> element("a", "Add") |> render_click()
# Select album type
html =
index_live
|> form("#scrobble_rule-form", scrobble_rule: %{type: :album})
|> render_change()
assert html =~ "Album Title"
# Select artist type
html =
index_live
|> form("#scrobble_rule-form", scrobble_rule: %{type: :artist})
|> render_change()
assert html =~ "Artist Name"
end
end end
end end
@@ -49,7 +49,7 @@ defmodule MusicLibraryWeb.ScrobbledTracksLiveTest do
describe "Search functionality" do describe "Search functionality" do
setup [:create_multiple_tracks] setup [:create_multiple_tracks]
test "searches tracks by title", %{conn: conn} do test "filters results by search query", %{conn: conn} do
track_fixture(%{title: "Unique Track Title"}) track_fixture(%{title: "Unique Track Title"})
session = visit(conn, ~p"/scrobbled-tracks") session = visit(conn, ~p"/scrobbled-tracks")
@@ -62,34 +62,6 @@ defmodule MusicLibraryWeb.ScrobbledTracksLiveTest do
end) end)
|> assert_has("p", "Unique Track Title") |> assert_has("p", "Unique Track Title")
end end
test "searches tracks by artist name", %{conn: conn} do
track_fixture(%{artist_name: "Unique Artist Name"})
session = visit(conn, ~p"/scrobbled-tracks")
session
|> unwrap(fn view ->
view
|> form("form[phx-submit='search']", %{query: "Unique Artist"})
|> render_submit()
end)
|> assert_has("p", "Unique Artist Name")
end
test "searches tracks by album title", %{conn: conn} do
track_fixture(%{album_title: "Unique Album Title"})
session = visit(conn, ~p"/scrobbled-tracks")
session
|> unwrap(fn view ->
view
|> form("form[phx-submit='search']", %{query: "Unique Album"})
|> render_submit()
end)
|> assert_has("p", "Unique Album Title")
end
end end
describe "Edit track" do describe "Edit track" do