111 lines
3.3 KiB
Go
111 lines
3.3 KiB
Go
|
|
package e2e
|
||
|
|
|
||
|
|
import (
|
||
|
|
"github.com/navidrome/navidrome/model"
|
||
|
|
"github.com/navidrome/navidrome/server/subsonic/responses"
|
||
|
|
. "github.com/onsi/ginkgo/v2"
|
||
|
|
. "github.com/onsi/gomega"
|
||
|
|
)
|
||
|
|
|
||
|
|
var _ = Describe("Playlist Endpoints", Ordered, func() {
|
||
|
|
var playlistID string
|
||
|
|
var songIDs []string
|
||
|
|
|
||
|
|
BeforeAll(func() {
|
||
|
|
setupTestDB()
|
||
|
|
|
||
|
|
// Look up song IDs from scanned data for playlist operations
|
||
|
|
songs, err := ds.MediaFile(ctx).GetAll(model.QueryOptions{Sort: "title", Max: 3})
|
||
|
|
Expect(err).ToNot(HaveOccurred())
|
||
|
|
Expect(len(songs)).To(BeNumerically(">=", 3))
|
||
|
|
for _, s := range songs {
|
||
|
|
songIDs = append(songIDs, s.ID)
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
It("getPlaylists returns empty list initially", func() {
|
||
|
|
resp := doReq("getPlaylists")
|
||
|
|
|
||
|
|
Expect(resp.Status).To(Equal(responses.StatusOK))
|
||
|
|
Expect(resp.Playlists).ToNot(BeNil())
|
||
|
|
Expect(resp.Playlists.Playlist).To(BeEmpty())
|
||
|
|
})
|
||
|
|
|
||
|
|
It("createPlaylist creates a new playlist with songs", func() {
|
||
|
|
resp := doReq("createPlaylist", "name", "Test Playlist", "songId", songIDs[0], "songId", songIDs[1])
|
||
|
|
|
||
|
|
Expect(resp.Status).To(Equal(responses.StatusOK))
|
||
|
|
Expect(resp.Playlist).ToNot(BeNil())
|
||
|
|
Expect(resp.Playlist.Name).To(Equal("Test Playlist"))
|
||
|
|
Expect(resp.Playlist.SongCount).To(Equal(int32(2)))
|
||
|
|
playlistID = resp.Playlist.Id
|
||
|
|
})
|
||
|
|
|
||
|
|
It("getPlaylist returns playlist with tracks", func() {
|
||
|
|
resp := doReq("getPlaylist", "id", playlistID)
|
||
|
|
|
||
|
|
Expect(resp.Status).To(Equal(responses.StatusOK))
|
||
|
|
Expect(resp.Playlist).ToNot(BeNil())
|
||
|
|
Expect(resp.Playlist.Name).To(Equal("Test Playlist"))
|
||
|
|
Expect(resp.Playlist.Entry).To(HaveLen(2))
|
||
|
|
Expect(resp.Playlist.Entry[0].Id).To(Equal(songIDs[0]))
|
||
|
|
Expect(resp.Playlist.Entry[1].Id).To(Equal(songIDs[1]))
|
||
|
|
})
|
||
|
|
|
||
|
|
It("createPlaylist without name or playlistId returns error", func() {
|
||
|
|
resp := doReq("createPlaylist", "songId", songIDs[0])
|
||
|
|
|
||
|
|
Expect(resp.Status).To(Equal(responses.StatusFailed))
|
||
|
|
Expect(resp.Error).ToNot(BeNil())
|
||
|
|
})
|
||
|
|
|
||
|
|
It("updatePlaylist can rename the playlist", func() {
|
||
|
|
resp := doReq("updatePlaylist", "playlistId", playlistID, "name", "Renamed Playlist")
|
||
|
|
|
||
|
|
Expect(resp.Status).To(Equal(responses.StatusOK))
|
||
|
|
|
||
|
|
// Verify the rename
|
||
|
|
resp = doReq("getPlaylist", "id", playlistID)
|
||
|
|
|
||
|
|
Expect(resp.Playlist.Name).To(Equal("Renamed Playlist"))
|
||
|
|
})
|
||
|
|
|
||
|
|
It("updatePlaylist can add songs", func() {
|
||
|
|
resp := doReq("updatePlaylist", "playlistId", playlistID, "songIdToAdd", songIDs[2])
|
||
|
|
|
||
|
|
Expect(resp.Status).To(Equal(responses.StatusOK))
|
||
|
|
|
||
|
|
// Verify the song was added
|
||
|
|
resp = doReq("getPlaylist", "id", playlistID)
|
||
|
|
|
||
|
|
Expect(resp.Playlist.SongCount).To(Equal(int32(3)))
|
||
|
|
Expect(resp.Playlist.Entry).To(HaveLen(3))
|
||
|
|
})
|
||
|
|
|
||
|
|
It("updatePlaylist can remove songs by index", func() {
|
||
|
|
// Remove the first song (index 0)
|
||
|
|
resp := doReq("updatePlaylist", "playlistId", playlistID, "songIndexToRemove", "0")
|
||
|
|
|
||
|
|
Expect(resp.Status).To(Equal(responses.StatusOK))
|
||
|
|
|
||
|
|
// Verify the song was removed
|
||
|
|
resp = doReq("getPlaylist", "id", playlistID)
|
||
|
|
|
||
|
|
Expect(resp.Playlist.SongCount).To(Equal(int32(2)))
|
||
|
|
Expect(resp.Playlist.Entry).To(HaveLen(2))
|
||
|
|
})
|
||
|
|
|
||
|
|
It("deletePlaylist removes the playlist", func() {
|
||
|
|
resp := doReq("deletePlaylist", "id", playlistID)
|
||
|
|
|
||
|
|
Expect(resp.Status).To(Equal(responses.StatusOK))
|
||
|
|
})
|
||
|
|
|
||
|
|
It("getPlaylist on deleted playlist returns error", func() {
|
||
|
|
resp := doReq("getPlaylist", "id", playlistID)
|
||
|
|
|
||
|
|
Expect(resp.Status).To(Equal(responses.StatusFailed))
|
||
|
|
Expect(resp.Error).ToNot(BeNil())
|
||
|
|
})
|
||
|
|
})
|