mirror of
https://github.com/navidrome/navidrome.git
synced 2026-04-28 03:19:38 +00:00
Some checks are pending
Pipeline: Test, Lint, Build / Get version info (push) Waiting to run
Pipeline: Test, Lint, Build / Build (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Lint Go code (push) Waiting to run
Pipeline: Test, Lint, Build / Test Go code (push) Waiting to run
Pipeline: Test, Lint, Build / Test JS code (push) Waiting to run
Pipeline: Test, Lint, Build / Lint i18n files (push) Waiting to run
Pipeline: Test, Lint, Build / Check Docker configuration (push) Waiting to run
Pipeline: Test, Lint, Build / Build-1 (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build-2 (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build-3 (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build-4 (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build-5 (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build-6 (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build-7 (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build-8 (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build-9 (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build-10 (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Push to GHCR (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Push to Docker Hub (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Cleanup digest artifacts (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build Windows installers (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Package/Release (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Upload Linux PKG (push) Blocked by required conditions
158 lines
5 KiB
Go
158 lines
5 KiB
Go
package e2e
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/navidrome/navidrome/model"
|
|
"github.com/navidrome/navidrome/server/subsonic/responses"
|
|
. "github.com/onsi/ginkgo/v2"
|
|
. "github.com/onsi/gomega"
|
|
)
|
|
|
|
var _ = Describe("Bookmark and PlayQueue Endpoints", Ordered, func() {
|
|
BeforeAll(func() {
|
|
setupTestDB()
|
|
})
|
|
|
|
Describe("Bookmark Endpoints", Ordered, func() {
|
|
var trackID string
|
|
|
|
BeforeAll(func() {
|
|
// Get a media file ID from the database to use for bookmarks
|
|
mfs, err := ds.MediaFile(ctx).GetAll(model.QueryOptions{Max: 1})
|
|
Expect(err).ToNot(HaveOccurred())
|
|
Expect(mfs).ToNot(BeEmpty())
|
|
trackID = mfs[0].ID
|
|
})
|
|
|
|
It("getBookmarks returns empty initially", func() {
|
|
resp := doReq("getBookmarks")
|
|
|
|
Expect(resp.Status).To(Equal(responses.StatusOK))
|
|
Expect(resp.Bookmarks).ToNot(BeNil())
|
|
Expect(resp.Bookmarks.Bookmark).To(BeEmpty())
|
|
})
|
|
|
|
It("createBookmark creates a bookmark with position", func() {
|
|
resp := doReq("createBookmark", "id", trackID, "position", "12345", "comment", "test bookmark")
|
|
|
|
Expect(resp.Status).To(Equal(responses.StatusOK))
|
|
})
|
|
|
|
It("getBookmarks shows the created bookmark", func() {
|
|
resp := doReq("getBookmarks")
|
|
|
|
Expect(resp.Status).To(Equal(responses.StatusOK))
|
|
Expect(resp.Bookmarks).ToNot(BeNil())
|
|
Expect(resp.Bookmarks.Bookmark).To(HaveLen(1))
|
|
|
|
bmk := resp.Bookmarks.Bookmark[0]
|
|
Expect(bmk.Entry.Id).To(Equal(trackID))
|
|
Expect(bmk.Position).To(Equal(int64(12345)))
|
|
Expect(bmk.Comment).To(Equal("test bookmark"))
|
|
Expect(bmk.Username).To(Equal(adminUser.UserName))
|
|
})
|
|
|
|
It("deleteBookmark removes the bookmark", func() {
|
|
resp := doReq("deleteBookmark", "id", trackID)
|
|
|
|
Expect(resp.Status).To(Equal(responses.StatusOK))
|
|
|
|
// Verify it's gone
|
|
resp = doReq("getBookmarks")
|
|
Expect(resp.Bookmarks.Bookmark).To(BeEmpty())
|
|
})
|
|
})
|
|
|
|
Describe("PlayQueue Endpoints", Ordered, func() {
|
|
var trackIDs []string
|
|
|
|
BeforeAll(func() {
|
|
// Get multiple media file IDs from the database
|
|
mfs, err := ds.MediaFile(ctx).GetAll(model.QueryOptions{Max: 3, Sort: "title"})
|
|
Expect(err).ToNot(HaveOccurred())
|
|
Expect(len(mfs)).To(BeNumerically(">=", 2))
|
|
for _, mf := range mfs {
|
|
trackIDs = append(trackIDs, mf.ID)
|
|
}
|
|
})
|
|
|
|
It("getPlayQueue returns minimum required fields when nothing specified", func() {
|
|
resp := doReq("getPlayQueue")
|
|
|
|
Expect(resp.Status).To(Equal(responses.StatusOK))
|
|
Expect(resp.PlayQueue).ToNot(BeNil())
|
|
Expect(resp.PlayQueue.Entry).To(HaveLen(0))
|
|
Expect(resp.PlayQueue.Current).To(BeEmpty())
|
|
Expect(resp.PlayQueue.Position).To(Equal(int64(0)))
|
|
Expect(resp.PlayQueue.Username).To(Equal(adminUser.UserName))
|
|
Expect(resp.PlayQueue.ChangedBy).To(BeEmpty())
|
|
})
|
|
|
|
It("getPlayQueueByIndex returns minimum required fields when nothing specified", func() {
|
|
resp := doReq("getPlayQueueByIndex")
|
|
|
|
Expect(resp.Status).To(Equal(responses.StatusOK))
|
|
Expect(resp.PlayQueueByIndex).ToNot(BeNil())
|
|
Expect(resp.PlayQueueByIndex.Entry).To(HaveLen(0))
|
|
Expect(resp.PlayQueueByIndex.CurrentIndex).To(BeNil())
|
|
Expect(resp.PlayQueueByIndex.Position).To(Equal(int64(0)))
|
|
Expect(resp.PlayQueueByIndex.Username).To(Equal(adminUser.UserName))
|
|
Expect(resp.PlayQueueByIndex.ChangedBy).To(BeEmpty())
|
|
})
|
|
|
|
It("savePlayQueue stores current play queue", func() {
|
|
resp := doReq("savePlayQueue",
|
|
"id", trackIDs[0],
|
|
"id", trackIDs[1],
|
|
"current", trackIDs[1],
|
|
"position", "5000",
|
|
)
|
|
|
|
Expect(resp.Status).To(Equal(responses.StatusOK))
|
|
})
|
|
|
|
It("getPlayQueue returns saved queue with tracks", func() {
|
|
resp := doReq("getPlayQueue")
|
|
|
|
Expect(resp.Status).To(Equal(responses.StatusOK))
|
|
Expect(resp.PlayQueue).ToNot(BeNil())
|
|
Expect(resp.PlayQueue.Entry).To(HaveLen(2))
|
|
Expect(resp.PlayQueue.Current).To(Equal(trackIDs[1]))
|
|
Expect(resp.PlayQueue.Position).To(Equal(int64(5000)))
|
|
Expect(resp.PlayQueue.Username).To(Equal(adminUser.UserName))
|
|
Expect(resp.PlayQueue.ChangedBy).To(Equal("test-client"))
|
|
})
|
|
|
|
It("getPlayQueueByIndex returns data with current index", func() {
|
|
resp := doReq("getPlayQueueByIndex")
|
|
|
|
Expect(resp.Status).To(Equal(responses.StatusOK))
|
|
Expect(resp.PlayQueueByIndex).ToNot(BeNil())
|
|
Expect(resp.PlayQueueByIndex.Entry).To(HaveLen(2))
|
|
Expect(resp.PlayQueueByIndex.CurrentIndex).ToNot(BeNil())
|
|
Expect(*resp.PlayQueueByIndex.CurrentIndex).To(Equal(1))
|
|
Expect(resp.PlayQueueByIndex.Position).To(Equal(int64(5000)))
|
|
})
|
|
|
|
It("savePlayQueueByIndex stores queue by index", func() {
|
|
resp := doReq("savePlayQueueByIndex",
|
|
"id", trackIDs[0],
|
|
"id", trackIDs[1],
|
|
"id", trackIDs[2],
|
|
"currentIndex", fmt.Sprintf("%d", 0),
|
|
"position", "9999",
|
|
)
|
|
|
|
Expect(resp.Status).To(Equal(responses.StatusOK))
|
|
|
|
// Verify with getPlayQueueByIndex
|
|
resp = doReq("getPlayQueueByIndex")
|
|
Expect(resp.PlayQueueByIndex).ToNot(BeNil())
|
|
Expect(resp.PlayQueueByIndex.Entry).To(HaveLen(3))
|
|
Expect(resp.PlayQueueByIndex.CurrentIndex).ToNot(BeNil())
|
|
Expect(*resp.PlayQueueByIndex.CurrentIndex).To(Equal(0))
|
|
Expect(resp.PlayQueueByIndex.Position).To(Equal(int64(9999)))
|
|
})
|
|
})
|
|
})
|