From c9455e1955cc67aec9dab1dc9756c56090a39157 Mon Sep 17 00:00:00 2001 From: Deluan Date: Thu, 3 Mar 2016 12:08:44 -0500 Subject: [PATCH] getCoverArt.view working --- api/get_cover_art.go | 71 ++++++++++++++++++ api/get_cover_art_test.go | 58 ++++++++++++++ conf/router.go | 1 + domain/mediafile.go | 1 + persistence/mediafile_repository.go | 7 +- static/default_cover.jpg | Bin 0 -> 22593 bytes .../01 Invisible (RED) Edit Version.mp3 | Bin 0 -> 60845 bytes tests/matchers.go | 6 ++ tests/mocks/mock_mediafile_repo.go | 6 +- 9 files changed, 148 insertions(+), 2 deletions(-) create mode 100644 api/get_cover_art.go create mode 100644 api/get_cover_art_test.go create mode 100644 static/default_cover.jpg create mode 100644 tests/fixtures/01 Invisible (RED) Edit Version.mp3 diff --git a/api/get_cover_art.go b/api/get_cover_art.go new file mode 100644 index 000000000..590cb380b --- /dev/null +++ b/api/get_cover_art.go @@ -0,0 +1,71 @@ +package api + +import ( + "github.com/deluan/gosonic/domain" + "github.com/karlkfi/inject" + "github.com/deluan/gosonic/utils" + "github.com/astaxie/beego" + "github.com/deluan/gosonic/api/responses" + "io/ioutil" +"github.com/dhowden/tag" + "os" +) + +type GetCoverArtController struct { + BaseAPIController + repo domain.MediaFileRepository +} + +func (c *GetCoverArtController) Prepare() { + inject.ExtractAssignable(utils.Graph, &c.repo) +} + +func (c *GetCoverArtController) Get() { + id := c.Input().Get("id") + if id == "" { + c.SendError(responses.ERROR_MISSING_PARAMETER, "id parameter required") + } + + mf, err := c.repo.Get(id) + if err != nil { + beego.Error("Error reading mediafile", id, "from the database", ":", err) + c.SendError(responses.ERROR_GENERIC, "Internal error") + } + + var img []byte + + if (mf.HasCoverArt) { + img, err = readFromTag(mf.Path) + beego.Debug("Serving cover art from", mf.Path) + } else { + img, err = ioutil.ReadFile("static/default_cover.jpg") + beego.Debug("Serving default cover art") + } + + if err != nil { + beego.Error("Could not retrieve cover art", id, ":", err) + c.SendError(responses.ERROR_DATA_NOT_FOUND, "cover art not available") + } + + + c.Ctx.Output.ContentType("image/jpg") + c.Ctx.Output.Body(img) +} + +func readFromTag(path string) ([]byte, error) { + f, err := os.Open(path) + if err != nil { + beego.Warn("Error opening file", path, "-", err) + return nil, err + } + defer f.Close() + + m, err := tag.ReadFrom(f) + if err != nil { + beego.Warn("Error reading tag from file", path, "-", err) + return nil, err + } + + return m.Picture().Data, nil +} + diff --git a/api/get_cover_art_test.go b/api/get_cover_art_test.go new file mode 100644 index 000000000..6c268addd --- /dev/null +++ b/api/get_cover_art_test.go @@ -0,0 +1,58 @@ +package api_test + +import ( + "testing" + + "github.com/deluan/gosonic/api/responses" + "github.com/deluan/gosonic/domain" + . "github.com/deluan/gosonic/tests" + "github.com/deluan/gosonic/tests/mocks" + "github.com/deluan/gosonic/utils" + . "github.com/smartystreets/goconvey/convey" + "net/http" + "net/http/httptest" + "github.com/astaxie/beego" + "fmt" +) + +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 TestGetCoverArtDirectory", 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 := mocks.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.ERROR_MISSING_PARAMETER) + }) + Convey("When id is not found", func() { + mockMediaFileRepo.SetData(`[]`, 1) + _, w := getCoverArt("id=NOT_FOUND") + + So(w.Body.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) + _, w := getCoverArt("id=2") + + So(w.Body.Bytes(), ShouldMatchMD5, "e859a71cd1b1aaeb1ad437d85b306668") + }) + Reset(func() { + mockMediaFileRepo.SetData("[]", 0) + mockMediaFileRepo.SetError(false) + }) + }) +} diff --git a/conf/router.go b/conf/router.go index 468a63dd9..15738a770 100644 --- a/conf/router.go +++ b/conf/router.go @@ -21,6 +21,7 @@ func mapEndpoints() { beego.NSRouter("/getMusicFolders.view", &api.GetMusicFoldersController{}, "*:Get"), beego.NSRouter("/getIndexes.view", &api.GetIndexesController{}, "*:Get"), beego.NSRouter("/getMusicDirectory.view", &api.GetMusicDirectoryController{}, "*:Get"), + beego.NSRouter("/getCoverArt.view", &api.GetCoverArtController{}, "*:Get"), ) beego.AddNamespace(ns) diff --git a/domain/mediafile.go b/domain/mediafile.go index a41472f9b..4aed54416 100644 --- a/domain/mediafile.go +++ b/domain/mediafile.go @@ -30,5 +30,6 @@ type MediaFile struct { type MediaFileRepository interface { BaseRepository Put(m *MediaFile) error + Get(id string) (*MediaFile, error) FindByAlbum(albumId string) ([]MediaFile, error) } diff --git a/persistence/mediafile_repository.go b/persistence/mediafile_repository.go index 228deb80b..0a2747fd6 100644 --- a/persistence/mediafile_repository.go +++ b/persistence/mediafile_repository.go @@ -19,6 +19,11 @@ func (r *mediaFileRepository) Put(m *domain.MediaFile) error { return r.saveOrUpdate(m.Id, m) } +func (r *mediaFileRepository) Get(id string) (*domain.MediaFile, error) { + m, err := r.readEntity(id) + return m.(*domain.MediaFile), err +} + func (r *mediaFileRepository) FindByAlbum(albumId string) ([]domain.MediaFile, error) { var mfs = make([]domain.MediaFile, 0) err := r.loadChildren("album", albumId, &mfs, "", false) @@ -35,7 +40,7 @@ func (a byTrackNumber) Swap(i, j int) { a[i], a[j] = a[j], a[i] } func (a byTrackNumber) Less(i, j int) bool { - return (a[i].DiscNumber*1000 + a[i].TrackNumber) < (a[j].DiscNumber*1000 + a[j].TrackNumber) + return (a[i].DiscNumber * 1000 + a[i].TrackNumber) < (a[j].DiscNumber * 1000 + a[j].TrackNumber) } var _ domain.MediaFileRepository = (*mediaFileRepository)(nil) \ No newline at end of file diff --git a/static/default_cover.jpg b/static/default_cover.jpg new file mode 100644 index 0000000000000000000000000000000000000000..647bd437233593aedd4172a96fb4c072f764bdc2 GIT binary patch literal 22593 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%0Dow%N?W+-8N`{Tl7`A{DhCE^)tKj?&F-n^ZBo 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�-Ez*GYI!I zkS-i%$QTTNqE&AZ;ji^kO;9tHwwr+rcq2&eqXM+QDu)!*x~&Fc($j1jmI(+ZcEj4S zPd9v7O)K;nlxNyA-^B_e72SPjf>y@Llh=L$ zo}1G%?h?n%3k8{)M~h$ZG=HEL0>^rRkb#E z2+u7n>RG|`ITfx@4weaRRYx{kFyal@ABVKRE2b~sc6Oh5;5@a)+(7xZck2ON@t?Yr zk~7^x*~kNyXd0gV?vE7DdaHP4(7qzqzbovO*>AN{pFLT>J@4FBwLYo;`l5goFRZoR zk=wKW_A2#Tfz8C1oS8i}oJ;7StSMktbhiR}y)4Vl+S8xkFk&90Flc_7)Av~^k00WplTBm-S>9$G)V%K87mSx_sM+%q z$sBP>B2&Bio!gQ3h=1%0eVkyWoM>S6?MU$-jHc~d2vC#T3BO^7pHTV!W@u%0y{Ae{ zFS+pWwfy*P2TEH_*a(AS$0#|?l!Hn$fxAT2s5}U9bA%3OmHBDIGm5Td=EbaR{ynjU zpoSbzvM8q9c(;O$Hv#fjxkX6@`z&Y{rQn~}%^E55>Bs$mVQJ_+b=c!U|T zt$v)N_BF{!A|~M|gU{OewvP{F4{W^to>rTD=W2g^%R0Y4uk`(gfTtf0&+w#<;LL~P zi$YCrva@J}`r_O&`cP>tZYXC50~1PX(y&n85SopJ1g%s!DvjX`&I_;DKvl%rn=fiY5;`oVv`JDW4v4g1(oTt+OzP(* zsYx*=;b-*ETD{-FTTSHa)yX%?{q+m`wjVQk&3x1i4Rv3|66IPCr3wq>?ewHZe{-e| z)5C^bFHsrpHwL1*p7UvBET{qSZa;uE#p^Dw@6y?mr89p6;9hpQEuiXA zn)lI}yqN_1rb`YdFB#7XRb*%54UGwjSDjbT9YEBWNl50E=N4t&j-+&7KFQvZW#JwT z;%0n^rl9NCogT%TZoxU3Sb1+-B!eO)ja3c^P&k?}kcE-LcL}~hRc4gDFn8MUqSQ}) z+m=nJ`XSz?Zrz}|!2=aDj?`wboH_7|ukVY8f7<;r_Qrq~g;$i6=YfDqPZfaK2pSYS z`}E?T(UM)7#^bwTQzzQWLvQzYZBcs6R)&x!P3&Vj~Bk_fMOMWY*TcYtQ1!BGQX%~s5PRZE0j4zYn zEX+w-rXywa7dHcLEqnx94_&^~4ecMC_`%-oujsPm9p7KMw))Y#t$rxmyU~)g)urnA zMPbtVm&my;uCq@+>gPXg6CM1`&!04XVtP}%olO?)7JHdvfFnyTBFM4&Q#3_qxkDIE zL*>P?%y8u{d%jl-Fl}%jV6gL3(Te(DVs3?f1Ea6q3)gsAcVn@Fq`Q-M62Z0EQ=;Z+ zW7DadSN+RMX_grey6mlPjv%~IYoxUcS0Z1Shg^A}hqeAPfAdWo$xw-eE7;og#YwZ~&Ia>IzEs|kgIrL>^@Wf zbSK>WVAsFNM7jM>Q*c5_w=Vb^gT8^Z7=|Igu&XFMdR43k@f_ByUF z>}WBZtTHD5JXg-8Us(Fput2c6vCP#IP$v0LauEQei3Jlr`>-?FL5MrhTi#&97b(8l zuj)*Dp{SLNtQ&~IpS!37P z-EOlI@Q8PA&oM?>Y|IGCtB7a{$O#kooW-$$!t#&8o4mCX!&x;`&lx=v24s)L&AL?d z9%dhE%UyC-A^r$CcG@&Bjf`lj(*Svx%Hk;L>qi~6g7GZmw62(qcr6cRkEZL4mF`WJ z(y>8B4K-h`jcEyH4$u73duV9rR6uu{t=XBie3L!-0qdI=h#9Zvc=Jd#60k-%BdDMg zB@Vr^%~b=vOF>Ps6Z=y4aKFMr)bNe8pvR7Zo}I2x+T?}zEltl3seIv#W`3HV9 zH@~kt%6=nQd^2mR{rC}audHSR4xVF8iM0%WS=)F!^qpYgo0a5zD7or}Z#+BC8agIJ z&XpFI_ma|%yIy=Eh0=q7$!%t;OsZqCiVF^IuEJ>l_1DF=eFqCBj{Oi;(_UQ;c;iLK}1s_aAaBRWLZdxe7Pr-K4tXE@>6`H47WW#O*B_$ zzw&ZPxbyYb!(UlMg$@>FKE9QKyHJBK#|-EBy5gbI1>ta?ZH66!^n*!Jw# zUSRfO5gIj|rK&%*nK)^4ui879q^H4ay4WL6{xtlP+%o_o%yj8k?K)#!+%9psyYQCh z{IZ{MlpeyX;1(397y|$X!Z>#l=p#Q>pO_toje9<)X?B!=gMpw7cMM1cI%g7mdws?Sy-uZ!x}8ex0&FJX(M8JH%7&)4}#qb{#ZbdDM4&rtieo;@l@` zw&O_B*b1w|OWhTjC8Bh(I$LPJUNrcz?I(@{i&b9=&~e&HRSvu75b}my^;N#e?F~2dH&TxC`e}tO%VViKoF2drl5z= zswCX5X|NXnUg@SQZp^j>u-%uyb-V|I(HNLw=D9!Jg|RCIR#&=m~o! zEow&-(Qb8P>=rn~sJ`6Mz&+A_dL*?lo2Ex99Y12i1T!~=*Yq~g%}w?ld2W}wAqH>2 zv^#3~M@9y!?le!Tm5mwX+%y^;a4)1A8nVi>|IlwzyFkp1jWrYB*{*tezBO4?>ZWMb zz6b#da8T34_pH}R2@bFY+~-Y_BF9nKPjUdss3{K)GY|yfy2$Bh7k~LRUyTKX@HNKM zRzm^!WgRCb4ZCIiKtoew$yauaTKLXl*R5x{BPG1Ch2PTN?o0O6T5r5^+Z%`#h)ULX z@_V60DHPS3oc8>MI!#|BKb?NOd(+njo^Lzf*I)EYLtDJ%z?UD7Zxhd1D<1 z4$Cf4YZ(Q__Sn%y3Y!^a(=n|VaqRaEM9rt`auD|u_+JgqeYGH-jq6(eGiP0;c$Xn7 zAf_YRVj(LvHal^&6+uS|3d5*pQQ&HEyTS+|U@e{u9VrB$eJpX*yQnPTj{m zE2;1a*Bgi~puI@eyW$#X)Te??quu zosNXNWbqWCJ{>+}l?b{}VUA1qh7@2F#*i-47G8t%;OGO{A=$3$elZ7bA^jxK>m|(T z((3oGkLztzYP(5Qg<&kq#n>tz)Yuotxs+^Jv9A~4lx@AEUkkieJ^{@p3ve{&l4kx;W3Pz(yQb;Y#;j7e#B0#tsygb?tmrHfDN6v4{3&O zcLk6SaS?DRRu}}}20)M~e)0mV?{Z%D_;T>XgLh^=je$WI7IxpBt}dCkSgQ`K8T>Wc zXaDeAyy2pdg9Z!^gP|+ZOB=aVl7qVRRo55TGpiRFw5WK&zEwV^Ybk=FFUc)F2xscd zT9L4;Tc#S<_94hOLS!r&mV<1!2H zez`7JYK`YnsupVQYVv~=t* z_q};FL;QU8%jY<4P35&e+XvO>|0EXzKx9O#g^KC z1?$dymqPZRad1oyijTF9@EnaxU-9GBH}{XQG`*>G#D=1TMo`2t!70I!V_cjsIdvX& zb9^aEE@SlFe3yfdO;k?K`)bkLKhubuv?v_9Lm~Q^Q8wN;rhFg>5zj%0=={bJ&jt(; zT3|!e=oVPt3Y;<@RgwaLnQ+Jfr0|D;C+tByhnZbzX~w_P_ggcnOI;YrlU(E?lCt#r z_WeZmcJ})llkcnh@wYw*%}_4(YP4*akbJU*<{zxjgI^U+U=sWRBA+_yFz4r8JuBKh!!x!-=NidxXxu)Vz3%C4Ep&tPg}fqp zHF;1vp9PbQ>TjqQjqqV2;3gZ&Q!hQHfvS`6zg2Wga*K3@Z1*M``7SOBj_ZpDVF8>M z8V~7Z2AOGNOVm;rI1+0sWVwwpPTO*oiThdp~gJvAC`@Xow{|3N1Q+YJUV}Z!+uKUO@h0bg_Zq3$z5LSzqkFzF8O4`D1e76_vlR$cqJVBbv!wdhTGJ> zBiTkT^MCeTjO?48e&_O&kX&LJO4PEpSXIcPrsBr%H1CJ?t8v=@|IWjyMG`{>YSGx* z&(WV<7hrcuRtayfVA*g1Fkww{pxoA$v}d^>I03+!;{b_QQ--APyXN}DWqE?ji|>Co z^NPC4ax3$ftWwQFqxbUb2O`6FJO5;>MO|oFB&s*)Os4_wg0C?S`y8upwwm}q8q`14b^5BAkd-CKo`va65y0PF!*4Y^T1nq*;e(UdM-qSCe zT3w>v^xFJ+M2F~WSNbySAti^g*4KFo@niJ6$~&z7%C)}W z`6PWI-zYTwu#Knk`sZpF@|Z2}#=@*s9Kam{+etX@tI)>grVI8*o5eeJAtNZ_NmWEU zcB$eaDi8vMYzRUKB49`e+z?wBAnaE}RqYNbu;{n*w!QmKwzI+O&J;0tO32-tSh-+! z)OJ5w=IqnFe|traqY_DIETyUlF9#^DRL94@Zh$+IQHS%c;oF-x(=9b^bu!kZ*DS67 z1fpg$?uApN`9w9`7%35yj*?F0a$J%!(l6#KRFw>*`iv7q(Lz$m(Bdct2m=6TMNxx_ zfkkRC4j?D7*pEg%z`$r~cQY`Of+7()mn1~#n)PvaZq~C;hYQp-cR2jbUt-2>5A5g^ ze`>#k|J-mG()!jmx3WJ~xzbM*oAhw?9~oG$xnH1*kZyiJy;V5f+U-Px`xC(3#XnPLTAI$P!-rbZ?Z!ajDdUC%(_Sx;SeW~ar&q^@xGR}L1@v#2lBBIIQq#v2Cp*$3(WiKDb*k!TN(QWvEFDvNt0dF1M$ASBH4lxSl zJi>J`gALhOLI01M3L|k+81w0ub#n{E{oLyt!?i@>Bz}!S!%dfX!Oi-bCFU6zn=`=? z8lMfz+7HK%G9rW`c|u)z<3krCpz&ZJ-h?CujTHnaYr0sU!^ptC1yN$+*FEo>FzHwv zaXwkox#o9K=2i72sWp?LiJEUakDn&oe={K>>ddV*Z}7KBb{xg;e3R8k(UtKq$-YC= z1>{Q`z50{HJ5Tr?J~v$dn(%n;nrGvQmYDaw9pcyQTJtOyUhP+sFA?vOni5?VX+bJs zSy%*p=&2wF!clh|5GiPwf=Ej=hVMxOK% z-T>ReH698JSIeIwjMcq5>jj-zeMcWKys*Vy^q_%Fd>2%36sZ-jiVncQKF59>-`qcO}wM(|+XI)Vl zShe&V>GvqLL@)X4E`E{ibAM>s4qc+hY@XI0p6@)$mgG599((38<`TIseZd+sZl1yZMIE zOE?Ps#_{)^HNNl~w{NV@4#o4NWNLr`14@b{6+9}8f`IAZB(VfGsdHXqQZXZTBi|@V z=MU6Yos&6VT}D=_e_XhYvnKqV)YtAcDK!cxrMSz7R}p~Fw&?Jg(Qr~hpRLr z=zN{`fN$L`XAm2@fsYK7A=7V;YNdC=tQ#J6k6?jN<70B zyYpt`C4nr|YjIY~qDTYyoy?+xNMU}KB9UAQ`{9HW@Rfj|#JXvHL+WZ#7o1kaVI@ zW)F(?Mf&)#Hhdeb!Hzhump?mF*ZZ_->^SZ)m-X|n=hfP=K?IDSCA@~p`7)8@T=0MB(Bto3d(lxK<^L! z%Ln;?PjTdMr?>ak7`sH>R`CL^JZ)f619BvSGSn>`MUq8}TSS7Q0BS1W2I*g>f-&ym z^3f`6!Nx21hp8Hj9!68gM&)U;(hfIE+O#keNdaENS2Lp`FCHSV4l~8amtGf+bGq{( zo0^N`$rI-iYrE~g${#{Rnh!1hG+rE~P5r6V+P^ooHhY>`kr{@+@c8oO1F_5kde6>8 z1e!|j?sSH*wXXn&soU+qCH zLkg9eAKV}PnmRr#_^^&H{!Jv-Wd{k-uC+c6ZaSN4D*S2)dXC`Qp!=*Nm=@}NS-pE=aljxhCW zck-|>)@$mTNxobYH@@5nxZkzw?-UlFEMX$mdS8YaF}ImMJKUGhM^~SdmKbIJgATbM zoB-N4Ql;fPoh&^OYCSDxXfZz~qbF7G;e(^lHs!+;3-RZvzzDe{RtqHG4JU(95+Y0> zL*zI?c0gW?sbySIDRGx`%cbXDfA-sAi;6z^HHRy=LX3@2CQH?~+M6c{tY3?T z{gYh6B@-H=MRJMDFbM9bL6LaXeQj#~GeVxN5EVqyP za?4=rRie#YFku2ZgEEc*{bfum<#y%tWtZrY?E`93&}9M?i2w*kbC(-MN(qP<+I5o0 zQiX>{NE#KU=;V%6$3zbpZ#Z;**=Wd_vr*jc+pH>&Vy?zNScjMAoK}C=l135jXKy-T z4rI(D9Vwj}y4U>qMQD0PoCA5%LG{#5X0htpRVy{v0nJ-ft~uXRTSnt*J~rOTJbUVt zBN_Z@kN6RHxr|`DsAYOj`Qw8a(>l)WU;>~a6cvoJ108)Oo(hL0a03QuGysy-|MqBd z0aB0&F8q_qX?>jVNNv5_qRC zDvDbbYr_NFp}62B)F|cVo{&k1~Qa8>bPsgYvi)v_4IiZ2{V^O+ZV(|>*_Pb<4-@U z4Z}plSzjP|;sHulAqad|6`>t26n-KTiHjx_P{3#j5z#=J0XLYo~X&K&c|HYaZ{ybUoTRuBHTu5&i5+s!Z2^-pq_ zSF8=nePRy*a7sTb{53aVqobnHbeTUhi4klR9tDu`&DmQ4oSzDHpR`tZN1D9(*6_3L zak%D{wbtp@*t(Rki_{0L`Cm?75{b(18qfd$2B8VICXbPC%3Pc;su%pO9 zxB?}MXTAbZ7!~e4d9okA4}c@Y%jW=SmdM_>=Yl%@Y6W^>?vy`-W5lU!;~616dXxzs z)zTy?((KD2d}{sbDRZU@Ekobz$O?^au1(Aa5k3NYIEFoH;wM zjK1$fu+bwcR&|Rfa;*c+7qFSv0)~bMqvAuuG?upQtyJhYc^$oo=c8@U%bc@)DWT+7 z%IbOdkoNAy^qT?w{MrA?eO%nL!G11_BEQno=A1(<&c>Z*a}C=PdljZzI+5Gm*J7;^ zAFo?FsSuMK)Y9~?bc?M43PA}4hvEQG#Vu|}G@iAOnTl171Hh3}f1&*kJ!rycGQTDL#-Wsi z;^-IciEQzEn`PNPpYbaH?EA0ff5B$~jRQW96h9dWd>K_gl?)d8zpu!i)RZr8aC zzw?O%-I^YKqyn^XvlLvwEOQ;&aS;0)JO~r@|4&5{1P&4-rIF+X0GVZ&f}bUT8jfwA z_InuGo#al(b}q(`+B4bMF30SD2U@vnYWsR|EWACelKKfX zM|0sN0B->{H|!FXwKEgD5;kI!lU#9sdQb-+t07uN0SI8i)yGY9Zp$JuB^BhQTZPW0 zB8lG|*h?_Ajz;gl>k1oX%rGh1_j1HsBSoErVP%JL8tG7PF3ChdRCs&#W)Bf literal 0 HcmV?d00001 diff --git a/tests/matchers.go b/tests/matchers.go index 1793335b3..1d142588a 100644 --- a/tests/matchers.go +++ b/tests/matchers.go @@ -7,6 +7,7 @@ import ( "fmt" "github.com/deluan/gosonic/api/responses" . "github.com/smartystreets/goconvey/convey" + "crypto/md5" ) func ShouldMatchXML(actual interface{}, expected ...interface{}) string { @@ -43,6 +44,11 @@ func ShouldReceiveError(actual interface{}, expected ...interface{}) string { return ShouldEqual(v.Error.Code, expected[0].(int)) } +func ShouldMatchMD5(actual interface{}, expected ...interface{}) string { + a := fmt.Sprintf("%x", md5.Sum(actual.([]byte))) + return ShouldEqual(a, expected[0].(string)) +} + func UnindentJSON(j []byte) string { var m = make(map[string]interface{}) json.Unmarshal(j, &m) diff --git a/tests/mocks/mock_mediafile_repo.go b/tests/mocks/mock_mediafile_repo.go index 15c5906d0..f0bf8b651 100644 --- a/tests/mocks/mock_mediafile_repo.go +++ b/tests/mocks/mock_mediafile_repo.go @@ -45,7 +45,11 @@ func (m *MockMediaFile) Get(id string) (*domain.MediaFile, error) { if m.err { return nil, errors.New("Error!") } - return m.data[id], nil + mf := m.data[id] + if mf == nil { + mf = &domain.MediaFile{} + } + return mf, nil } func (m *MockMediaFile) FindByAlbum(artistId string) ([]domain.MediaFile, error) {