diff --git a/server/subsonic/media_retrieval.go b/server/subsonic/media_retrieval.go index 3e6e3501..86dda2fe 100644 --- a/server/subsonic/media_retrieval.go +++ b/server/subsonic/media_retrieval.go @@ -58,10 +58,7 @@ func (c *MediaRetrievalController) getPlaceHolderAvatar(w http.ResponseWriter, r } func (c *MediaRetrievalController) GetCoverArt(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) { - id, err := requiredParamString(r, "id") - if err != nil { - return nil, err - } + id := utils.ParamStringDefault(r, "id", "non-existent") size := utils.ParamInt(r, "size", 0) w.Header().Set("cache-control", "public, max-age=315360000") diff --git a/server/subsonic/media_retrieval_test.go b/server/subsonic/media_retrieval_test.go index dee1c1fe..46cd23b5 100644 --- a/server/subsonic/media_retrieval_test.go +++ b/server/subsonic/media_retrieval_test.go @@ -37,11 +37,12 @@ var _ = Describe("MediaRetrievalController", func() { Expect(w.Body.String()).To(Equal(artwork.data)) }) - It("should fail if missing id parameter", func() { + It("should return placeholder if id parameter is missing (mimicking Subsonic)", func() { r := newGetRequest() _, err := controller.GetCoverArt(w, r) - Expect(err).To(MatchError("required 'id' parameter is missing")) + Expect(err).To(BeNil()) + Expect(w.Body.String()).To(Equal(artwork.data)) }) It("should fail when the file is not found", func() { diff --git a/utils/request_helpers.go b/utils/request_helpers.go index b9d5800c..75a38c58 100644 --- a/utils/request_helpers.go +++ b/utils/request_helpers.go @@ -11,6 +11,14 @@ func ParamString(r *http.Request, param string) string { return r.URL.Query().Get(param) } +func ParamStringDefault(r *http.Request, param, def string) string { + v := ParamString(r, param) + if v == "" { + return def + } + return v +} + func ParamStrings(r *http.Request, param string) []string { return r.URL.Query()[param] } diff --git a/utils/request_helpers_test.go b/utils/request_helpers_test.go index c4343f85..48c6e49c 100644 --- a/utils/request_helpers_test.go +++ b/utils/request_helpers_test.go @@ -27,6 +27,20 @@ var _ = Describe("Request Helpers", func() { }) }) + Describe("ParamStringDefault", func() { + BeforeEach(func() { + r = httptest.NewRequest("GET", "/ping?a=123", nil) + }) + + It("returns default string if param does not exist", func() { + Expect(ParamStringDefault(r, "xx", "default_value")).To(Equal("default_value")) + }) + + It("returns param as string", func() { + Expect(ParamStringDefault(r, "a", "default_value")).To(Equal("123")) + }) + }) + Describe("ParamStrings", func() { BeforeEach(func() { r = httptest.NewRequest("GET", "/ping?a=123&a=456", nil)