package model_testimport ("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_"))})})