Extract artist infos fixtures
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
defmodule MusicLibrary.ListeningStatsTest do
|
||||
use MusicLibrary.DataCase
|
||||
|
||||
import MusicLibrary.ArtistInfoFixtures
|
||||
import MusicLibrary.ScrobbledTracksFixtures
|
||||
|
||||
alias MusicLibrary.ListeningStats
|
||||
@@ -19,13 +20,10 @@ defmodule MusicLibrary.ListeningStatsTest do
|
||||
|
||||
describe "get_top_artists/1" do
|
||||
test "counts tracks with missing artist_infos records" do
|
||||
artist_mbid = Ecto.UUID.generate()
|
||||
artist_info =
|
||||
artist_info_fixture(%{musicbrainz_data: %{"name" => "Thin Lizzy"}})
|
||||
|
||||
# Create an artist_info record for the known musicbrainz_id
|
||||
MusicLibrary.Repo.insert!(%MusicLibrary.Artists.ArtistInfo{
|
||||
id: artist_mbid,
|
||||
musicbrainz_data: %{"name" => "Thin Lizzy"}
|
||||
})
|
||||
artist_mbid = artist_info.id
|
||||
|
||||
now = System.system_time(:second)
|
||||
|
||||
@@ -62,14 +60,14 @@ defmodule MusicLibrary.ListeningStatsTest do
|
||||
end
|
||||
|
||||
test "returns image_hash from artist_infos when available" do
|
||||
artist_mbid = Ecto.UUID.generate()
|
||||
|
||||
MusicLibrary.Repo.insert!(%MusicLibrary.Artists.ArtistInfo{
|
||||
id: artist_mbid,
|
||||
artist_info =
|
||||
artist_info_fixture(%{
|
||||
musicbrainz_data: %{"name" => "Test Artist"},
|
||||
image_data_hash: "abc123"
|
||||
})
|
||||
|
||||
artist_mbid = artist_info.id
|
||||
|
||||
track_fixture(%{
|
||||
artist_name: "Test Artist",
|
||||
artist_musicbrainz_id: artist_mbid,
|
||||
@@ -98,12 +96,10 @@ defmodule MusicLibrary.ListeningStatsTest do
|
||||
|
||||
describe "get_top_artists_by_days/2" do
|
||||
test "counts tracks with missing artist_infos records within date range" do
|
||||
artist_mbid = Ecto.UUID.generate()
|
||||
artist_info =
|
||||
artist_info_fixture(%{musicbrainz_data: %{"name" => "Thin Lizzy"}})
|
||||
|
||||
MusicLibrary.Repo.insert!(%MusicLibrary.Artists.ArtistInfo{
|
||||
id: artist_mbid,
|
||||
musicbrainz_data: %{"name" => "Thin Lizzy"}
|
||||
})
|
||||
artist_mbid = artist_info.id
|
||||
|
||||
now = DateTime.utc_now()
|
||||
now_unix = DateTime.to_unix(now)
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
defmodule MusicLibrary.Records.SimilarityTest do
|
||||
use MusicLibrary.DataCase
|
||||
|
||||
import MusicLibrary.ArtistInfoFixtures
|
||||
import MusicLibrary.Fixtures.Records
|
||||
|
||||
alias MusicLibrary.Artists.ArtistInfo
|
||||
alias MusicLibrary.Records.{Record, Similarity}
|
||||
alias MusicLibrary.Repo
|
||||
|
||||
describe "text_representation/1" do
|
||||
test "generates text representation for a record" do
|
||||
@@ -35,10 +34,8 @@ defmodule MusicLibrary.Records.SimilarityTest do
|
||||
end
|
||||
|
||||
test "includes Wikipedia data when available" do
|
||||
artist_id = Ecto.UUID.generate()
|
||||
|
||||
Repo.insert!(%ArtistInfo{
|
||||
id: artist_id,
|
||||
artist_info =
|
||||
artist_info_fixture(%{
|
||||
musicbrainz_data: %{"name" => "Radiohead"},
|
||||
wikipedia_data: %{
|
||||
"description" => "English rock band",
|
||||
@@ -53,7 +50,7 @@ defmodule MusicLibrary.Records.SimilarityTest do
|
||||
%{
|
||||
name: "Radiohead",
|
||||
sort_name: "Radiohead",
|
||||
musicbrainz_id: artist_id,
|
||||
musicbrainz_id: artist_info.id,
|
||||
disambiguation: "",
|
||||
joinphrase: ""
|
||||
}
|
||||
@@ -71,10 +68,8 @@ defmodule MusicLibrary.Records.SimilarityTest do
|
||||
end
|
||||
|
||||
test "falls back to truncated Discogs profile when Wikipedia unavailable" do
|
||||
artist_id = Ecto.UUID.generate()
|
||||
|
||||
Repo.insert!(%ArtistInfo{
|
||||
id: artist_id,
|
||||
artist_info =
|
||||
artist_info_fixture(%{
|
||||
musicbrainz_data: %{"name" => "Some Artist"},
|
||||
discogs_data: %{
|
||||
"name" => "Some Artist",
|
||||
@@ -89,7 +84,7 @@ defmodule MusicLibrary.Records.SimilarityTest do
|
||||
%{
|
||||
name: "Some Artist",
|
||||
sort_name: "Some Artist",
|
||||
musicbrainz_id: artist_id,
|
||||
musicbrainz_id: artist_info.id,
|
||||
disambiguation: "",
|
||||
joinphrase: ""
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
defmodule MusicLibrary.Worker.ApplyScrobbleRulesTest do
|
||||
use MusicLibrary.DataCase
|
||||
|
||||
import MusicLibrary.ScrobbledTracksFixtures
|
||||
|
||||
alias LastFm.Track
|
||||
alias MusicLibrary.ScrobbleRules
|
||||
alias MusicLibrary.Worker.ApplyScrobbleRules
|
||||
@@ -34,31 +36,21 @@ defmodule MusicLibrary.Worker.ApplyScrobbleRulesTest do
|
||||
})
|
||||
|
||||
# Create test tracks
|
||||
%Track{}
|
||||
|> Track.changeset(%{
|
||||
scrobbled_at_uts: System.system_time(:second),
|
||||
scrobbled_track_fixture(%{
|
||||
musicbrainz_id: "track-mbid-1",
|
||||
title: "Breathe",
|
||||
cover_url: "http://example.com/cover.jpg",
|
||||
scrobbled_at_label: "01 Jan 2023, 12:00",
|
||||
artist: %{musicbrainz_id: "", name: "Pink Floyd"},
|
||||
album: %{musicbrainz_id: "", title: "Dark Side of the Moon"},
|
||||
last_fm_data: %{}
|
||||
album: %{musicbrainz_id: "", title: "Dark Side of the Moon"}
|
||||
})
|
||||
|> Repo.insert!()
|
||||
|
||||
%Track{}
|
||||
|> Track.changeset(%{
|
||||
scrobbled_track_fixture(%{
|
||||
scrobbled_at_uts: System.system_time(:second) + 1,
|
||||
musicbrainz_id: "track-mbid-2",
|
||||
title: "Money",
|
||||
cover_url: "http://example.com/cover.jpg",
|
||||
scrobbled_at_label: "01 Jan 2023, 12:05",
|
||||
artist: %{musicbrainz_id: "", name: "Pink Floyd"},
|
||||
album: %{musicbrainz_id: "", title: "Wish You Were Here"},
|
||||
last_fm_data: %{}
|
||||
album: %{musicbrainz_id: "", title: "Wish You Were Here"}
|
||||
})
|
||||
|> Repo.insert!()
|
||||
|
||||
# Execute the worker
|
||||
assert :ok = ApplyScrobbleRules.perform(%Oban.Job{args: %{}})
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
defmodule MusicLibrary.Worker.ArtistRefreshDiscogsDataTest do
|
||||
use MusicLibrary.DataCase
|
||||
|
||||
import MusicLibrary.ArtistInfoFixtures
|
||||
import MusicLibrary.Fixtures.Records
|
||||
|
||||
alias Discogs.Fixtures.Artist, as: ArtistFixture
|
||||
@@ -27,14 +28,10 @@ defmodule MusicLibrary.Worker.ArtistRefreshDiscogsDataTest do
|
||||
end
|
||||
|
||||
test "returns ok when no discogs data is available" do
|
||||
artist_id = Ecto.UUID.generate()
|
||||
artist_info =
|
||||
artist_info_fixture(%{musicbrainz_data: %{"name" => "No Discogs Artist"}})
|
||||
|
||||
Repo.insert!(%Artists.ArtistInfo{
|
||||
id: artist_id,
|
||||
musicbrainz_data: %{"name" => "No Discogs Artist"}
|
||||
})
|
||||
|
||||
assert {:ok, _} = perform_job(ArtistRefreshDiscogsData, %{"id" => artist_id})
|
||||
assert {:ok, _} = perform_job(ArtistRefreshDiscogsData, %{"id" => artist_info.id})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,20 +1,18 @@
|
||||
defmodule MusicLibrary.Worker.ArtistRefreshMusicBrainzDataTest do
|
||||
use MusicLibrary.DataCase
|
||||
|
||||
import MusicLibrary.ArtistInfoFixtures
|
||||
|
||||
alias MusicBrainz.Fixtures.Artist, as: ArtistFixture
|
||||
alias MusicLibrary.Artists
|
||||
alias MusicLibrary.Artists.ArtistInfo
|
||||
alias MusicLibrary.Worker.ArtistRefreshMusicBrainzData
|
||||
|
||||
setup do
|
||||
artist_id = Ecto.UUID.generate()
|
||||
artist_info =
|
||||
artist_info_fixture(%{musicbrainz_data: %{"name" => "Steven Wilson"}})
|
||||
|
||||
Repo.insert!(%ArtistInfo{
|
||||
id: artist_id,
|
||||
musicbrainz_data: %{"name" => "Steven Wilson"}
|
||||
})
|
||||
|
||||
%{artist_id: artist_id}
|
||||
%{artist_id: artist_info.id}
|
||||
end
|
||||
|
||||
describe "perform/1" do
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
defmodule MusicLibrary.Worker.ArtistRefreshWikipediaDataTest do
|
||||
use MusicLibrary.DataCase
|
||||
|
||||
import MusicLibrary.ArtistInfoFixtures
|
||||
import MusicLibrary.Fixtures.Records
|
||||
|
||||
alias MusicLibrary.Artists
|
||||
@@ -38,16 +39,12 @@ defmodule MusicLibrary.Worker.ArtistRefreshWikipediaDataTest do
|
||||
end
|
||||
|
||||
test "discards job when no wikidata_id exists in musicbrainz_data" do
|
||||
artist_id = Ecto.UUID.generate()
|
||||
|
||||
Repo.insert!(%Artists.ArtistInfo{
|
||||
id: artist_id,
|
||||
musicbrainz_data: %{"name" => "No Wikipedia Artist"}
|
||||
})
|
||||
artist_info =
|
||||
artist_info_fixture(%{musicbrainz_data: %{"name" => "No Wikipedia Artist"}})
|
||||
|
||||
# No wikidata relation in musicbrainz_data → fetch_wikipedia_data returns {:ok, artist_info}
|
||||
# Worker wraps non-error returns with `with`, so it passes through as :ok
|
||||
assert {:ok, _} = perform_job(ArtistRefreshWikipediaData, %{"id" => artist_id})
|
||||
assert {:ok, _} = perform_job(ArtistRefreshWikipediaData, %{"id" => artist_info.id})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
defmodule MusicLibrary.Worker.FetchArtistImageTest do
|
||||
use MusicLibrary.DataCase
|
||||
|
||||
import MusicLibrary.ArtistInfoFixtures
|
||||
import MusicLibrary.Fixtures.Records
|
||||
|
||||
alias Discogs.Fixtures.Artist
|
||||
@@ -27,29 +28,25 @@ defmodule MusicLibrary.Worker.FetchArtistImageTest do
|
||||
end
|
||||
|
||||
test "cancels when no discogs data exists" do
|
||||
artist_id = Ecto.UUID.generate()
|
||||
|
||||
Repo.insert!(%Artists.ArtistInfo{
|
||||
id: artist_id,
|
||||
artist_info =
|
||||
artist_info_fixture(%{
|
||||
musicbrainz_data: %{"name" => "No Image Artist"},
|
||||
discogs_data: nil
|
||||
})
|
||||
|
||||
assert {:cancel, :no_discogs_data} =
|
||||
perform_job(FetchArtistImage, %{"id" => artist_id})
|
||||
perform_job(FetchArtistImage, %{"id" => artist_info.id})
|
||||
end
|
||||
|
||||
test "cancels when discogs data has no images" do
|
||||
artist_id = Ecto.UUID.generate()
|
||||
|
||||
Repo.insert!(%Artists.ArtistInfo{
|
||||
id: artist_id,
|
||||
artist_info =
|
||||
artist_info_fixture(%{
|
||||
musicbrainz_data: %{"name" => "No Image Artist"},
|
||||
discogs_data: %{"id" => 12_345, "images" => []}
|
||||
})
|
||||
|
||||
assert {:cancel, :image_not_found} =
|
||||
perform_job(FetchArtistImage, %{"id" => artist_id})
|
||||
perform_job(FetchArtistImage, %{"id" => artist_info.id})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,20 +1,17 @@
|
||||
defmodule MusicLibrary.Worker.FetchArtistLastFmDataTest do
|
||||
use MusicLibrary.DataCase
|
||||
|
||||
import MusicLibrary.ArtistInfoFixtures
|
||||
|
||||
alias MusicLibrary.Artists
|
||||
alias MusicLibrary.Artists.ArtistInfo
|
||||
alias MusicLibrary.Repo
|
||||
alias MusicLibrary.Worker.FetchArtistLastFmData
|
||||
|
||||
setup do
|
||||
artist_id = Ecto.UUID.generate()
|
||||
artist_info =
|
||||
artist_info_fixture(%{musicbrainz_data: %{"name" => "Steven Wilson"}})
|
||||
|
||||
Repo.insert!(%ArtistInfo{
|
||||
id: artist_id,
|
||||
musicbrainz_data: %{"name" => "Steven Wilson"}
|
||||
})
|
||||
|
||||
%{artist_id: artist_id}
|
||||
%{artist_id: artist_info.id}
|
||||
end
|
||||
|
||||
describe "perform/1" do
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
defmodule MusicLibrary.Worker.PruneArtistInfoTest do
|
||||
use MusicLibrary.DataCase
|
||||
|
||||
import MusicLibrary.ArtistInfoFixtures
|
||||
import MusicLibrary.Fixtures.Records
|
||||
|
||||
alias MusicLibrary.Artists
|
||||
@@ -18,17 +19,13 @@ defmodule MusicLibrary.Worker.PruneArtistInfoTest do
|
||||
end
|
||||
|
||||
test "deletes artist info when artist is not referenced by any record" do
|
||||
artist_id = Ecto.UUID.generate()
|
||||
artist_info =
|
||||
artist_info_fixture(%{musicbrainz_data: %{"name" => "Orphaned Artist"}})
|
||||
|
||||
Repo.insert!(%Artists.ArtistInfo{
|
||||
id: artist_id,
|
||||
musicbrainz_data: %{"name" => "Orphaned Artist"}
|
||||
})
|
||||
|
||||
assert :ok = perform_job(PruneArtistInfo, %{"id" => artist_id})
|
||||
assert :ok = perform_job(PruneArtistInfo, %{"id" => artist_info.id})
|
||||
|
||||
assert_raise Ecto.NoResultsError, fn ->
|
||||
Artists.get_artist_info!(artist_id)
|
||||
Artists.get_artist_info!(artist_info.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
defmodule MusicLibrary.ArtistInfoFixtures do
|
||||
@moduledoc """
|
||||
This module defines test helpers for creating
|
||||
entities via the `MusicLibrary.Artists.ArtistInfo` schema.
|
||||
"""
|
||||
|
||||
alias MusicLibrary.Artists.ArtistInfo
|
||||
alias MusicLibrary.Repo
|
||||
|
||||
def artist_info_fixture(attrs \\ %{}) do
|
||||
attrs =
|
||||
Map.merge(
|
||||
%{
|
||||
id: Ecto.UUID.generate(),
|
||||
musicbrainz_data: %{"name" => "Test Artist"}
|
||||
},
|
||||
attrs
|
||||
)
|
||||
|
||||
Repo.insert!(struct!(ArtistInfo, attrs))
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user