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