/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠGoogle , ĠInc . Ċ Ġ* Ċ Ġ* Ġ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 Ġio . pl aid app . core . designer news . domain Ċ Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . mock Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . wh enever Ċ import Ġio . pl aid app . core . data . Load Source Callback Ċ import Ġio . pl aid app . core . data . Pl aid Item Ċ import Ġio . pl aid app . core . data . Result Ċ import Ġio . pl aid app . core . designer news . data . stories . St ories Repository Ċ import Ġio . pl aid app . core . designer news . data . stories . model . Story Ċ import Ġio . pl aid app . core . designer news . data . stories . model . Story Response Ċ import Ġio . pl aid app . core . designer news . story Links Ċ import Ġio . pl aid app . core . designer news . userId Ċ import Ġio . pl aid app . test . shared . provide Fake Cor outines Context Provider Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Assert . assertTrue Ċ import Ġorg . junit . Assert . fail Ċ import Ġorg . junit . Test Ċ import Ġjava . io . IOException Ċ import Ġjava . util . Date Ċ import Ġjava . util . G regorian Calendar Ċ Ċ /** Ċ Ġ* ĠTests Ġfor Ġ[ Search St ories UseCase ] Ġmock ing Ġthe Ġdependencies . Ċ Ġ*/ Ċ class ĠSearch St ories UseCase Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcreated Date : ĠDate Ġ= ĠG regorian Calendar ( 2 0 1 8 , Ġ 1 , Ġ 1 3 ). time ĊĠĠĠ Ġprivate Ġval Ġstory Response Ġ= ĠStory Response ( ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġ 4 5 L , ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" Pl aid Ġ 2 . 0 Ġwas Ġreleased ", ĊĠĠĠĠĠĠĠ Ġcreated _ at Ġ= Ġcreated Date , ĊĠĠĠĠĠĠĠ Ġlinks Ġ= Ġstory Links ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġval Ġstory Se quel Response Ġ= ĠStory Response ( ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġ 8 7 6 L , ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" Pl aid Ġ 2 . 0 Ġis Ġbug Ġfree ", ĊĠĠĠĠĠĠĠ Ġcreated _ at Ġ= Ġcreated Date , ĊĠĠĠĠĠĠĠ Ġlinks Ġ= Ġstory Links ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġval Ġstory Ġ= ĠStory ( ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġ 4 5 L , ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" Pl aid Ġ 2 . 0 Ġwas Ġreleased ", ĊĠĠĠĠĠĠĠ ĠcreatedAt Ġ= Ġcreated Date , ĊĠĠĠĠĠĠĠ ĠuserId Ġ= ĠuserId , ĊĠĠĠĠĠĠĠ Ġlinks Ġ= Ġstory Links ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġval Ġstory Se quel Ġ= ĠStory ( ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġ 8 7 6 L , ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" Pl aid Ġ 2 . 0 Ġis Ġbug Ġfree ", ĊĠĠĠĠĠĠĠ ĠcreatedAt Ġ= Ġcreated Date , ĊĠĠĠĠĠĠĠ ĠuserId Ġ= ĠuserId , ĊĠĠĠĠĠĠĠ Ġlinks Ġ= Ġstory Links ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġval Ġstories Responses Ġ= ĠlistOf ( story Response , Ġstory Se quel Response ) ĊĠĠĠ Ġprivate Ġval Ġstories Ġ= ĠlistOf ( story , Ġstory Se quel ) ĊĠĠĠ Ġprivate Ġval Ġquery Ġ= Ġ" Pl aid Ġ 2 . 0 " ĊĊĠĠĠ Ġprivate Ġval Ġstories Repository : ĠSt ories Repository Ġ= Ġmock () ĊĠĠĠ Ġprivate Ġval Ġsearch St ories UseCase Ġ= ĠSearch St ories UseCase ( ĊĠĠĠĠĠĠĠ Ġstories Repository , ĊĠĠĠĠĠĠĠ Ġprovide Fake Cor outines Context Provider () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsearch _ with Success () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven Ġa Ġlist Ġof Ġstories Ġreturned Ġfor Ġa Ġspecific Ġquery Ġand Ġpage ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠResult . Success ( stories Responses ) ĊĠĠĠĠĠĠĠ Ġwhenever ( stories Repository . search ( query , Ġ 1 )). thenReturn ( result ) ĊĠĠĠĠĠĠĠ Ġvar Ġsource Loaded Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ// ĠGiven Ġa Ġcallback Ġwhere Ġwe Ġcheck Ġthe Ġvalidity Ġof Ġthe Ġdata Ġreceived ĊĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġobject Ġ: ĠLoad Source Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsource Loaded ( result : ĠList < Pl aid Item > ?, Ġpage : ĠInt , Ġsource : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThen Ġthe Ġcorrect Ġdata Ġis Ġreceived ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Loaded Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( stories , Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġpage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( query , Ġsource ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġload Failed ( source : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" Search Ġshouldn 't Ġhave Ġfailed ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen Ġsearching Ġfor Ġstories ĊĠĠĠĠĠĠĠ Ġsearch St ories UseCase ( query , Ġ 1 , Ġcallback ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġcorrect Ġcallback Ġwas Ġcalled ĊĠĠĠĠĠĠĠ ĠassertTrue ( source Loaded ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsearch _ with Error () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven Ġthat Ġan Ġerror Ġis Ġreturned Ġfor Ġa Ġspecific Ġquery Ġand Ġpage Ġsearch ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠResult . Error ( IOException (" error ")) ĊĠĠĠĠĠĠĠ Ġwhenever ( stories Repository . search ( query , Ġ 2 )). thenReturn ( result ) ĊĠĠĠĠĠĠĠ Ġvar Ġsource Loading Failed Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ// ĠGiven Ġa Ġcallback Ġwhere Ġwe Ġcheck Ġthe Ġvalidity Ġof Ġthe Ġdata Ġreceived ĊĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġobject Ġ: ĠLoad Source Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsource Loaded ( result : ĠList < Pl aid Item > ?, Ġpage : ĠInt , Ġsource : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" Search Ġshouldn 't Ġhave Ġsucceeded ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġload Failed ( source : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThen Ġthe Ġfail Ġcallback Ġgets Ġcalled Ġfor Ġthe Ġcorrect Ġsource ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Loading Failed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( query , Ġsource ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen Ġsearching Ġfor Ġstories ĊĠĠĠĠĠĠĠ Ġsearch St ories UseCase ( query , Ġ 2 , Ġcallback ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġcorrect Ġcallback Ġwas Ġcalled ĊĠĠĠĠĠĠĠ ĠassertTrue ( source Loading Failed ) ĊĠĠĠ Ġ} Ċ } Ċ