From 94a27840202dc3f80118ea51d059ffffd94c265e Mon Sep 17 00:00:00 2001 From: Claudio Ortolina Date: Mon, 17 Feb 2025 22:07:49 +0000 Subject: [PATCH] Move function in MusicBrainz main module --- lib/music_brainz/api_impl.ex | 4 ++-- lib/music_library/records.ex | 11 --------- .../record_live/barcode_scanner_component.ex | 2 +- test/music_brainz_test.exs | 23 +++++++++++++++++-- test/music_library/records/record_test.exs | 2 +- test/music_library/records_test.exs | 20 +--------------- .../live/collection_live/index_test.exs | 2 +- .../live/stats_live/index_test.exs | 2 +- ...se_groups_fixtures.ex => release_group.ex} | 2 +- .../support/fixtures/music_library/records.ex | 2 +- 10 files changed, 30 insertions(+), 40 deletions(-) rename test/support/fixtures/music_brainz/{release_groups_fixtures.ex => release_group.ex} (96%) diff --git a/lib/music_brainz/api_impl.ex b/lib/music_brainz/api_impl.ex index e38e4a81..3900ea09 100644 --- a/lib/music_brainz/api_impl.ex +++ b/lib/music_brainz/api_impl.ex @@ -11,7 +11,7 @@ defmodule MusicBrainz.APIImpl do require Logger - alias MusicBrainz.ReleaseGroupSearchResult + alias MusicBrainz.{ReleaseGroupSearchResult, ReleaseSearchResult} @doc """ Uses the [lookup](https://musicbrainz.org/doc/MusicBrainz_API#Lookups) endpoint with the release group id and include the @@ -311,7 +311,7 @@ defmodule MusicBrainz.APIImpl do @base_url <> "/release?query=barcode:#{barcode}&fmt=json" with {:ok, result} <- json_get(url, config) do - {:ok, result["releases"]} + {:ok, Enum.map(result["releases"], &ReleaseSearchResult.from_api_response/1)} end end diff --git a/lib/music_library/records.ex b/lib/music_library/records.ex index 37a90618..d4f373ee 100644 --- a/lib/music_library/records.ex +++ b/lib/music_library/records.ex @@ -128,17 +128,6 @@ defmodule MusicLibrary.Records do end end - def search_release_by_barcode(barcode) do - case MusicBrainz.search_release_by_barcode(barcode) do - {:ok, releases} -> - {:ok, - Enum.map(releases, fn r -> MusicBrainz.ReleaseSearchResult.from_api_response(r) end)} - - error -> - error - end - end - def import_from_musicbrainz_release_group(musicbrainz_id, opts \\ []) do with format = Keyword.get(opts, :format, "cd"), purchased_at = Keyword.get(opts, :purchased_at), diff --git a/lib/music_library_web/live/record_live/barcode_scanner_component.ex b/lib/music_library_web/live/record_live/barcode_scanner_component.ex index 98a903e9..ac1bbe37 100644 --- a/lib/music_library_web/live/record_live/barcode_scanner_component.ex +++ b/lib/music_library_web/live/record_live/barcode_scanner_component.ex @@ -120,7 +120,7 @@ defmodule MusicLibraryWeb.RecordLive.BarcodeScannerComponent do # TODO: inform when record is already in collection socket = - case Records.search_release_by_barcode(number) do + case MusicBrainz.search_release_by_barcode(number) do {:ok, [best_match_release | _other_releases]} -> assign(socket, :releases, [best_match_release | socket.assigns.releases]) diff --git a/test/music_brainz_test.exs b/test/music_brainz_test.exs index 692de1c2..308ce7e4 100644 --- a/test/music_brainz_test.exs +++ b/test/music_brainz_test.exs @@ -1,8 +1,9 @@ defmodule MusicBrainzTest do use ExUnit.Case, async: true - alias MusicBrainz.APIMock - import MusicLibrary.Fixtures.ReleaseGroup + alias MusicBrainz.{APIMock, ReleaseSearchResult} + import MusicBrainz.Fixtures.Release + import MusicBrainz.Fixtures.ReleaseGroup import Mox setup :verify_on_exit! @@ -19,4 +20,22 @@ defmodule MusicBrainzTest do MusicBrainz.search_release_group("Marillion", limit: 20, offset: 10) end end + + describe "search_release_by_barcode/1" do + test "it returns releases belonging to the same release group" do + barcode = "5052205070023" + releases = releases(:queen_greatest_hits) + + expect(APIMock, :search_release_by_barcode, fn ^barcode, _config -> + {:ok, Enum.map(releases, &ReleaseSearchResult.from_api_response/1)} + end) + + assert {:ok, results} = MusicBrainz.search_release_by_barcode(barcode) + + assert Enum.all?(results, fn result -> + result.release_group.id == "69ce61c8-127f-3809-95d8-62fdf3ae1347" && + result.release_group.title == "Greatest Hits" + end) + end + end end diff --git a/test/music_library/records/record_test.exs b/test/music_library/records/record_test.exs index 2fb718f3..6e94f7a7 100644 --- a/test/music_library/records/record_test.exs +++ b/test/music_library/records/record_test.exs @@ -1,7 +1,7 @@ defmodule MusicLibrary.Records.RecordTest do use ExUnit.Case, async: true - import MusicLibrary.Fixtures.ReleaseGroup + import MusicBrainz.Fixtures.ReleaseGroup alias MusicLibrary.Records.Record doctest Record diff --git a/test/music_library/records_test.exs b/test/music_library/records_test.exs index afb2df8e..f8a91bff 100644 --- a/test/music_library/records_test.exs +++ b/test/music_library/records_test.exs @@ -5,7 +5,7 @@ defmodule MusicLibrary.RecordsTest do alias MusicLibrary.Records.SearchIndex alias MusicBrainz.APIMock import MusicLibrary.Fixtures.Records - import MusicLibrary.Fixtures.ReleaseGroup + import MusicBrainz.Fixtures.ReleaseGroup import MusicBrainz.Fixtures.Release import Mox @@ -311,22 +311,4 @@ defmodule MusicLibrary.RecordsTest do "14A033C9315419E0903B4D74EA6A95D4DC58CC7FE82F6F03BDA5750E7D3A590C" end end - - describe "search_release_by_barcode/1" do - test "it returns releases belonging to the same release group" do - barcode = "5052205070023" - releases = releases(:queen_greatest_hits) - - expect(APIMock, :search_release_by_barcode, fn ^barcode, _config -> - {:ok, releases} - end) - - assert {:ok, results} = Records.search_release_by_barcode(barcode) - - assert Enum.all?(results, fn result -> - result.release_group.id == "69ce61c8-127f-3809-95d8-62fdf3ae1347" && - result.release_group.title == "Greatest Hits" - end) - end - end end diff --git a/test/music_library_web/live/collection_live/index_test.exs b/test/music_library_web/live/collection_live/index_test.exs index 7fb8eea9..3b3dda3b 100644 --- a/test/music_library_web/live/collection_live/index_test.exs +++ b/test/music_library_web/live/collection_live/index_test.exs @@ -2,7 +2,7 @@ defmodule MusicLibraryWeb.CollectionLive.IndexTest do use MusicLibraryWeb.ConnCase import MusicLibrary.Fixtures.Records - import MusicLibrary.Fixtures.ReleaseGroup + import MusicBrainz.Fixtures.ReleaseGroup import MusicLibraryWeb.RecordComponents, only: [format_label: 1, type_label: 1] import Mox alias MusicLibrary.Records.{Cover, Record} diff --git a/test/music_library_web/live/stats_live/index_test.exs b/test/music_library_web/live/stats_live/index_test.exs index 81108b3c..78093145 100644 --- a/test/music_library_web/live/stats_live/index_test.exs +++ b/test/music_library_web/live/stats_live/index_test.exs @@ -5,7 +5,7 @@ defmodule MusicLibraryWeb.StatsLive.IndexTest do alias MusicBrainz.APIMock import MusicLibraryWeb.RecordComponents, only: [format_label: 1, type_label: 1] import MusicLibrary.Fixtures.Records - import MusicLibrary.Fixtures.ReleaseGroup + import MusicBrainz.Fixtures.ReleaseGroup import MusicBrainz.Fixtures.Release import Mox diff --git a/test/support/fixtures/music_brainz/release_groups_fixtures.ex b/test/support/fixtures/music_brainz/release_group.ex similarity index 96% rename from test/support/fixtures/music_brainz/release_groups_fixtures.ex rename to test/support/fixtures/music_brainz/release_group.ex index ce5ab484..19d901ba 100644 --- a/test/support/fixtures/music_brainz/release_groups_fixtures.ex +++ b/test/support/fixtures/music_brainz/release_group.ex @@ -1,4 +1,4 @@ -defmodule MusicLibrary.Fixtures.ReleaseGroup do +defmodule MusicBrainz.Fixtures.ReleaseGroup do @fixtures_folder Path.join([File.cwd!(), "test/support/fixtures/music_brainz"]) alias MusicBrainz.ReleaseGroupSearchResult diff --git a/test/support/fixtures/music_library/records.ex b/test/support/fixtures/music_library/records.ex index 27562200..63fe3f55 100644 --- a/test/support/fixtures/music_library/records.ex +++ b/test/support/fixtures/music_library/records.ex @@ -5,7 +5,7 @@ defmodule MusicLibrary.Fixtures.Records do """ alias MusicLibrary.Records.Record - alias MusicLibrary.Fixtures.ReleaseGroup + alias MusicBrainz.Fixtures.ReleaseGroup @genres [ "progressive rock",