Fix ArtistInfo.country/1 crash when area is missing

This commit is contained in:
Claudio Ortolina
2026-03-06 09:51:56 +00:00
parent 6c2036ff7d
commit 54f19cd9a2
2 changed files with 61 additions and 2 deletions
+1 -2
View File
@@ -37,8 +37,7 @@ defmodule MusicLibrary.Artists.ArtistInfo do
@spec country(t()) :: %{name: String.t(), code: String.t()}
def country(artist_info) do
%{"area" => area} =
artist_info.musicbrainz_data
area = Map.get(artist_info.musicbrainz_data, "area", %{})
country_code =
case area["iso-3166-1-codes"] || area["iso-3166-2-codes"] do
@@ -0,0 +1,60 @@
defmodule MusicLibrary.Artists.ArtistInfoTest do
use MusicLibrary.DataCase, async: true
alias MusicLibrary.Artists.ArtistInfo
describe "country/1" do
test "returns country from area with ISO 3166-1 codes" do
artist_info = %ArtistInfo{
musicbrainz_data: %{
"area" => %{
"name" => "United Kingdom",
"iso-3166-1-codes" => ["GB"]
}
}
}
assert ArtistInfo.country(artist_info) == %{name: "United Kingdom", code: "GB"}
end
test "returns country from area with ISO 3166-2 codes" do
artist_info = %ArtistInfo{
musicbrainz_data: %{
"area" => %{
"name" => "England",
"iso-3166-2-codes" => ["GB-ENG"]
}
}
}
assert ArtistInfo.country(artist_info) == %{name: "England", code: "GB-ENG"}
end
test "falls back to top-level country when area has no ISO codes" do
artist_info = %ArtistInfo{
musicbrainz_data: %{
"country" => "US",
"area" => %{"name" => "United States"}
}
}
assert ArtistInfo.country(artist_info) == %{name: "United States", code: "US"}
end
test "returns defaults when area key is missing" do
artist_info = %ArtistInfo{
musicbrainz_data: %{}
}
assert ArtistInfo.country(artist_info) == %{name: "World", code: "XW"}
end
test "falls back to top-level country when area is missing" do
artist_info = %ArtistInfo{
musicbrainz_data: %{"country" => "JP"}
}
assert ArtistInfo.country(artist_info) == %{name: "World", code: "JP"}
end
end
end