Files
2026-03-05 20:25:13 +00:00

91 lines
3.6 KiB
Elixir

defmodule MusicLibraryWeb.ErrorMessagesTest do
use ExUnit.Case, async: true
alias MusicLibraryWeb.ErrorMessages
describe "friendly_message/1" do
test "maps known app error atoms" do
assert ErrorMessages.friendly_message(:cover_not_available) == "cover art is not available"
assert ErrorMessages.friendly_message(:no_duration) ==
"release has no track duration information"
assert ErrorMessages.friendly_message(:medium_not_found) ==
"the specified disc was not found"
assert ErrorMessages.friendly_message(:no_session_key) ==
"Last.fm session key is not configured"
assert ErrorMessages.friendly_message(:already_collected) ==
"this record is already in your collection"
assert ErrorMessages.friendly_message(:not_found) == "the resource was not found"
assert ErrorMessages.friendly_message(:no_discogs_data) == "no Discogs profile available"
assert ErrorMessages.friendly_message(:image_not_found) == "no image could be found"
assert ErrorMessages.friendly_message(:invalid_parameters) ==
"invalid parameters were provided"
assert ErrorMessages.friendly_message(:download_failed) == "the download failed"
end
test "maps Last.fm API error atoms" do
assert ErrorMessages.friendly_message(:authentication_failed) ==
"Last.fm authentication failed"
assert ErrorMessages.friendly_message(:invalid_session_key) ==
"Last.fm session has expired, please reconnect"
assert ErrorMessages.friendly_message(:invalid_api_key) == "Last.fm API key is invalid"
assert ErrorMessages.friendly_message(:suspended_api_key) ==
"Last.fm API key has been suspended"
assert ErrorMessages.friendly_message(:rate_limit_exceeded) ==
"rate limit exceeded, please try again later"
assert ErrorMessages.friendly_message(:service_offline) ==
"service is currently offline, please try again later"
assert ErrorMessages.friendly_message(:transient_error) ==
"a temporary error occurred, please try again"
assert ErrorMessages.friendly_message(:operation_failed) ==
"the operation failed, please try again"
assert ErrorMessages.friendly_message(:invalid_resource) ==
"the requested resource does not exist"
end
test "maps Req.TransportError with common reasons" do
assert ErrorMessages.friendly_message(%Req.TransportError{reason: :timeout}) ==
"the request timed out, please try again"
assert ErrorMessages.friendly_message(%Req.TransportError{reason: :econnrefused}) ==
"the service is not reachable"
assert ErrorMessages.friendly_message(%Req.TransportError{reason: :nxdomain}) ==
"the service could not be found"
assert ErrorMessages.friendly_message(%Req.TransportError{reason: :closed}) ==
"a connection error occurred, please try again"
end
test "maps Ecto.Changeset" do
changeset = Ecto.Changeset.change(%MusicLibrary.Records.Record{})
assert ErrorMessages.friendly_message(changeset) == "validation failed"
end
test "returns fallback for unknown terms" do
assert ErrorMessages.friendly_message(:unknown_error) ==
"something went wrong, please try again"
assert ErrorMessages.friendly_message("some string") ==
"something went wrong, please try again"
assert ErrorMessages.friendly_message({:complex, :term}) ==
"something went wrong, please try again"
end
end
end