/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠZ UP ĠIT ĠSER V IC OS ĠEM ĠT EC NO LOG IA ĠE ĠIN OV AC AO ĠSA Ċ Ġ* Ċ Ġ* Ġ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 Ġbr . com . z up . be agle . data Ċ Ċ import Ġbr . com . z up . be agle . action . Action Ċ import Ġbr . com . z up . be agle . core . Server D riven Component Ċ import Ġbr . com . z up . be agle . data . cache . Be agle Cache Helper Ċ import Ġbr . com . z up . be agle . data . serializer . Be agle Serializer Ċ import Ġbr . com . z up . be agle . data . serializer . make Screen Json Ċ import Ġbr . com . z up . be agle . exception . Be agle Exception Ċ import Ġbr . com . z up . be agle . extensions . once Ċ import Ġbr . com . z up . be agle . logger . Be agle Message Logs Ċ import Ġbr . com . z up . be agle . networking . HttpClient Ċ import Ġbr . com . z up . be agle . networking . Request Call Ċ import Ġbr . com . z up . be agle . networking . ResponseData Ċ import Ġbr . com . z up . be agle . networking . url builder . Url Builder Ċ import Ġbr . com . z up . be agle . setup . Be agle Environment Ċ import Ġbr . com . z up . be agle . testutil . Coroutine Test Rule Ċ import Ġbr . com . z up . be agle . testutil . Random Data Ċ import Ġbr . com . z up . be agle . view . Screen Request Ċ import Ġio . mock k .* Ċ import Ġio . mock k . impl . annotations . Inject Mock Ks Ċ import Ġio . mock k . impl . annotations . Mock K Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . test . run Blocking Test Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assert Fails Ċ import Ġkotlin . test . assertTrue Ċ Ċ private Ġval ĠURL Ġ= ĠRandom Data . http Url () Ċ private Ġval ĠJSON _ SUCCESS Ġ= Ġmake Screen Json () Ċ private Ġconst Ġval ĠJSON _ ERROR Ġ= Ġ"" Ċ private Ġval Ġscreen Request Ġ= ĠScreen Request ( URL ) Ċ private Ġval Ġscreen Error Ġ= ĠScreen Request ( JSON _ ERROR ) Ċ Ċ @ Experimental Cor outines Api Ċ class ĠBe agle Service Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠonSuccess Slot Ġ= Ġslot <( response Data : ĠResponse Data ) Ġ-> ĠUnit >() ĊĠĠĠ Ġprivate Ġval ĠonError Slot Ġ= Ġslot <( throwable : ĠThrowable ) Ġ-> ĠUnit >() ĊĊĠĠĠ Ġ@ Mock K ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġserializer : ĠBe agle Serializer ĊĠĠĠ Ġ@ Mock K ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġurl Builder : ĠUrl Builder ĊĠĠĠ Ġ@ Mock K ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠhttpClient : ĠHttpClient ĊĠĠĠ Ġ@ Mock K ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcomponent : ĠServer D riven Component ĊĠĠĠ Ġ@ Mock K ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġaction : ĠAction ĊĠĠĠ Ġ@ Mock K ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrequest Call : ĠRequest Call ĊĠĠĠ Ġ@ Mock K ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġresponse Data : ĠResponse Data ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġscope Ġ= ĠCor outine Test Rule () ĊĊĠĠĠ Ġ@ Inject Mock Ks ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbe agle Service : ĠBe agle Service ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ ĠMock K Annotations . init ( this , Ġrelax Unit Fun Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġmock k Object ( Be agle Message Logs ) ĊĠĠĠĠĠĠĠ Ġmock k Object ( Be agle Environment ) ĊĠĠĠĠĠĠĠ Ġmock k Object ( Be agle Cache Helper ) ĊĊĠĠĠĠĠĠĠ Ġmock Listener Execution Ġ{ ĠonSuccess Slot . captured ( response Data ) Ġ} ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠBe agle Environment . be agle Sdk . config . baseUrl Ġ} Ġreturns ĠRandom Data . http Url () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠBe agle Message Logs . log HttpRequest Data ( any ()) Ġ} Ġjust ĠRuns ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠBe agle Message Logs . log HttpResponse Data ( any ()) Ġ} Ġjust ĠRuns ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠBe agle Message Logs . log Unknown Http Error ( any ()) Ġ} Ġjust ĠRuns ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġserializer . deserialize Component ( any ()) Ġ} Ġreturns Ġcomponent ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠBe agle Cache Helper . get From Cache ( any ()) Ġ} Ġreturns Ġnull ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠBe agle Cache Helper . cache ( any (), Ġany ()) Ġ} Ġreturns Ġcomponent ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġserializer . deserialize Action ( any ()) Ġ} Ġreturns Ġaction ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġresponse Data . data Ġ} Ġreturns ĠJSON _ SUCCESS . toByteArray () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġurl Builder . format ( any (), Ġany ()) Ġ} Ġreturns ĠURL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġun mock k Object ( Be agle Cache Helper ) ĊĠĠĠĠĠĠĠ Ġun mock k Object ( Be agle Message Logs ) ĊĠĠĠĠĠĠĠ Ġun mock k Object ( Be agle Environment ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmock Listener Execution ( execution Lambda : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠhttpClient . execute ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġcapture ( on Success Slot ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError Ġ= Ġcapture ( onError Slot ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecution Lambda () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Call ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfetch _ should _ deserialize _ a _ component _ response () Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġbe agle Service . fetch Component ( screen Request ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġonce ()) Ġ{ Ġserializer . deserialize Component ( JSON _ SUCCESS ) Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( component , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfetch _ should _ return _ a _ exception _ when _ some _ http _ call _ fails () Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= ĠRandom Data . string () ĊĠĠĠĠĠĠĠ Ġval Ġexpected Exception Ġ= ĠBe agle Exception ( message ) ĊĠĠĠĠĠĠĠ Ġmock Listener Execution Ġ{ ĠonError Slot . captured ( expected Exception ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġexception Response Ġ= Ġassert Fails ( message ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbe agle Service . fetch Component ( screen Error ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Exception . message , Ġexception Response . message ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfetch _ should _ return _ a _ exception _ when _ http _ throws _ a _ exception () Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠRuntimeException () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠhttpClient . execute ( any (), Ġany (), Ġany ()) Ġ} Ġthrows Ġexception ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġexception Response Ġ= Ġassert Fails Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbe agle Service . fetch Component ( screen Error ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertTrue ( exception Response Ġis ĠBe agle Exception ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfetch _ should _ return _ a _ exception _ mos hi _ de serialization _ fails () Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠBe agle Exception ( Random Data . string ()) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġserializer . deserialize Component ( any ()) Ġ} Ġthrows Ġexception ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġexception Response Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Fails (" Widget Ġde serializer Ġerror Ġwith Ġrespective Ġjson : Ġ$ JSON _ ERROR ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe agle Service . fetch Component ( screen Error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertTrue ( exception Response Ġis ĠBe agle Exception ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfetch Action _ should _ deserialize _ a _ action _ response () Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaction Result Ġ= Ġbe agle Service . fetch Action ( URL ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġonce ()) Ġ{ Ġserializer . deserialize Action ( JSON _ SUCCESS ) Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( action , Ġaction Result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfetch Action _ should _ return _ a _ exception _ mos hi _ de serialization _ fails () Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠBe agle Exception ( Random Data . string ()) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġserializer . deserialize Action ( any ()) Ġ} Ġthrows Ġexception ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġexception Response Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Fails (" Action Ġde serializer Ġerror Ġwith Ġrespective Ġjson : Ġ$ JSON _ ERROR ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe agle Service . fetch Action ( JSON _ ERROR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertTrue ( exception Response Ġis ĠBe agle Exception ) ĊĠĠĠ Ġ} Ċ }