/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġit . coding jam . github . api Ċ Ċ import Ġassert k . assertThat Ċ import Ġassert k . assertions . isEqualTo Ċ import Ġassert k . assertions . isNotNull Ċ import Ġit . coding jam . github . api . util . Ret rofit Factory Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġokhttp 3 . mock webserver . Mock Response Ċ import Ġokhttp 3 . mock webserver . Mock WebServer Ċ import Ġok io . Ok io Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġjava . nio . charset . StandardCharsets Ċ Ċ class ĠGithub Service Test Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġservice : ĠGithub Service ĊĊĠĠĠ Ġval Ġmock WebServer Ġ= ĠMock WebServer () ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġcreate Service () Ġ{ ĊĠĠĠĠĠĠĠ Ġservice Ġ= ĠRet rofit Factory . create Service ( false , Ġmock WebServer . url ("/ ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun Ġstop Service () Ġ{ ĊĠĠĠĠĠĠĠ Ġmock WebServer . shutdown () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠgetUser () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġenqueue Response (" user - y ig it . json ") ĊĠĠĠĠĠĠĠ Ġval Ġy ig it Ġ= Ġservice . getUser (" y ig it "). await () ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġmock WebServer . take Request () ĊĠĠĠĠĠĠĠ ĠassertThat ( request . path ). isEqualTo ("/ users / y ig it ") ĊĊĠĠĠĠĠĠĠ ĠassertThat ( y ig it ). isNotNull () ĊĠĠĠĠĠĠĠ ĠassertThat ( y ig it . avatar Url ). isEqualTo (" https :// avatars 3 . githubusercontent . com / u / 8 9 2 0 2 ? v = 3 ") ĊĠĠĠĠĠĠĠ ĠassertThat ( y ig it . company ). isEqualTo (" Google ") ĊĠĠĠĠĠĠĠ ĠassertThat ( y ig it . blog ). isEqualTo (" bir bit . com ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġrepos () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġenqueue Response (" repos - y ig it . json ") ĊĠĠĠĠĠĠĠ Ġval Ġrepos Ġ= Ġservice . get Repos (" y ig it "). await () ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġmock WebServer . take Request () ĊĠĠĠĠĠĠĠ ĠassertThat ( request . path ). isEqualTo ("/ users / y ig it / repos ") ĊĊĠĠĠĠĠĠĠ ĠassertThat ( repos . size ). isEqualTo ( 2 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġ(_, Ġ_, ĠfullName , Ġ_, Ġowner ) Ġ= Ġrepos [ 0 ] ĊĠĠĠĠĠĠĠ ĠassertThat ( fullName ). isEqualTo (" y ig it / Ack M ate ") ĊĊĠĠĠĠĠĠĠ ĠassertThat ( owner ). isNotNull () ĊĠĠĠĠĠĠĠ ĠassertThat ( owner . login ). isEqualTo (" y ig it ") ĊĠĠĠĠĠĠĠ ĠassertThat ( owner . url ). isEqualTo (" https :// api . github . com / users / y ig it ") ĊĊĠĠĠĠĠĠĠ ĠassertThat ( repos [ 1 ]. fullName ). isEqualTo (" y ig it / android - architecture ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget Contribut ors () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġenqueue Response (" contributors . json ") ĊĠĠĠĠĠĠĠ Ġval Ġcontributors Ġ= Ġservice . get Contribut ors (" foo ", Ġ" bar "). await () ĊĠĠĠĠĠĠĠ ĠassertThat ( contributors . size ). isEqualTo ( 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġ( login , Ġcontributions , Ġavatar Url ) Ġ= Ġcontributors [ 0 ] ĊĠĠĠĠĠĠĠ ĠassertThat ( login ). isEqualTo (" y ig it ") ĊĠĠĠĠĠĠĠ ĠassertThat ( avatar Url ). isEqualTo (" https :// avatars 3 . githubusercontent . com / u / 8 9 2 0 2 ? v = 3 ") ĊĠĠĠĠĠĠĠ ĠassertThat ( cont ributions ). isEqualTo ( 2 9 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( contributors [ 1 ]. login ). isEqualTo (" gu av abot ") ĊĠĠĠĠĠĠĠ ĠassertThat ( contributors [ 2 ]. login ). isEqualTo (" col tin ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsearch () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheader Ġ= Ġ"< https :// api . github . com / search / repositories ? q = foo & page = 2 >; Ġrel =\" next \ "," Ġ+ Ġ" Ġ< https :// api . github . com / search / repositories ? q = foo & page = 3 4 >; Ġrel =\" last \"" ĊĠĠĠĠĠĠĠ Ġenqueue Response (" search . json ", Ġmap Of (" link " Ġto Ġheader )) ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġservice . search Repos (" foo "). await () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( response ). isNotNull () ĊĠĠĠĠĠĠĠ ĠassertThat ( response . body ()?. size ). isEqualTo ( 3 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġenqueue Response ( fileName : ĠString , Ġheaders : ĠMap < String , ĠString > Ġ= Ġempty Map ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠinputStream Ġ= Ġjava Class . class Loader ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getResource AsStream (" api - response /" Ġ+ ĠfileName ) ĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĠOk io . buffer ( Ok io . source ( inputStream )) ĊĠĠĠĠĠĠĠ Ġval Ġmock Response Ġ= ĠMock Response () ĊĠĠĠĠĠĠĠ Ġheaders . forEach Ġ{ Ġkey , Ġvalue Ġ-> Ġmock Response . add Header ( key , Ġvalue ) Ġ} ĊĠĠĠĠĠĠĠ Ġmock WebServer . enqueue ( mock Response ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Body ( source . readString ( StandardCharsets . UTF _ 8 ))) ĊĠĠĠ Ġ} Ċ } Ċ