🏡 index : quine-global/quintodrome.git

package nativeapi

import (
	"bytes"
	"net/http"
	"net/http/httptest"
	"time"

	"github.com/navidrome/navidrome/conf"
	"github.com/navidrome/navidrome/conf/configtest"
	"github.com/navidrome/navidrome/core/auth"
	"github.com/navidrome/navidrome/core/playlists"
	"github.com/navidrome/navidrome/model"
	"github.com/navidrome/navidrome/server"
	"github.com/navidrome/navidrome/tests"
	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

var _ = Describe("Missing Files Endpoint", func() {
	var router http.Handler
	var token string

	BeforeEach(func() {
		DeferCleanup(configtest.SetupConfig())
		conf.Server.SessionTimeout = time.Minute
		conf.Server.EnableSharing = false

		mfRepo := tests.CreateMockMediaFileRepo()
		mfRepo.SetData(model.MediaFiles{
			{ID: "missing-1", Title: "Gone", Missing: true},
			{ID: "present-1", Title: "Here"},
		})
		userRepo := tests.CreateMockUserRepo()
		ds := &tests.MockDataStore{MockedMediaFile: mfRepo, MockedUser: userRepo, MockedProperty: &tests.MockedPropertyRepo{}}
		auth.Init(ds)

		user := model.User{ID: "user-1", UserName: "user", NewPassword: "pass"}
		Expect(userRepo.Put(GinkgoT().Context(), &user)).To(Succeed())
		var err error
		token, err = auth.CreateToken(&user)
		Expect(err).ToNot(HaveOccurred())

		router = server.JWTVerifier(New(ds, nil, playlists.NewPlaylists(ds, nil), nil, tests.NewMockLibraryService(), tests.NewMockUserService(), nil, nil, nil, nil, nil))
	})

	DescribeTable("GET /missing/{id}",
		func(id string, status int) {
			w := httptest.NewRecorder()
			router.ServeHTTP(w, createAuthenticatedRequest(http.MethodGet, "/missing/"+id, &bytes.Buffer{}, token))
			Expect(w.Code).To(Equal(status), w.Body.String())
		},
		Entry("returns a missing file", "missing-1", http.StatusOK),
		Entry("returns 404 for a file that is not missing", "present-1", http.StatusNotFound),
		Entry("returns 404 for an unknown id", "unknown", http.StatusNotFound),
	)
})