Fix ArtistInfo.country/1 crash when area is missing
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user