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()}
|
@spec country(t()) :: %{name: String.t(), code: String.t()}
|
||||||
def country(artist_info) do
|
def country(artist_info) do
|
||||||
%{"area" => area} =
|
area = Map.get(artist_info.musicbrainz_data, "area", %{})
|
||||||
artist_info.musicbrainz_data
|
|
||||||
|
|
||||||
country_code =
|
country_code =
|
||||||
case area["iso-3166-1-codes"] || area["iso-3166-2-codes"] do
|
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