ML-182.3: finish wave-3 of conversion LiveViewTest to PhoenixTest
This commit is contained in:
+2
-2
@@ -1,10 +1,10 @@
|
|||||||
---
|
---
|
||||||
id: ML-182.3
|
id: ML-182.3
|
||||||
title: "Wave 3: Convert live/2 → visit/2 for CRUD LiveViews (6 files)"
|
title: "Wave 3: Convert live/2 → visit/2 for CRUD LiveViews (6 files)"
|
||||||
status: In Progress
|
status: Done
|
||||||
assignee: []
|
assignee: []
|
||||||
created_date: "2026-05-14 22:14"
|
created_date: "2026-05-14 22:14"
|
||||||
updated_date: "2026-05-15 06:01"
|
updated_date: "2026-05-16 14:23"
|
||||||
labels:
|
labels:
|
||||||
- testing
|
- testing
|
||||||
- refactoring
|
- refactoring
|
||||||
|
|||||||
@@ -3,7 +3,16 @@ defmodule MusicLibraryWeb.ScrobbledTracksLive.RulePickerTest do
|
|||||||
|
|
||||||
import MusicLibrary.Fixtures.Records
|
import MusicLibrary.Fixtures.Records
|
||||||
import MusicLibrary.ScrobbledTracksFixtures
|
import MusicLibrary.ScrobbledTracksFixtures
|
||||||
import Phoenix.LiveViewTest
|
|
||||||
|
import Phoenix.LiveViewTest,
|
||||||
|
only: [
|
||||||
|
render_submit: 1,
|
||||||
|
render_click: 1,
|
||||||
|
render_click: 2,
|
||||||
|
render_click: 3,
|
||||||
|
form: 3,
|
||||||
|
element: 2
|
||||||
|
]
|
||||||
|
|
||||||
alias MusicLibrary.ScrobbleRules
|
alias MusicLibrary.ScrobbleRules
|
||||||
|
|
||||||
@@ -24,39 +33,43 @@ defmodule MusicLibraryWeb.ScrobbledTracksLive.RulePickerTest do
|
|||||||
%{collected: collected}
|
%{collected: collected}
|
||||||
end
|
end
|
||||||
|
|
||||||
defp open_rule_picker(view, album_title) do
|
defp open_rule_picker(session, album_title) do
|
||||||
render_click(view, "open_rule_picker", %{"album-title" => album_title})
|
unwrap(session, fn view ->
|
||||||
view
|
render_click(view, "open_rule_picker", %{"album-title" => album_title})
|
||||||
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
defp search_picker(view, query) do
|
defp search_picker(session, query) do
|
||||||
view
|
unwrap(session, fn view ->
|
||||||
|> form("#rule-picker-navigation form", %{query: query})
|
view
|
||||||
|> render_submit()
|
|> form("#rule-picker-navigation form", %{query: query})
|
||||||
|
|> render_submit()
|
||||||
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "Rule picker modal" do
|
describe "Rule picker modal" do
|
||||||
setup [:create_track_without_album_mbid]
|
setup [:create_track_without_album_mbid]
|
||||||
|
|
||||||
test "opens and shows album title", %{conn: conn, track: track} do
|
test "opens and shows album title", %{conn: conn, track: track} do
|
||||||
{:ok, view, _html} = live(conn, ~p"/scrobbled-tracks")
|
conn
|
||||||
|
|> visit(~p"/scrobbled-tracks")
|
||||||
open_rule_picker(view, track.album.title)
|
|> open_rule_picker(track.album.title)
|
||||||
|
|> assert_has("#rule-picker-modal")
|
||||||
assert has_element?(view, "#rule-picker-modal")
|
|> assert_has("h1", "Create Scrobble Rule")
|
||||||
assert has_element?(view, "h1", "Create Scrobble Rule")
|
|> assert_has("*", track.album.title)
|
||||||
assert render(view) =~ track.album.title
|
|
||||||
end
|
end
|
||||||
|
|
||||||
test "closes when close event is triggered", %{conn: conn, track: track} do
|
test "closes when close event is triggered", %{conn: conn, track: track} do
|
||||||
{:ok, view, _html} = live(conn, ~p"/scrobbled-tracks")
|
session =
|
||||||
|
conn
|
||||||
|
|> visit(~p"/scrobbled-tracks")
|
||||||
|
|> open_rule_picker(track.album.title)
|
||||||
|
|
||||||
open_rule_picker(view, track.album.title)
|
assert_has(session, "#rule-picker-modal")
|
||||||
assert has_element?(view, "#rule-picker-modal")
|
|
||||||
|
|
||||||
render_click(view, "close_rule_picker")
|
session
|
||||||
|
|> unwrap(fn view -> render_click(view, "close_rule_picker") end)
|
||||||
refute has_element?(view, "#rule-picker-modal")
|
|> refute_has("#rule-picker-modal")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -68,13 +81,12 @@ defmodule MusicLibraryWeb.ScrobbledTracksLive.RulePickerTest do
|
|||||||
track: track,
|
track: track,
|
||||||
collected: collected
|
collected: collected
|
||||||
} do
|
} do
|
||||||
{:ok, view, _html} = live(conn, ~p"/scrobbled-tracks")
|
conn
|
||||||
|
|> visit(~p"/scrobbled-tracks")
|
||||||
open_rule_picker(view, track.album.title)
|
|> open_rule_picker(track.album.title)
|
||||||
html = search_picker(view, collected.title)
|
|> search_picker(collected.title)
|
||||||
|
|> assert_has("p", collected.title)
|
||||||
assert html =~ collected.title
|
|> assert_has("h3", "Collected")
|
||||||
assert html =~ "Collected"
|
|
||||||
end
|
end
|
||||||
|
|
||||||
test "filters out records without selected_release_id", %{conn: conn, track: track} do
|
test "filters out records without selected_release_id", %{conn: conn, track: track} do
|
||||||
@@ -87,37 +99,31 @@ defmodule MusicLibraryWeb.ScrobbledTracksLive.RulePickerTest do
|
|||||||
|
|
||||||
assert is_nil(no_release.selected_release_id)
|
assert is_nil(no_release.selected_release_id)
|
||||||
|
|
||||||
{:ok, view, _html} = live(conn, ~p"/scrobbled-tracks")
|
conn
|
||||||
|
|> visit(~p"/scrobbled-tracks")
|
||||||
open_rule_picker(view, track.album.title)
|
|> open_rule_picker(track.album.title)
|
||||||
search_picker(view, "No Release Zzzzzz")
|
|> search_picker("No Release Zzzzzz")
|
||||||
|
|> refute_has("li[phx-click='select_record'][phx-value-record-id='#{no_release.id}']")
|
||||||
refute has_element?(
|
|
||||||
view,
|
|
||||||
"li[phx-click='select_record'][phx-value-record-id='#{no_release.id}']"
|
|
||||||
)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
test "shows wishlisted records", %{conn: conn, track: track} do
|
test "shows wishlisted records", %{conn: conn, track: track} do
|
||||||
wishlisted = record(%{title: "Wish You Were Here", purchased_at: nil})
|
wishlisted = record(%{title: "Wish You Were Here", purchased_at: nil})
|
||||||
|
|
||||||
{:ok, view, _html} = live(conn, ~p"/scrobbled-tracks")
|
conn
|
||||||
|
|> visit(~p"/scrobbled-tracks")
|
||||||
open_rule_picker(view, track.album.title)
|
|> open_rule_picker(track.album.title)
|
||||||
html = search_picker(view, wishlisted.title)
|
|> search_picker(wishlisted.title)
|
||||||
|
|> assert_has("p", wishlisted.title)
|
||||||
assert html =~ wishlisted.title
|
|> assert_has("h3", "Wishlisted")
|
||||||
assert html =~ "Wishlisted"
|
|
||||||
end
|
end
|
||||||
|
|
||||||
test "empty search returns no results", %{conn: conn, track: track} do
|
test "empty search returns no results", %{conn: conn, track: track} do
|
||||||
{:ok, view, _html} = live(conn, ~p"/scrobbled-tracks")
|
conn
|
||||||
|
|> visit(~p"/scrobbled-tracks")
|
||||||
open_rule_picker(view, track.album.title)
|
|> open_rule_picker(track.album.title)
|
||||||
html = search_picker(view, " ")
|
|> search_picker(" ")
|
||||||
|
|> refute_has("h3", "Collected")
|
||||||
refute html =~ "Collected"
|
|> refute_has("h3", "Wishlisted")
|
||||||
refute html =~ "Wishlisted"
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -129,16 +135,16 @@ defmodule MusicLibraryWeb.ScrobbledTracksLive.RulePickerTest do
|
|||||||
track: track,
|
track: track,
|
||||||
collected: collected
|
collected: collected
|
||||||
} do
|
} do
|
||||||
{:ok, view, _html} = live(conn, ~p"/scrobbled-tracks")
|
conn
|
||||||
|
|> visit(~p"/scrobbled-tracks")
|
||||||
open_rule_picker(view, track.album.title)
|
|> open_rule_picker(track.album.title)
|
||||||
search_picker(view, collected.title)
|
|> search_picker(collected.title)
|
||||||
|
|> unwrap(fn view ->
|
||||||
view
|
view
|
||||||
|> element("li[phx-click='select_record'][phx-value-record-id='#{collected.id}']")
|
|> element("li[phx-click='select_record'][phx-value-record-id='#{collected.id}']")
|
||||||
|> render_click()
|
|> render_click()
|
||||||
|
end)
|
||||||
refute has_element?(view, "#rule-picker-modal")
|
|> refute_has("#rule-picker-modal")
|
||||||
|
|
||||||
[rule] = ScrobbleRules.list_scrobble_rules(type: :album)
|
[rule] = ScrobbleRules.list_scrobble_rules(type: :album)
|
||||||
assert rule.match_value == track.album.title
|
assert rule.match_value == track.album.title
|
||||||
@@ -155,17 +161,19 @@ defmodule MusicLibraryWeb.ScrobbledTracksLive.RulePickerTest do
|
|||||||
target_musicbrainz_id: Ecto.UUID.generate()
|
target_musicbrainz_id: Ecto.UUID.generate()
|
||||||
})
|
})
|
||||||
|
|
||||||
{:ok, view, _html} = live(conn, ~p"/scrobbled-tracks")
|
session =
|
||||||
|
conn
|
||||||
open_rule_picker(view, track.album.title)
|
|> visit(~p"/scrobbled-tracks")
|
||||||
search_picker(view, collected.title)
|
|> open_rule_picker(track.album.title)
|
||||||
|
|> search_picker(collected.title)
|
||||||
view
|
|> unwrap(fn view ->
|
||||||
|> element("li[phx-click='select_record'][phx-value-record-id='#{collected.id}']")
|
view
|
||||||
|> render_click()
|
|> element("li[phx-click='select_record'][phx-value-record-id='#{collected.id}']")
|
||||||
|
|> render_click()
|
||||||
|
end)
|
||||||
|
|
||||||
# Modal stays open after error
|
# Modal stays open after error
|
||||||
assert has_element?(view, "#rule-picker-modal")
|
assert_has(session, "#rule-picker-modal")
|
||||||
|
|
||||||
# Only the original rule exists, no duplicate was created
|
# Only the original rule exists, no duplicate was created
|
||||||
assert length(ScrobbleRules.list_scrobble_rules(type: :album)) == 1
|
assert length(ScrobbleRules.list_scrobble_rules(type: :album)) == 1
|
||||||
|
|||||||
Reference in New Issue
Block a user