package api_test import ( "fmt" "net/http" "net/http/httptest" "testing" "github.com/astaxie/beego" "github.com/cloudsonic/sonic-server/api/responses" "github.com/cloudsonic/sonic-server/domain" "github.com/cloudsonic/sonic-server/persistence" . "github.com/cloudsonic/sonic-server/tests" "github.com/cloudsonic/sonic-server/utils" . "github.com/smartystreets/goconvey/convey" ) func getCoverArt(params ...string) (*http.Request, *httptest.ResponseRecorder) { url := AddParams("/rest/getCoverArt.view", params...) r, _ := http.NewRequest("GET", url, nil) w := httptest.NewRecorder() beego.BeeApp.Handlers.ServeHTTP(w, r) beego.Debug("testing TestGetCoverArt", fmt.Sprintf("\nUrl: %s\nStatus Code: [%d]\n%#v", r.URL, w.Code, w.HeaderMap)) return r, w } func TestGetCoverArt(t *testing.T) { Init(t, false) mockMediaFileRepo := persistence.CreateMockMediaFileRepo() utils.DefineSingleton(new(domain.MediaFileRepository), func() domain.MediaFileRepository { return mockMediaFileRepo }) Convey("Subject: GetCoverArt Endpoint", t, func() { Convey("Should fail if missing Id parameter", func() { _, w := getCoverArt() So(w.Body, ShouldReceiveError, responses.ErrorMissingParameter) }) Convey("When id is found", func() { mockMediaFileRepo.SetData(`[{"Id":"2","HasCoverArt":true,"Path":"tests/fixtures/01 Invisible (RED) Edit Version.mp3"}]`, 1) _, w := getCoverArt("id=2") So(w.Body.Bytes(), ShouldMatchMD5, "e859a71cd1b1aaeb1ad437d85b306668") So(w.Header().Get("Content-Type"), ShouldEqual, "image/jpeg") }) Convey("When id is found but file is unavailable", func() { mockMediaFileRepo.SetData(`[{"Id":"2","HasCoverArt":true,"Path":"tests/fixtures/NOT_FOUND.mp3"}]`, 1) _, w := getCoverArt("id=2") So(w.Body, ShouldReceiveError, responses.ErrorDataNotFound) }) Convey("When the engine reports an error", func() { mockMediaFileRepo.SetData(`[{"Id":"2","HasCoverArt":true,"Path":"tests/fixtures/NOT_FOUND.mp3"}]`, 1) mockMediaFileRepo.SetError(true) _, w := getCoverArt("id=2") So(w.Body, ShouldReceiveError, responses.ErrorGeneric) }) Convey("When specifying a size", func() { mockMediaFileRepo.SetData(`[{"Id":"2","HasCoverArt":true,"Path":"tests/fixtures/01 Invisible (RED) Edit Version.mp3"}]`, 1) _, w := getCoverArt("id=2", "size=100") So(w.Body.Bytes(), ShouldMatchMD5, "04378f523ca3e8ead33bf7140d39799e") So(w.Header().Get("Content-Type"), ShouldEqual, "image/jpeg") }) Reset(func() { mockMediaFileRepo.SetData("[]", 0) mockMediaFileRepo.SetError(false) }) }) }