mirror of
https://github.com/navidrome/navidrome.git
synced 2026-10-10 11:27:11 +02:00
73 lines
2.9 KiB
Go
73 lines
2.9 KiB
Go
|
|
package model_test
|
||
|
|
|
||
|
|
import (
|
||
|
|
"encoding/json"
|
||
|
|
"time"
|
||
|
|
|
||
|
|
"github.com/navidrome/navidrome/conf"
|
||
|
|
"github.com/navidrome/navidrome/conf/configtest"
|
||
|
|
"github.com/navidrome/navidrome/model"
|
||
|
|
. "github.com/onsi/ginkgo/v2"
|
||
|
|
. "github.com/onsi/gomega"
|
||
|
|
)
|
||
|
|
|
||
|
|
var _ = Describe("Library PID config", func() {
|
||
|
|
BeforeEach(func() {
|
||
|
|
DeferCleanup(configtest.SetupConfig())
|
||
|
|
conf.Server.PID.Album = "global_album"
|
||
|
|
conf.Server.PID.Track = "global_track"
|
||
|
|
})
|
||
|
|
|
||
|
|
Describe("EffectivePID", func() {
|
||
|
|
It("falls back to the global config", func() {
|
||
|
|
Expect(model.Library{}.EffectivePID()).To(Equal(model.PIDConfig{Track: "global_track", Album: "global_album"}))
|
||
|
|
})
|
||
|
|
It("uses the library overrides", func() {
|
||
|
|
lib := model.Library{PIDAlbum: "folder", PIDTrack: "title"}
|
||
|
|
Expect(lib.EffectivePID()).To(Equal(model.PIDConfig{Track: "title", Album: "folder"}))
|
||
|
|
})
|
||
|
|
})
|
||
|
|
|
||
|
|
Describe("PIDChanged", func() {
|
||
|
|
It("is false when the scanned specs match, ignoring case", func() {
|
||
|
|
lib := model.Library{ScannedPIDAlbum: "GLOBAL_ALBUM", ScannedPIDTrack: "global_track"}
|
||
|
|
Expect(lib.PIDChanged()).To(BeFalse())
|
||
|
|
})
|
||
|
|
It("is true when the album override differs from the scanned spec", func() {
|
||
|
|
lib := model.Library{PIDAlbum: "folder", ScannedPIDAlbum: "global_album", ScannedPIDTrack: "global_track"}
|
||
|
|
Expect(lib.PIDChanged()).To(BeTrue())
|
||
|
|
})
|
||
|
|
It("is true when only the track spec changed", func() {
|
||
|
|
lib := model.Library{PIDTrack: "title", ScannedPIDAlbum: "global_album", ScannedPIDTrack: "global_track"}
|
||
|
|
Expect(lib.PIDChanged()).To(BeTrue())
|
||
|
|
})
|
||
|
|
It("is true when the global config changed for a library without overrides", func() {
|
||
|
|
lib := model.Library{ScannedPIDAlbum: "old_album", ScannedPIDTrack: "global_track"}
|
||
|
|
Expect(lib.PIDChanged()).To(BeTrue())
|
||
|
|
})
|
||
|
|
It("is true for a library that was never scanned", func() {
|
||
|
|
Expect(model.Library{}.PIDChanged()).To(BeTrue())
|
||
|
|
})
|
||
|
|
})
|
||
|
|
|
||
|
|
Describe("NeedsPIDRescan", func() {
|
||
|
|
It("is false for a library that never finished a scan", func() {
|
||
|
|
Expect(model.Library{PIDAlbum: "folder"}.NeedsPIDRescan()).To(BeFalse())
|
||
|
|
})
|
||
|
|
It("is true for a scanned library whose PID config changed", func() {
|
||
|
|
lib := model.Library{PIDAlbum: "folder", ScannedPIDAlbum: "global_album", ScannedPIDTrack: "global_track", LastScanAt: time.Now()}
|
||
|
|
Expect(lib.NeedsPIDRescan()).To(BeTrue())
|
||
|
|
})
|
||
|
|
It("is false for a scanned library whose PID config did not change", func() {
|
||
|
|
lib := model.Library{ScannedPIDAlbum: "global_album", ScannedPIDTrack: "global_track", LastScanAt: time.Now()}
|
||
|
|
Expect(lib.NeedsPIDRescan()).To(BeFalse())
|
||
|
|
})
|
||
|
|
})
|
||
|
|
|
||
|
|
It("does not expose the scanned specs in JSON", func() {
|
||
|
|
data, err := json.Marshal(model.Library{PIDAlbum: "folder", ScannedPIDAlbum: "secret_album", ScannedPIDTrack: "secret_track"})
|
||
|
|
Expect(err).ToNot(HaveOccurred())
|
||
|
|
Expect(string(data)).To(ContainSubstring(`"pidAlbum":"folder"`))
|
||
|
|
Expect(string(data)).ToNot(ContainSubstring("secret_"))
|
||
|
|
})
|
||
|
|
})
|