From 9b255562452c17e5f7124ee240f4c3edae3e4a29 Mon Sep 17 00:00:00 2001 From: Claudio Ortolina Date: Thu, 6 Feb 2025 21:03:38 +0000 Subject: [PATCH] Refactor Record.child_release_groups/1 to use stored ids --- lib/music_library/records/record.ex | 4 +- test/music_library/records/record_test.exs | 74 +++++++++++++++++++--- 2 files changed, 67 insertions(+), 11 deletions(-) diff --git a/lib/music_library/records/record.ex b/lib/music_library/records/record.ex index 46680eda..50828bc6 100644 --- a/lib/music_library/records/record.ex +++ b/lib/music_library/records/record.ex @@ -57,9 +57,7 @@ defmodule MusicLibrary.Records.Record do record.musicbrainz_data |> Map.get("relations", []) |> Enum.filter(fn relation -> - relation["target-type"] == "release_group" and - relation["type"] == "included in" and - relation["direction"] == "backward" + relation["release_group"]["id"] in record.included_release_group_ids end) |> Enum.map(fn relation -> MusicBrainz.ReleaseGroup.from_api_response(relation["release_group"]) diff --git a/test/music_library/records/record_test.exs b/test/music_library/records/record_test.exs index eb3fddd5..27c3916b 100644 --- a/test/music_library/records/record_test.exs +++ b/test/music_library/records/record_test.exs @@ -1,6 +1,9 @@ defmodule MusicLibrary.Records.RecordTest do use ExUnit.Case, async: true + import MusicLibrary.ReleaseGroupsFixtures + alias MusicLibrary.Records.Record + defp get_current_date(_) do %{current_date: ~D[2025-01-01]} end @@ -11,27 +14,82 @@ defmodule MusicLibrary.Records.RecordTest do test "returns true if the record has a release date in the past", %{ current_date: current_date } do - record = %MusicLibrary.Records.Record{release: "2024-01-01"} - assert MusicLibrary.Records.Record.released?(record, current_date) + record = %Record{release: "2024-01-01"} + assert Record.released?(record, current_date) end test "returns false if the record has a release date in the future", %{ current_date: current_date } do - record = %MusicLibrary.Records.Record{release: "2025-02-01"} - refute MusicLibrary.Records.Record.released?(record, current_date) + record = %Record{release: "2025-02-01"} + refute Record.released?(record, current_date) end test "returns true if the record is released today", %{current_date: current_date} do - record = %MusicLibrary.Records.Record{release: "2025-01-01"} - assert MusicLibrary.Records.Record.released?(record, current_date) + record = %Record{release: "2025-01-01"} + assert Record.released?(record, current_date) end test "it returns true if the release date is not precise enough", %{ current_date: current_date } do - record = %MusicLibrary.Records.Record{release: "2019"} - assert MusicLibrary.Records.Record.released?(record, current_date) + record = %Record{release: "2019"} + assert Record.released?(record, current_date) + end + end + + describe "child_release_groups/1" do + test "returns the release groups of children releases" do + release_group = release_group(:lockdown_trilogy) + + record = + %Record{musicbrainz_data: release_group} + |> Record.update_included_release_group_ids() + |> Ecto.Changeset.apply_changes() + + assert Record.child_release_groups(record) == [ + %MusicBrainz.ReleaseGroup{ + id: "749c07b5-4900-404b-bea9-bb6b16fa991e", + type: :other, + title: "Claustrophobic Universe", + release: "2021-04-23", + artists: "Mariusz Duda" + }, + %MusicBrainz.ReleaseGroup{ + id: "61077431-0057-4119-8f06-0df1098d21e5", + type: :other, + title: "Interior Drawings", + release: "2021-12-10", + artists: "Mariusz Duda" + }, + %MusicBrainz.ReleaseGroup{ + id: "c36123e3-8899-48a5-8196-9dbb72421d69", + type: :other, + title: "Let’s Meet Outside", + release: "2022-05-20", + artists: "Mariusz Duda" + }, + %MusicBrainz.ReleaseGroup{ + id: "d463f2b1-d254-4baf-a957-fb78c6e5b956", + type: :other, + title: "Lockdown Spaces", + release: "2020-06-26", + artists: "Mariusz Duda" + } + ] + end + end + + describe "child_release_groups_count/1" do + test "returns the release groups count of children releases" do + release_group = release_group(:lockdown_trilogy) + + record = + %Record{musicbrainz_data: release_group} + |> Record.update_included_release_group_ids() + |> Ecto.Changeset.apply_changes() + + assert Record.child_release_groups_count(record) == 4 end end end