package playbackimport ("github.com/navidrome/navidrome/model". "github.com/onsi/ginkgo/v2". "github.com/onsi/gomega")var _ = Describe("Queues", func() {var queue *QueueBeforeEach(func() {queue = NewQueue()})Describe("use empty queue", func() {It("is empty", func() {Expect(queue.Items).To(BeEmpty())Expect(queue.Index).To(Equal(-1))})})Describe("Operate on small queue", func() {BeforeEach(func() {mfs := model.MediaFiles{{ID: "1", Artist: "Queen", Compilation: false, Path: "/music1/hammer.mp3",},{ID: "2", Artist: "Vinyard Rose", Compilation: false, Path: "/music1/cassidy.mp3",},}queue.Add(mfs)})It("contains the preloaded data", func() {Expect(queue.Get).ToNot(BeNil())Expect(queue.Size()).To(Equal(2))})It("could read data by ID", func() {idx, err := queue.getMediaFileIndexByID("1")Expect(err).ToNot(HaveOccurred())Expect(idx).ToNot(BeNil())Expect(idx).To(Equal(0))queue.SetIndex(idx)mf := queue.Current()Expect(mf).ToNot(BeNil())Expect(mf.ID).To(Equal("1"))Expect(mf.Artist).To(Equal("Queen"))Expect(mf.Path).To(Equal("/music1/hammer.mp3"))})})Describe("Read/Write operations", func() {BeforeEach(func() {mfs := model.MediaFiles{{ID: "1", Artist: "Queen", Compilation: false, Path: "/music1/hammer.mp3",},{ID: "2", Artist: "Vinyard Rose", Compilation: false, Path: "/music1/cassidy.mp3",},{ID: "3", Artist: "Pink Floyd", Compilation: false, Path: "/music1/time.mp3",},{ID: "4", Artist: "Mike Oldfield", Compilation: false, Path: "/music1/moonlight-shadow.mp3",},{ID: "5", Artist: "Red Hot Chili Peppers", Compilation: false, Path: "/music1/californication.mp3",},}queue.Add(mfs)})It("contains the preloaded data", func() {Expect(queue.Get).ToNot(BeNil())Expect(queue.Size()).To(Equal(5))})It("could read data by ID", func() {idx, err := queue.getMediaFileIndexByID("5")Expect(err).ToNot(HaveOccurred())Expect(idx).ToNot(BeNil())Expect(idx).To(Equal(4))queue.SetIndex(idx)mf := queue.Current()Expect(mf).ToNot(BeNil())Expect(mf.ID).To(Equal("5"))Expect(mf.Artist).To(Equal("Red Hot Chili Peppers"))Expect(mf.Path).To(Equal("/music1/californication.mp3"))})It("could shuffle the data correctly", func() {queue.Shuffle()Expect(queue.Size()).To(Equal(5))})It("could remove entries correctly", func() {queue.Remove(0)Expect(queue.Size()).To(Equal(4))queue.Remove(3)Expect(queue.Size()).To(Equal(3))})It("clear the whole thing on request", func() {Expect(queue.Size()).To(Equal(5))queue.Clear()Expect(queue.Size()).To(Equal(0))})})})