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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user