🏡 index : quine-global/quintodrome.git

package cmd

import (
	"errors"
	"net/http"
	"net/http/httptest"
	"path"
	"runtime/pprof"

	"github.com/go-chi/chi/v5"
	"github.com/navidrome/navidrome/conf"
	"github.com/navidrome/navidrome/conf/configtest"
	"github.com/navidrome/navidrome/model"
	"github.com/navidrome/navidrome/tests"
	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

var _ = pprof.NewProfile("nd-profiler-test")

var _ = Describe("profilerHandler", func() {
	// Mirrors how server.MountRouter mounts the handler.
	mount := func() http.Handler {
		router := chi.NewRouter()
		router.Mount(path.Join(conf.Server.BasePath, "/debug"), profilerHandler())
		return router
	}

	BeforeEach(func() {
		DeferCleanup(configtest.SetupConfig())
	})

	DescribeTable("serves a named profile",
		func(basePath string) {
			conf.Server.BasePath = basePath

			w := httptest.NewRecorder()
			target := path.Join(basePath, "/debug/pprof/nd-profiler-test") + "?debug=1"
			mount().ServeHTTP(w, httptest.NewRequest(http.MethodGet, target, nil))

			Expect(w.Code).To(Equal(http.StatusOK))
			Expect(w.Body.String()).To(HavePrefix("nd-profiler-test profile: total 0"))
		},
		Entry("without a BasePath", ""),
		Entry("with a BasePath", "/music"),
		Entry("with a root BasePath", "/"),
		Entry("with a trailing-slash BasePath", "/music/"),
	)
})

var _ = Describe("librariesWithChangedPID", func() {
	var ds *tests.MockDataStore
	var libs *tests.MockLibraryRepo

	BeforeEach(func() {
		DeferCleanup(configtest.SetupConfig())
		libs = &tests.MockLibraryRepo{}
		ds = &tests.MockDataStore{MockedLibrary: libs}
	})

	It("returns only the libraries whose PID config changed", func() {
		pid := model.Library{}.EffectivePID()
		libs.SetData(model.Libraries{
			{ID: 1, Name: "Same", ScannedPIDAlbum: pid.Album, ScannedPIDTrack: pid.Track},
			{ID: 2, Name: "Changed", PIDAlbum: "folder", ScannedPIDAlbum: pid.Album, ScannedPIDTrack: pid.Track},
			{ID: 3, Name: "Never scanned"},
		})
		Expect(librariesWithChangedPID(GinkgoT().Context(), ds)).To(ConsistOf("Changed", "Never scanned"))
	})

	It("returns the error from the repository", func() {
		libs.Err = errors.New("db down")
		_, err := librariesWithChangedPID(GinkgoT().Context(), ds)
		Expect(err).To(MatchError("db down"))
	})
})