* persistence/genre: change Put() to upsert Absolutely disgusting hack to work around [1]. Try to insert the genre, but if it conflicts, ignore it and update the genre with the existing ID. [1]: https://github.com/navidrome/navidrome/issues/1918. * scanner: remove cached genre repository Not needed anytmore. And remember: "Many Small Queries Are Efficient In SQLite" [1]. [1]: https://www.sqlite.org/np1queryprob.html * Revert "scanner: remove cached genre repository" This reverts commit c5d900aa43e1c86b69f923b408e11ab8df8d815c. * Use squirrel to build SQL, to reduce risk of SQL injection Co-authored-by: Deluan <deluan@navidrome.org>
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"context"
|
||||
|
||||
"github.com/beego/beego/v2/client/orm"
|
||||
"github.com/google/uuid"
|
||||
"github.com/navidrome/navidrome/log"
|
||||
"github.com/navidrome/navidrome/model"
|
||||
"github.com/navidrome/navidrome/persistence"
|
||||
@@ -18,12 +19,39 @@ var _ = Describe("GenreRepository", func() {
|
||||
repo = persistence.NewGenreRepository(log.NewContext(context.TODO()), orm.NewOrm())
|
||||
})
|
||||
|
||||
It("returns all records", func() {
|
||||
genres, err := repo.GetAll()
|
||||
Expect(err).To(BeNil())
|
||||
Expect(genres).To(ConsistOf(
|
||||
model.Genre{ID: "gn-1", Name: "Electronic", AlbumCount: 1, SongCount: 2},
|
||||
model.Genre{ID: "gn-2", Name: "Rock", AlbumCount: 3, SongCount: 3},
|
||||
))
|
||||
Describe("GetAll()", func() {
|
||||
It("returns all records", func() {
|
||||
genres, err := repo.GetAll()
|
||||
Expect(err).To(BeNil())
|
||||
Expect(genres).To(ConsistOf(
|
||||
model.Genre{ID: "gn-1", Name: "Electronic", AlbumCount: 1, SongCount: 2},
|
||||
model.Genre{ID: "gn-2", Name: "Rock", AlbumCount: 3, SongCount: 3},
|
||||
))
|
||||
})
|
||||
})
|
||||
Describe("Put()", Ordered, func() {
|
||||
It("does not insert existing genre names", func() {
|
||||
g := model.Genre{Name: "Rock"}
|
||||
err := repo.Put(&g)
|
||||
Expect(err).To(BeNil())
|
||||
Expect(g.ID).To(Equal("gn-2"))
|
||||
|
||||
genres, _ := repo.GetAll()
|
||||
Expect(genres).To(HaveLen(2))
|
||||
})
|
||||
|
||||
It("insert non-existent genre names", func() {
|
||||
g := model.Genre{Name: "Reggae"}
|
||||
err := repo.Put(&g)
|
||||
Expect(err).To(BeNil())
|
||||
|
||||
// ID is a uuid
|
||||
_, err = uuid.Parse(g.ID)
|
||||
Expect(err).To(BeNil())
|
||||
|
||||
genres, _ := repo.GetAll()
|
||||
Expect(genres).To(HaveLen(3))
|
||||
Expect(genres).To(ContainElement(model.Genre{ID: g.ID, Name: "Reggae", AlbumCount: 0, SongCount: 0}))
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user