From 6d64d35564630299278a48315cae35a7b5c92b2e Mon Sep 17 00:00:00 2001 From: Deluan Date: Wed, 9 Mar 2016 09:07:06 -0500 Subject: [PATCH] Moved coverart tests to engine --- api/get_cover_art_test.go | 20 ++++++---- engine/cover_test.go | 78 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+), 7 deletions(-) create mode 100644 engine/cover_test.go diff --git a/api/get_cover_art_test.go b/api/get_cover_art_test.go index 5ee5055aa..32016dad4 100644 --- a/api/get_cover_art_test.go +++ b/api/get_cover_art_test.go @@ -39,13 +39,6 @@ func TestGetCoverArt(t *testing.T) { So(w.Body, ShouldReceiveError, responses.ERROR_MISSING_PARAMETER) }) - Convey("When id is not found", func() { - mockMediaFileRepo.SetData(`[]`, 1) - _, w := getCoverArt("id=NOT_FOUND") - - So(w.Body.Bytes(), ShouldMatchMD5, "963552b04e87a5a55e993f98a0fbdf82") - So(w.Header().Get("Content-Type"), ShouldEqual, "image/png") - }) 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") @@ -53,6 +46,19 @@ func TestGetCoverArt(t *testing.T) { 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.ERROR_DATA_NOT_FOUND) + }) + 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.ERROR_GENERIC) + }) 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") diff --git a/engine/cover_test.go b/engine/cover_test.go new file mode 100644 index 000000000..702de3246 --- /dev/null +++ b/engine/cover_test.go @@ -0,0 +1,78 @@ +package engine_test + +import ( + "testing" + + "bytes" + "image" + + "github.com/deluan/gosonic/engine" + . "github.com/deluan/gosonic/tests" + "github.com/deluan/gosonic/tests/mocks" + . "github.com/smartystreets/goconvey/convey" +) + +func TestCover(t *testing.T) { + Init(t, false) + + mockMediaFileRepo := mocks.CreateMockMediaFileRepo() + + cover := engine.NewCover(mockMediaFileRepo) + out := new(bytes.Buffer) + + Convey("Subject: GetCoverArt Endpoint", t, func() { + Convey("When id is not found", func() { + mockMediaFileRepo.SetData(`[]`, 1) + err := cover.Get("1", 0, out) + + Convey("Then return default cover", func() { + So(err, ShouldBeNil) + So(out.Bytes(), ShouldMatchMD5, "963552b04e87a5a55e993f98a0fbdf82") + }) + }) + Convey("When id is found", func() { + mockMediaFileRepo.SetData(`[{"Id":"2","HasCoverArt":true,"Path":"tests/fixtures/01 Invisible (RED) Edit Version.mp3"}]`, 1) + err := cover.Get("2", 0, out) + + Convey("Then it should return the cover from the file", func() { + So(err, ShouldBeNil) + So(out.Bytes(), ShouldMatchMD5, "e859a71cd1b1aaeb1ad437d85b306668") + }) + }) + Convey("When there is an error accessing the database", func() { + mockMediaFileRepo.SetData(`[{"Id":"2","HasCoverArt":true,"Path":"tests/fixtures/01 Invisible (RED) Edit Version.mp3"}]`, 1) + mockMediaFileRepo.SetError(true) + err := cover.Get("2", 0, out) + + Convey("Then error should not be nil", func() { + So(err, ShouldNotBeNil) + }) + }) + Convey("When id is found but file is not present", func() { + mockMediaFileRepo.SetData(`[{"Id":"2","HasCoverArt":true,"Path":"tests/fixtures/NOT_FOUND.mp3"}]`, 1) + err := cover.Get("2", 0, out) + + Convey("Then it should return DatNotFound error", func() { + So(err, ShouldEqual, engine.DataNotFound) + }) + }) + Convey("When specifying a size", func() { + mockMediaFileRepo.SetData(`[{"Id":"2","HasCoverArt":true,"Path":"tests/fixtures/01 Invisible (RED) Edit Version.mp3"}]`, 1) + err := cover.Get("2", 100, out) + + Convey("Then image returned should be 100x100", func() { + So(err, ShouldBeNil) + So(out.Bytes(), ShouldMatchMD5, "04378f523ca3e8ead33bf7140d39799e") + img, _, err := image.Decode(bytes.NewReader(out.Bytes())) + So(err, ShouldBeNil) + So(img.Bounds().Max.X, ShouldEqual, 100) + So(img.Bounds().Max.Y, ShouldEqual, 100) + }) + }) + Reset(func() { + mockMediaFileRepo.SetData("[]", 0) + mockMediaFileRepo.SetError(false) + out = new(bytes.Buffer) + }) + }) +}