Refactor test to use PhoenixTest APIs

This commit is contained in:
Claudio Ortolina
2025-10-25 13:35:21 +01:00
parent 4dc80cf739
commit 89db253e59
@@ -2,7 +2,7 @@ defmodule MusicLibraryWeb.ScrobbledTracksLiveTest do
use MusicLibraryWeb.ConnCase
import MusicLibrary.ScrobbledTracksFixtures
import Phoenix.LiveViewTest
import Phoenix.LiveViewTest, only: [render_submit: 1, render_change: 1, form: 3]
alias MusicLibrary.ScrobbleActivity
@@ -29,21 +29,20 @@ defmodule MusicLibraryWeb.ScrobbledTracksLiveTest do
setup [:create_track]
test "lists scrobbled tracks", %{conn: conn, track: track} do
{:ok, _index_live, html} = live(conn, ~p"/scrobbled-tracks")
assert html =~ "Scrobbled Tracks"
assert html =~ track.title
assert html =~ track.artist.name
assert html =~ track.album.title
conn
|> visit(~p"/scrobbled-tracks")
|> assert_has("p", text: track.title)
|> assert_has("p", text: track.artist.name)
|> assert_has("p", text: track.album.title)
end
test "shows empty state when no tracks", %{conn: conn} do
# Delete the created track
ScrobbleActivity.delete_track(track_fixture())
{:ok, _index_live, html} = live(conn, ~p"/scrobbled-tracks")
assert html =~ "No scrobbled tracks found"
conn
|> visit(~p"/scrobbled-tracks")
|> assert_has("p", text: "No scrobbled tracks found")
end
end
@@ -53,40 +52,43 @@ defmodule MusicLibraryWeb.ScrobbledTracksLiveTest do
test "searches tracks by title", %{conn: conn} do
track_fixture(%{title: "Unique Track Title"})
{:ok, index_live, _html} = live(conn, ~p"/scrobbled-tracks")
session = visit(conn, ~p"/scrobbled-tracks")
html =
index_live
session
|> unwrap(fn view ->
view
|> form("form[phx-submit='search']", %{query: "Unique Track"})
|> render_submit()
assert html =~ "Unique Track Title"
end)
|> assert_has("p", text: "Unique Track Title")
end
test "searches tracks by artist name", %{conn: conn} do
track_fixture(%{artist_name: "Unique Artist Name"})
{:ok, index_live, _html} = live(conn, ~p"/scrobbled-tracks")
session = visit(conn, ~p"/scrobbled-tracks")
html =
index_live
session
|> unwrap(fn view ->
view
|> form("form[phx-submit='search']", %{query: "Unique Artist"})
|> render_submit()
assert html =~ "Unique Artist Name"
end)
|> assert_has("p", text: "Unique Artist Name")
end
test "searches tracks by album title", %{conn: conn} do
track_fixture(%{album_title: "Unique Album Title"})
{:ok, index_live, _html} = live(conn, ~p"/scrobbled-tracks")
session = visit(conn, ~p"/scrobbled-tracks")
html =
index_live
session
|> unwrap(fn view ->
view
|> form("form[phx-submit='search']", %{query: "Unique Album"})
|> render_submit()
assert html =~ "Unique Album Title"
end)
|> assert_has("p", text: "Unique Album Title")
end
end
@@ -94,37 +96,43 @@ defmodule MusicLibraryWeb.ScrobbledTracksLiveTest do
setup [:create_track]
test "updates track successfully", %{conn: conn, track: track} do
{:ok, index_live, _html} = live(conn, ~p"/scrobbled-tracks")
session =
conn
|> visit(~p"/scrobbled-tracks/#{track.scrobbled_at_uts}/edit")
|> assert_has("h1", text: "Edit Scrobbled Track")
|> assert_path(~p"/scrobbled-tracks/#{track.scrobbled_at_uts}/edit")
assert index_live
|> element("a[href='/scrobbled-tracks/#{track.scrobbled_at_uts}/edit']")
|> render_click() =~ "Edit Scrobbled Track"
# Test validation errors with invalid attrs
session
|> unwrap(fn view ->
view
|> form("#track-form", track: @invalid_track_attrs)
|> render_change()
end)
assert_patch(index_live, ~p"/scrobbled-tracks/#{track.scrobbled_at_uts}/edit")
assert index_live
|> form("#track-form", track: @invalid_track_attrs)
|> render_change() =~ "can't be blank"
html =
index_live
|> form("#track-form", track: @valid_track_attrs)
|> render_submit()
assert html =~ "Track updated successfully"
assert html =~ "Updated Track Title"
# Submit valid changes
session
|> fill_in("Track Title", with: @valid_track_attrs.title)
|> fill_in("Artist Name", with: @valid_track_attrs.artist.name)
|> fill_in("Album Title", with: @valid_track_attrs.album.title)
|> fill_in("Cover Image URL (optional)", with: @valid_track_attrs.cover_url)
|> click_button("Update Track")
|> assert_has("p", text: "Track updated successfully")
|> assert_has("p", text: "Updated Track Title")
end
test "shows validation errors", %{conn: conn, track: track} do
{:ok, index_live, _html} = live(conn, ~p"/scrobbled-tracks")
conn
|> visit(~p"/scrobbled-tracks/#{track.scrobbled_at_uts}/edit")
|> unwrap(fn view ->
html =
view
|> form("#track-form", track: @invalid_track_attrs)
|> render_change()
assert index_live
|> element("a[href='/scrobbled-tracks/#{track.scrobbled_at_uts}/edit']")
|> render_click()
assert index_live
|> form("#track-form", track: @invalid_track_attrs)
|> render_change() =~ "can't be blank"
assert html =~ "can't be blank"
html
end)
end
end
@@ -132,17 +140,11 @@ defmodule MusicLibraryWeb.ScrobbledTracksLiveTest do
test "navigates to next page", %{conn: conn} do
create_test_tracks(201)
{:ok, index_live, html} = live(conn, ~p"/scrobbled-tracks")
assert html =~ "Next"
assert has_element?(index_live, "#bottom_pagination")
html =
index_live
|> element("a[href*='page=2']", "2")
|> render_click()
assert html =~ "Scrobbled Tracks"
conn
|> visit(~p"/scrobbled-tracks")
|> assert_has("a", text: "Next")
|> assert_has("#bottom_pagination")
|> click_link("a[href*='page=2']", "2")
end
end
@@ -150,33 +152,30 @@ defmodule MusicLibraryWeb.ScrobbledTracksLiveTest do
test "handles query parameter", %{conn: conn} do
track_fixture(%{title: "Special Track"})
{:ok, _index_live, html} = live(conn, ~p"/scrobbled-tracks?query=Special")
assert html =~ "Special Track"
conn
|> visit(~p"/scrobbled-tracks?query=Special")
|> assert_has("p", text: "Special Track")
end
test "handles page parameter", %{conn: conn} do
create_test_tracks(5)
{:ok, _index_live, html} = live(conn, ~p"/scrobbled-tracks?page=2&page_size=3")
assert html =~ "Scrobbled Tracks"
# Just verify the page loads successfully
visit(conn, ~p"/scrobbled-tracks?page=2&page_size=3")
end
test "handles order parameter", %{conn: conn} do
create_test_tracks(5)
{:ok, _index_live, html} = live(conn, ~p"/scrobbled-tracks?order=title")
assert html =~ "Scrobbled Tracks"
# Just verify the page loads successfully with order parameter
visit(conn, ~p"/scrobbled-tracks?order=title")
end
test "handles invalid parameters gracefully", %{conn: conn} do
create_test_tracks(5)
{:ok, _index_live, html} = live(conn, ~p"/scrobbled-tracks?page=invalid&order=invalid")
assert html =~ "Scrobbled Tracks"
# Just verify the page loads successfully with invalid parameters
visit(conn, ~p"/scrobbled-tracks?page=invalid&order=invalid")
end
end
@@ -185,7 +184,7 @@ defmodule MusicLibraryWeb.ScrobbledTracksLiveTest do
invalid_id = 999_999_999
assert_raise Ecto.NoResultsError, fn ->
live(conn, ~p"/scrobbled-tracks/#{invalid_id}/edit")
visit(conn, ~p"/scrobbled-tracks/#{invalid_id}/edit")
end
end
end