mirror of
https://github.com/navidrome/navidrome.git
synced 2026-10-29 06:37:17 +01:00
It relied on another spec having set auth.PublicTokenAuth, so it panicked whenever Ginkgo ran it first.
55 lines
1.5 KiB
Go
55 lines
1.5 KiB
Go
package public
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
|
|
"github.com/go-chi/jwtauth/v5"
|
|
"github.com/navidrome/navidrome/core"
|
|
"github.com/navidrome/navidrome/core/auth"
|
|
"github.com/navidrome/navidrome/model"
|
|
"github.com/navidrome/navidrome/tests"
|
|
. "github.com/onsi/ginkgo/v2"
|
|
. "github.com/onsi/gomega"
|
|
)
|
|
|
|
var _ = Describe("handleM3U", func() {
|
|
var ds *tests.MockDataStore
|
|
var shareRepo *tests.MockShareRepo
|
|
var pub *Router
|
|
|
|
BeforeEach(func() {
|
|
auth.PublicTokenAuth = jwtauth.New("HS256", []byte("test-secret"), nil)
|
|
ds = &tests.MockDataStore{}
|
|
shareRepo = &tests.MockShareRepo{}
|
|
ds.MockedShare = shareRepo
|
|
pub = &Router{ds: ds, share: core.NewShare(ds)}
|
|
})
|
|
|
|
makeRequest := func(id string) *httptest.ResponseRecorder {
|
|
r := httptest.NewRequest("GET", "/public/"+id+"/m3u?%3Aid="+id, nil)
|
|
w := httptest.NewRecorder()
|
|
pub.handleM3U(w, r)
|
|
return w
|
|
}
|
|
|
|
It("sets the M3U content type", func() {
|
|
share := &model.Share{ID: "abc123", Tracks: model.MediaFiles{{ID: "t1", Title: "Track 1"}}}
|
|
shareRepo.ID = share.ID
|
|
shareRepo.Entity = share
|
|
|
|
w := makeRequest("abc123")
|
|
|
|
Expect(w.Code).To(Equal(http.StatusOK))
|
|
// Result() has the headers sent at WriteHeader time, unlike w.Header()
|
|
Expect(w.Result().Header.Get("Content-Type")).To(Equal("audio/x-mpegurl"))
|
|
Expect(w.Body.String()).To(HavePrefix("#EXTM3U"))
|
|
})
|
|
|
|
It("returns 404 when the share does not exist", func() {
|
|
shareRepo.ID = "other"
|
|
shareRepo.Entity = &model.Share{ID: "other"}
|
|
|
|
Expect(makeRequest("missing").Code).To(Equal(http.StatusNotFound))
|
|
})
|
|
})
|