From ae3c754570e9e7ef7a703bb52cc469ff4f2b6eb3 Mon Sep 17 00:00:00 2001 From: Claudio Ortolina Date: Tue, 12 Nov 2024 09:54:47 +0000 Subject: [PATCH] Add test for importing a record from a release --- test/music_library/records_test.exs | 40 ++++++++++++++ .../fixtures/release_groups_fixtures.ex | 53 +++++++++++++++++++ 2 files changed, 93 insertions(+) diff --git a/test/music_library/records_test.exs b/test/music_library/records_test.exs index 41ea5084..b380f480 100644 --- a/test/music_library/records_test.exs +++ b/test/music_library/records_test.exs @@ -167,4 +167,44 @@ defmodule MusicLibrary.RecordsTest do assert record.purchased_at == DateTime.truncate(current_time, :second) end end + + describe "import_from_musicbrainz_release/2" do + test "it saves a record with its cover art" do + current_time = DateTime.utc_now() + + release = release() + release_id = release_id() + + release_group = release_group() + release_group_id = release_group_id() + + expect(APIBehaviourMock, :get_release, fn ^release_id -> + {:ok, release} + end) + + expect(APIBehaviourMock, :get_release_group, fn ^release_group_id -> + {:ok, release_group} + end) + + cover_data = File.read!(marbles_cover_fixture()) + + expect(APIBehaviourMock, :get_cover_art, fn {:musicbrainz_id, ^release_group_id} -> + {:ok, cover_data} + end) + + assert {:ok, record} = + Records.import_from_musicbrainz_release(release_id, + format: :vinyl, + purchased_at: current_time + ) + + assert [artist] = record.artists + assert artist.name == "Marillion" + + assert record.musicbrainz_id == release_group_id + assert record.title == "Marbles" + assert record.format == :vinyl + assert record.purchased_at == DateTime.truncate(current_time, :second) + end + end end diff --git a/test/support/fixtures/release_groups_fixtures.ex b/test/support/fixtures/release_groups_fixtures.ex index 24513057..18da2ca7 100644 --- a/test/support/fixtures/release_groups_fixtures.ex +++ b/test/support/fixtures/release_groups_fixtures.ex @@ -100,4 +100,57 @@ defmodule MusicLibrary.ReleaseGroupsFixtures do "title" => "Marbles" } end + + def release_id do + release() |> Map.get("id") + end + + def release do + %{ + "asin" => nil, + "barcode" => "", + "country" => "XE", + "cover-art-archive" => %{ + "artwork" => false, + "back" => false, + "count" => 0, + "darkened" => false, + "front" => false + }, + "date" => "2004-05-03", + "disambiguation" => "non‐deluxe double CD with o‐card", + "id" => "0e290154-5375-4f4f-a658-4a92bf02faa5", + "packaging" => "Jewel Case", + "packaging-id" => "ec27701a-4a22-37f4-bfac-6616e0f9750a", + "quality" => "normal", + "release-events" => [ + %{ + "area" => %{ + "disambiguation" => "", + "id" => "89a675c2-3e37-3518-b83c-418bad59a85a", + "iso-3166-1-codes" => ["XE"], + "name" => "Europe", + "sort-name" => "Europe", + "type" => nil, + "type-id" => nil + }, + "date" => "2004-05-03" + } + ], + "release-group" => %{ + "disambiguation" => "", + "first-release-date" => "2004-05-03", + "id" => "20790e26-98e4-3ad3-a67f-b674758b942d", + "primary-type" => "Album", + "primary-type-id" => "f529b476-6e62-324f-b0aa-1f3e33d313fc", + "secondary-type-ids" => [], + "secondary-types" => [], + "title" => "Marbles" + }, + "status" => "Official", + "status-id" => "4e304316-386d-3409-af2e-78857eec5cfe", + "text-representation" => %{"language" => "eng", "script" => "Latn"}, + "title" => "Marbles" + } + end end