ML-169.10.1: Add delete coverage
Cover current delete behavior across LiveView index and show paths, and strengthen existing delete tests with persistence assertions.\n\nValidation: mise run dev:precommit
This commit is contained in:
@@ -17,6 +17,7 @@ defmodule MusicLibraryWeb.ArtistLive.ShowTest do
|
||||
alias MusicLibrary.Artists
|
||||
alias MusicLibrary.Assets
|
||||
alias MusicLibrary.Assets.Asset
|
||||
alias MusicLibrary.Records
|
||||
alias Req.Test
|
||||
|
||||
defp fill_collection(_config) do
|
||||
@@ -164,6 +165,26 @@ defmodule MusicLibraryWeb.ArtistLive.ShowTest do
|
||||
|> refute_has("#collection p", escape(other_collection_record.title))
|
||||
|> refute_has("#wishlist p", escape(other_collection_record.title))
|
||||
end
|
||||
|
||||
test "deletes a record from the artist record list", %{
|
||||
conn: conn,
|
||||
collection_record: collection_record,
|
||||
artist_musicbrainz_id: artist_musicbrainz_id
|
||||
} do
|
||||
stub_last_fm(%{})
|
||||
|
||||
conn
|
||||
|> visit(~p"/artists/#{artist_musicbrainz_id}")
|
||||
|> render_async()
|
||||
|> assert_has("#collection p", escape(collection_record.title))
|
||||
|> click_link("a[data-confirm='Are you sure?']", "Delete")
|
||||
|> refute_has("#collection p", escape(collection_record.title))
|
||||
|> assert_has("#toast-group", "Record deleted")
|
||||
|
||||
assert_raise Ecto.NoResultsError, fn ->
|
||||
Records.get_record!(collection_record.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "Edit artist image" do
|
||||
|
||||
@@ -127,6 +127,22 @@ defmodule MusicLibraryWeb.CollectionLive.IndexTest do
|
||||
end
|
||||
end
|
||||
|
||||
describe "Delete record" do
|
||||
test "deletes a record from the listing", %{conn: conn} do
|
||||
record = record(%{title: "Delete From Collection Index"})
|
||||
|
||||
conn
|
||||
|> visit(~p"/collection")
|
||||
|> assert_has("#records-#{record.id}")
|
||||
|> click_link("#records-#{record.id} a[data-confirm='Are you sure?']", "Delete")
|
||||
|> refute_has("#records-#{record.id}")
|
||||
|
||||
assert_raise Ecto.NoResultsError, fn ->
|
||||
Records.get_record!(record.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "Search and pagination" do
|
||||
setup [:fill_collection]
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ defmodule MusicLibraryWeb.CollectionLive.ShowTest do
|
||||
|
||||
alias MusicBrainz.Fixtures
|
||||
alias MusicLibrary.Assets.Transform
|
||||
alias MusicLibrary.Records
|
||||
alias MusicLibrary.Records.Record
|
||||
alias Phoenix.PubSub
|
||||
|
||||
@@ -69,6 +70,26 @@ defmodule MusicLibraryWeb.CollectionLive.ShowTest do
|
||||
end
|
||||
end
|
||||
|
||||
describe "Delete record" do
|
||||
test "deletes the record and navigates back to collection", %{conn: conn} do
|
||||
record = record()
|
||||
release_response = Fixtures.Release.release(:marbles)
|
||||
|
||||
Req.Test.stub(MusicBrainz.API, fn conn ->
|
||||
Req.Test.json(conn, release_response)
|
||||
end)
|
||||
|
||||
conn
|
||||
|> visit(~p"/collection/#{record.id}")
|
||||
|> click_link("a[data-confirm='Are you sure?']", "Delete")
|
||||
|> assert_path(~p"/collection")
|
||||
|
||||
assert_raise Ecto.NoResultsError, fn ->
|
||||
Records.get_record!(record.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "handle_info({:update, record}) with live_action guard" do
|
||||
test "updates record when showing (live_action is :show)", %{conn: conn} do
|
||||
record = record()
|
||||
|
||||
@@ -3,6 +3,8 @@ defmodule MusicLibraryWeb.OnlineStoreTemplateLive.IndexTest do
|
||||
|
||||
import MusicLibrary.Fixtures.OnlineStoreTemplates
|
||||
|
||||
alias MusicLibrary.OnlineStoreTemplates
|
||||
|
||||
describe "Index" do
|
||||
test "lists all templates", %{conn: conn} do
|
||||
online_store_template(%{name: "Amazon UK"})
|
||||
@@ -63,6 +65,10 @@ defmodule MusicLibraryWeb.OnlineStoreTemplateLive.IndexTest do
|
||||
|> visit(~p"/online-store-templates")
|
||||
|> click_button("button[phx-click='delete'][phx-value-id='#{template.id}']", "Delete")
|
||||
|> refute_has("p", "To Delete")
|
||||
|
||||
assert_raise Ecto.NoResultsError, fn ->
|
||||
OnlineStoreTemplates.get_template!(template.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -80,4 +80,20 @@ 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: "Delete From Index"})
|
||||
|
||||
conn
|
||||
|> visit(~p"/record-sets")
|
||||
|> assert_has("h2", "Delete From Index")
|
||||
|> click_button("button[phx-click='delete_set'][phx-value-id='#{set.id}']", "Delete")
|
||||
|> refute_has("h2", "Delete From Index")
|
||||
|
||||
assert_raise Ecto.NoResultsError, fn ->
|
||||
RecordSets.get_record_set!(set.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -97,6 +97,10 @@ defmodule MusicLibraryWeb.RecordSetLive.ShowTest do
|
||||
|> visit(~p"/record-sets/#{set}")
|
||||
|> click_button("button[phx-click='delete_set']", "Delete")
|
||||
|> assert_path(~p"/record-sets")
|
||||
|
||||
assert_raise Ecto.NoResultsError, fn ->
|
||||
RecordSets.get_record_set!(set.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -4,6 +4,8 @@ defmodule MusicLibraryWeb.ScrobbleRulesLiveTest do
|
||||
import MusicLibrary.ScrobbleRulesFixtures
|
||||
import Phoenix.LiveViewTest, only: [render_change: 1, form: 3]
|
||||
|
||||
alias MusicLibrary.ScrobbleRules
|
||||
|
||||
defp create_scrobble_rule(_) do
|
||||
scrobble_rule = scrobble_rule_fixture()
|
||||
%{scrobble_rule: scrobble_rule}
|
||||
@@ -92,6 +94,10 @@ defmodule MusicLibraryWeb.ScrobbleRulesLiveTest do
|
||||
"Delete"
|
||||
)
|
||||
|> refute_has("#scrobble_rule-#{scrobble_rule.id}")
|
||||
|
||||
assert_raise Ecto.NoResultsError, fn ->
|
||||
ScrobbleRules.get_scrobble_rule!(scrobble_rule.id)
|
||||
end
|
||||
end
|
||||
|
||||
test "toggles rule enabled status", %{conn: conn, scrobble_rule: scrobble_rule} do
|
||||
|
||||
@@ -86,6 +86,22 @@ defmodule MusicLibraryWeb.ScrobbledTracksLiveTest do
|
||||
end
|
||||
end
|
||||
|
||||
describe "Delete track" do
|
||||
setup [:create_track]
|
||||
|
||||
test "deletes a scrobbled track from the listing", %{conn: conn, track: track} do
|
||||
conn
|
||||
|> visit(~p"/scrobbled-tracks")
|
||||
|> assert_has("p", track.title)
|
||||
|> click_button("button[data-confirm='Are you sure?']", "Delete")
|
||||
|> refute_has("p", track.title)
|
||||
|
||||
assert_raise Ecto.NoResultsError, fn ->
|
||||
ListeningStats.get_track!(track.scrobbled_at_uts)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "Pagination" do
|
||||
test "navigates to next page", %{conn: conn} do
|
||||
create_test_tracks(21)
|
||||
|
||||
@@ -45,6 +45,20 @@ defmodule MusicLibraryWeb.WishlistLive.IndexTest do
|
||||
describe "Wishlist" do
|
||||
setup [:fill_wishlist]
|
||||
|
||||
test "deletes a record from the listing", %{conn: conn} do
|
||||
record = record(%{title: "Delete From Wishlist Index", purchased_at: nil})
|
||||
|
||||
conn
|
||||
|> visit(~p"/wishlist")
|
||||
|> assert_has("#records-#{record.id}")
|
||||
|> click_link("#records-#{record.id} a[data-confirm='Are you sure?']", "Delete")
|
||||
|> refute_has("#records-#{record.id}")
|
||||
|
||||
assert_raise Ecto.NoResultsError, fn ->
|
||||
Records.get_record!(record.id)
|
||||
end
|
||||
end
|
||||
|
||||
test "can purchase a record and move it to the collection", %{
|
||||
conn: conn,
|
||||
wishlist: wishlist_records
|
||||
|
||||
@@ -5,6 +5,7 @@ defmodule MusicLibraryWeb.WishlistLive.ShowTest do
|
||||
import MusicLibraryWeb.RecordComponents, only: [format_label: 1, type_label: 1]
|
||||
|
||||
alias MusicLibrary.Assets.Transform
|
||||
alias MusicLibrary.Records
|
||||
alias MusicLibrary.Records.Record
|
||||
alias Phoenix.PubSub
|
||||
|
||||
@@ -53,6 +54,21 @@ defmodule MusicLibraryWeb.WishlistLive.ShowTest do
|
||||
end
|
||||
end
|
||||
|
||||
describe "Delete record" do
|
||||
test "deletes the record and navigates back to wishlist", %{conn: conn} do
|
||||
record = record(purchased_at: nil)
|
||||
|
||||
conn
|
||||
|> visit(~p"/wishlist/#{record.id}")
|
||||
|> click_link("a[data-confirm='Are you sure?']", "Delete")
|
||||
|> assert_path(~p"/wishlist")
|
||||
|
||||
assert_raise Ecto.NoResultsError, fn ->
|
||||
Records.get_record!(record.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "handle_info({:update, record}) with live_action guard" do
|
||||
test "updates record when showing (live_action is :show)", %{conn: conn} do
|
||||
record = record(purchased_at: nil)
|
||||
|
||||
Reference in New Issue
Block a user