ML-182.5: migrate blocked LiveView tests

Replace direct LiveView PID and isolated component test patterns with PhoenixTest-backed page flows while keeping narrow unwrap bridges where PhoenixTest cannot express the component interaction.

Precommit: mise run dev:precommit
This commit is contained in:
Claudio Ortolina
2026-05-17 21:24:29 +01:00
parent 09b555b356
commit 122c07836b
5 changed files with 198 additions and 225 deletions
@@ -12,7 +12,7 @@ defmodule MusicLibraryWeb.Components.ReleaseTest do
import MusicLibrary.Fixtures.Records
import Phoenix.LiveViewTest,
only: [element: 2, render: 1, render_change: 2, render_click: 1]
only: [element: 2, render_change: 2, render_click: 1]
alias MusicBrainz.Fixtures.Release, as: ReleaseFixtures
alias MusicLibrary.Secrets
@@ -289,45 +289,18 @@ defmodule MusicLibraryWeb.Components.ReleaseTest do
end
end
defmodule ReleaseComponentHost do
@moduledoc false
use MusicLibraryWeb, :live_view
@impl true
def mount(_params, session, socket) do
{:ok,
assign(socket,
release_id: session["release_id"],
show_print?: session["show_print?"],
timezone: "UTC"
)}
end
@impl true
def render(assigns) do
~H"""
<div>
<.live_component
id="host-release"
module={MusicLibraryWeb.Components.Release}
release_id={@release_id}
show_print?={@show_print?}
sheet_id="host-sheet"
timezone={@timezone}
/>
</div>
"""
end
end
defmodule MusicLibraryWeb.Components.ReleaseTest.ShowPrintTest do
use MusicLibraryWeb.ConnCase, async: false
import Phoenix.LiveViewTest, only: [render: 1]
import MusicLibrary.Fixtures.Records
alias MusicBrainz.Fixtures.Release, as: ReleaseFixtures
alias MusicBrainz.Fixtures.ReleaseGroup
alias Req.Test
@rg_id ReleaseGroup.release_group_id(:marbles)
@release_id ReleaseFixtures.release_id(:marbles)
defp stub_musicbrainz_release(_) do
Test.stub(MusicBrainz.API, fn conn ->
case conn.request_path do
@@ -346,31 +319,19 @@ defmodule MusicLibraryWeb.Components.ReleaseTest.ShowPrintTest do
setup [:stub_musicbrainz_release]
test "true renders Print tracklist dropdown entries", %{conn: conn} do
{:ok, view, _html} =
Phoenix.LiveViewTest.live_isolated(conn, ReleaseComponentHost,
session: %{
"release_id" => ReleaseFixtures.release_id(:marbles),
"show_print?" => true
}
)
record = record()
render_async(view)
assert render(view) =~ "Print tracklist"
conn
|> visit(~p"/collection/#{record.id}")
|> render_async()
|> assert_has("a", text: "Print tracklist")
end
test "false hides Print tracklist dropdown entries", %{conn: conn} do
{:ok, view, _html} =
Phoenix.LiveViewTest.live_isolated(conn, ReleaseComponentHost,
session: %{
"release_id" => ReleaseFixtures.release_id(:marbles),
"show_print?" => false
}
)
render_async(view)
refute render(view) =~ "Print tracklist"
conn
|> visit(~p"/scrobble/#{@rg_id}/releases/#{@release_id}")
|> render_async()
|> refute_has("a", text: "Print tracklist")
end
end
end