From 4bfe27e6c898684b21c88b2d474e1f3aea608a5f Mon Sep 17 00:00:00 2001 From: Claudio Ortolina Date: Fri, 3 Apr 2026 12:43:10 +0100 Subject: [PATCH] Cancel refresh cover job if image is not available --- lib/music_library/worker/refresh_cover.ex | 11 +++++++++-- test/music_library/worker/refresh_cover_test.exs | 12 ++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/lib/music_library/worker/refresh_cover.ex b/lib/music_library/worker/refresh_cover.ex index a784a2e4..746a1b7f 100644 --- a/lib/music_library/worker/refresh_cover.ex +++ b/lib/music_library/worker/refresh_cover.ex @@ -5,8 +5,15 @@ defmodule MusicLibrary.Worker.RefreshCover do def perform(%Oban.Job{args: %{"id" => record_id}}) do record = MusicLibrary.Records.get_record!(record_id) - with {:ok, updated_record} <- MusicLibrary.Records.refresh_cover(record) do - MusicLibrary.Records.notify_update(updated_record) + case MusicLibrary.Records.refresh_cover(record) do + {:ok, updated_record} -> + MusicLibrary.Records.notify_update(updated_record) + + {:error, :cover_not_available} -> + {:cancel, :cover_not_available} + + error -> + error end end end diff --git a/test/music_library/worker/refresh_cover_test.exs b/test/music_library/worker/refresh_cover_test.exs index d097bdde..74354487 100644 --- a/test/music_library/worker/refresh_cover_test.exs +++ b/test/music_library/worker/refresh_cover_test.exs @@ -24,6 +24,18 @@ defmodule MusicLibrary.Worker.RefreshCoverTest do assert asset.format == "image/jpeg" end + @tag :capture_log + test "cancels the job when cover is not available" do + record = record() + + Req.Test.stub(MusicBrainz.API, fn conn -> + Plug.Conn.send_resp(conn, 404, "Not Found") + end) + + assert {:cancel, :cover_not_available} = + perform_job(RefreshCover, %{"id" => record.id}) + end + test "raises when record does not exist" do assert_raise Ecto.NoResultsError, fn -> perform_job(RefreshCover, %{"id" => Ecto.UUID.generate()})