91 lines
2.7 KiB
Elixir
91 lines
2.7 KiB
Elixir
defmodule LastFmTest do
|
|
use ExUnit.Case, async: true
|
|
|
|
alias LastFm.{Artist, Fixtures, Scrobble}
|
|
|
|
describe "get_artist_info/1" do
|
|
test "returns the artist info" do
|
|
name = "Steven Wilson"
|
|
musicbrainz_id = Ecto.UUID.generate()
|
|
|
|
expected_info =
|
|
Fixtures.Artist.get_info()
|
|
|> Map.get("artist")
|
|
|> Artist.from_api_response()
|
|
|
|
Req.Test.stub(LastFm.API, fn conn ->
|
|
Req.Test.json(conn, Fixtures.Artist.get_info())
|
|
end)
|
|
|
|
assert {:ok, expected_info} == LastFm.get_artist_info(musicbrainz_id, name)
|
|
end
|
|
end
|
|
|
|
describe "get_profile/1" do
|
|
test "returns the username for a valid session key" do
|
|
Req.Test.stub(LastFm.API, fn conn ->
|
|
Req.Test.json(conn, %{
|
|
"user" => %{
|
|
"name" => "testuser",
|
|
"realname" => "Test User",
|
|
"playcount" => "12345",
|
|
"url" => "https://www.last.fm/user/testuser"
|
|
}
|
|
})
|
|
end)
|
|
|
|
assert {:ok, "testuser"} == LastFm.get_profile("valid_session_key")
|
|
end
|
|
|
|
@tag :capture_log
|
|
test "returns an error for an invalid session key" do
|
|
Req.Test.stub(LastFm.API, fn conn ->
|
|
Req.Test.json(conn, %{"error" => 9, "message" => "Invalid session key"})
|
|
end)
|
|
|
|
assert {:error, :invalid_session_key} == LastFm.get_profile("invalid_session_key")
|
|
end
|
|
end
|
|
|
|
describe "scrobble/2" do
|
|
test "returns the scrobbled track" do
|
|
scrobbles = [
|
|
%Scrobble{
|
|
track: "Wonderland",
|
|
artist: "IQ",
|
|
album: "Dominion",
|
|
timestamp: 1_746_561_301,
|
|
mbid: "aefaaf73-b52c-4b0d-91df-f8e4321db2bd"
|
|
}
|
|
]
|
|
|
|
session_key = "session_key"
|
|
|
|
response_body = %{
|
|
"scrobbles" => %{
|
|
"@attr" => %{"accepted" => 1, "ignored" => 0},
|
|
"scrobble" => %{
|
|
"album" => %{"#text" => "Dominion", "corrected" => "0"},
|
|
"albumArtist" => %{"#text" => "", "corrected" => "0"},
|
|
"artist" => %{"#text" => "IQ", "corrected" => "0"},
|
|
"ignoredMessage" => %{"#text" => "", "code" => "1"},
|
|
"timestamp" => "1746561301",
|
|
"track" => %{"#text" => "Wonderland", "corrected" => "0"}
|
|
}
|
|
}
|
|
}
|
|
|
|
Req.Test.stub(LastFm.API, fn conn ->
|
|
body = Req.Test.raw_body(conn)
|
|
|
|
assert body ==
|
|
"album%5B0%5D=Dominion&api_key=change+me&api_sig=f3c0644ba671654aafb2396806c4b96f&artist%5B0%5D=IQ&format=json&mbid%5B0%5D=aefaaf73-b52c-4b0d-91df-f8e4321db2bd&method=track.scrobble&sk=session_key×tamp%5B0%5D=1746561301&track%5B0%5D=Wonderland"
|
|
|
|
Req.Test.json(conn, response_body)
|
|
end)
|
|
|
|
assert {:ok, response_body} == LastFm.scrobble(scrobbles, session_key)
|
|
end
|
|
end
|
|
end
|