navidrome/persistence/playqueue_repository_test.go

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

91 lines
2.6 KiB
Go
Raw Normal View History

2020-07-31 17:42:51 +02:00
package persistence
import (
"context"
"time"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/navidrome/navidrome/log"
"github.com/navidrome/navidrome/model"
"github.com/navidrome/navidrome/model/request"
2022-07-26 22:47:16 +02:00
. "github.com/onsi/ginkgo/v2"
2020-07-31 17:42:51 +02:00
. "github.com/onsi/gomega"
)
var _ = Describe("PlayQueueRepository", func() {
var repo model.PlayQueueRepository
BeforeEach(func() {
ctx := log.NewContext(context.TODO())
ctx = request.WithUser(ctx, model.User{ID: "userid", UserName: "userid", IsAdmin: true})
repo = NewPlayQueueRepository(ctx, getDBXBuilder())
2020-07-31 17:42:51 +02:00
})
2020-07-31 21:32:08 +02:00
Describe("PlayQueues", func() {
It("returns notfound error if there's no playqueue for the user", func() {
_, err := repo.Retrieve("user999")
Expect(err).To(MatchError(model.ErrNotFound))
})
It("stores and retrieves the playqueue for the user", func() {
By("Storing a playqueue for the user")
2020-07-31 17:42:51 +02:00
expected := aPlayQueue("userid", songDayInALife.ID, 123, songComeTogether, songDayInALife)
Expect(repo.Store(expected)).To(Succeed())
2020-07-31 17:42:51 +02:00
actual, err := repo.Retrieve("userid")
Expect(err).ToNot(HaveOccurred())
2020-07-31 17:42:51 +02:00
2020-07-31 21:32:08 +02:00
AssertPlayQueue(expected, actual)
2020-07-31 17:42:51 +02:00
2020-07-31 21:32:08 +02:00
By("Storing a new playqueue for the same user")
2020-07-31 17:42:51 +02:00
another := aPlayQueue("userid", songRadioactivity.ID, 321, songAntenna, songRadioactivity)
Expect(repo.Store(another)).To(Succeed())
2020-07-31 17:42:51 +02:00
actual, err = repo.Retrieve("userid")
Expect(err).ToNot(HaveOccurred())
2020-07-31 17:42:51 +02:00
2021-07-16 17:03:28 +02:00
AssertPlayQueue(another, actual)
Expect(countPlayQueues(repo, "userid")).To(Equal(1))
2020-07-31 21:32:08 +02:00
})
})
2020-07-31 17:42:51 +02:00
})
func countPlayQueues(repo model.PlayQueueRepository, userId string) int {
r := repo.(*playQueueRepository)
c, err := r.count(squirrel.Select().Where(squirrel.Eq{"user_id": userId}))
if err != nil {
panic(err)
}
return int(c)
}
func AssertPlayQueue(expected, actual *model.PlayQueue) {
Expect(actual.ID).To(Equal(expected.ID))
Expect(actual.UserID).To(Equal(expected.UserID))
Expect(actual.Current).To(Equal(expected.Current))
Expect(actual.Position).To(Equal(expected.Position))
Expect(actual.ChangedBy).To(Equal(expected.ChangedBy))
Expect(actual.Items).To(HaveLen(len(expected.Items)))
for i, item := range actual.Items {
Expect(item.Title).To(Equal(expected.Items[i].Title))
}
}
2020-07-31 21:32:08 +02:00
func aPlayQueue(userId, current string, position int64, items ...model.MediaFile) *model.PlayQueue {
2020-07-31 17:42:51 +02:00
createdAt := time.Now()
updatedAt := createdAt.Add(time.Minute)
return &model.PlayQueue{
ID: uuid.NewString(),
2020-07-31 17:42:51 +02:00
UserID: userId,
Current: current,
Position: position,
ChangedBy: "test",
Items: items,
CreatedAt: createdAt,
UpdatedAt: updatedAt,
}
}