navidrome/core/artwork_test.go

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

142 lines
4.1 KiB
Go
Raw Normal View History

package core
2020-04-06 02:31:05 +02:00
import (
"context"
2020-04-06 02:31:05 +02:00
"image"
2020-07-24 19:30:27 +02:00
"io/ioutil"
2020-04-06 02:31:05 +02:00
2020-07-24 19:30:27 +02:00
"github.com/navidrome/navidrome/conf"
2020-04-06 02:31:05 +02:00
"github.com/navidrome/navidrome/log"
"github.com/navidrome/navidrome/model"
2020-10-27 16:01:40 +01:00
"github.com/navidrome/navidrome/tests"
2020-04-06 02:31:05 +02:00
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
var _ = Describe("Artwork", func() {
var artwork Artwork
2020-04-06 02:31:05 +02:00
var ds model.DataStore
ctx := log.NewContext(context.TODO())
2020-04-06 02:31:05 +02:00
BeforeEach(func() {
2021-06-08 22:30:19 +02:00
ds = &tests.MockDataStore{MockedTranscoding: &tests.MockTranscodingRepo{}}
ds.Album(ctx).(*tests.MockAlbumRepo).SetData(model.Albums{
2020-10-27 15:48:37 +01:00
{ID: "222", CoverArtId: "123", CoverArtPath: "tests/fixtures/test.mp3"},
{ID: "333", CoverArtId: ""},
{ID: "444", CoverArtId: "444", CoverArtPath: "tests/fixtures/cover.jpg"},
})
2021-06-08 22:30:19 +02:00
ds.MediaFile(ctx).(*tests.MockMediaFileRepo).SetData(model.MediaFiles{
2020-10-27 15:48:37 +01:00
{ID: "123", AlbumID: "222", Path: "tests/fixtures/test.mp3", HasCoverArt: true},
{ID: "456", AlbumID: "222", Path: "tests/fixtures/test.ogg", HasCoverArt: false},
})
2020-04-06 02:31:05 +02:00
})
Context("Cache is configured", func() {
BeforeEach(func() {
2020-07-24 19:30:27 +02:00
conf.Server.DataFolder, _ = ioutil.TempDir("", "file_caches")
conf.Server.ImageCacheSize = "100MB"
2020-10-27 22:02:20 +01:00
cache := GetImageCache()
Eventually(func() bool { return cache.Ready(context.TODO()) }).Should(BeTrue())
artwork = NewArtwork(ds, cache)
2020-07-24 19:30:27 +02:00
})
It("retrieves the external artwork art for an album", func() {
2020-11-17 19:30:37 +01:00
r, err := artwork.Get(ctx, "al-444", 0)
Expect(err).To(BeNil())
2020-04-06 02:31:05 +02:00
2020-11-17 19:30:37 +01:00
_, format, err := image.Decode(r)
Expect(err).To(BeNil())
Expect(format).To(Equal("jpeg"))
2020-11-17 19:30:37 +01:00
Expect(r.Close()).To(BeNil())
})
2020-04-06 02:31:05 +02:00
It("retrieves the embedded artwork art for an album", func() {
2020-11-17 19:30:37 +01:00
r, err := artwork.Get(ctx, "al-222", 0)
Expect(err).To(BeNil())
2020-04-06 02:31:05 +02:00
2020-11-17 19:30:37 +01:00
_, format, err := image.Decode(r)
Expect(err).To(BeNil())
Expect(format).To(Equal("jpeg"))
2020-11-17 19:30:37 +01:00
Expect(r.Close()).To(BeNil())
})
2020-04-06 02:31:05 +02:00
It("returns the default artwork if album does not have artwork", func() {
2020-11-17 19:30:37 +01:00
r, err := artwork.Get(ctx, "al-333", 0)
Expect(err).To(BeNil())
2020-11-17 19:30:37 +01:00
_, format, err := image.Decode(r)
Expect(err).To(BeNil())
Expect(format).To(Equal("png"))
2020-11-17 19:30:37 +01:00
Expect(r.Close()).To(BeNil())
})
2020-04-06 02:31:05 +02:00
It("returns the default artwork if album is not found", func() {
2020-11-17 19:30:37 +01:00
r, err := artwork.Get(ctx, "al-0101", 0)
Expect(err).To(BeNil())
2020-11-17 19:30:37 +01:00
_, format, err := image.Decode(r)
Expect(err).To(BeNil())
Expect(format).To(Equal("png"))
2020-11-17 19:30:37 +01:00
Expect(r.Close()).To(BeNil())
})
2020-04-06 02:31:05 +02:00
It("retrieves the original artwork art from a media_file", func() {
2020-11-17 19:30:37 +01:00
r, err := artwork.Get(ctx, "123", 0)
Expect(err).To(BeNil())
2020-04-06 02:31:05 +02:00
2020-11-17 19:30:37 +01:00
img, format, err := image.Decode(r)
Expect(err).To(BeNil())
Expect(format).To(Equal("jpeg"))
Expect(img.Bounds().Size().X).To(Equal(600))
Expect(img.Bounds().Size().Y).To(Equal(600))
2020-11-17 19:30:37 +01:00
Expect(r.Close()).To(BeNil())
})
2020-04-06 02:31:05 +02:00
It("retrieves the album artwork art if media_file does not have one", func() {
2020-11-17 19:30:37 +01:00
r, err := artwork.Get(ctx, "456", 0)
Expect(err).To(BeNil())
2020-11-17 19:30:37 +01:00
_, format, err := image.Decode(r)
Expect(err).To(BeNil())
Expect(format).To(Equal("jpeg"))
2020-11-17 19:30:37 +01:00
Expect(r.Close()).To(BeNil())
})
It("retrieves the album artwork by album id", func() {
2020-11-17 19:30:37 +01:00
r, err := artwork.Get(ctx, "222", 0)
Expect(err).To(BeNil())
2020-11-17 19:30:37 +01:00
_, format, err := image.Decode(r)
Expect(err).To(BeNil())
Expect(format).To(Equal("jpeg"))
2020-11-17 19:30:37 +01:00
Expect(r.Close()).To(BeNil())
})
It("resized artwork art as requested", func() {
2020-11-17 19:30:37 +01:00
r, err := artwork.Get(ctx, "123", 200)
Expect(err).To(BeNil())
2020-04-06 02:31:05 +02:00
2020-11-17 19:30:37 +01:00
img, format, err := image.Decode(r)
Expect(err).To(BeNil())
Expect(format).To(Equal("jpeg"))
Expect(img.Bounds().Size().X).To(Equal(200))
Expect(img.Bounds().Size().Y).To(Equal(200))
2020-11-17 19:30:37 +01:00
Expect(r.Close()).To(BeNil())
})
2020-04-06 02:31:05 +02:00
Context("Errors", func() {
It("returns err if gets error from album table", func() {
2021-06-08 22:30:19 +02:00
ds.Album(ctx).(*tests.MockAlbumRepo).SetError(true)
2020-11-17 19:30:37 +01:00
_, err := artwork.Get(ctx, "al-222", 0)
Expect(err).To(MatchError("Error!"))
})
It("returns err if gets error from media_file table", func() {
2021-06-08 22:30:19 +02:00
ds.MediaFile(ctx).(*tests.MockMediaFileRepo).SetError(true)
2020-11-17 19:30:37 +01:00
_, err := artwork.Get(ctx, "123", 0)
Expect(err).To(MatchError("Error!"))
})
})
})
2020-04-06 02:31:05 +02:00
})