Spotify: Implemented API request and tests for user tracks

This commit is contained in:
Philipp Wolfer 2023-11-22 10:24:33 +01:00
parent d0739aad0f
commit ed9debc127
No known key found for this signature in database
GPG key ID: 8FDF744D4919943B
4 changed files with 623 additions and 9 deletions

View file

@ -22,9 +22,13 @@ THE SOFTWARE.
package spotify_test
import (
"net/http"
"testing"
"time"
"github.com/jarcoal/httpmock"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.uploadedlobster.com/scotty/backends/spotify"
"golang.org/x/oauth2"
)
@ -35,3 +39,53 @@ func TestNewClient(t *testing.T) {
client := spotify.NewClient(conf, token)
assert.IsType(t, spotify.Client{}, client)
}
func TestRecentlyPlayedAfter(t *testing.T) {
defer httpmock.DeactivateAndReset()
client := spotify.NewClient(oauth2.Config{}, nil)
setupHttpMock(t, client.HttpClient.GetClient(),
"https://api.spotify.com/v1/me/player/recently-played",
"testdata/recently-played.json")
result, err := client.RecentlyPlayedAfter(time.Now(), 3)
require.NoError(t, err)
assert := assert.New(t)
assert.Equal(3, result.Limit)
require.Len(t, result.Items, 3)
listen1 := result.Items[0]
assert.Equal("2023-11-21T15:00:07.229Z", listen1.PlayedAt)
assert.Equal("Evidence", listen1.Track.Name)
assert.Equal("Viva Emptiness", listen1.Track.Album.Name)
}
func TestGetUserTracks(t *testing.T) {
defer httpmock.DeactivateAndReset()
client := spotify.NewClient(oauth2.Config{}, nil)
setupHttpMock(t, client.HttpClient.GetClient(),
"https://api.spotify.com/v1/me/tracks",
"testdata/user-tracks.json")
result, err := client.UserTracks(0, 2)
require.NoError(t, err)
assert := assert.New(t)
assert.Equal(1243, result.Total)
require.Len(t, result.Items, 2)
track1 := result.Items[0]
assert.Equal("2022-02-13T21:46:08Z", track1.AddedAt)
assert.Equal("Death to the Holy", track1.Track.Name)
assert.Equal("Zeal & Ardor", track1.Track.Album.Name)
}
func setupHttpMock(t *testing.T, client *http.Client, url string, testDataPath string) {
httpmock.ActivateNonDefault(client)
responder, err := httpmock.NewJsonResponder(200, httpmock.File(testDataPath))
if err != nil {
t.Fatal(err)
}
httpmock.RegisterResponder("GET", url, responder)
}