Extract artist infos fixtures

This commit is contained in:
Claudio Ortolina
2026-03-06 08:58:59 +00:00
parent 3819afca4d
commit f9b381570f
10 changed files with 98 additions and 110 deletions
@@ -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,
musicbrainz_data: %{"name" => "No Image Artist"},
discogs_data: nil
})
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,
musicbrainz_data: %{"name" => "No Image Artist"},
discogs_data: %{"id" => 12_345, "images" => []}
})
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