From f86800368d4cd0c2cc0daa3782c6923a5ea7ee0c Mon Sep 17 00:00:00 2001 From: Claudio Ortolina Date: Mon, 9 Mar 2026 18:55:07 +0000 Subject: [PATCH] Streamline test suite MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- .../online_store_template_live/index_test.exs | 29 +++---- .../live/record_set_live/index_test.exs | 49 ----------- .../live/record_set_live/show_test.exs | 7 +- .../live/scrobble_rules_live/index_test.exs | 84 ++++++------------- .../live/scrobbled_tracks_live/index_test.exs | 30 +------ 5 files changed, 42 insertions(+), 157 deletions(-) diff --git a/test/music_library_web/live/online_store_template_live/index_test.exs b/test/music_library_web/live/online_store_template_live/index_test.exs index f1d05362..0d389e84 100644 --- a/test/music_library_web/live/online_store_template_live/index_test.exs +++ b/test/music_library_web/live/online_store_template_live/index_test.exs @@ -4,8 +4,6 @@ defmodule MusicLibraryWeb.OnlineStoreTemplateLive.IndexTest do import MusicLibrary.Fixtures.OnlineStoreTemplates import Phoenix.LiveViewTest - alias MusicLibrary.OnlineStoreTemplates - describe "Index" do test "lists all templates", %{conn: conn} do online_store_template(%{name: "Amazon UK"}) @@ -32,8 +30,7 @@ defmodule MusicLibraryWeb.OnlineStoreTemplateLive.IndexTest do ) |> render_submit() - templates = OnlineStoreTemplates.list_templates() - assert Enum.any?(templates, &(&1.name == "New Store")) + assert has_element?(view, "p", "New Store") end test "shows validation errors", %{conn: conn} do @@ -62,8 +59,7 @@ defmodule MusicLibraryWeb.OnlineStoreTemplateLive.IndexTest do ) |> render_submit() - updated = OnlineStoreTemplates.get_template!(template.id) - assert updated.name == "Updated Name" + assert has_element?(view, "p", "Updated Name") end end @@ -78,7 +74,6 @@ defmodule MusicLibraryWeb.OnlineStoreTemplateLive.IndexTest do |> render_click() refute has_element?(view, "p", "To Delete") - assert_raise Ecto.NoResultsError, fn -> OnlineStoreTemplates.get_template!(template.id) end end end @@ -89,20 +84,20 @@ defmodule MusicLibraryWeb.OnlineStoreTemplateLive.IndexTest do {:ok, view, _html} = live(conn, ~p"/online-store-templates") # Toggle to disabled - view - |> element("button[phx-click='toggle-enabled'][phx-value-id='#{template.id}']") - |> render_click() + html = + view + |> element("button[phx-click='toggle-enabled'][phx-value-id='#{template.id}']") + |> render_click() - updated = OnlineStoreTemplates.get_template!(template.id) - refute updated.enabled + assert html =~ "Enable template" # Toggle back to enabled - view - |> element("button[phx-click='toggle-enabled'][phx-value-id='#{template.id}']") - |> render_click() + html = + view + |> element("button[phx-click='toggle-enabled'][phx-value-id='#{template.id}']") + |> render_click() - updated = OnlineStoreTemplates.get_template!(template.id) - assert updated.enabled + assert html =~ "Disable template" end end end diff --git a/test/music_library_web/live/record_set_live/index_test.exs b/test/music_library_web/live/record_set_live/index_test.exs index 648f8ecb..0398b961 100644 --- a/test/music_library_web/live/record_set_live/index_test.exs +++ b/test/music_library_web/live/record_set_live/index_test.exs @@ -86,53 +86,4 @@ defmodule MusicLibraryWeb.RecordSetLive.IndexTest do assert updated.name == "Updated Name" 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 diff --git a/test/music_library_web/live/record_set_live/show_test.exs b/test/music_library_web/live/record_set_live/show_test.exs index 0c0c69c9..ca5e9586 100644 --- a/test/music_library_web/live/record_set_live/show_test.exs +++ b/test/music_library_web/live/record_set_live/show_test.exs @@ -59,8 +59,10 @@ defmodule MusicLibraryWeb.RecordSetLive.ShowTest do |> element("button[phx-click='remove_record'][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)) + refute has_element?( + view, + "button[phx-click='remove_record'][phx-value-record-id='#{r1.id}']" + ) end end @@ -89,7 +91,6 @@ defmodule MusicLibraryWeb.RecordSetLive.ShowTest do |> render_click() assert_redirect(view, ~p"/record-sets") - assert_raise Ecto.NoResultsError, fn -> RecordSets.get_record_set!(set.id) end end end diff --git a/test/music_library_web/live/scrobble_rules_live/index_test.exs b/test/music_library_web/live/scrobble_rules_live/index_test.exs index 7d996c2a..69e2625b 100644 --- a/test/music_library_web/live/scrobble_rules_live/index_test.exs +++ b/test/music_library_web/live/scrobble_rules_live/index_test.exs @@ -4,8 +4,6 @@ defmodule MusicLibraryWeb.ScrobbleRulesLiveTest do import MusicLibrary.ScrobbleRulesFixtures import Phoenix.LiveViewTest - alias MusicLibrary.ScrobbleRules - # Test data @invalid_attrs %{type: "", match_value: "", target_musicbrainz_id: ""} @valid_attrs %{ @@ -95,22 +93,20 @@ defmodule MusicLibraryWeb.ScrobbleRulesLiveTest do {:ok, index_live, _html} = live(conn, ~p"/scrobble-rules") # Toggle to disabled - assert index_live - |> element("#scrobble_rules-#{scrobble_rule.id} button[phx-click='toggle_enabled']") - |> render_click() + html = + index_live + |> element("#scrobble_rules-#{scrobble_rule.id} button[phx-click='toggle_enabled']") + |> render_click() - # Check that the rule was disabled - updated_rule = ScrobbleRules.get_scrobble_rule!(scrobble_rule.id) - refute updated_rule.enabled + assert html =~ "Enable rule" # Toggle back to enabled - assert index_live - |> element("#scrobble_rules-#{scrobble_rule.id} button[phx-click='toggle_enabled']") - |> render_click() + html = + index_live + |> element("#scrobble_rules-#{scrobble_rule.id} button[phx-click='toggle_enabled']") + |> render_click() - # Check that the rule was enabled again - updated_rule = ScrobbleRules.get_scrobble_rule!(scrobble_rule.id) - assert updated_rule.enabled + assert html =~ "Disable rule" end test "applies individual rule", %{conn: conn, scrobble_rule: scrobble_rule} do @@ -136,55 +132,25 @@ defmodule MusicLibraryWeb.ScrobbleRulesLiveTest do end end - describe "Form validation" do - test "shows validation errors for missing required fields", %{conn: conn} do - {:ok, index_live, _html} = live(conn, ~p"/scrobble-rules") + 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() + assert index_live |> element("a", "Add") |> render_click() - assert index_live - |> form("#scrobble_rule-form", - scrobble_rule: %{type: "", match_value: "", target_musicbrainz_id: ""} - ) - |> render_change() =~ "can't be blank" - end + # Select album type + html = + index_live + |> form("#scrobble_rule-form", scrobble_rule: %{type: :album}) + |> render_change() - test "shows validation errors for invalid MusicBrainz ID", %{conn: conn} do - {:ok, index_live, _html} = live(conn, ~p"/scrobble-rules") + assert html =~ "Album Title" - 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 - |> 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 + assert html =~ "Artist Name" end end diff --git a/test/music_library_web/live/scrobbled_tracks_live/index_test.exs b/test/music_library_web/live/scrobbled_tracks_live/index_test.exs index 85c520b8..28db445e 100644 --- a/test/music_library_web/live/scrobbled_tracks_live/index_test.exs +++ b/test/music_library_web/live/scrobbled_tracks_live/index_test.exs @@ -49,7 +49,7 @@ defmodule MusicLibraryWeb.ScrobbledTracksLiveTest do describe "Search functionality" do 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"}) session = visit(conn, ~p"/scrobbled-tracks") @@ -62,34 +62,6 @@ defmodule MusicLibraryWeb.ScrobbledTracksLiveTest do end) |> assert_has("p", "Unique Track Title") 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 describe "Edit track" do